From 46722468f47c2b77b3987729b4bcf2321cccfd01 Mon Sep 17 00:00:00 2001 From: "Thomas E. Dickey" Date: Sat, 12 Oct 2002 23:35:53 -0400 Subject: [PATCH] ncurses 5.3 --- ANNOUNCE | 527 +- Ada95/Makefile.in | 5 +- Ada95/README | 3 +- Ada95/gen/Makefile.in | 27 +- Ada95/gen/gen.c | 68 +- .../gen/terminal_interface-curses-aux.ads.m4 | 5 +- ..._interface-curses-forms-field_types.ads.m4 | 5 +- ...erface-curses-forms-field_user_data.ads.m4 | 5 +- ...terface-curses-forms-form_user_data.ads.m4 | 5 +- .../terminal_interface-curses-forms.ads.m4 | 8 +- ...terface-curses-menus-item_user_data.ads.m4 | 5 +- ...terface-curses-menus-menu_user_data.ads.m4 | 5 +- .../terminal_interface-curses-menus.ads.m4 | 16 +- .../terminal_interface-curses-mouse.ads.m4 | 15 +- ...l_interface-curses-panels-user_data.ads.m4 | 5 +- .../terminal_interface-curses-panels.ads.m4 | 5 +- .../terminal_interface-curses-trace.ads.m4 | 78 + Ada95/gen/terminal_interface-curses.ads.m4 | 189 +- Ada95/samples/Makefile.in | 31 +- Ada95/samples/ncurses.adb | 47 + Ada95/samples/ncurses2-acs_and_scroll.adb | 722 + Ada95/samples/ncurses2-acs_and_scroll.ads | 41 + Ada95/samples/ncurses2-acs_display.adb | 231 + Ada95/samples/ncurses2-acs_display.ads | 41 + Ada95/samples/ncurses2-attr_test.adb | 367 + Ada95/samples/ncurses2-attr_test.ads | 42 + Ada95/samples/ncurses2-color_edit.adb | 264 + Ada95/samples/ncurses2-color_edit.ads | 41 + Ada95/samples/ncurses2-color_test.adb | 164 + Ada95/samples/ncurses2-color_test.ads | 41 + Ada95/samples/ncurses2-demo_forms.adb | 496 + Ada95/samples/ncurses2-demo_forms.ads | 41 + Ada95/samples/ncurses2-demo_pad.adb | 671 + Ada95/samples/ncurses2-demo_pad.ads | 41 + Ada95/samples/ncurses2-demo_panels.adb | 379 + Ada95/samples/ncurses2-demo_panels.ads | 41 + Ada95/samples/ncurses2-flushinp_test.adb | 135 + Ada95/samples/ncurses2-flushinp_test.ads | 43 + Ada95/samples/ncurses2-genericputs.adb | 126 + Ada95/samples/ncurses2-genericputs.ads | 73 + Ada95/samples/ncurses2-getch.ads | 41 + Ada95/samples/ncurses2-getch_test.adb | 251 + Ada95/samples/ncurses2-getch_test.ads | 41 + Ada95/samples/ncurses2-getopt.adb | 168 + Ada95/samples/ncurses2-getopt.ads | 59 + Ada95/samples/ncurses2-m.adb | 460 + Ada95/samples/ncurses2-m.ads | 43 + Ada95/samples/ncurses2-menu_test.adb | 165 + Ada95/samples/ncurses2-menu_test.ads | 41 + Ada95/samples/ncurses2-overlap_test.adb | 156 + Ada95/samples/ncurses2-overlap_test.ads | 41 + Ada95/samples/ncurses2-slk_test.adb | 171 + Ada95/samples/ncurses2-slk_test.ads | 41 + .../samples/ncurses2-test_sgr_attributes.adb | 186 + .../samples/ncurses2-test_sgr_attributes.ads | 41 + Ada95/samples/ncurses2-trace_set.adb | 481 + Ada95/samples/ncurses2-trace_set.ads | 41 + Ada95/samples/ncurses2-util.adb | 199 + Ada95/samples/ncurses2-util.ads | 79 + Ada95/samples/ncurses2.ads | 44 + Ada95/samples/rain.adb | 6 +- Ada95/samples/rain.ads | 6 +- .../samples/sample-curses_demo-attributes.adb | 5 +- .../samples/sample-curses_demo-attributes.ads | 5 +- Ada95/samples/sample-curses_demo-mouse.adb | 5 +- Ada95/samples/sample-curses_demo-mouse.ads | 5 +- Ada95/samples/sample-curses_demo.adb | 5 +- Ada95/samples/sample-curses_demo.ads | 5 +- Ada95/samples/sample-explanation.adb | 7 +- Ada95/samples/sample-explanation.ads | 5 +- Ada95/samples/sample-form_demo-aux.adb | 5 +- Ada95/samples/sample-form_demo-aux.ads | 5 +- Ada95/samples/sample-form_demo-handler.adb | 5 +- Ada95/samples/sample-form_demo-handler.ads | 5 +- Ada95/samples/sample-form_demo.adb | 5 +- Ada95/samples/sample-form_demo.ads | 5 +- Ada95/samples/sample-function_key_setting.adb | 5 +- Ada95/samples/sample-function_key_setting.ads | 5 +- Ada95/samples/sample-header_handler.adb | 5 +- Ada95/samples/sample-header_handler.ads | 5 +- Ada95/samples/sample-helpers.adb | 5 +- Ada95/samples/sample-helpers.ads | 5 +- Ada95/samples/sample-keyboard_handler.adb | 5 +- Ada95/samples/sample-keyboard_handler.ads | 5 +- Ada95/samples/sample-manifest.ads | 5 +- Ada95/samples/sample-menu_demo-aux.adb | 5 +- Ada95/samples/sample-menu_demo-aux.ads | 5 +- Ada95/samples/sample-menu_demo-handler.adb | 5 +- Ada95/samples/sample-menu_demo-handler.ads | 5 +- Ada95/samples/sample-menu_demo.adb | 5 +- Ada95/samples/sample-menu_demo.ads | 5 +- Ada95/samples/sample-my_field_type.adb | 5 +- Ada95/samples/sample-my_field_type.ads | 5 +- Ada95/samples/sample-text_io_demo.adb | 5 +- Ada95/samples/sample-text_io_demo.ads | 5 +- Ada95/samples/sample.adb | 5 +- Ada95/samples/sample.ads | 5 +- Ada95/samples/status.adb | 6 +- Ada95/samples/status.ads | 6 +- Ada95/samples/tour.adb | 5 +- Ada95/samples/tour.ads | 5 +- Ada95/src/Makefile.in | 44 +- Ada95/src/terminal_interface-curses-aux.adb | 5 +- ...terface-curses-forms-field_types-alpha.adb | 5 +- ...terface-curses-forms-field_types-alpha.ads | 5 +- ...-curses-forms-field_types-alphanumeric.adb | 5 +- ...-curses-forms-field_types-alphanumeric.ads | 5 +- ...rses-forms-field_types-enumeration-ada.adb | 5 +- ...rses-forms-field_types-enumeration-ada.ads | 5 +- ...e-curses-forms-field_types-enumeration.adb | 5 +- ...e-curses-forms-field_types-enumeration.ads | 5 +- ...face-curses-forms-field_types-intfield.adb | 5 +- ...face-curses-forms-field_types-intfield.ads | 5 +- ...-curses-forms-field_types-ipv4_address.adb | 5 +- ...-curses-forms-field_types-ipv4_address.ads | 5 +- ...rface-curses-forms-field_types-numeric.adb | 5 +- ...rface-curses-forms-field_types-numeric.ads | 5 +- ...erface-curses-forms-field_types-regexp.adb | 5 +- ...erface-curses-forms-field_types-regexp.ads | 5 +- ...e-curses-forms-field_types-user-choice.adb | 5 +- ...e-curses-forms-field_types-user-choice.ads | 5 +- ...nterface-curses-forms-field_types-user.adb | 5 +- ...nterface-curses-forms-field_types-user.ads | 5 +- ...nal_interface-curses-forms-field_types.adb | 5 +- ...interface-curses-forms-field_user_data.adb | 5 +- ..._interface-curses-forms-form_user_data.adb | 5 +- Ada95/src/terminal_interface-curses-forms.adb | 5 +- ..._interface-curses-menus-item_user_data.adb | 5 +- ..._interface-curses-menus-menu_user_data.adb | 5 +- Ada95/src/terminal_interface-curses-menus.adb | 5 +- Ada95/src/terminal_interface-curses-mouse.adb | 5 +- ...inal_interface-curses-panels-user_data.adb | 5 +- .../src/terminal_interface-curses-panels.adb | 5 +- .../src/terminal_interface-curses-putwin.adb | 78 + .../src/terminal_interface-curses-putwin.ads | 51 + .../src/terminal_interface-curses-termcap.adb | 164 + .../src/terminal_interface-curses-termcap.ads | 81 + .../terminal_interface-curses-terminfo.adb | 162 + .../terminal_interface-curses-terminfo.ads | 82 + .../terminal_interface-curses-text_io-aux.adb | 5 +- .../terminal_interface-curses-text_io-aux.ads | 5 +- ...al_interface-curses-text_io-complex_io.adb | 5 +- ...al_interface-curses-text_io-complex_io.ads | 5 +- ...al_interface-curses-text_io-decimal_io.adb | 5 +- ...al_interface-curses-text_io-decimal_io.ads | 5 +- ...nterface-curses-text_io-enumeration_io.adb | 5 +- ...nterface-curses-text_io-enumeration_io.ads | 5 +- ...inal_interface-curses-text_io-fixed_io.adb | 5 +- ...inal_interface-curses-text_io-fixed_io.ads | 5 +- ...inal_interface-curses-text_io-float_io.adb | 5 +- ...inal_interface-curses-text_io-float_io.ads | 5 +- ...al_interface-curses-text_io-integer_io.adb | 5 +- ...al_interface-curses-text_io-integer_io.ads | 5 +- ...al_interface-curses-text_io-modular_io.adb | 5 +- ...al_interface-curses-text_io-modular_io.ads | 5 +- .../src/terminal_interface-curses-text_io.adb | 5 +- .../src/terminal_interface-curses-text_io.ads | 5 +- .../src/terminal_interface-curses-trace.adb_p | 92 + Ada95/src/terminal_interface-curses.adb | 229 +- Ada95/src/terminal_interface.ads | 5 +- INSTALL | 154 +- MANIFEST | 117 +- Makefile.glibc | 4 +- Makefile.in | 5 +- NEWS | 1340 +- README.emx | 10 +- TO-DO | 78 +- aclocal.m4 | 837 +- announce.html.in | 405 +- c++/Makefile.in | 21 +- c++/README-first | 2 +- c++/cursesapp.cc | 9 +- c++/cursesapp.h | 15 +- c++/cursesf.cc | 63 +- c++/cursesf.h | 49 +- c++/cursesm.cc | 62 +- c++/cursesm.h | 23 +- c++/cursesmain.cc | 21 +- c++/cursesp.cc | 18 +- c++/cursesp.h | 18 +- c++/cursespad.cc | 24 +- c++/cursesw.cc | 96 +- c++/cursesw.h | 210 +- c++/cursslk.cc | 13 +- c++/cursslk.h | 29 +- c++/demo.cc | 80 +- c++/edit_cfg.sh | 11 +- c++/etip.h.in | 75 +- c++/internal.h | 15 +- config.guess | 857 +- config.sub | 410 +- configure | 11388 +++++++++++----- configure.in | 324 +- dist.mk | 28 +- doc/html/Ada95.html | 18 +- doc/html/ada/files/T.htm | 8 + doc/html/ada/funcs/A.htm | 25 +- doc/html/ada/funcs/B.htm | 8 +- doc/html/ada/funcs/C.htm | 55 +- doc/html/ada/funcs/D.htm | 32 +- doc/html/ada/funcs/E.htm | 10 +- doc/html/ada/funcs/F.htm | 78 +- doc/html/ada/funcs/G.htm | 41 +- doc/html/ada/funcs/H.htm | 13 +- doc/html/ada/funcs/I.htm | 52 +- doc/html/ada/funcs/K.htm | 8 +- doc/html/ada/funcs/L.htm | 12 +- doc/html/ada/funcs/M.htm | 76 +- doc/html/ada/funcs/N.htm | 40 +- doc/html/ada/funcs/O.htm | 6 +- doc/html/ada/funcs/P.htm | 65 +- doc/html/ada/funcs/Q.htm | 2 +- doc/html/ada/funcs/R.htm | 28 +- doc/html/ada/funcs/S.htm | 174 +- doc/html/ada/funcs/T.htm | 41 +- doc/html/ada/funcs/U.htm | 11 +- doc/html/ada/funcs/V.htm | 2 +- doc/html/ada/funcs/W.htm | 93 +- doc/html/ada/main.htm | 4 + doc/html/ada/table.html | 258 +- .../terminal_interface-curses-aux__adb.htm | 81 +- .../terminal_interface-curses-aux__ads.htm | 67 +- ...ce-curses-forms-field_types-alpha__adb.htm | 35 +- ...ce-curses-forms-field_types-alpha__ads.htm | 19 +- ...es-forms-field_types-alphanumeric__adb.htm | 35 +- ...es-forms-field_types-alphanumeric__ads.htm | 19 +- ...forms-field_types-enumeration-ada__adb.htm | 47 +- ...forms-field_types-enumeration-ada__ads.htm | 23 +- ...ses-forms-field_types-enumeration__adb.htm | 107 +- ...ses-forms-field_types-enumeration__ads.htm | 57 +- ...curses-forms-field_types-intfield__adb.htm | 43 +- ...curses-forms-field_types-intfield__ads.htm | 23 +- ...es-forms-field_types-ipv4_address__adb.htm | 35 +- ...es-forms-field_types-ipv4_address__ads.htm | 17 +- ...-curses-forms-field_types-numeric__adb.htm | 45 +- ...-curses-forms-field_types-numeric__ads.htm | 23 +- ...e-curses-forms-field_types-regexp__adb.htm | 43 +- ...e-curses-forms-field_types-regexp__ads.htm | 21 +- ...ses-forms-field_types-user-choice__adb.htm | 89 +- ...ses-forms-field_types-user-choice__ads.htm | 45 +- ...ace-curses-forms-field_types-user__adb.htm | 113 +- ...ace-curses-forms-field_types-user__ads.htm | 47 +- ...nterface-curses-forms-field_types__adb.htm | 273 +- ...nterface-curses-forms-field_types__ads.htm | 81 +- ...face-curses-forms-field_user_data__adb.htm | 39 +- ...face-curses-forms-field_user_data__ads.htm | 13 +- ...rface-curses-forms-form_user_data__adb.htm | 39 +- ...rface-curses-forms-form_user_data__ads.htm | 13 +- .../terminal_interface-curses-forms__adb.htm | 1121 +- .../terminal_interface-curses-forms__ads.htm | 396 +- ...rface-curses-menus-item_user_data__adb.htm | 39 +- ...rface-curses-menus-item_user_data__ads.htm | 13 +- ...rface-curses-menus-menu_user_data__adb.htm | 39 +- ...rface-curses-menus-menu_user_data__ads.htm | 13 +- .../terminal_interface-curses-menus__adb.htm | 1175 +- .../terminal_interface-curses-menus__ads.htm | 236 +- .../terminal_interface-curses-mouse__adb.htm | 193 +- .../terminal_interface-curses-mouse__ads.htm | 130 +- ...interface-curses-panels-user_data__adb.htm | 43 +- ...interface-curses-panels-user_data__ads.htm | 15 +- .../terminal_interface-curses-panels__adb.htm | 131 +- .../terminal_interface-curses-panels__ads.htm | 11 +- .../terminal_interface-curses-putwin__adb.htm | 83 + .../terminal_interface-curses-putwin__ads.htm | 56 + ...terminal_interface-curses-termcap__adb.htm | 169 + ...terminal_interface-curses-termcap__ads.htm | 86 + ...erminal_interface-curses-terminfo__adb.htm | 167 + ...erminal_interface-curses-terminfo__ads.htm | 87 + ...inal_interface-curses-text_io-aux__adb.htm | 105 +- ...inal_interface-curses-text_io-aux__ads.htm | 19 +- ...terface-curses-text_io-complex_io__adb.htm | 47 +- ...terface-curses-text_io-complex_io__ads.htm | 41 +- ...terface-curses-text_io-decimal_io__adb.htm | 49 +- ...terface-curses-text_io-decimal_io__ads.htm | 39 +- ...ace-curses-text_io-enumeration_io__adb.htm | 51 +- ...ace-curses-text_io-enumeration_io__ads.htm | 33 +- ...interface-curses-text_io-fixed_io__adb.htm | 49 +- ...interface-curses-text_io-fixed_io__ads.htm | 39 +- ...interface-curses-text_io-float_io__adb.htm | 49 +- ...interface-curses-text_io-float_io__ads.htm | 39 +- ...terface-curses-text_io-integer_io__adb.htm | 39 +- ...terface-curses-text_io-integer_io__ads.htm | 33 +- ...terface-curses-text_io-modular_io__adb.htm | 39 +- ...terface-curses-text_io-modular_io__ads.htm | 33 +- ...terminal_interface-curses-text_io__adb.htm | 277 +- ...terminal_interface-curses-text_io__ads.htm | 91 +- .../terminal_interface-curses-trace__adb.htm | 60 + .../terminal_interface-curses-trace__ads.htm | 119 + .../ada/terminal_interface-curses__adb.htm | 3103 +++-- .../ada/terminal_interface-curses__ads.htm | 1400 +- doc/html/ada/terminal_interface__ads.htm | 9 +- doc/html/announce.html | 407 +- doc/html/man/captoinfo.1m.html | 121 +- doc/html/man/clear.1.html | 50 +- doc/html/man/curs_add_wch.3x.html | 172 + doc/html/man/curs_add_wchstr.3x.html | 172 + doc/html/man/curs_addch.3x.html | 150 +- doc/html/man/curs_addchstr.3x.html | 84 +- doc/html/man/curs_addstr.3x.html | 86 +- doc/html/man/curs_addwstr.3x.html | 118 + doc/html/man/curs_attr.3x.html | 345 +- doc/html/man/curs_beep.3x.html | 62 +- doc/html/man/curs_bkgd.3x.html | 78 +- doc/html/man/curs_bkgrnd.3x.html | 170 + doc/html/man/curs_border.3x.html | 151 +- doc/html/man/curs_border_set.3x.html | 170 + doc/html/man/curs_clear.3x.html | 90 +- doc/html/man/curs_color.3x.html | 200 +- doc/html/man/curs_delch.3x.html | 64 +- doc/html/man/curs_deleteln.3x.html | 82 +- doc/html/man/curs_extend.3x.html | 65 +- doc/html/man/curs_get_wch.3x.html | 170 + doc/html/man/curs_get_wstr.3x.html | 172 + doc/html/man/curs_getcchar.3x.html | 170 + doc/html/man/curs_getch.3x.html | 199 +- doc/html/man/curs_getstr.3x.html | 104 +- doc/html/man/curs_getyx.3x.html | 82 +- doc/html/man/curs_in_wch.3x.html | 118 + doc/html/man/curs_in_wchstr.3x.html | 118 + doc/html/man/curs_inch.3x.html | 69 +- doc/html/man/curs_inchstr.3x.html | 86 +- doc/html/man/curs_initscr.3x.html | 158 +- doc/html/man/curs_inopts.3x.html | 226 +- doc/html/man/curs_ins_wch.3x.html | 116 + doc/html/man/curs_ins_wstr.3x.html | 170 + doc/html/man/curs_insch.3x.html | 62 +- doc/html/man/curs_insstr.3x.html | 90 +- doc/html/man/curs_instr.3x.html | 80 +- doc/html/man/curs_inwstr.3x.html | 116 + doc/html/man/curs_kernel.3x.html | 198 +- doc/html/man/curs_mouse.3x.html | 189 +- doc/html/man/curs_move.3x.html | 60 +- doc/html/man/curs_outopts.3x.html | 214 +- doc/html/man/curs_overlay.3x.html | 94 +- doc/html/man/curs_pad.3x.html | 128 +- doc/html/man/curs_print.3x.html | 60 +- doc/html/man/curs_printw.3x.html | 100 +- doc/html/man/curs_refresh.3x.html | 118 +- doc/html/man/curs_scanw.3x.html | 144 +- doc/html/man/curs_scr_dump.3x.html | 102 +- doc/html/man/curs_scroll.3x.html | 72 +- doc/html/man/curs_slk.3x.html | 158 +- doc/html/man/curs_termattrs.3x.html | 150 +- doc/html/man/curs_termcap.3x.html | 170 +- doc/html/man/curs_terminfo.3x.html | 342 +- doc/html/man/curs_touch.3x.html | 90 +- doc/html/man/curs_trace.3x.html | 94 +- doc/html/man/curs_util.3x.html | 184 +- doc/html/man/curs_window.3x.html | 154 +- doc/html/man/default_colors.3x.html | 81 +- doc/html/man/define_key.3x.html | 47 +- doc/html/man/form.3x.html | 247 +- doc/html/man/form_cursor.3x.html | 63 +- doc/html/man/form_data.3x.html | 53 +- doc/html/man/form_driver.3x.html | 74 +- doc/html/man/form_field.3x.html | 83 +- doc/html/man/form_field_attributes.3x.html | 83 +- doc/html/man/form_field_buffer.3x.html | 75 +- doc/html/man/form_field_info.3x.html | 65 +- doc/html/man/form_field_just.3x.html | 65 +- doc/html/man/form_field_new.3x.html | 71 +- doc/html/man/form_field_opts.3x.html | 67 +- doc/html/man/form_field_userptr.3x.html | 59 +- doc/html/man/form_field_validation.3x.html | 100 +- doc/html/man/form_fieldtype.3x.html | 89 +- doc/html/man/form_hook.3x.html | 83 +- doc/html/man/form_new.3x.html | 69 +- doc/html/man/form_new_page.3x.html | 65 +- doc/html/man/form_opts.3x.html | 69 +- doc/html/man/form_page.3x.html | 79 +- doc/html/man/form_post.3x.html | 75 +- doc/html/man/form_requestname.3x.html | 59 +- doc/html/man/form_userptr.3x.html | 59 +- doc/html/man/form_win.3x.html | 75 +- doc/html/man/infocmp.1m.html | 437 +- doc/html/man/infotocap.1m.html | 65 +- doc/html/man/keybound.3x.html | 47 +- doc/html/man/keyok.3x.html | 51 +- doc/html/man/menu.3x.html | 233 +- doc/html/man/menu_attributes.3x.html | 85 +- doc/html/man/menu_cursor.3x.html | 63 +- doc/html/man/menu_driver.3x.html | 82 +- doc/html/man/menu_format.3x.html | 73 +- doc/html/man/menu_hook.3x.html | 83 +- doc/html/man/menu_items.3x.html | 81 +- doc/html/man/menu_mark.3x.html | 73 +- doc/html/man/menu_new.3x.html | 69 +- doc/html/man/menu_opts.3x.html | 67 +- doc/html/man/menu_pattern.3x.html | 70 +- doc/html/man/menu_post.3x.html | 79 +- doc/html/man/menu_requestname.3x.html | 59 +- doc/html/man/menu_spacing.3x.html | 69 +- doc/html/man/menu_userptr.3x.html | 57 +- doc/html/man/menu_win.3x.html | 75 +- doc/html/man/mitem_current.3x.html | 89 +- doc/html/man/mitem_name.3x.html | 55 +- doc/html/man/mitem_new.3x.html | 69 +- doc/html/man/mitem_opts.3x.html | 67 +- doc/html/man/mitem_userptr.3x.html | 57 +- doc/html/man/mitem_value.3x.html | 68 +- doc/html/man/mitem_visible.3x.html | 49 +- doc/html/man/ncurses.3x.html | 1237 +- doc/html/man/panel.3x.html | 152 +- doc/html/man/resizeterm.3x.html | 150 +- doc/html/man/term.5.html | 68 +- doc/html/man/term.7.html | 94 +- doc/html/man/terminfo.5.html | 1372 +- doc/html/man/tic.1m.html | 312 +- doc/html/man/toe.1m.html | 64 +- doc/html/man/tput.1.html | 376 +- doc/html/man/tset.1.html | 134 +- doc/html/man/wresize.3x.html | 57 +- doc/html/ncurses-intro.html | 12 +- doc/ncurses-intro.doc | 2533 ++-- form/Makefile.in | 15 +- form/READ.ME | 3 +- form/fld_arg.c | 20 +- form/fld_attr.c | 11 +- form/fld_current.c | 16 +- form/fld_def.c | 42 +- form/fld_dup.c | 10 +- form/fld_ftchoice.c | 15 +- form/fld_ftlink.c | 11 +- form/fld_info.c | 22 +- form/fld_just.c | 13 +- form/fld_link.c | 10 +- form/fld_max.c | 10 +- form/fld_move.c | 10 +- form/fld_newftyp.c | 15 +- form/fld_opts.c | 19 +- form/fld_pad.c | 13 +- form/fld_page.c | 13 +- form/fld_stat.c | 13 +- form/fld_type.c | 13 +- form/fld_user.c | 13 +- form/form.h | 208 +- form/form.priv.h | 37 +- form/frm_cursor.c | 10 +- form/frm_data.c | 13 +- form/frm_def.c | 24 +- form/frm_driver.c | 61 +- form/frm_hook.c | 11 +- form/frm_opts.c | 19 +- form/frm_page.c | 13 +- form/frm_post.c | 13 +- form/frm_req_name.c | 13 +- form/frm_scale.c | 10 +- form/frm_sub.c | 13 +- form/frm_user.c | 13 +- form/frm_win.c | 13 +- form/fty_alnum.c | 7 +- form/fty_alpha.c | 7 +- form/fty_enum.c | 7 +- form/fty_int.c | 7 +- form/fty_ipv4.c | 8 +- form/fty_num.c | 7 +- form/fty_regex.c | 7 +- form/llib-lform | 44 +- form/llib-lformw | 692 + include/Caps | 1376 +- include/Caps.aix4 | 1255 ++ include/Caps.hpux11 | 1275 ++ include/Caps.keys | 1354 ++ include/Caps.osf1r5 | 1274 ++ include/Caps.uwin | 1090 ++ include/MKkey_defs.sh | 178 + include/MKterm.h.awk.in | 116 +- include/Makefile.in | 37 +- include/curses.h.in | 1367 +- include/curses.tail | 140 + include/curses.wide | 237 + include/edit_cfg.sh | 18 +- include/headers | 3 +- include/nc_alloc.h | 16 +- include/nc_panel.h | 6 +- include/ncurses_cfg.hin | 6 +- include/ncurses_defs | 18 +- include/ncurses_dll.h | 48 + include/term_entry.h | 53 +- include/termcap.h.in | 37 +- include/tic.h | 110 +- include/unctrl.h.in | 12 +- man/MKterminfo.sh | 25 +- man/Makefile.in | 16 +- man/curs_add_wch.3x | 134 + man/curs_add_wchstr.3x | 98 + man/curs_addch.3x | 35 +- man/curs_addstr.3x | 31 +- man/curs_addwstr.3x | 91 + man/curs_attr.3x | 37 +- man/curs_bkgd.3x | 35 +- man/curs_bkgrnd.3x | 107 + man/curs_border.3x | 58 +- man/curs_border_set.3x | 202 + man/curs_color.3x | 10 +- man/curs_deleteln.3x | 4 +- man/curs_extend.3x | 11 +- man/curs_get_wch.3x | 161 + man/curs_get_wstr.3x | 164 + man/curs_getcchar.3x | 144 + man/curs_getch.3x | 84 +- man/curs_getstr.3x | 14 +- man/curs_getyx.3x | 45 +- man/curs_in_wch.3x | 68 + man/curs_in_wchstr.3x | 117 + man/curs_initscr.3x | 4 +- man/curs_inopts.3x | 6 +- man/curs_ins_wch.3x | 65 + man/curs_ins_wstr.3x | 104 + man/curs_insstr.3x | 6 +- man/curs_instr.3x | 6 +- man/curs_inwstr.3x | 95 + man/curs_kernel.3x | 4 +- man/curs_mouse.3x | 82 +- man/curs_move.3x | 6 +- man/curs_outopts.3x | 84 +- man/curs_overlay.3x | 8 +- man/curs_print.3x | 4 +- man/curs_printw.3x | 32 +- man/curs_refresh.3x | 45 +- man/curs_scanw.3x | 36 +- man/curs_scroll.3x | 21 +- man/curs_slk.3x | 4 +- man/curs_termattrs.3x | 42 +- man/curs_termcap.3x | 54 +- man/curs_terminfo.3x | 72 +- man/curs_trace.3x | 5 +- man/curs_util.3x | 46 +- man/default_colors.3x | 12 +- man/define_key.3x | 10 +- man/form.3x | 6 +- man/form_driver.3x | 4 +- man/form_field_attributes.3x | 8 +- man/form_field_buffer.3x | 6 +- man/form_field_info.3x | 8 +- man/form_field_just.3x | 6 +- man/form_field_new.3x | 4 +- man/form_field_validation.3x | 4 +- man/form_fieldtype.3x | 6 +- man/form_new_page.3x | 6 +- man/infocmp.1m | 188 +- man/keybound.3x | 12 +- man/keyok.3x | 10 +- man/man_db.renames | 23 +- man/manlinks.sed | 5 +- man/menu.3x | 6 +- man/menu_attributes.3x | 6 +- man/menu_driver.3x | 4 +- man/menu_format.3x | 6 +- man/menu_pattern.3x | 4 +- man/menu_spacing.3x | 8 +- man/mitem_value.3x | 4 +- man/ncurses.3x | 235 +- man/resizeterm.3x | 45 +- man/term.5 | 10 +- man/term.7 | 6 +- man/terminfo.head | 6 +- man/terminfo.tail | 264 +- man/tic.1m | 122 +- man/tput.1 | 98 +- man/wresize.3x | 10 +- menu/Makefile.in | 15 +- menu/READ.ME | 3 +- menu/eti.h | 7 +- menu/llib-lmenu | 18 +- menu/llib-lmenuw | 508 + menu/m_attribs.c | 11 +- menu/m_cursor.c | 16 +- menu/m_driver.c | 14 +- menu/m_format.c | 13 +- menu/m_global.c | 35 +- menu/m_hook.c | 11 +- menu/m_item_cur.c | 16 +- menu/m_item_nam.c | 13 +- menu/m_item_new.c | 19 +- menu/m_item_opt.c | 19 +- menu/m_item_top.c | 13 +- menu/m_item_use.c | 13 +- menu/m_item_val.c | 13 +- menu/m_item_vis.c | 10 +- menu/m_items.c | 16 +- menu/m_new.c | 13 +- menu/m_opts.c | 19 +- menu/m_pad.c | 13 +- menu/m_pattern.c | 15 +- menu/m_post.c | 19 +- menu/m_req_name.c | 13 +- menu/m_scale.c | 10 +- menu/m_spacing.c | 14 +- menu/m_sub.c | 13 +- menu/m_userptr.c | 13 +- menu/m_win.c | 13 +- menu/menu.h | 157 +- menu/menu.priv.h | 37 +- menu/mf_common.h | 13 +- misc/Makefile.in | 41 +- misc/makellib | 11 +- misc/run_tic.in | 10 +- misc/tdlint | 4 +- misc/terminfo.src | 1154 +- mk-0th.awk | 32 +- mk-1st.awk | 93 +- mkinstalldirs | 3 +- ncurses/Makefile.in | 98 +- ncurses/README | 2 +- ncurses/README.IZ | 65 + ncurses/SigAction.h | 16 +- ncurses/base/MKkeyname.awk | 62 +- ncurses/base/MKlib_gen.sh | 249 +- ncurses/base/MKunctrl.awk | 8 +- ncurses/base/define_key.c | 43 +- ncurses/base/keybound.c | 9 +- ncurses/base/keyok.c | 49 +- ncurses/base/lib_addch.c | 159 +- ncurses/base/lib_addstr.c | 170 +- ncurses/base/lib_beep.c | 36 +- ncurses/base/lib_bkgd.c | 142 +- ncurses/base/lib_box.c | 105 +- ncurses/base/lib_chgat.c | 24 +- ncurses/base/lib_clear.c | 19 +- ncurses/base/lib_clearok.c | 21 +- ncurses/base/lib_clrbot.c | 14 +- ncurses/base/lib_clreol.c | 16 +- ncurses/base/lib_color.c | 261 +- ncurses/base/lib_colorset.c | 10 +- ncurses/base/lib_delch.c | 39 +- ncurses/base/lib_delwin.c | 48 +- ncurses/base/lib_dft_fgbg.c | 6 +- ncurses/base/lib_echo.c | 23 +- ncurses/base/lib_endwin.c | 25 +- ncurses/base/lib_erase.c | 42 +- ncurses/base/lib_flash.c | 36 +- ncurses/base/lib_freeall.c | 54 +- ncurses/base/lib_getch.c | 259 +- ncurses/base/lib_getstr.c | 277 +- ncurses/base/lib_hline.c | 15 +- ncurses/base/lib_immedok.c | 16 +- ncurses/base/lib_inchstr.c | 30 +- ncurses/base/lib_initscr.c | 73 +- ncurses/base/lib_insch.c | 39 +- ncurses/base/lib_insdel.c | 23 +- ncurses/base/lib_insstr.c | 18 +- ncurses/base/lib_instr.c | 42 +- ncurses/base/lib_isendwin.c | 14 +- ncurses/base/lib_leaveok.c | 21 +- ncurses/base/lib_mouse.c | 66 +- ncurses/base/lib_move.c | 4 +- ncurses/base/lib_mvwin.c | 113 +- ncurses/base/lib_newterm.c | 74 +- ncurses/base/lib_newwin.c | 94 +- ncurses/base/lib_nl.c | 6 +- ncurses/base/lib_overlay.c | 191 +- ncurses/base/lib_pad.c | 87 +- ncurses/base/lib_printw.c | 128 +- ncurses/base/lib_redrawln.c | 46 +- ncurses/base/lib_refresh.c | 24 +- ncurses/base/lib_restart.c | 9 +- ncurses/base/lib_scanw.c | 89 +- ncurses/base/lib_screen.c | 261 +- ncurses/base/lib_scroll.c | 88 +- ncurses/base/lib_scrollok.c | 21 +- ncurses/base/lib_scrreg.c | 4 +- ncurses/base/lib_set_term.c | 172 +- ncurses/base/lib_slk.c | 241 +- ncurses/base/lib_slkatr_set.c | 30 +- ncurses/base/lib_slkatrof.c | 20 +- ncurses/base/lib_slkatron.c | 20 +- ncurses/base/lib_slkatrset.c | 20 +- ncurses/base/lib_slkattr.c | 18 +- ncurses/base/lib_slkclear.c | 35 +- ncurses/base/lib_slkcolor.c | 27 +- ncurses/base/lib_slkinit.c | 16 +- ncurses/base/lib_slklab.c | 14 +- ncurses/base/lib_slkrefr.c | 110 +- ncurses/base/lib_slkset.c | 94 +- ncurses/base/lib_slktouch.c | 16 +- ncurses/base/lib_touch.c | 58 +- ncurses/base/lib_ungetch.c | 45 +- ncurses/base/lib_vline.c | 15 +- ncurses/base/lib_wattroff.c | 21 +- ncurses/base/lib_wattron.c | 21 +- ncurses/base/lib_winch.c | 9 +- ncurses/base/lib_window.c | 313 +- ncurses/base/memmove.c | 48 +- ncurses/base/nc_panel.c | 8 +- ncurses/base/resizeterm.c | 287 +- ncurses/base/safe_sprintf.c | 345 +- ncurses/base/sigaction.c | 87 +- ncurses/base/tries.c | 142 +- ncurses/base/version.c | 10 +- ncurses/base/vsscanf.c | 363 +- ncurses/base/wresize.c | 184 +- ncurses/curses.priv.h | 471 +- ncurses/fifo_defs.h | 12 +- ncurses/llib-lncurses | 274 +- ncurses/llib-lncursesw | 3785 +++++ ncurses/modules | 28 +- ncurses/tinfo/MKcaptab.awk | 7 +- ncurses/tinfo/MKfallback.sh | 31 +- ncurses/tinfo/MKkeys_list.sh | 62 + ncurses/tinfo/MKnames.awk | 8 +- ncurses/tinfo/access.c | 45 +- ncurses/tinfo/add_tries.c | 6 +- ncurses/tinfo/alloc_entry.c | 73 +- ncurses/tinfo/alloc_ttype.c | 18 +- ncurses/tinfo/captoinfo.c | 73 +- ncurses/tinfo/comp_error.c | 125 +- ncurses/tinfo/comp_expand.c | 265 +- ncurses/tinfo/comp_hash.c | 362 +- ncurses/tinfo/comp_parse.c | 119 +- ncurses/tinfo/comp_scan.c | 270 +- ncurses/tinfo/doalloc.c | 31 +- ncurses/tinfo/free_ttype.c | 14 +- ncurses/tinfo/getenv_num.c | 26 +- ncurses/tinfo/home_terminfo.c | 8 +- ncurses/tinfo/init_keytry.c | 38 +- ncurses/tinfo/keys.list | 158 - ncurses/tinfo/lib_acs.c | 224 +- ncurses/tinfo/lib_baudrate.c | 64 +- ncurses/tinfo/lib_cur_term.c | 46 +- ncurses/tinfo/lib_data.c | 35 +- ncurses/tinfo/lib_has_cap.c | 29 +- ncurses/tinfo/lib_kernel.c | 100 +- ncurses/tinfo/lib_longname.c | 19 +- ncurses/tinfo/lib_napms.c | 32 +- ncurses/tinfo/lib_options.c | 32 +- ncurses/tinfo/lib_print.c | 36 +- ncurses/tinfo/lib_raw.c | 244 +- ncurses/tinfo/lib_setup.c | 71 +- ncurses/tinfo/lib_termcap.c | 172 +- ncurses/tinfo/lib_termname.c | 26 +- ncurses/tinfo/lib_tgoto.c | 48 +- ncurses/tinfo/lib_ti.c | 8 +- ncurses/tinfo/lib_tparm.c | 95 +- ncurses/tinfo/lib_tputs.c | 103 +- ncurses/tinfo/lib_ttyflags.c | 142 +- ncurses/tinfo/make_keys.c | 154 +- ncurses/tinfo/name_match.c | 81 +- ncurses/tinfo/parse_entry.c | 108 +- ncurses/tinfo/read_entry.c | 18 +- ncurses/tinfo/read_termcap.c | 132 +- ncurses/tinfo/setbuf.c | 58 +- ncurses/tinfo/strings.c | 26 +- ncurses/tinfo/write_entry.c | 44 +- ncurses/trace/lib_trace.c | 118 +- ncurses/trace/lib_traceatr.c | 127 +- ncurses/trace/lib_tracebits.c | 55 +- ncurses/trace/lib_tracechr.c | 20 +- ncurses/trace/lib_tracedmp.c | 132 +- ncurses/trace/lib_tracemse.c | 87 +- ncurses/trace/trace_buf.c | 66 +- ncurses/trace/trace_tries.c | 50 +- ncurses/trace/trace_xnames.c | 19 +- ncurses/trace/varargs.c | 182 + ncurses/trace/visbuf.c | 270 + ncurses/tty/MKexpanded.sh | 14 +- ncurses/tty/hardscroll.c | 71 +- ncurses/tty/hashmap.c | 283 +- ncurses/tty/lib_mvcur.c | 109 +- ncurses/tty/lib_tstp.c | 169 +- ncurses/tty/lib_twait.c | 211 +- ncurses/tty/lib_vidattr.c | 40 +- ncurses/tty/tty_display.h | 30 +- ncurses/tty/tty_input.h | 18 +- ncurses/tty/tty_update.c | 412 +- ncurses/widechar/lib_box_set.c | 113 + ncurses/widechar/lib_cchar.c | 114 + ncurses/widechar/lib_erasewchar.c | 77 + ncurses/widechar/lib_get_wch.c | 99 + ncurses/widechar/lib_get_wstr.c | 205 + ncurses/widechar/lib_hline_set.c | 79 + ncurses/widechar/lib_in_wch.c | 60 + ncurses/widechar/lib_in_wchnstr.c | 62 + ncurses/widechar/lib_ins_nwstr.c | 84 + ncurses/widechar/lib_ins_wch.c | 65 + ncurses/widechar/lib_inwstr.c | 100 + ncurses/widechar/lib_unget_wch.c | 76 + ncurses/widechar/lib_vid_attr.c | 94 + ncurses/widechar/lib_vline_set.c | 78 + ncurses/widechar/lib_wacs.c | 127 + ncurses/widechar/lib_wunctrl.c | 56 + panel/Makefile.in | 17 +- panel/llib-lpanel | 38 +- panel/llib-lpanelw | 177 + panel/p_above.c | 8 +- panel/p_below.c | 8 +- panel/p_bottom.c | 10 +- panel/p_delete.c | 10 +- panel/p_hidden.c | 8 +- panel/p_hide.c | 10 +- panel/p_move.c | 14 +- panel/p_new.c | 8 +- panel/p_replace.c | 14 +- panel/p_show.c | 10 +- panel/p_top.c | 8 +- panel/p_update.c | 10 +- panel/p_user.c | 13 +- panel/p_win.c | 8 +- panel/panel.c | 32 +- panel/panel.h | 38 +- panel/panel.priv.h | 42 +- progs/MKtermsort.sh | 59 +- progs/Makefile.in | 43 +- progs/dump_entry.c | 258 +- progs/dump_entry.h | 4 +- progs/infocmp.c | 233 +- progs/progs.priv.h | 6 +- progs/tic.c | 141 +- progs/toe.c | 65 +- progs/tput.c | 81 +- progs/tset.c | 84 +- tack/Makefile.in | 12 +- tack/ansi.c | 25 +- tack/charset.c | 8 +- tack/edit.c | 12 +- tack/init.c | 6 +- tack/output.c | 12 +- tack/sync.c | 14 +- tack/sysdep.c | 13 +- tack/tack.c | 20 +- tack/tack.h | 10 +- test/Makefile.in | 8 +- test/blue.c | 324 +- test/bs.c | 858 +- test/cardfile.c | 178 +- test/configure | 537 +- test/configure.in | 144 +- test/ditto.c | 154 +- test/dots.c | 29 +- test/filter.c | 14 +- test/firework.c | 17 +- test/firstlast.c | 149 +- test/gdc.c | 24 +- test/hanoi.c | 24 +- test/hashtest.c | 322 +- test/keynames.c | 17 +- test/knight.c | 669 +- test/lrtest.c | 38 +- test/ncurses.c | 1031 +- test/newdemo.c | 498 +- test/railroad.c | 65 +- test/rain.c | 103 +- test/tclock.c | 60 +- test/test.priv.h | 116 +- test/testaddch.c | 91 +- test/testcurs.c | 121 +- test/testscanw.c | 49 +- test/tracemunch | 75 +- test/view.c | 309 +- test/worm.c | 35 +- test/xmas.c | 15 +- 851 files changed, 72683 insertions(+), 29465 deletions(-) create mode 100644 Ada95/gen/terminal_interface-curses-trace.ads.m4 create mode 100644 Ada95/samples/ncurses.adb create mode 100644 Ada95/samples/ncurses2-acs_and_scroll.adb create mode 100644 Ada95/samples/ncurses2-acs_and_scroll.ads create mode 100644 Ada95/samples/ncurses2-acs_display.adb create mode 100644 Ada95/samples/ncurses2-acs_display.ads create mode 100644 Ada95/samples/ncurses2-attr_test.adb create mode 100644 Ada95/samples/ncurses2-attr_test.ads create mode 100644 Ada95/samples/ncurses2-color_edit.adb create mode 100644 Ada95/samples/ncurses2-color_edit.ads create mode 100644 Ada95/samples/ncurses2-color_test.adb create mode 100644 Ada95/samples/ncurses2-color_test.ads create mode 100644 Ada95/samples/ncurses2-demo_forms.adb create mode 100644 Ada95/samples/ncurses2-demo_forms.ads create mode 100644 Ada95/samples/ncurses2-demo_pad.adb create mode 100644 Ada95/samples/ncurses2-demo_pad.ads create mode 100644 Ada95/samples/ncurses2-demo_panels.adb create mode 100644 Ada95/samples/ncurses2-demo_panels.ads create mode 100644 Ada95/samples/ncurses2-flushinp_test.adb create mode 100644 Ada95/samples/ncurses2-flushinp_test.ads create mode 100644 Ada95/samples/ncurses2-genericputs.adb create mode 100644 Ada95/samples/ncurses2-genericputs.ads create mode 100644 Ada95/samples/ncurses2-getch.ads create mode 100644 Ada95/samples/ncurses2-getch_test.adb create mode 100644 Ada95/samples/ncurses2-getch_test.ads create mode 100644 Ada95/samples/ncurses2-getopt.adb create mode 100644 Ada95/samples/ncurses2-getopt.ads create mode 100644 Ada95/samples/ncurses2-m.adb create mode 100644 Ada95/samples/ncurses2-m.ads create mode 100644 Ada95/samples/ncurses2-menu_test.adb create mode 100644 Ada95/samples/ncurses2-menu_test.ads create mode 100644 Ada95/samples/ncurses2-overlap_test.adb create mode 100644 Ada95/samples/ncurses2-overlap_test.ads create mode 100644 Ada95/samples/ncurses2-slk_test.adb create mode 100644 Ada95/samples/ncurses2-slk_test.ads create mode 100644 Ada95/samples/ncurses2-test_sgr_attributes.adb create mode 100644 Ada95/samples/ncurses2-test_sgr_attributes.ads create mode 100644 Ada95/samples/ncurses2-trace_set.adb create mode 100644 Ada95/samples/ncurses2-trace_set.ads create mode 100644 Ada95/samples/ncurses2-util.adb create mode 100644 Ada95/samples/ncurses2-util.ads create mode 100644 Ada95/samples/ncurses2.ads create mode 100644 Ada95/src/terminal_interface-curses-putwin.adb create mode 100644 Ada95/src/terminal_interface-curses-putwin.ads create mode 100644 Ada95/src/terminal_interface-curses-termcap.adb create mode 100644 Ada95/src/terminal_interface-curses-termcap.ads create mode 100644 Ada95/src/terminal_interface-curses-terminfo.adb create mode 100644 Ada95/src/terminal_interface-curses-terminfo.ads create mode 100644 Ada95/src/terminal_interface-curses-trace.adb_p create mode 100644 doc/html/ada/terminal_interface-curses-putwin__adb.htm create mode 100644 doc/html/ada/terminal_interface-curses-putwin__ads.htm create mode 100644 doc/html/ada/terminal_interface-curses-termcap__adb.htm create mode 100644 doc/html/ada/terminal_interface-curses-termcap__ads.htm create mode 100644 doc/html/ada/terminal_interface-curses-terminfo__adb.htm create mode 100644 doc/html/ada/terminal_interface-curses-terminfo__ads.htm create mode 100644 doc/html/ada/terminal_interface-curses-trace__adb.htm create mode 100644 doc/html/ada/terminal_interface-curses-trace__ads.htm create mode 100644 doc/html/man/curs_add_wch.3x.html create mode 100644 doc/html/man/curs_add_wchstr.3x.html create mode 100644 doc/html/man/curs_addwstr.3x.html create mode 100644 doc/html/man/curs_bkgrnd.3x.html create mode 100644 doc/html/man/curs_border_set.3x.html create mode 100644 doc/html/man/curs_get_wch.3x.html create mode 100644 doc/html/man/curs_get_wstr.3x.html create mode 100644 doc/html/man/curs_getcchar.3x.html create mode 100644 doc/html/man/curs_in_wch.3x.html create mode 100644 doc/html/man/curs_in_wchstr.3x.html create mode 100644 doc/html/man/curs_ins_wch.3x.html create mode 100644 doc/html/man/curs_ins_wstr.3x.html create mode 100644 doc/html/man/curs_inwstr.3x.html create mode 100644 form/llib-lformw create mode 100644 include/Caps.aix4 create mode 100644 include/Caps.hpux11 create mode 100644 include/Caps.keys create mode 100644 include/Caps.osf1r5 create mode 100644 include/Caps.uwin create mode 100755 include/MKkey_defs.sh create mode 100644 include/curses.tail create mode 100644 include/curses.wide create mode 100644 include/ncurses_dll.h create mode 100644 man/curs_add_wch.3x create mode 100644 man/curs_add_wchstr.3x create mode 100644 man/curs_addwstr.3x create mode 100644 man/curs_bkgrnd.3x create mode 100644 man/curs_border_set.3x create mode 100644 man/curs_get_wch.3x create mode 100644 man/curs_get_wstr.3x create mode 100644 man/curs_getcchar.3x create mode 100644 man/curs_in_wch.3x create mode 100644 man/curs_in_wchstr.3x create mode 100644 man/curs_ins_wch.3x create mode 100644 man/curs_ins_wstr.3x create mode 100644 man/curs_inwstr.3x create mode 100644 menu/llib-lmenuw create mode 100644 ncurses/README.IZ create mode 100644 ncurses/llib-lncursesw create mode 100755 ncurses/tinfo/MKkeys_list.sh delete mode 100644 ncurses/tinfo/keys.list create mode 100644 ncurses/trace/varargs.c create mode 100644 ncurses/trace/visbuf.c create mode 100644 ncurses/widechar/lib_box_set.c create mode 100644 ncurses/widechar/lib_cchar.c create mode 100644 ncurses/widechar/lib_erasewchar.c create mode 100644 ncurses/widechar/lib_get_wch.c create mode 100644 ncurses/widechar/lib_get_wstr.c create mode 100644 ncurses/widechar/lib_hline_set.c create mode 100644 ncurses/widechar/lib_in_wch.c create mode 100644 ncurses/widechar/lib_in_wchnstr.c create mode 100644 ncurses/widechar/lib_ins_nwstr.c create mode 100644 ncurses/widechar/lib_ins_wch.c create mode 100644 ncurses/widechar/lib_inwstr.c create mode 100644 ncurses/widechar/lib_unget_wch.c create mode 100644 ncurses/widechar/lib_vid_attr.c create mode 100644 ncurses/widechar/lib_vline_set.c create mode 100644 ncurses/widechar/lib_wacs.c create mode 100644 ncurses/widechar/lib_wunctrl.c create mode 100644 panel/llib-lpanelw diff --git a/ANNOUNCE b/ANNOUNCE index 7b5f4efa..e39a0bee 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,385 +1,290 @@ - Announcing ncurses 5.2 + Announcing ncurses 5.3 - The ncurses (new curses) library is a free software emulation of - curses in System V Release 4.0, 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 SYSV-curses + The ncurses (new curses) library is a free software emulation of + curses in System V Release 4.0, 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 SYSV-curses enhancements over BSD curses. - In mid-June 1995, the maintainer of 4.4BSD curses declared that he - considered 4.4BSD curses obsolete, and is encouraging the keepers of - Unix releases such as BSD/OS, freeBSD and netBSD to switch over to + In mid-June 1995, the maintainer of 4.4BSD curses declared that he + considered 4.4BSD curses obsolete, and is encouraging the keepers of + Unix releases such as BSD/OS, freeBSD and netBSD to switch over to ncurses. - The ncurses code was developed under GNU/Linux. It should port easily - to any ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 - Warp! + The ncurses code was developed under GNU/Linux. It has been in use for + some time with OpenBSD as the system curses library, and on FreeBSD + and NetBSD as an external package. It should port easily to any + ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 Warp! The distribution includes the library and support utilities, including - a terminfo compiler tic(1), a decompiler infocmp(1), clear(1), - tput(1), tset(1), and a termcap conversion tool captoinfo(1). Full + a terminfo compiler tic(1), a decompiler infocmp(1), clear(1), + tput(1), tset(1), and a termcap conversion tool captoinfo(1). Full manual pages are provided for the library and tools. - The ncurses distribution is available via anonymous FTP at the GNU + The ncurses distribution is available via anonymous FTP at the GNU distribution site [1]ftp://ftp.gnu.org/pub/gnu/ncurses. - It is also available at [2]ftp://dickey.his.com/ncurses. + It is also available at [2]ftp://invisible-island.net/ncurses. Release Notes - This release is designed to be upward compatible from ncurses 5.0 and - 5.1; very few applications will require recompilation, depending on - the platform. These are the highlights from the change-log since - ncurses 5.1 release. + This release is designed to be upward compatible from ncurses 5.0 and + 5.2; very few applications will require recompilation, depending on + the platform. These are the highlights from the change-log since + ncurses 5.2 release. Interface changes: - * change type of ospeed variable back to short to match its use in - legacy applications. It was altered after ncurses 4.2 to speed_t - to repair a type mismatch which was introduced after 1.9.4 in - 1995. The principal users of termcap continued to use short, which - is not the same size. - NOTE: A few applications will have to be recompiled (about 1% of - the programs in a typical Linux distribution, 10% of the programs - that use ncurses). These are easy to identify with nm or strings. - * remove a private function _nc_can_clear_with(), which was built - with the configure --enable-expanded option but not used. - * add several private functions (prefixed with "_nc_") for tracing - chtype values in the debug library, and for better access and - buffer limit checking. + * 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. New features and improvements: - * rewrote tgoto() to make it better support existing termcap - applications which use hardcoded strings rather than obtain all of - their information from the termcap file. If the string does not - appear to be a terminfo string (i.e., does not refer to a "%p" - parameter, or terminfo-style padding), and termcap support is - configured, tgoto() will interpret it as termcap. Otherwise, as - before, it will use tparm(). - * to ensure that the tgoto() changes work properly, added checks to - tic which report capabilities that do not reference the expected - number of parameters. - * new configure script options: - + option --disable-root-environ adds runtime checks which tell - ncurses to disregard $TERMINFO and similar environment - variables if the current user is root, or running - setuid/setgid. - + option --disable-assumed-color allows you to use the pre-5.1 - convention of default colors used for color-pair 0 to be - configured (see assume_default_colors()). - + implement configure script options that transform installed - program names, e.g., --program-prefix, including the manpage - names and cross references. - + option --with-database allows you to specify a different - terminfo source-file to install. On OS/2 EMX, the default is - misc/emx.src, otherwise misc/terminfo.src - + option --with-default-terminfo-dir allows you to specify the - default terminfo database directory. - + option --with-libtool allows you to build with libtool. - NOTE: libtool uses a different notation for numbering shared - library versions from the existing ncurses configuration. - + option --with-manpage-tbl causes the manpages to be - preprocessed by tbl(1) prior to installation, - + option --without-curses-h causes the installation process to - install curses.h as ncurses.h and make appropriate changes to - headers and manpages. - * modified configure script options: - + change symbol used by the --install-prefix configure option - from INSTALL_PREFIX to DESTDIR (the latter has become common - usage although the name is misleading). - + modify ld -rpath options (e.g., Linux, and Solaris) to use an - absolute pathname for the build tree's lib directory, - avoiding confusion with directories relative to the current - one with the installed programs. - + modified misc/run_tic.in to use tic -o, to eliminate - dependency on $TERMINFO variable for installs. - * terminfo database: - + updated xterm terminfo entries to match XFree86 xterm patch - #146. - + added amiga-vnc, Matrix Orbital, and QNX qansi to - misc/terminfo.src. - + added os2 entry to misc/emx.src. - + add S0 and E0 extensions to screen's terminfo entry since - otherwise the FreeBSD port makes it pass termcap equivalents - to tgoto, which would be misinterpreted by older versions of - ncurses. - * improvements to program usability: - + 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. - + 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 error checking to infocmp's -v and -m options to ensure - that the option value is indeed a number. - * improved performance: - + replace a lookup table in lib_vidattr.c used to decode - no_color_video with a logic expression which is faster. + * Improved support for termcap applications: + + 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. + + 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. + + 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. + + add tic -A option to suppress capabilities which are + commented out when translating to termcap. + + modify logic in lib_baudrate.c for ospeed, for FreeBSD to + make it work properly for termcap applications (patch by + Andrey A Chernov). + * 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). + * 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. Major bug fixes: - * correct manlinks.sed script introduced in ncurses 5.1 to avoid - using ERE "\+", which is not understood by standard versions of - sed. This happens to work with GNU sed, but is not portable, and - was the initial motivation for this release. - * 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. - * guard against corrupt terminfo data: - + 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 parse_format() in lib_tparm.c to ignore precision if - it is longer than 10000. - + rewrote limit checks in lib_mvcur.c using new functions - _nc_safe_strcat(), etc. Made other related changes to check - lengths used for strcat() and strcpy(). - * corrections to screen optimization: - + added special case in lib_vidattr.c to reset underline and - standout for devices that have no sgr0 defined. - + 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. - + modify rs2 capability in xterm-r6 and similar entries where - cursor save/restore bracketed the sequence for resetting - video attributes. The cursor restore would undo that. - * UTF-8 support: - + when checking LC_ALL, LC_CTYPE, and 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. - * other library fixes: - + added checks for an empty $HOME environment variable, to - avoid retrieving terminfo descriptions from ./.terminfo . - + change functions _nc_parse_entry() and postprocess_termcap() - to avoid using strtok(), because it is non-reentrant. - + 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. - + add a check for null pointer in Make_Enum_Type(). - + fix a heap problem with the c++ binding. - + correct missing includes for in several places, - including the C++ binding. This is not noted by gcc unless we - use the -fno-builtin option. - * several fixes for tic: - + 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). - + modify tic to verify that its inputs are really files, in - case someone tries to read a directory (or /dev/zero). - + correct an uninitialized parameter to open_tempfile() in - tic.c which made "tic -I" give an ambiguous error message - about tmpnam. - + 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. - * using new checks in tic for parameter counts in capability - strings, found/fixed several errors both in the terminfo database - and in the include/Caps file. - + modified several terminfo capability strings, including the - definitions 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. This fixes a problem where the generated termcap - would contain a spurious "%p1" for the terminfo "%p1%d". - + correct parameter counts in include/Caps for dclk as well as - some printer-specific capabilities: csnm, defc, scs, scsd, - smgtp, smglp. - * various fixes for install scripts used to support configure - --srcdir and --with-install-prefix. - * 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. + * 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. + * 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(). + * 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. + * modified wresize() to ensure that a failed realloc will not + corrupt the window structure, and to make subwindows fit within + the resized window. + * altered resizeterm() to avoid having it fail when a child window + cannot be resized because it would be larger than its parent. + * 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. + * 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. + * add a check in relative_move() to guard against buffer overflow in + the overwrite logic. + * add some limit/pointer checks to -S option of tputs. + * 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). Portability: * configure script: - + newer config.guess, config.sub, including changes to support - OS/2 EMX. The configure script for OS/2 EMX still relies on a - patch since there is no (working) support for that platform - in the main autoconf distribution. - + 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. - + change configure script to use AC_CANONICAL_SYSTEM rather - than AC_CANONICAL_HOST, which means that configure --target - will set a default program-prefix. - + 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). - + modify configure test for tcgetattr() to allow for old - implementations, e.g., on BeOS, which only defined it as a - macro. - + 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. - + 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". - + change most remaining unquoted parameters of test in - configure script to use quotes, for instance fixing a problem - in the --disable-database option. - + modify scripts so that "make install.data" works on OS/2 EMX. - + modify scripts and makefiles so the Ada95 directory builds on - OS/2 EMX. + + 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 who do not read the INSTALL + notes. + + correct a typo in configure --enable-colorfgbg option, and + move it to the experimental section (cf: 20011208). + + modify configure script to allow building with termcap only, + or with fallbacks only. In this case, we do not build tic and + toe. + + 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. + + 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. + + add several configure script options to aid with + cross-compiling: --with-build-cc, --with-build-cflags, + --with-build-ldflags, and --with-build-libs. + + add experimental --with-caps=XXX option to customize to + similar terminfo database formats such as AIX 4.x + + add configure option --with-ospeed to assist packagers in + transition to 5.3 change to ospeed type. * library: - + 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. - + improved OS/2 mouse support by retrying as a 2-button mouse - if code fails to set up a 3-button mouse. - + added private entrypoint _nc_basename(), used to consolidate - related code in progs, as well as accommodating OS/2 EMX - pathnames. - + alter definition of NCURSES_CONST to make it non-empty. - + redefine 'TEXT' in menu.h for AMIGA, since it is reported to - have an (unspecified) symbol conflict. + + implement a simple vsscanf() fallback function which uses the + %n conversion to help parse the input data. + + various fixes to build/work with different implementations of + vsscanf(). + + add/use macro to suppress sign-extension of char type on + platforms where this is a problem in ctype macros, e.g., + Solaris. + + finish changes needed to build dll's on cygwin. + + add #undef's before possible redefinition of ERR and OK in + curses.h * programs: - + 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). + + modify ifdef's in write_entry.c to allow use of symbolic + links on platforms with no hard links, e.g., BeOS. + + 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. + + 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". Features of Ncurses The ncurses package is fully compatible with SVr4 (System V Release 4) curses: - * All 257 of the SVr4 calls have been implemented (and are + * All 257 of the SVr4 calls have been implemented (and are documented). - * Full support for SVr4 curses features including keyboard mapping, - color, forms-drawing with ACS characters, and automatic + * Full support for SVr4 curses features including keyboard mapping, + color, forms-drawing with ACS characters, and automatic recognition of keypad and function keys. - * An emulation of the SVr4 panels library, supporting a stack of + * An emulation of the SVr4 panels library, supporting a stack of windows with backing store, is included. - * An emulation of the SVr4 menus library, supporting a uniform but + * An emulation of the SVr4 menus library, supporting a uniform but flexible interface for menu programming, is included. - * An emulation of the SVr4 form library, supporting data collection + * An emulation of the SVr4 form library, supporting data collection through on-screen forms, is included. - * Binary terminfo entries generated by the ncurses tic(1) - implementation are bit-for-bit-compatible with the entry format + * Binary terminfo entries generated by the ncurses tic(1) + implementation are bit-for-bit-compatible with the entry format SVr4 curses uses. * The utilities have options to allow you to filter terminfo entries - for use with less capable curses/terminfo versions such as the + 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, but not all EXTENDED features). Most + * 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, but not all EXTENDED features). Most EXTENDED-level features not directly concerned with wide-character - support are implemented, including many function calls not - supported under SVr4 curses (but portability of all calls is + support are implemented, including 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 + * 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 OS/2 + * Support for mouse event reporting with X Window xterm and OS/2 console windows. * Extended mouse support via Alessandro Rubini's gpm package. - * The function wresize() allows you to resize windows, preserving + * 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 + 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 16-color terminals, such as aixterm and XFree86 xterm. - * Better cursor-movement optimization. The package now features a + * 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 + * 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 + * 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 + * 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(1)/captoinfo utility provided with ncurses has the ability - to translate many termcaps from the XENIX, IBM and AT&T extension + to translate many termcaps from the XENIX, IBM and AT&T extension sets. * A BSD-like tset(1) 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 + 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 + * 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 + * 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 + compiled entries in either the system terminfo directory or the user's $HOME/.terminfo directory. - * A script (capconvert) is provided to help BSD users transition - from termcap to terminfo. It gathers the information in a TERMCAP - environment variable and/or a ~/.termcap local entries file and - converts it to an equivalent local terminfo tree under + * A script (capconvert) is provided to help BSD users transition + from termcap to terminfo. It gathers the information in a TERMCAP + environment variable and/or a ~/.termcap local entries file and + converts it to an equivalent local terminfo tree under $HOME/.terminfo. - * Automatic fallback to the /etc/termcap file can be compiled in - when it is not possible to build a terminfo tree. This feature is - neither fast nor cheap, you don't want to use it unless you have + * Automatic fallback to the /etc/termcap file can be compiled in + when it is not possible to build a terminfo tree. This feature is + neither fast nor cheap, you don't want to use it unless you have to, but it's there. - * The table-of-entries utility toe makes it easy for users to see + * 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 + have a corresponding function which may be linked (and will be + prototype-checked) if the macro definition is disabled with #undef. - * An HTML "Introduction to Programming with NCURSES" document - provides a narrative introduction to the curses programming + * An HTML "Introduction to Programming with NCURSES" document + provides a narrative introduction to the curses programming interface. State of the Package Numerous bugs present in earlier versions have been fixed; the library - is far more reliable than it used to be. Bounds checking in many - `dangerous' entry points has been improved. The code is now type-safe - according to gcc -Wall. The library has been checked for malloc leaks + is far more reliable than it used to be. Bounds checking in many + `dangerous' entry points has been improved. The code is now type-safe + according to gcc -Wall. The library has been checked for malloc leaks and arena corruption by the Purify memory-allocation tester. - The ncurses code has been tested with a wide variety of applications + The ncurses code has been tested with a wide variety of applications including (versions starting with those noted): cdk Curses Development Kit - [3]http://www.vexus.ca/CDK.html - [4]http://dickey.his.com/cdk. + [3]http://invisible-island.net/cdk. + [4]http://www.vexus.ca/CDK.html ded directory-editor - [5]http://dickey.his.com/ded. + [5]http://invisible-island.net/ded. dialog - the underlying application used in Slackware's setup, and the + the underlying application used in Slackware's setup, and the basis for similar applications on GNU/Linux. - [6]http://dickey.his.com/dialog. + [6]http://invisible-island.net/dialog. lynx the character-screen WWW browser [7]http://lynx.isc.org/release. - Midnight Commander 4.1 + Midnight Commander file manager [8]www.gnome.org/mc/. @@ -416,57 +321,57 @@ vile vi-like-emacs - [16]http://dickey.his.com/vile. + [16]http://invisible-island.net/vile. - The ncurses distribution includes a selection of test programs + The ncurses distribution includes a selection of test programs (including a few games). Who's Who and What's What The original developers of ncurses are [17]Zeyd Ben-Halim and [18]Eric - S. Raymond. Ongoing work is being done by [19]Thomas Dickey and - [20]Jürgen Pfeifer. [21]Thomas Dickey acts as the maintainer for the - Free Software Foundation, which holds the copyright on ncurses. + S. Raymond. Ongoing work is being done by [19]Thomas Dickey and + [20]Jürgen Pfeifer. [21]Thomas Dickey acts as the maintainer for the + Free Software Foundation, which holds the copyright on ncurses. Contact the current maintainers at [22]bug-ncurses@gnu.org. - To join the ncurses mailing list, please write email to + To join the ncurses mailing list, please write email to 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 [23]ftp://dickey.his.com/ncurses. + Beta versions of ncurses and patches to the current release are made + available at [23]ftp://invisible-island.net/ncurses. Future Plans - * Extended-level XPG4 conformance, with internationalization + * Extended-level XPG4 conformance, with internationalization support. * Ports to more systems, including DOS and Windows. - We need people to help with these projects. If you are interested in + We need people to help with these projects. If you are interested in working on them, please join the ncurses list. Other Related Resources - The distribution includes and uses a version of the terminfo-format - terminal description file maintained by Eric Raymond. + The distribution includes and uses a version of the terminfo-format + terminal description file maintained by Eric Raymond. [24]http://earthspace.net/~esr/terminfo. - You can find lots of information on terminal-related topics not + You can find lots of information on terminal-related topics not covered in the terminfo file at [25]Richard Shuford's archive. References 1. ftp://ftp.gnu.org/pub/gnu/ncurses - 2. ftp://dickey.his.com/ncurses - 3. http://www.vexus.ca/CDK.html - 4. http://dickey.his.com/cdk/cdk.html - 5. http://dickey.his.com/ded/ded.html - 6. http://dickey.his.com/dialog/dialog.html + 2. ftp://invisible-island.net/ncurses + 3. http://invisible-island.net/cdk/cdk.html + 4. http://www.vexus.ca/CDK.html + 5. http://invisible-island.net/ded/ded.html + 6. http://invisible-island.net/dialog/dialog.html 7. http://lynx.isc.org/release/ - 8. file://localhost/usr/build/ncurses/ncurses-5.2-20001021/doc/html/www.gnome.org/mc/ + 8. file://localhost/usr/build/ncurses/ncurses-5.2-20021012/doc/html/www.gnome.org/mc/ 9. http://www.mutt.org/ 10. http://www.ncftp.com/ 11. http://www.bostic.com/vi/ @@ -474,13 +379,13 @@ References 13. http://members.iinet.net.au/~yusuf/taper/ 14. http://www.bg.debian.org/Packages/unstable/text/vh.html 15. http://www.pp.clinet.fi/~walker/minicom.html - 16. http://dickey.his.com/vile/vile.html + 16. http://invisible-island.net/vile/vile.html 17. mailto:zmbenhal@netcom.com 18. http://www.ccil.org/~esr/home.html 19. mailto:dickey@herndon4.his.com - 20. mailto:juergen.pfeifer@gmx.net + 20. http://www.familiepfeifer.de/Contact.aspx?Lang=en 21. mailto:dickey@herndon4.his.com 22. mailto:bug-ncurses@gnu.org - 23. ftp://dickey.his.com/ncurses + 23. ftp://invisible-island.net/ncurses 24. http://earthspace.net/~esr/terminfo 25. http://www.cs.utk.edu/~shuford/terminal_index.html diff --git a/Ada95/Makefile.in b/Ada95/Makefile.in index 9f38ec4c..9f6db419 100644 --- a/Ada95/Makefile.in +++ b/Ada95/Makefile.in @@ -26,10 +26,11 @@ # authorization. # ############################################################################## # -# Author: Juergen Pfeifer 1996 +# Author: Juergen Pfeifer, 1996 +# Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en # # Version Control -# $Revision: 1.13 $ +# $Revision: 1.14 $ # SHELL = /bin/sh THIS = Makefile diff --git a/Ada95/README b/Ada95/README index 8a530611..21e9b4cd 100644 --- a/Ada95/README +++ b/Ada95/README @@ -26,7 +26,8 @@ -- authorization. -- ------------------------------------------------------------------------------- --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en The documentation is provided in HTML format in the ./html subdirectory. The main document is named index.html diff --git a/Ada95/gen/Makefile.in b/Ada95/gen/Makefile.in index b1651379..bccea45f 100644 --- a/Ada95/gen/Makefile.in +++ b/Ada95/gen/Makefile.in @@ -26,10 +26,11 @@ # authorization. # ############################################################################## # -# Author: Juergen Pfeifer 1996 +# Author: Juergen Pfeifer, 1996 +# Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en # # Version Control -# $Revision: 1.34 $ +# $Revision: 1.41 $ # .SUFFIXES: @@ -81,8 +82,8 @@ DEL_ADAMODE = sed -e '/^\-\-\ \ \-\*\-\ ada\ \-\*\-.*/d' GNATHTML = `type -p gnathtml || type -p gnathtml.pl` GNATHP = www.gnat.com -MAIL = juergen.pfeifer@gmx.net -HOMEP = home.t-online.de/home/Juergen.Pfeifer +MAIL = www.familiepfeifer.de/Contact.aspx?Lang=en +HOMEP = www.familiepfeifer.de/juergen ################################################################################ ALIB = @cf_ada_package@ @@ -101,7 +102,8 @@ GEN_FILES1 = Key_Definitions \ Linker_Options \ Base_Defs \ Window_Offsets \ - Version_Info + Version_Info \ + Trace_Defs GEN_FILES2 = Menu_Opt_Rep \ Menu_Base_Defs \ @@ -123,6 +125,7 @@ GEN_FILES5 = Chtype_Def \ GEN_TARGETS = $(ADA_SRCDIR)/$(ABASE).ads \ $(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 \ @@ -136,6 +139,7 @@ GEN_TARGETS = $(ADA_SRCDIR)/$(ABASE).ads \ GEN_SRC = $(srcdir)/$(ABASE).ads.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 \ @@ -217,6 +221,9 @@ Version_Info: gen$x Window_Offsets: gen$x $(GENERATE) B D >$@ +Trace_Defs: gen$x + $(GENERATE) B T >$@ + Menu_Opt_Rep: gen$x $(GENERATE) M R >$@ @@ -271,6 +278,12 @@ $(ADA_SRCDIR)/$(ABASE)-aux.ads: $(srcdir)/$(ABASE)-aux.ads.m4 \ $(srcdir)/$(ABASE)-aux.ads.m4 |\ $(DEL_ADAMODE) >$@ +$(ADA_SRCDIR)/$(ABASE)-trace.ads: $(srcdir)/$(ABASE)-trace.ads.m4 \ + $(GEN_FILES5) $(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 \ $(GEN_FILES2) $(srcdir)/normal.m4 $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \ @@ -406,9 +419,9 @@ adahtml: sed -e 's%<A HREF%%g' |\ sed -e 's/3X/3x/g' |\ - sed -e 's/$$\([A-Za-z0-9_]*:.*\)\$$/@\1@/' |\ + sed -e 's/$$\([ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxz0123456789_]*:.*\)\$$/@\1@/' |\ sed -e 's%Juergen Pfeifer%J\ürgen Pfeifer%g' |\ - sed -e 's%$(MAIL)%\<$(MAIL)\>%g' |\ + sed -e 's%http://$(MAIL)%$(MAIL)%g' |\ sed -e 's%</A>%%g' > $$a.tmp ;\ mv $$a.tmp $$f ;\ done diff --git a/Ada95/gen/gen.c b/Ada95/gen/gen.c index 64e9f912..11ba3d73 100644 --- a/Ada95/gen/gen.c +++ b/Ada95/gen/gen.c @@ -27,12 +27,13 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1996 * + * Author: Juergen Pfeifer, 1996 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ /* Version Control - $Revision: 1.32 $ + $Revision: 1.35 $ --------------------------------------------------------------------------*/ /* This program generates various record structures and constants from the @@ -285,6 +286,26 @@ static void gen_attr_set( const char *name ) gen_reps (nap, name, (len+7)/8, little_endian?start:0); } +static void gen_trace(const char *name) +{ + static const name_attribute_pair nap[] = { + {"Times", TRACE_TIMES}, + {"Tputs", TRACE_TPUTS}, + {"Update", TRACE_UPDATE}, + {"Cursor_Move", TRACE_MOVE}, + {"Character_Output", TRACE_CHARPUT}, + {"Calls", TRACE_CALLS}, + {"Virtual_Puts", TRACE_VIRTPUT}, + {"Input_Events", TRACE_IEVENT}, + {"TTY_State", TRACE_BITS}, + {"Internal_Calls", TRACE_ICALLS}, + {"Character_Calls", TRACE_CCALLS}, + {"Termcap_TermInfo", TRACE_DATABASE}, + {(char *)0, 0} + }; + gen_reps(nap,name,sizeof(int),0); +} + static void gen_menu_opt_rep(const char *name) { static const name_attribute_pair nap[] = { @@ -937,6 +958,9 @@ void gen_mouse_events(void) #ifdef BUTTON_ALT GEN_MEVENT(BUTTON_ALT); #endif +#ifdef REPORT_MOUSE_POSITION + GEN_MEVENT(REPORT_MOUSE_POSITION); +#endif #ifdef ALL_MOUSE_EVENTS GEN_MEVENT(ALL_MOUSE_EVENTS); #endif @@ -1012,14 +1036,19 @@ static void mouse_basedefs(void) */ static void color_def (const char *name, int value) { - printf(" %-8s : constant Color_Number := %d;\n",name,value); + printf(" %-16s : constant Color_Number := %d;\n",name,value); } +#define HAVE_USE_DEFAULT_COLORS 1 + /* * Generate all color definitions */ static void gen_color (void) { +#ifdef HAVE_USE_DEFAULT_COLORS + color_def ("Default_Color",-1); +#endif #ifdef COLOR_BLACK color_def ("Black",COLOR_BLACK); #endif @@ -1108,7 +1137,7 @@ eti_gen(char*buf, int code, const char* name, int* etimin, int* etimax) o = offsetof(WINDOW, member); \ if ((o%sizeof(itype) == 0)) { \ printf(" Offset%-*s : constant Natural := %2ld; -- %s\n", \ - 8, #member, o/sizeof(itype),#itype); \ + 12, #member, o/sizeof(itype),#itype); \ } \ } @@ -1128,22 +1157,46 @@ gen_offsets(void) GEN_OFFSET(_pary,int); GEN_OFFSET(_parx,int); if (sizeof(bool) == sizeof(char)) { + GEN_OFFSET(_notimeout,char); + GEN_OFFSET(_clear,char); + GEN_OFFSET(_leaveok,char); GEN_OFFSET(_scroll,char); + GEN_OFFSET(_idlok,char); + GEN_OFFSET(_idcok,char); + GEN_OFFSET(_immed,char); + GEN_OFFSET(_sync,char); + GEN_OFFSET(_use_keypad,char); s_bool = "char"; } else if (sizeof(bool) == sizeof(short)) { + GEN_OFFSET(_notimeout,short); + GEN_OFFSET(_clear,short); + GEN_OFFSET(_leaveok,short); GEN_OFFSET(_scroll,short); + GEN_OFFSET(_idlok,short); + GEN_OFFSET(_idcok,short); + GEN_OFFSET(_immed,short); + GEN_OFFSET(_sync,short); + GEN_OFFSET(_use_keypad,short); s_bool = "short"; } else if (sizeof(bool) == sizeof(int)) { + GEN_OFFSET(_notimeout,int); + GEN_OFFSET(_clear,int); + GEN_OFFSET(_leaveok,int); GEN_OFFSET(_scroll,int); + GEN_OFFSET(_idlok,int); + GEN_OFFSET(_idcok,int); + GEN_OFFSET(_immed,int); + GEN_OFFSET(_sync,int); + GEN_OFFSET(_use_keypad,int); s_bool = "int"; } printf(" Sizeof%-*s : constant Natural := %2ld; -- %s\n", - 8, "_bool", (long) sizeof(bool),"bool"); + 12, "_bool", (long) sizeof(bool),"bool"); /* In ncurses _maxy and _maxx needs an offset for the "public" * value */ printf(" Offset%-*s : constant Natural := %2d; -- %s\n", - 8, "_XY",1,"int"); + 12, "_XY",1,"int"); printf("\n"); printf(" type Curses_Bool is mod 2 ** Interfaces.C.%s'Size;\n",s_bool); } @@ -1212,6 +1265,9 @@ int main(int argc, char *argv[]) case 'V': /* generate version info */ gen_version_info(); break; + case 'T': /* generate the Trace info */ + gen_trace("Trace_Attribute_Set"); + break; default: break; } diff --git a/Ada95/gen/terminal_interface-curses-aux.ads.m4 b/Ada95/gen/terminal_interface-curses-aux.ads.m4 index 71e4872b..aacac4f5 100644 --- a/Ada95/gen/terminal_interface-curses-aux.ads.m4 +++ b/Ada95/gen/terminal_interface-curses-aux.ads.m4 @@ -35,9 +35,10 @@ include(M4MACRO)---------------------------------------------------------------- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.13 $ +-- $Revision: 1.14 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ include(`Base_Defs') diff --git a/Ada95/gen/terminal_interface-curses-forms-field_types.ads.m4 b/Ada95/gen/terminal_interface-curses-forms-field_types.ads.m4 index ff7882f7..79726781 100644 --- a/Ada95/gen/terminal_interface-curses-forms-field_types.ads.m4 +++ b/Ada95/gen/terminal_interface-curses-forms-field_types.ads.m4 @@ -36,9 +36,10 @@ include(M4MACRO)dnl -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.12 $ +-- $Revision: 1.13 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; diff --git a/Ada95/gen/terminal_interface-curses-forms-field_user_data.ads.m4 b/Ada95/gen/terminal_interface-curses-forms-field_user_data.ads.m4 index aedd01ba..6f99e854 100644 --- a/Ada95/gen/terminal_interface-curses-forms-field_user_data.ads.m4 +++ b/Ada95/gen/terminal_interface-curses-forms-field_user_data.ads.m4 @@ -36,9 +36,10 @@ include(M4MACRO)dnl -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.13 $ +-- $Revision: 1.14 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ diff --git a/Ada95/gen/terminal_interface-curses-forms-form_user_data.ads.m4 b/Ada95/gen/terminal_interface-curses-forms-form_user_data.ads.m4 index cddc1d1e..b07618ae 100644 --- a/Ada95/gen/terminal_interface-curses-forms-form_user_data.ads.m4 +++ b/Ada95/gen/terminal_interface-curses-forms-form_user_data.ads.m4 @@ -36,9 +36,10 @@ include(M4MACRO)dnl -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.12 $ +-- $Revision: 1.13 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ diff --git a/Ada95/gen/terminal_interface-curses-forms.ads.m4 b/Ada95/gen/terminal_interface-curses-forms.ads.m4 index f969ce04..9123f9d9 100644 --- a/Ada95/gen/terminal_interface-curses-forms.ads.m4 +++ b/Ada95/gen/terminal_interface-curses-forms.ads.m4 @@ -36,9 +36,10 @@ include(M4MACRO)dnl -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.24 $ +-- $Revision: 1.26 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ include(`Form_Base_Defs') @@ -685,6 +686,9 @@ include(`Form_Opt_Rep')Dnl -- 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; diff --git a/Ada95/gen/terminal_interface-curses-menus-item_user_data.ads.m4 b/Ada95/gen/terminal_interface-curses-menus-item_user_data.ads.m4 index 8d601d80..1c42bbeb 100644 --- a/Ada95/gen/terminal_interface-curses-menus-item_user_data.ads.m4 +++ b/Ada95/gen/terminal_interface-curses-menus-item_user_data.ads.m4 @@ -36,9 +36,10 @@ include(M4MACRO)dnl -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.12 $ +-- $Revision: 1.13 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ diff --git a/Ada95/gen/terminal_interface-curses-menus-menu_user_data.ads.m4 b/Ada95/gen/terminal_interface-curses-menus-menu_user_data.ads.m4 index 2f26f08a..87ffadc7 100644 --- a/Ada95/gen/terminal_interface-curses-menus-menu_user_data.ads.m4 +++ b/Ada95/gen/terminal_interface-curses-menus-menu_user_data.ads.m4 @@ -36,9 +36,10 @@ include(M4MACRO)dnl -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.12 $ +-- $Revision: 1.13 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ diff --git a/Ada95/gen/terminal_interface-curses-menus.ads.m4 b/Ada95/gen/terminal_interface-curses-menus.ads.m4 index 2bc350a7..ba620792 100644 --- a/Ada95/gen/terminal_interface-curses-menus.ads.m4 +++ b/Ada95/gen/terminal_interface-curses-menus.ads.m4 @@ -36,9 +36,10 @@ include(M4MACRO)dnl -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.21 $ +-- $Revision: 1.23 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ include(`Menu_Base_Defs') @@ -473,6 +474,13 @@ include(`Item_Rep')dnl procedure Set_Format (Men : in Menu; Lines : in Line_Count; Columns : in 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); @@ -570,7 +578,7 @@ include(`Item_Rep')dnl -- Reset Men to Null_Menu -- Not inlined - -- MANPAGE(`menu_new.3x') + -- MANPAGE(`menu_driver.3x') type Driver_Result is (Menu_Ok, Request_Denied, @@ -583,6 +591,8 @@ include(`Item_Rep')dnl -- 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; diff --git a/Ada95/gen/terminal_interface-curses-mouse.ads.m4 b/Ada95/gen/terminal_interface-curses-mouse.ads.m4 index 0db4ffbb..84eeacb2 100644 --- a/Ada95/gen/terminal_interface-curses-mouse.ads.m4 +++ b/Ada95/gen/terminal_interface-curses-mouse.ads.m4 @@ -36,9 +36,10 @@ include(M4MACRO)dnl -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.19 $ +-- $Revision: 1.21 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ include(`Mouse_Base_Defs') @@ -52,6 +53,12 @@ package Terminal_Interface.Curses.Mouse is -- is still marked as experimental. So also this binding will change -- if the ncurses methods change. -- + -- 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; @@ -107,6 +114,8 @@ package Terminal_Interface.Curses.Mouse is -- 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 @@ -128,6 +137,8 @@ package Terminal_Interface.Curses.Mouse is 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') diff --git a/Ada95/gen/terminal_interface-curses-panels-user_data.ads.m4 b/Ada95/gen/terminal_interface-curses-panels-user_data.ads.m4 index 1369cfd7..4b9a8581 100644 --- a/Ada95/gen/terminal_interface-curses-panels-user_data.ads.m4 +++ b/Ada95/gen/terminal_interface-curses-panels-user_data.ads.m4 @@ -36,9 +36,10 @@ include(M4MACRO)dnl -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.12 $ +-- $Revision: 1.13 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ diff --git a/Ada95/gen/terminal_interface-curses-panels.ads.m4 b/Ada95/gen/terminal_interface-curses-panels.ads.m4 index 04e374fc..7d571b9e 100644 --- a/Ada95/gen/terminal_interface-curses-panels.ads.m4 +++ b/Ada95/gen/terminal_interface-curses-panels.ads.m4 @@ -36,9 +36,10 @@ include(M4MACRO)dnl -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.15 $ +-- $Revision: 1.16 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System; diff --git a/Ada95/gen/terminal_interface-curses-trace.ads.m4 b/Ada95/gen/terminal_interface-curses-trace.ads.m4 new file mode 100644 index 00000000..546004fd --- /dev/null +++ b/Ada95/gen/terminal_interface-curses-trace.ads.m4 @@ -0,0 +1,78 @@ +-- -*- 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 Free Software Foundation, Inc. -- +-- -- +-- Permission is hereby granted, free of charge, to any person obtaining a -- +-- copy of this software and associated documentation files (the -- +-- "Software"), to deal in the Software without restriction, including -- +-- without limitation the rights to use, copy, modify, merge, publish, -- +-- distribute, distribute with modifications, sublicense, and/or sell -- +-- copies of the Software, and to permit persons to whom the Software is -- +-- furnished to do so, subject to the following conditions: -- +-- -- +-- The above copyright notice and this permission notice shall be included -- +-- in all copies or substantial portions of the Software. -- +-- -- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -- +-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- +-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- +-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -- +-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -- +-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -- +-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- +-- -- +-- Except as contained in this notice, the name(s) of the above copyright -- +-- holders 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 Terminal_Interface.Curses.Trace is + pragma Preelaborate (Terminal_Interface.Curses.Trace); + + pragma Warnings (Off); +include(`Trace_Defs') + + 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; diff --git a/Ada95/gen/terminal_interface-curses.ads.m4 b/Ada95/gen/terminal_interface-curses.ads.m4 index 11930d97..bd879cdd 100644 --- a/Ada95/gen/terminal_interface-curses.ads.m4 +++ b/Ada95/gen/terminal_interface-curses.ads.m4 @@ -35,9 +35,10 @@ include(M4MACRO)---------------------------------------------------------------- -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.28 $ +-- $Revision: 1.30 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ include(`Base_Defs') @@ -95,7 +96,7 @@ include(`Old_Keys')dnl ------------------------------------------------------------------------------ - type Color_Number is range 0 .. Integer (Interfaces.C.short'Last); + 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 @@ -198,7 +199,7 @@ include(`AC_Rep') include(`ACS_Map')dnl -- MANPAGE(`curs_initscr.3x') - -- | Not implemented: newterm, set_term, delscreen + -- | Not implemented: newterm, set_term, delscreen, curscr -- ANCHOR(`stdscr',`Standard_Window') function Standard_Window return Window; @@ -233,6 +234,7 @@ include(`ACS_Map')dnl Line : in Line_Position; Column : in Column_Position); -- AKA + -- ALIAS(`move()') pragma Inline (Move_Cursor); -- MANPAGE(`curs_addch.3x') @@ -241,6 +243,7 @@ include(`ACS_Map')dnl procedure Add (Win : in Window := Standard_Window; Ch : in Attributed_Character); -- AKA + -- ALIAS(`addch()') procedure Add (Win : in Window := Standard_Window; Ch : in Character); @@ -254,6 +257,7 @@ include(`ACS_Map')dnl Column : in Column_Position; Ch : in Attributed_Character); -- AKA + -- ALIAS(`mvaddch()') procedure Add (Win : in Window := Standard_Window; @@ -268,6 +272,7 @@ include(`ACS_Map')dnl (Win : in Window := Standard_Window; Ch : in Attributed_Character); -- AKA + -- ALIAS(`echochar()') procedure Add_With_Immediate_Echo (Win : in Window := Standard_Window; @@ -276,6 +281,7 @@ include(`ACS_Map')dnl pragma Inline (Add_With_Immediate_Echo); -- MANPAGE(`curs_window.3x') + -- Not Implemented: wcursyncup -- ANCHOR(`newwin()',`Create') function Create @@ -283,6 +289,8 @@ include(`ACS_Map')dnl 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); @@ -363,6 +371,8 @@ include(`ACS_Map')dnl Len : in Integer := -1); -- AKA -- ALIAS(`waddstr()') + -- ALIAS(`addnstr()') + -- ALIAS(`addstr()') -- ANCHOR(`mvwaddnstr()',`Add') procedure Add (Win : in Window := Standard_Window; @@ -372,6 +382,8 @@ include(`ACS_Map')dnl Len : in Integer := -1); -- AKA -- ALIAS(`mvwaddstr()') + -- ALIAS(`mvaddnstr()') + -- ALIAS(`mvaddstr()') -- MANPAGE(`curs_addchstr.3x') @@ -381,6 +393,8 @@ include(`ACS_Map')dnl Len : in Integer := -1); -- AKA -- ALIAS(`waddchstr()') + -- ALIAS(`addchnstr()') + -- ALIAS(`addchstr()') -- ANCHOR(`mvwaddchnstr()',`Add') procedure Add (Win : in Window := Standard_Window; @@ -390,9 +404,13 @@ include(`ACS_Map')dnl Len : in 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 @@ -407,6 +425,7 @@ include(`ACS_Map')dnl Lower_Right_Corner_Symbol : in Attributed_Character := Default_Character ); -- AKA + -- ALIAS(`border()') pragma Inline (Border); -- ANCHOR(`box()',`Box') @@ -423,6 +442,7 @@ include(`ACS_Map')dnl Line_Size : in Natural; Line_Symbol : in Attributed_Character := Default_Character); -- AKA + -- ALIAS(`hline()') pragma Inline (Horizontal_Line); -- ANCHOR(`wvline()',`Vertical_Line') @@ -431,14 +451,17 @@ include(`ACS_Map')dnl Line_Size : in Natural; Line_Symbol : in 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 couldn't get a character the @@ -475,14 +498,28 @@ include(`ACS_Map')dnl 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 : in Window := Standard_Window; Attr : in Character_Attribute_Set := Normal_Video; On : in 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 @@ -490,12 +527,14 @@ include(`ACS_Map')dnl Attr : in Character_Attribute_Set := Normal_Video; Color : in Color_Pair := Color_Pair'First); -- AKA + -- ALIAS(`attrset()') pragma Inline (Set_Character_Attributes); -- ANCHOR(`wattr_get()',`Get_Character_Attributes') function Get_Character_Attribute (Win : in Window := Standard_Window) return Character_Attribute_Set; -- AKA + -- ALIAS(`attr_get()') -- ANCHOR(`wattr_get()',`Get_Character_Attribute') function Get_Character_Attribute @@ -507,6 +546,7 @@ include(`ACS_Map')dnl procedure Set_Color (Win : in Window := Standard_Window; Pair : in Color_Pair); -- AKA + -- ALIAS(`color_set()') pragma Inline (Set_Color); -- ANCHOR(`wchgat()',`Change_Attributes') @@ -516,6 +556,7 @@ include(`ACS_Map')dnl Attr : in Character_Attribute_Set := Normal_Video; Color : in Color_Pair := Color_Pair'First); -- AKA + -- ALIAS(`chgat()') -- ANCHOR(`mvwchgat()',`Change_Attributes') procedure Change_Attributes @@ -526,6 +567,7 @@ include(`ACS_Map')dnl Attr : in Character_Attribute_Set := Normal_Video; Color : in Color_Pair := Color_Pair'First); -- AKA + -- ALIAS(`mvchgat()') pragma Inline (Change_Attributes); -- MANPAGE(`curs_beep.3x') @@ -574,6 +616,11 @@ include(`ACS_Map')dnl -- AKA pragma Inline (Set_KeyPad_Mode); + function Get_KeyPad_Mode (Win : in 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') @@ -610,6 +657,7 @@ include(`ACS_Map')dnl Mode : in Timeout_Mode; Amount : in 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 @@ -683,6 +731,7 @@ include(`ACS_Map')dnl Top_Line : in Line_Position; Bottom_Line : in Line_Position); -- AKA + -- ALIAS(`setscrreg()') pragma Inline (Set_Scroll_Region); -- MANPAGE(`curs_refresh.3x') @@ -697,6 +746,7 @@ include(`ACS_Map')dnl -- AKA -- There is an overloaded Refresh for Pads. -- The Inline pragma appears there + -- ALIAS(`refresh()') -- ANCHOR(`wnoutrefresh()',`Refresh_Without_Update') procedure Refresh_Without_Update @@ -721,33 +771,41 @@ include(`ACS_Map')dnl -- ANCHOR(`werase()',`Erase') procedure Erase (Win : in Window := Standard_Window); -- AKA + -- ALIAS(`erase()') pragma Inline (Erase); -- ANCHOR(`wclear()',`Clear') procedure Clear (Win : in Window := Standard_Window); -- AKA + -- ALIAS(`clear()') pragma Inline (Clear); -- ANCHOR(`wclrtobot()',`Clear_To_End_Of_Screen') procedure Clear_To_End_Of_Screen (Win : in 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 : in 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 : in Window := Standard_Window; Ch : in Attributed_Character); -- AKA + -- ALIAS(`bkgdset()') pragma Inline (Set_Background); -- ANCHOR(`wbkgd()',`Change_Background') @@ -755,12 +813,15 @@ include(`ACS_Map')dnl (Win : in Window := Standard_Window; Ch : in 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') @@ -834,16 +895,19 @@ include(`ACS_Map')dnl (Win : in Window := Standard_Window; Lines : in 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 : in Window := Standard_Window); -- AKA + -- ALIAS(`deleteln()') pragma Inline (Delete_Line); -- ANCHOR(`winsertln()',`Insert_Line') procedure Insert_Line (Win : in Window := Standard_Window); -- AKA + -- ALIAS(`insertln()') pragma Inline (Insert_Line); -- MANPAGE(`curs_getyx.3x') @@ -942,6 +1006,8 @@ include(`ACS_Map')dnl procedure Scroll (Win : in Window := Standard_Window; Amount : in Integer := 1); -- AKA + -- ALIAS(`scroll()') + -- ALIAS(`scrl()') pragma Inline (Scroll); -- MANPAGE(`curs_delch.3x') @@ -949,6 +1015,7 @@ include(`ACS_Map')dnl -- ANCHOR(`wdelch()',`Delete_Character') procedure Delete_Character (Win : in Window := Standard_Window); -- AKA + -- ALIAS(`delch()') -- ANCHOR(`mvwdelch()',`Delete_Character') procedure Delete_Character @@ -956,6 +1023,7 @@ include(`ACS_Map')dnl Line : in Line_Position; Column : in Column_Position); -- AKA + -- ALIAS(`mvdelch()') pragma Inline (Delete_Character); -- MANPAGE(`curs_inch.3x') @@ -963,6 +1031,7 @@ include(`ACS_Map')dnl -- ANCHOR(`winch()',`Peek') function Peek (Win : Window := Standard_Window) return Attributed_Character; + -- ALIAS(`inch()') -- AKA -- ANCHOR(`mvwinch()',`Peek') @@ -971,14 +1040,16 @@ include(`ACS_Map')dnl Line : Line_Position; Column : Column_Position) return Attributed_Character; -- AKA + -- ALIAS(`mvinch()') -- More Peek's follow, pragma Inline appears later. - -- MANPAGE(`curs_winch.3x') + -- MANPAGE(`curs_insch.3x') -- ANCHOR(`winsch()',`Insert') procedure Insert (Win : in Window := Standard_Window; Ch : in Attributed_Character); -- AKA + -- ALIAS(`insch()') -- ANCHOR(`mvwinsch()',`Insert') procedure Insert (Win : in Window := Standard_Window; @@ -986,8 +1057,9 @@ include(`ACS_Map')dnl Column : in Column_Position; Ch : in Attributed_Character); -- AKA + -- ALIAS(`mvinsch()') - -- MANPAGE(`curs_winch.3x') + -- MANPAGE(`curs_insstr.3x') -- ANCHOR(`winsnstr()',`Insert') procedure Insert (Win : in Window := Standard_Window; @@ -995,6 +1067,8 @@ include(`ACS_Map')dnl Len : in Integer := -1); -- AKA -- ALIAS(`winsstr()') + -- ALIAS(`insnstr()') + -- ALIAS(`insstr()') -- ANCHOR(`mvwinsnstr()',`Insert') procedure Insert (Win : in Window := Standard_Window; @@ -1004,6 +1078,8 @@ include(`ACS_Map')dnl Len : in Integer := -1); -- AKA -- ALIAS(`mvwinsstr()') + -- ALIAS(`mvinsnstr()') + -- ALIAS(`mvinsstr()') pragma Inline (Insert); -- MANPAGE(`curs_instr.3x') @@ -1014,6 +1090,8 @@ include(`ACS_Map')dnl Len : in Integer := -1); -- AKA -- ALIAS(`winstr()') + -- ALIAS(`innstr()') + -- ALIAS(`instr()') -- ANCHOR(`mvwinnstr()',`Peek') procedure Peek (Win : in Window := Standard_Window; @@ -1023,6 +1101,8 @@ include(`ACS_Map')dnl Len : in Integer := -1); -- AKA -- ALIAS(`mvwinstr()') + -- ALIAS(`mvinnstr()') + -- ALIAS(`mvinstr()') -- MANPAGE(`curs_inchstr.3x') @@ -1032,6 +1112,8 @@ include(`ACS_Map')dnl Len : in Integer := -1); -- AKA -- ALIAS(`winchstr()') + -- ALIAS(`inchnstr()') + -- ALIAS(`inchstr()') -- ANCHOR(`mvwinchnstr()',`Peek') procedure Peek (Win : in Window := Standard_Window; @@ -1041,6 +1123,8 @@ include(`ACS_Map')dnl Len : in Integer := -1); -- AKA -- ALIAS(`mvwinchstr()') + -- ALIAS(`mvinchnstr()') + -- ALIAS(`mvinchstr()') -- We don't inline the Peek procedures -- MANPAGE(`curs_getstr.3x') @@ -1051,19 +1135,27 @@ include(`ACS_Map')dnl Len : in 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 : in Window := Standard_Window; Line : in Line_Position; Column : in Column_Position; Str : out String; Len : in Integer := -1); -- AKA - -- not specified in ncurses, should be: mvwgetnstr() - -- and mvwgetstr() (which exists) + -- 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 @@ -1149,6 +1241,9 @@ include(`ACS_Map')dnl -- AKA pragma Inline (Set_Soft_Label_Key_Color); + -- MANPAGE(`keybound.3x') + -- Not Implemented: keybound + -- MANPAGE(`keyok.3x') -- ANCHOR(`keyok()',`Enable_Key') @@ -1167,8 +1262,10 @@ include(`ACS_Map')dnl -- MANPAGE(`curs_util.3x') - -- | Not implemented : filter, use_env, putwin, getwin + -- | Not implemented : filter, use_env + -- | putwin, getwin are in the child package PutWin -- + -- ANCHOR(`keyname()',`Key_Name') procedure Key_Name (Key : in Real_Key_Code; Name : out String); @@ -1256,6 +1353,12 @@ include(`ACS_Map')dnl -- 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 @@ -1302,7 +1405,6 @@ include(`ACS_Map')dnl pragma Inline (Color_Content); -- MANPAGE(`curs_kernel.3x') - -- | Not implemented: getsyx, setsyx -- type Curses_Mode is (Curses, Shell); @@ -1375,6 +1477,73 @@ include(`ACS_Map')dnl -- Window or if you pass the Null_Window as argument. -- We don't inline this procedure + -- MANPAGE(`dft_fgbg.3x') + + -- 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_scr_dump.3x') + + -- ANCHOR(`scr_dump()',`Screen_Dump_To_File') + procedure Screen_Dump_To_File (Filename : in String); + -- AKA + + -- ANCHOR(`scr_restore()',`Screen_Restore_From_File') + procedure Screen_Restore_From_File (Filename : in String); + -- AKA + + -- ANCHOR(`scr_init()',`Screen_Init_From_File') + procedure Screen_Init_From_File (Filename : in String); + -- AKA + + -- ANCHOR(`scr_set()',`Screen_Set_File') + procedure Screen_Set_File (Filename : in 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 doesn't 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; diff --git a/Ada95/samples/Makefile.in b/Ada95/samples/Makefile.in index d9cf0cf7..23cf94f8 100644 --- a/Ada95/samples/Makefile.in +++ b/Ada95/samples/Makefile.in @@ -26,10 +26,11 @@ # authorization. # ############################################################################## # -# Author: Juergen Pfeifer 1996 +# Author: Juergen Pfeifer, 1996 +# Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en # # Version Control -# $Revision: 1.25 $ +# $Revision: 1.29 $ # .SUFFIXES: @@ -84,9 +85,9 @@ ALIB = @cf_ada_package@ ABASE = $(ALIB)-curses CARGS =-cargs $(ADAFLAGS) -LARGS =-largs -L../../lib $(LD_FLAGS) -lAdaCurses -lncurses@LIB_SUFFIX@ - -PROGS = tour rain +LARGS =-largs -L../../lib @TEST_ARGS@ $(LD_FLAGS) -lAdaCurses @EXTRA_LIBS@ + +PROGS = tour rain ncurses TOUR_OBJS = tour.o sample.o sample-curses_demo.o sample-explanation.o \ sample-form_demo.o sample-function_key_setting.o \ @@ -98,7 +99,19 @@ TOUR_OBJS = tour.o sample.o sample-curses_demo.o sample-explanation.o \ RAIN_OBJS = rain.o status.o -all :: tour$x rain$x +NCURSES_OBJS = ncurses.o ncurses2-getch_test.o \ + ncurses2-acs_and_scroll.o ncurses2-m.o \ + ncurses2-acs_display.o ncurses2-menu_test.o \ + ncurses2-attr_test.o ncurses2-overlap_test.o \ + ncurses2-color_edit.o ncurses2-slk_test.o \ + ncurses2-color_test.o ncurses2-test_sgr_attributes.o \ + ncurses2-demo_forms.o ncurses2-trace_set.o \ + ncurses2-demo_pad.o ncurses2-util.o \ + ncurses2-demo_panels.o ncurses2.o \ + ncurses2-flushinp_test.o + + +all :: tour$x rain$x ncurses$x @ sources : @@ -113,6 +126,9 @@ uninstall \ uninstall.libs :: @ +ncurses$x : + $(ADAMAKE) $(ADAMAKEFLAGS) ncurses $(CARGS) $(LARGS) + tour$x : explain.msg $(ADAMAKE) $(ADAMAKEFLAGS) tour $(CARGS) $(LARGS) @@ -126,7 +142,8 @@ mostlyclean: @ clean :: mostlyclean - rm -f *.o *.ali b_t*.* *.s $(PROGS) a.out core b_*_test.c *.xr[bs] explain.msg + rm -f *.o *.ali b_t*.* *.s $(PROGS) a.out core b_*_test.c *.xr[bs] \ + explain.msg trace screendump distclean :: clean rm -f Makefile diff --git a/Ada95/samples/ncurses.adb b/Ada95/samples/ncurses.adb new file mode 100644 index 00000000..19f658d5 --- /dev/null +++ b/Ada95/samples/ncurses.adb @@ -0,0 +1,47 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-acs_and_scroll.adb b/Ada95/samples/ncurses2-acs_and_scroll.adb new file mode 100644 index 00000000..65c2939a --- /dev/null +++ b/Ada95/samples/ncurses2-acs_and_scroll.adb @@ -0,0 +1,722 @@ +------------------------------------------------------------------------------ +-- -- +-- 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 +------------------------------------------------------------------------------ +-- 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; + + use Ada.Streams.Stream_IO; + + + -- 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 : Boolean := HaveKeyPad (curpw); + do_scroll : 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 : Line_Position := lri - uli + 1; + sj : 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 arithetic, + -- 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.last.next := fp.next; + fp.next.last := fp.last; + + if showit then + Erase (fp.wind); + Refresh (fp.wind); + end if; + Delete (fp.wind); + + if fp = fp.next then + np := null; + else + np := fp.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 : FrameA := new Frame'(null, null, False, False, + Null_Window); + begin + neww.wind := getwindow; + if neww.wind = Null_Window then + exit; + -- was goto breakout; ha ha ha + else + + if current = null then + neww.next := neww; + neww.last := neww; + else + neww.next := current.next; + neww.last := current; + neww.last.next := neww; + neww.next.last := neww; + end if; + current := neww; + + Set_KeyPad_Mode (current.wind, True); + current.do_keypad := HaveKeyPad (current.wind); + current.do_scroll := HaveScroll (current.wind); + end if; + end; + when Character'Pos ('N') mod 16#20# => -- Ctrl('N') + if current /= null then + current := current.next; + end if; + when Character'Pos ('P') mod 16#20# => -- Ctrl('P') + if current /= null then + current := current.last; + end if; + when Character'Pos ('F') mod 16#20# => -- Ctrl('F') + if current /= null and HaveScroll (current.wind) then + Scroll (current.wind, 1); + end if; + when Character'Pos ('B') mod 16#20# => -- Ctrl('B') + if current /= null and HaveScroll (current.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.wind, -1); + end if; + when Character'Pos ('K') mod 16#20# => -- Ctrl('K') + if current /= null then + current.do_keypad := not current.do_keypad; + Set_KeyPad_Mode (current.wind, current.do_keypad); + end if; + when Character'Pos ('S') mod 16#20# => -- Ctrl('S') + if current /= null then + current.do_scroll := not current.do_scroll; + Allow_Scrolling (current.wind, current.do_scroll); + end if; + when Character'Pos ('W') mod 16#20# => -- Ctrl('W') + if current /= current.next then + Create (f, Name => dumpfile); -- TODO error checking + if not Is_Open (f) then + raise Curses_Exception; + end if; + Put_Window (current.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.next := current.next; + neww.last := current; + neww.last.next := neww; + neww.next.last := neww; + + neww.wind := Get_Window (f); + Close (f); + + Refresh (neww.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.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.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.wind, my, mx); + if my > tmp.y - ul.y then + Get_Cursor_Position (current.wind, lr.y, lr.x); + Move_Cursor (current.wind, tmp.y - ul.y + 1, 0); + Clear_To_End_Of_Screen (current.wind); + Move_Cursor (current.wind, lr.y, lr.x); + end if; + if mx > tmp.x - ul.x then + for i in 0 .. my - 1 loop + Move_Cursor (current.wind, i, tmp.x - ul.x + 1); + Clear_To_End_Of_Line (current.wind); + end loop; + end if; + Refresh_Without_Update (current.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.wind, lr.y - ul.y + 0, + lr.x - ul.x + 0); + end if; + + Get_Window_Position (current.wind, ul.y, ul.x); + Get_Size (current.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.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.wind, -1, 0); + when Key_Cursor_Down => + newwin_move (current.wind, 1, 0); + when Key_Cursor_Left => + newwin_move (current.wind, 0, -1); + when Key_Cursor_Right => + newwin_move (current.wind, 0, 1); + when Key_Backspace | Key_Delete_Char => + declare + y : Line_Position; + x : Column_Position; + tmp : Line_Position; + begin + Get_Cursor_Position (current.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.wind, tmp, x); + end if; + x := x - 1; + Delete_Character (current.wind, y, x); + end if; + end; + when others => + -- TODO c = '\r' ? + if current /= null then + declare + begin + Add (current.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.wind); + if current /= null then + usescr := current.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; + Set_Raw_Mode (SwitchOn => True); + Erase; + End_Windows; + +end ncurses2.acs_and_scroll; diff --git a/Ada95/samples/ncurses2-acs_and_scroll.ads b/Ada95/samples/ncurses2-acs_and_scroll.ads new file mode 100644 index 00000000..79e4862a --- /dev/null +++ b/Ada95/samples/ncurses2-acs_and_scroll.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-acs_display.adb b/Ada95/samples/ncurses2-acs_display.adb new file mode 100644 index 00000000..ab072132 --- /dev/null +++ b/Ada95/samples/ncurses2-acs_display.adb @@ -0,0 +1,231 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.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 : Boolean := (first = 128); + last : 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 : Line_Position := Line_Position (4 + ((code - first) mod 16)); + col : 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 : Line_Position := Line_Position (4 + (N mod height)); + col : 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)); + + 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; + diff --git a/Ada95/samples/ncurses2-acs_display.ads b/Ada95/samples/ncurses2-acs_display.ads new file mode 100644 index 00000000..4e616c5e --- /dev/null +++ b/Ada95/samples/ncurses2-acs_display.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-attr_test.adb b/Ada95/samples/ncurses2-attr_test.adb new file mode 100644 index 00000000..d852bb7f --- /dev/null +++ b/Ada95/samples/ncurses2-attr_test.adb @@ -0,0 +1,367 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.2 $ +-- 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 : 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 : + 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 : out Integer; fg, bg : in out Color_Number; + result : out Boolean) is + ch : Key_Code := Getchar; + nc : constant Color_Number := Color_Number (Number_Of_Colors); + curscr : Window; + pragma Import (C, curscr, "curscr"); + -- curscr is not implemented in the Ada binding + 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 (curscr); + 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 : 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; diff --git a/Ada95/samples/ncurses2-attr_test.ads b/Ada95/samples/ncurses2-attr_test.ads new file mode 100644 index 00000000..fb1ed185 --- /dev/null +++ b/Ada95/samples/ncurses2-attr_test.ads @@ -0,0 +1,42 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.attr_test; + diff --git a/Ada95/samples/ncurses2-color_edit.adb b/Ada95/samples/ncurses2-color_edit.adb new file mode 100644 index 00000000..ac14628f --- /dev/null +++ b/Ada95/samples/ncurses2-color_edit.adb @@ -0,0 +1,264 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.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; + last_c : Key_Code; +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); + + last_c := this_c; + 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; diff --git a/Ada95/samples/ncurses2-color_edit.ads b/Ada95/samples/ncurses2-color_edit.ads new file mode 100644 index 00000000..3e8e392d --- /dev/null +++ b/Ada95/samples/ncurses2-color_edit.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-color_test.adb b/Ada95/samples/ncurses2-color_test.adb new file mode 100644 index 00000000..ecbf2903 --- /dev/null +++ b/Ada95/samples/ncurses2-color_test.adb @@ -0,0 +1,164 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.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; diff --git a/Ada95/samples/ncurses2-color_test.ads b/Ada95/samples/ncurses2-color_test.ads new file mode 100644 index 00000000..6e663181 --- /dev/null +++ b/Ada95/samples/ncurses2-color_test.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-demo_forms.adb b/Ada95/samples/ncurses2-demo_forms.adb new file mode 100644 index 00000000..7f4cefc9 --- /dev/null +++ b/Ada95/samples/ncurses2-demo_forms.adb @@ -0,0 +1,496 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.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 : 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 : 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 : 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 : 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 (1) := make_label (0, 15, "Sample Form"); + f (2) := make_label (2, 0, "Last Name"); + f (3) := make_field (3, 0, 1, 18, False); + f (4) := make_label (2, 20, "First Name"); + f (5) := make_field (3, 20, 1, 12, False); + f (6) := make_label (2, 34, "Middle Name"); + f (7) := make_field (3, 34, 1, 12, False); + f (8) := make_label (5, 0, "Comments"); + f (9) := make_field (6, 0, 4, 46, False); + f (10) := make_label (5, 20, "Password:"); + f (11) := make_field (5, 30, 1, 9, True); + secure := f (11); + f (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; diff --git a/Ada95/samples/ncurses2-demo_forms.ads b/Ada95/samples/ncurses2-demo_forms.ads new file mode 100644 index 00000000..eabaa01b --- /dev/null +++ b/Ada95/samples/ncurses2-demo_forms.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-demo_pad.adb b/Ada95/samples/ncurses2-demo_pad.adb new file mode 100644 index 00000000..1b17cbd5 --- /dev/null +++ b/Ada95/samples/ncurses2-demo_pad.adb @@ -0,0 +1,671 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.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 : 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))); + retval.seconds := Integer (t.tv_sec); + retval.microseconds := Integer (t.tv_usec); + 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 : 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 + tmp : Boolean; + begin + tmp := panner_legend (line); + 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 => + basey := pymax - porty; + if basey < 0 then -- basey := max(basey, 0); + basey := 0; + 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 : 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 : 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; diff --git a/Ada95/samples/ncurses2-demo_pad.ads b/Ada95/samples/ncurses2-demo_pad.ads new file mode 100644 index 00000000..b996263c --- /dev/null +++ b/Ada95/samples/ncurses2-demo_pad.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-demo_panels.adb b/Ada95/samples/ncurses2-demo_panels.adb new file mode 100644 index 00000000..9988a9f1 --- /dev/null +++ b/Ada95/samples/ncurses2-demo_panels.adb @@ -0,0 +1,379 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.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 nap_msec = 1 then + Getchar; + else + Nap_Milli_Seconds (nap_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 : Window := Panel_Window (pan); + num : Character := Get_User_Data (pan) (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 - 2 loop + for x in 1 .. maxx - 2 loop + Move_Cursor (win, y, x); + Add (win, num); + end loop; + end loop; + end fill_panel; + + modstr : 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 : User_Data_Access := new User_Data'("p1"); + U2 : User_Data_Access := new User_Data'("p2"); + U3 : User_Data_Access := new User_Data'("p3"); + U4 : User_Data_Access := new User_Data'("p4"); + U5 : 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 : Window := Panel_Window (p4); + w5 : 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; diff --git a/Ada95/samples/ncurses2-demo_panels.ads b/Ada95/samples/ncurses2-demo_panels.ads new file mode 100644 index 00000000..eb2878c8 --- /dev/null +++ b/Ada95/samples/ncurses2-demo_panels.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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); diff --git a/Ada95/samples/ncurses2-flushinp_test.adb b/Ada95/samples/ncurses2-flushinp_test.adb new file mode 100644 index 00000000..9ea98e15 --- /dev/null +++ b/Ada95/samples/ncurses2-flushinp_test.adb @@ -0,0 +1,135 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-flushinp_test.ads b/Ada95/samples/ncurses2-flushinp_test.ads new file mode 100644 index 00000000..5376c94a --- /dev/null +++ b/Ada95/samples/ncurses2-flushinp_test.ads @@ -0,0 +1,43 @@ +------------------------------------------------------------------------------ +-- -- +-- 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); diff --git a/Ada95/samples/ncurses2-genericputs.adb b/Ada95/samples/ncurses2-genericputs.adb new file mode 100644 index 00000000..f17b2098 --- /dev/null +++ b/Ada95/samples/ncurses2-genericputs.adb @@ -0,0 +1,126 @@ +------------------------------------------------------------------------------ +-- -- +-- 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 Ada.Text_IO; use Ada.Text_IO; +with Ada.Strings.Bounded; use Ada.Strings.Bounded; + +with Terminal_Interface.Curses; use Terminal_Interface.Curses; +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 ncurses2.genericPuts is + + procedure myGet (Win : in Window := Standard_Window; + Str : out BS.Bounded_String; + Len : in Integer := -1) + is + use BS; + 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 : in 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 : in 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; diff --git a/Ada95/samples/ncurses2-genericputs.ads b/Ada95/samples/ncurses2-genericputs.ads new file mode 100644 index 00000000..eec7eba6 --- /dev/null +++ b/Ada95/samples/ncurses2-genericputs.ads @@ -0,0 +1,73 @@ +------------------------------------------------------------------------------ +-- -- +-- 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 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 : in Terminal_Interface.Curses.Window + := Terminal_Interface.Curses.Standard_Window; + Str : out BS.Bounded_String; + Len : in Integer := -1); + + procedure myPut (Str : out BS.Bounded_String; + i : Integer; + Base : in 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 : in chars_ptr; Str : out BS.Bounded_String); +end ncurses2.genericPuts; diff --git a/Ada95/samples/ncurses2-getch.ads b/Ada95/samples/ncurses2-getch.ads new file mode 100644 index 00000000..21a09f31 --- /dev/null +++ b/Ada95/samples/ncurses2-getch.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-getch_test.adb b/Ada95/samples/ncurses2-getch_test.adb new file mode 100644 index 00000000..d786d496 --- /dev/null +++ b/Ada95/samples/ncurses2-getch_test.adb @@ -0,0 +1,251 @@ +------------------------------------------------------------------------------ +-- -- +-- 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 +------------------------------------------------------------------------------ +-- 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 : 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 : 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; + + tmp2 := Start_Mouse (No_Events); + 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; diff --git a/Ada95/samples/ncurses2-getch_test.ads b/Ada95/samples/ncurses2-getch_test.ads new file mode 100644 index 00000000..78a0a48c --- /dev/null +++ b/Ada95/samples/ncurses2-getch_test.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-getopt.adb b/Ada95/samples/ncurses2-getopt.adb new file mode 100644 index 00000000..93f17139 --- /dev/null +++ b/Ada95/samples/ncurses2-getopt.adb @@ -0,0 +1,168 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.2 $ +-- 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 + + opterr : Character := Character'Val (1); + optopt : Character := '?'; + initialized : Boolean := False; + + 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. + + -- longoptions 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 colector 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 : 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); + optopt := 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); + optopt := c; + if optstring (1) = ':' 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; diff --git a/Ada95/samples/ncurses2-getopt.ads b/Ada95/samples/ncurses2-getopt.ads new file mode 100644 index 00000000..0bd6952a --- /dev/null +++ b/Ada95/samples/ncurses2-getopt.ads @@ -0,0 +1,59 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.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; diff --git a/Ada95/samples/ncurses2-m.adb b/Ada95/samples/ncurses2-m.adb new file mode 100644 index 00000000..d4f2b8a0 --- /dev/null +++ b/Ada95/samples/ncurses2-m.adb @@ -0,0 +1,460 @@ +------------------------------------------------------------------------------ +-- -- +-- 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 +------------------------------------------------------------------------------ +-- 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.color_edit; +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. + type stringa is access String; + 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 Integer (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; + return 0; -- TODO ExitProgram(EXIT_SUCCESS); + end main; + +end ncurses2.m; + + + + + + + diff --git a/Ada95/samples/ncurses2-m.ads b/Ada95/samples/ncurses2-m.ads new file mode 100644 index 00000000..c32d895d --- /dev/null +++ b/Ada95/samples/ncurses2-m.ads @@ -0,0 +1,43 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-menu_test.adb b/Ada95/samples/ncurses2-menu_test.adb new file mode 100644 index 00000000..0b96315e --- /dev/null +++ b/Ada95/samples/ncurses2-menu_test.adb @@ -0,0 +1,165 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.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 Menu_Request_Code; + procedure xAdd (l : Line_Position; c : Column_Position; s : String); + + function menu_virtualize (c : Key_Code) return Menu_Request_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 : 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 : Menu_Request_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 (i) := New_Item (animals (i).all); + end loop; + items_a (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); + + tmp := Start_Mouse (No_Events); +end ncurses2.menu_test; diff --git a/Ada95/samples/ncurses2-menu_test.ads b/Ada95/samples/ncurses2-menu_test.ads new file mode 100644 index 00000000..17e5b16b --- /dev/null +++ b/Ada95/samples/ncurses2-menu_test.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-overlap_test.adb b/Ada95/samples/ncurses2-overlap_test.adb new file mode 100644 index 00000000..5d3fc6d5 --- /dev/null +++ b/Ada95/samples/ncurses2-overlap_test.adb @@ -0,0 +1,156 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.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 doupdaute"); + 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; diff --git a/Ada95/samples/ncurses2-overlap_test.ads b/Ada95/samples/ncurses2-overlap_test.ads new file mode 100644 index 00000000..ce6e3e69 --- /dev/null +++ b/Ada95/samples/ncurses2-overlap_test.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-slk_test.adb b/Ada95/samples/ncurses2-slk_test.adb new file mode 100644 index 00000000..77ca2843 --- /dev/null +++ b/Ada95/samples/ncurses2-slk_test.adb @@ -0,0 +1,171 @@ +------------------------------------------------------------------------------ +-- -- +-- 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.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 : in Window := Standard_Window; + Str : out Ada.Strings.Unbounded.Unbounded_String; + Len : in Integer := -1); + + procedure myGet (Win : in Window := Standard_Window; + Str : out Ada.Strings.Unbounded.Unbounded_String; + Len : in 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"); + + Txt : char_array (0 .. 10); + begin + Txt (0) := Interfaces.C.char'First; + if Wgetnstr (Win, Txt, 8) = 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-throuh + -- happens in C! + when others => + Beep; + end case; + c := Getchar; + -- TODO exit when c = EOF + end loop; + Erase; + End_Windows; +end ncurses2.slk_test; diff --git a/Ada95/samples/ncurses2-slk_test.ads b/Ada95/samples/ncurses2-slk_test.ads new file mode 100644 index 00000000..51e95871 --- /dev/null +++ b/Ada95/samples/ncurses2-slk_test.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-test_sgr_attributes.adb b/Ada95/samples/ncurses2-test_sgr_attributes.adb new file mode 100644 index 00000000..9948dc59 --- /dev/null +++ b/Ada95/samples/ncurses2-test_sgr_attributes.adb @@ -0,0 +1,186 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; + + +-- 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; diff --git a/Ada95/samples/ncurses2-test_sgr_attributes.ads b/Ada95/samples/ncurses2-test_sgr_attributes.ads new file mode 100644 index 00000000..24111809 --- /dev/null +++ b/Ada95/samples/ncurses2-test_sgr_attributes.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-trace_set.adb b/Ada95/samples/ncurses2-trace_set.adb new file mode 100644 index 00000000..10b605a7 --- /dev/null +++ b/Ada95/samples/ncurses2-trace_set.adb @@ -0,0 +1,481 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT ncurses Binding Samples -- +-- -- +-- ncurses2.trace_set -- +-- -- +-- 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.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 Menu_Request_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) return Boolean; + + function menu_virtualize (c : Key_Code) return Menu_Request_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) return Boolean is + i, p : Item; + changed : Boolean; + c, v : Key_Code; + begin + loop + changed := False; + 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 : 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; + 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 (n) := New_Item (t_tbl (n).name.all); + end loop; + items_a (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; + + while run_trace_menu (m) loop + null; + 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; diff --git a/Ada95/samples/ncurses2-trace_set.ads b/Ada95/samples/ncurses2-trace_set.ads new file mode 100644 index 00000000..7bbf8ca5 --- /dev/null +++ b/Ada95/samples/ncurses2-trace_set.ads @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/ncurses2-util.adb b/Ada95/samples/ncurses2-util.adb new file mode 100644 index 00000000..907dcef9 --- /dev/null +++ b/Ada95/samples/ncurses2-util.adb @@ -0,0 +1,199 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT ncurses Binding Samples -- +-- -- +-- ncurses2.util -- +-- -- +-- 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 Ada.Text_IO; + +with Terminal_Interface.Curses; use Terminal_Interface.Curses; +pragma Warnings (Off); +with Terminal_Interface.Curses.Aux; +pragma Warnings (On); + +with Terminal_Interface.Curses.Trace; use Terminal_Interface.Curses.Trace; + +with Ada.Text_IO; use Ada.Text_IO; + +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 + x : Key_Code; + begin + x := Getchar (win); + 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; + use Terminal_Interface.Curses.Aux; + 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; diff --git a/Ada95/samples/ncurses2-util.ads b/Ada95/samples/ncurses2-util.ads new file mode 100644 index 00000000..6c81e83e --- /dev/null +++ b/Ada95/samples/ncurses2-util.ads @@ -0,0 +1,79 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT ncurses Binding Samples -- +-- -- +-- ncurses2.util -- +-- -- +-- 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 +------------------------------------------------------------------------------ +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; + diff --git a/Ada95/samples/ncurses2.ads b/Ada95/samples/ncurses2.ads new file mode 100644 index 00000000..2fe01970 --- /dev/null +++ b/Ada95/samples/ncurses2.ads @@ -0,0 +1,44 @@ +------------------------------------------------------------------------------ +-- -- +-- 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; diff --git a/Ada95/samples/rain.adb b/Ada95/samples/rain.adb index f2814049..f769733c 100644 --- a/Ada95/samples/rain.adb +++ b/Ada95/samples/rain.adb @@ -33,9 +33,11 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Laurent Pautet 1997 (modified by J.Pfeifer) +-- Author: Laurent Pautet +-- Modified by: Juergen Pfeifer, 1997 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.4 $ +-- $Revision: 1.5 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- -- diff --git a/Ada95/samples/rain.ads b/Ada95/samples/rain.ads index 5180a598..7eccb485 100644 --- a/Ada95/samples/rain.ads +++ b/Ada95/samples/rain.ads @@ -33,9 +33,11 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Laurent Pautet 1997 (modified by J.Pfeifer) +-- Author: Laurent Pautet +-- Modified by: Juergen Pfeifer, 1997 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.4 $ +-- $Revision: 1.5 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- -- diff --git a/Ada95/samples/sample-curses_demo-attributes.adb b/Ada95/samples/sample-curses_demo-attributes.adb index 1a329e7b..03b6e741 100644 --- a/Ada95/samples/sample-curses_demo-attributes.adb +++ b/Ada95/samples/sample-curses_demo-attributes.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.10 $ +-- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-curses_demo-attributes.ads b/Ada95/samples/sample-curses_demo-attributes.ads index ec0fb8cd..dc70abb9 100644 --- a/Ada95/samples/sample-curses_demo-attributes.ads +++ b/Ada95/samples/sample-curses_demo-attributes.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Curses_Demo.Attributes is diff --git a/Ada95/samples/sample-curses_demo-mouse.adb b/Ada95/samples/sample-curses_demo-mouse.adb index e526f598..7d80bfd8 100644 --- a/Ada95/samples/sample-curses_demo-mouse.adb +++ b/Ada95/samples/sample-curses_demo-mouse.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.11 $ +-- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-curses_demo-mouse.ads b/Ada95/samples/sample-curses_demo-mouse.ads index 93781709..e7774f2b 100644 --- a/Ada95/samples/sample-curses_demo-mouse.ads +++ b/Ada95/samples/sample-curses_demo-mouse.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Curses_Demo.Mouse is diff --git a/Ada95/samples/sample-curses_demo.adb b/Ada95/samples/sample-curses_demo.adb index 0c708551..60965f96 100644 --- a/Ada95/samples/sample-curses_demo.adb +++ b/Ada95/samples/sample-curses_demo.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.10 $ +-- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-curses_demo.ads b/Ada95/samples/sample-curses_demo.ads index 32d2bb0b..d90da475 100644 --- a/Ada95/samples/sample-curses_demo.ads +++ b/Ada95/samples/sample-curses_demo.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Curses_Demo is diff --git a/Ada95/samples/sample-explanation.adb b/Ada95/samples/sample-explanation.adb index 8701925d..96978183 100644 --- a/Ada95/samples/sample-explanation.adb +++ b/Ada95/samples/sample-explanation.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.12 $ +-- $Revision: 1.14 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- Poor mans help system. This scans a sequential file for key lines and @@ -317,7 +318,7 @@ package body Sample.Explanation is Reset (F); Outer : loop - exit when not Next_Line; + exit Outer when not Next_Line; if Last = (1 + Key'Length) and then Key = Buffer (2 .. Last) and then Buffer (1) = '#' then loop diff --git a/Ada95/samples/sample-explanation.ads b/Ada95/samples/sample-explanation.ads index 24a0e177..50ec3fb0 100644 --- a/Ada95/samples/sample-explanation.ads +++ b/Ada95/samples/sample-explanation.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- Poor mans help system. This scans a sequential file for key lines and diff --git a/Ada95/samples/sample-form_demo-aux.adb b/Ada95/samples/sample-form_demo-aux.adb index 06a03b88..c7874df3 100644 --- a/Ada95/samples/sample-form_demo-aux.adb +++ b/Ada95/samples/sample-form_demo-aux.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.11 $ +-- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; diff --git a/Ada95/samples/sample-form_demo-aux.ads b/Ada95/samples/sample-form_demo-aux.ads index 69ff2c15..99334eaa 100644 --- a/Ada95/samples/sample-form_demo-aux.ads +++ b/Ada95/samples/sample-form_demo-aux.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-form_demo-handler.adb b/Ada95/samples/sample-form_demo-handler.adb index a3a17d4a..4cf1fab3 100644 --- a/Ada95/samples/sample-form_demo-handler.adb +++ b/Ada95/samples/sample-form_demo-handler.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Sample.Form_Demo.Aux; diff --git a/Ada95/samples/sample-form_demo-handler.ads b/Ada95/samples/sample-form_demo-handler.ads index 07c2940e..912a6bf2 100644 --- a/Ada95/samples/sample-form_demo-handler.ads +++ b/Ada95/samples/sample-form_demo-handler.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-form_demo.adb b/Ada95/samples/sample-form_demo.adb index b8548bfc..ff779c6d 100644 --- a/Ada95/samples/sample-form_demo.adb +++ b/Ada95/samples/sample-form_demo.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-form_demo.ads b/Ada95/samples/sample-form_demo.ads index 1ef37964..b9ebed6c 100644 --- a/Ada95/samples/sample-form_demo.ads +++ b/Ada95/samples/sample-form_demo.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Form_Demo is diff --git a/Ada95/samples/sample-function_key_setting.adb b/Ada95/samples/sample-function_key_setting.adb index 94d22a6d..8009ab62 100644 --- a/Ada95/samples/sample-function_key_setting.adb +++ b/Ada95/samples/sample-function_key_setting.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Unchecked_Deallocation; diff --git a/Ada95/samples/sample-function_key_setting.ads b/Ada95/samples/sample-function_key_setting.ads index e9db6cd0..fb56b21d 100644 --- a/Ada95/samples/sample-function_key_setting.ads +++ b/Ada95/samples/sample-function_key_setting.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-header_handler.adb b/Ada95/samples/sample-header_handler.adb index c299c79f..78bb76d0 100644 --- a/Ada95/samples/sample-header_handler.adb +++ b/Ada95/samples/sample-header_handler.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Calendar; use Ada.Calendar; diff --git a/Ada95/samples/sample-header_handler.ads b/Ada95/samples/sample-header_handler.ads index 7a7c0b98..f3a3314e 100644 --- a/Ada95/samples/sample-header_handler.ads +++ b/Ada95/samples/sample-header_handler.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-helpers.adb b/Ada95/samples/sample-helpers.adb index 9cbc7c12..8942921c 100644 --- a/Ada95/samples/sample-helpers.adb +++ b/Ada95/samples/sample-helpers.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-helpers.ads b/Ada95/samples/sample-helpers.ads index 36ca4075..c8ee9cb6 100644 --- a/Ada95/samples/sample-helpers.ads +++ b/Ada95/samples/sample-helpers.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-keyboard_handler.adb b/Ada95/samples/sample-keyboard_handler.adb index 062a676b..92b9ccd4 100644 --- a/Ada95/samples/sample-keyboard_handler.adb +++ b/Ada95/samples/sample-keyboard_handler.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Strings; use Ada.Strings; diff --git a/Ada95/samples/sample-keyboard_handler.ads b/Ada95/samples/sample-keyboard_handler.ads index 454c934b..be9f8f8c 100644 --- a/Ada95/samples/sample-keyboard_handler.ads +++ b/Ada95/samples/sample-keyboard_handler.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-manifest.ads b/Ada95/samples/sample-manifest.ads index 6ac180cf..5422ef91 100644 --- a/Ada95/samples/sample-manifest.ads +++ b/Ada95/samples/sample-manifest.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-menu_demo-aux.adb b/Ada95/samples/sample-menu_demo-aux.adb index f1363d80..9b428813 100644 --- a/Ada95/samples/sample-menu_demo-aux.adb +++ b/Ada95/samples/sample-menu_demo-aux.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Characters.Latin_1; use Ada.Characters.Latin_1; diff --git a/Ada95/samples/sample-menu_demo-aux.ads b/Ada95/samples/sample-menu_demo-aux.ads index d1211985..5171aebb 100644 --- a/Ada95/samples/sample-menu_demo-aux.ads +++ b/Ada95/samples/sample-menu_demo-aux.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-menu_demo-handler.adb b/Ada95/samples/sample-menu_demo-handler.adb index e7b1bf8a..b203cc24 100644 --- a/Ada95/samples/sample-menu_demo-handler.adb +++ b/Ada95/samples/sample-menu_demo-handler.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.10 $ +-- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Sample.Menu_Demo.Aux; diff --git a/Ada95/samples/sample-menu_demo-handler.ads b/Ada95/samples/sample-menu_demo-handler.ads index bb31639d..d1b7cde4 100644 --- a/Ada95/samples/sample-menu_demo-handler.ads +++ b/Ada95/samples/sample-menu_demo-handler.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-menu_demo.adb b/Ada95/samples/sample-menu_demo.adb index 640c25cb..8793db24 100644 --- a/Ada95/samples/sample-menu_demo.adb +++ b/Ada95/samples/sample-menu_demo.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.11 $ +-- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses; use Terminal_Interface.Curses; diff --git a/Ada95/samples/sample-menu_demo.ads b/Ada95/samples/sample-menu_demo.ads index dda0180f..40b1e922 100644 --- a/Ada95/samples/sample-menu_demo.ads +++ b/Ada95/samples/sample-menu_demo.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Menu_Demo is diff --git a/Ada95/samples/sample-my_field_type.adb b/Ada95/samples/sample-my_field_type.adb index 11e42268..15c55e95 100644 --- a/Ada95/samples/sample-my_field_type.adb +++ b/Ada95/samples/sample-my_field_type.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Forms; use Terminal_Interface.Curses.Forms; diff --git a/Ada95/samples/sample-my_field_type.ads b/Ada95/samples/sample-my_field_type.ads index 0fac5e39..78665039 100644 --- a/Ada95/samples/sample-my_field_type.ads +++ b/Ada95/samples/sample-my_field_type.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Forms; use Terminal_Interface.Curses.Forms; diff --git a/Ada95/samples/sample-text_io_demo.adb b/Ada95/samples/sample-text_io_demo.adb index 158b9358..0cd370eb 100644 --- a/Ada95/samples/sample-text_io_demo.adb +++ b/Ada95/samples/sample-text_io_demo.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Numerics.Generic_Elementary_Functions; diff --git a/Ada95/samples/sample-text_io_demo.ads b/Ada95/samples/sample-text_io_demo.ads index 5c31c7bb..e35ce102 100644 --- a/Ada95/samples/sample-text_io_demo.ads +++ b/Ada95/samples/sample-text_io_demo.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample.Text_IO_Demo is diff --git a/Ada95/samples/sample.adb b/Ada95/samples/sample.adb index 3544b097..0e445568 100644 --- a/Ada95/samples/sample.adb +++ b/Ada95/samples/sample.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.12 $ +-- $Revision: 1.13 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Text_IO; diff --git a/Ada95/samples/sample.ads b/Ada95/samples/sample.ads index d438f74a..588c2114 100644 --- a/Ada95/samples/sample.ads +++ b/Ada95/samples/sample.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Sample is diff --git a/Ada95/samples/status.adb b/Ada95/samples/status.adb index 8e4cd423..e81355ea 100644 --- a/Ada95/samples/status.adb +++ b/Ada95/samples/status.adb @@ -33,9 +33,11 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Laurent Pautet +-- Modified by: Juergen Pfeifer, 1997 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.5 $ +-- $Revision: 1.6 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- This package has been contributed by Laurent Pautet -- diff --git a/Ada95/samples/status.ads b/Ada95/samples/status.ads index 600b2123..e34c95c4 100644 --- a/Ada95/samples/status.ads +++ b/Ada95/samples/status.ads @@ -33,9 +33,11 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Laurent Pautet +-- Modified by: Juergen Pfeifer, 1997 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- This package has been contributed by Laurent Pautet -- diff --git a/Ada95/samples/tour.adb b/Ada95/samples/tour.adb index 60a3d0ae..b2cc6cfe 100644 --- a/Ada95/samples/tour.adb +++ b/Ada95/samples/tour.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Sample; use Sample; diff --git a/Ada95/samples/tour.ads b/Ada95/samples/tour.ads index 2675e30d..b0a81c8e 100644 --- a/Ada95/samples/tour.ads +++ b/Ada95/samples/tour.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ procedure Tour; diff --git a/Ada95/src/Makefile.in b/Ada95/src/Makefile.in index d0069973..a9c70817 100644 --- a/Ada95/src/Makefile.in +++ b/Ada95/src/Makefile.in @@ -26,10 +26,11 @@ # authorization. # ############################################################################## # -# Author: Juergen Pfeifer 1996 +# Author: Juergen Pfeifer, 1996 +# Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en # # Version Control -# $Revision: 1.22 $ +# $Revision: 1.26 $ # .SUFFIXES: @@ -72,6 +73,7 @@ LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@ RANLIB = @RANLIB@ ################################################################################ ADA = @cf_ada_compiler@ +ADAPREP = gnatprep ADAFLAGS = @ADAFLAGS@ -I. -I$(srcdir) ADAMAKE = @cf_ada_make@ @@ -86,6 +88,10 @@ ABASE = $(ALIB)-curses LIBALIS=$(ALIB).ali \ $(ABASE)-aux.ali \ $(ABASE).ali \ + $(ABASE)-terminfo.ali \ + $(ABASE)-termcap.ali \ + $(ABASE)-putwin.ali \ + $(ABASE)-trace.ali \ $(ABASE)-mouse.ali \ $(ABASE)-panels.ali \ $(ABASE)-menus.ali \ @@ -122,6 +128,10 @@ GENALIS=$(ABASE)-menus-menu_user_data.ali \ 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 \ @@ -182,7 +192,7 @@ mostlyclean :: rm -f *.o *.ali b_t*.* *.s $(PROGS) a.out core b_*_test.c *.xr[bs] *.a clean :: mostlyclean - rm -f $(LIBALIS) $(GENALIS) $(LIBOBJS) $(GENOBJS) + rm -f $(LIBALIS) $(GENALIS) $(LIBOBJS) $(GENOBJS) $(ABASE)-trace.adb distclean :: clean rm -f Makefile @@ -203,6 +213,34 @@ $(ABASE).o: $(srcdir)/$(ABASE).adb $(BASEDEPS) $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE).adb +$(ABASE)-terminfo.o: \ + $(ABASE)-terminfo.ads \ + $(srcdir)/$(ABASE)-terminfo.adb $(BASEDEPS) + $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-terminfo.adb + + +$(ABASE)-termcap.o: \ + $(ABASE)-termcap.ads \ + $(srcdir)/$(ABASE)-termcap.adb $(BASEDEPS) + $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-termcap.adb + + +$(ABASE)-putwin.o: \ + $(ABASE)-putwin.ads \ + $(srcdir)/$(ABASE)-putwin.adb $(BASEDEPS) + $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-putwin.adb + + +$(ABASE)-trace.adb : $(srcdir)/$(ABASE)-trace.adb_p + rm -f $@ + $(ADAPREP) -DADA_TRACE=@ADA_TRACE@ $(srcdir)/$(ABASE)-trace.adb_p $@ + +$(ABASE)-trace.o: \ + $(ABASE)-trace.ads \ + $(ABASE)-trace.adb $(BASEDEPS) + $(ADA) $(ADAFLAGS) -c -o $@ $(ABASE)-trace.adb + + $(ABASE)-mouse.o: \ $(ABASE)-mouse.ads \ $(srcdir)/$(ABASE)-mouse.adb $(BASEDEPS) diff --git a/Ada95/src/terminal_interface-curses-aux.adb b/Ada95/src/terminal_interface-curses-aux.adb index 2e974c4a..bcf83875 100644 --- a/Ada95/src/terminal_interface-curses-aux.adb +++ b/Ada95/src/terminal_interface-curses-aux.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package body Terminal_Interface.Curses.Aux is diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-alpha.adb b/Ada95/src/terminal_interface-curses-forms-field_types-alpha.adb index 1cbf1782..bd42d3f9 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-alpha.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_types-alpha.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.6 $ +-- $Revision: 1.7 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-alpha.ads b/Ada95/src/terminal_interface-curses-forms-field_types-alpha.ads index d5281e6d..f4eadf9e 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-alpha.ads +++ b/Ada95/src/terminal_interface-curses-forms-field_types-alpha.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.Alpha is diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.adb b/Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.adb index 2e82305e..2f2d44d4 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.6 $ +-- $Revision: 1.7 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.ads b/Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.ads index 209117b3..4e165fea 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.ads +++ b/Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric is diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.adb b/Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.adb index d4f376dd..89972d4f 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.5 $ +-- $Revision: 1.6 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Characters.Handling; use Ada.Characters.Handling; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.ads b/Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.ads index 870a3a46..7bff22f4 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.ads +++ b/Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-enumeration.adb b/Ada95/src/terminal_interface-curses-forms-field_types-enumeration.adb index c4286af0..d0273294 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-enumeration.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_types-enumeration.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.5 $ +-- $Revision: 1.6 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Unchecked_Deallocation; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-enumeration.ads b/Ada95/src/terminal_interface-curses-forms-field_types-enumeration.ads index 04b0bfe8..b9c1b00d 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-enumeration.ads +++ b/Ada95/src/terminal_interface-curses-forms-field_types-enumeration.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C.Strings; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-intfield.adb b/Ada95/src/terminal_interface-curses-forms-field_types-intfield.adb index 077ba321..621f4c7c 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-intfield.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_types-intfield.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.6 $ +-- $Revision: 1.7 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-intfield.ads b/Ada95/src/terminal_interface-curses-forms-field_types-intfield.ads index edef251c..75652cc4 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-intfield.ads +++ b/Ada95/src/terminal_interface-curses-forms-field_types-intfield.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.IntField is diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.adb b/Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.adb index 263e50e2..60a403bc 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.6 $ +-- $Revision: 1.7 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.ads b/Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.ads index 63a1bbfb..11398c06 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.ads +++ b/Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address is diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-numeric.adb b/Ada95/src/terminal_interface-curses-forms-field_types-numeric.adb index 0e2d5c2f..bd3daf26 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-numeric.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_types-numeric.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.7 $ +-- $Revision: 1.8 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-numeric.ads b/Ada95/src/terminal_interface-curses-forms-field_types-numeric.ads index d5f126b6..cbb6b00c 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-numeric.ads +++ b/Ada95/src/terminal_interface-curses-forms-field_types-numeric.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.Numeric is diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-regexp.adb b/Ada95/src/terminal_interface-curses-forms-field_types-regexp.adb index a9b4984a..a699f0af 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-regexp.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_types-regexp.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.6 $ +-- $Revision: 1.7 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; use Interfaces.C; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-regexp.ads b/Ada95/src/terminal_interface-curses-forms-field_types-regexp.ads index af192938..635f37ba 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-regexp.ads +++ b/Ada95/src/terminal_interface-curses-forms-field_types-regexp.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface.Curses.Forms.Field_Types.RegExp is diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-user-choice.adb b/Ada95/src/terminal_interface-curses-forms-field_types-user-choice.adb index cd9cd3db..2d8f60c0 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-user-choice.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_types-user-choice.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Unchecked_Conversion; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-user-choice.ads b/Ada95/src/terminal_interface-curses-forms-field_types-user-choice.ads index f8523071..c9a2abd5 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-user-choice.ads +++ b/Ada95/src/terminal_interface-curses-forms-field_types-user-choice.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-user.adb b/Ada95/src/terminal_interface-curses-forms-field_types-user.adb index aa923c4d..5f82b098 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-user.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_types-user.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Unchecked_Conversion; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types-user.ads b/Ada95/src/terminal_interface-curses-forms-field_types-user.ads index f93a904f..4cca2a4d 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types-user.ads +++ b/Ada95/src/terminal_interface-curses-forms-field_types-user.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; diff --git a/Ada95/src/terminal_interface-curses-forms-field_types.adb b/Ada95/src/terminal_interface-curses-forms-field_types.adb index dccaf9d2..7b83be65 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_types.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_types.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.12 $ +-- $Revision: 1.13 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; diff --git a/Ada95/src/terminal_interface-curses-forms-field_user_data.adb b/Ada95/src/terminal_interface-curses-forms-field_user_data.adb index 711cfbba..04b09660 100644 --- a/Ada95/src/terminal_interface-curses-forms-field_user_data.adb +++ b/Ada95/src/terminal_interface-curses-forms-field_user_data.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.10 $ +-- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; diff --git a/Ada95/src/terminal_interface-curses-forms-form_user_data.adb b/Ada95/src/terminal_interface-curses-forms-form_user_data.adb index b6fff13c..3b897faa 100644 --- a/Ada95/src/terminal_interface-curses-forms-form_user_data.adb +++ b/Ada95/src/terminal_interface-curses-forms-form_user_data.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.10 $ +-- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ -- | diff --git a/Ada95/src/terminal_interface-curses-forms.adb b/Ada95/src/terminal_interface-curses-forms.adb index 669ac5f3..b9be41a8 100644 --- a/Ada95/src/terminal_interface-curses-forms.adb +++ b/Ada95/src/terminal_interface-curses-forms.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.20 $ +-- $Revision: 1.21 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Unchecked_Deallocation; diff --git a/Ada95/src/terminal_interface-curses-menus-item_user_data.adb b/Ada95/src/terminal_interface-curses-menus-item_user_data.adb index 98a22a5f..56199d10 100644 --- a/Ada95/src/terminal_interface-curses-menus-item_user_data.adb +++ b/Ada95/src/terminal_interface-curses-menus-item_user_data.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; diff --git a/Ada95/src/terminal_interface-curses-menus-menu_user_data.adb b/Ada95/src/terminal_interface-curses-menus-menu_user_data.adb index 00670dd3..83a3f95e 100644 --- a/Ada95/src/terminal_interface-curses-menus-menu_user_data.adb +++ b/Ada95/src/terminal_interface-curses-menus-menu_user_data.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.10 $ +-- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; diff --git a/Ada95/src/terminal_interface-curses-menus.adb b/Ada95/src/terminal_interface-curses-menus.adb index 92ae0f9c..87097ce1 100644 --- a/Ada95/src/terminal_interface-curses-menus.adb +++ b/Ada95/src/terminal_interface-curses-menus.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.20 $ +-- $Revision: 1.21 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Unchecked_Deallocation; diff --git a/Ada95/src/terminal_interface-curses-mouse.adb b/Ada95/src/terminal_interface-curses-mouse.adb index 8a7499ac..c2b52a05 100644 --- a/Ada95/src/terminal_interface-curses-mouse.adb +++ b/Ada95/src/terminal_interface-curses-mouse.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.16 $ +-- $Revision: 1.17 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System; diff --git a/Ada95/src/terminal_interface-curses-panels-user_data.adb b/Ada95/src/terminal_interface-curses-panels-user_data.adb index c5658c50..fb2c9546 100644 --- a/Ada95/src/terminal_interface-curses-panels-user_data.adb +++ b/Ada95/src/terminal_interface-curses-panels-user_data.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Interfaces.C; diff --git a/Ada95/src/terminal_interface-curses-panels.adb b/Ada95/src/terminal_interface-curses-panels.adb index 5d42226a..f0d246ad 100644 --- a/Ada95/src/terminal_interface-curses-panels.adb +++ b/Ada95/src/terminal_interface-curses-panels.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; diff --git a/Ada95/src/terminal_interface-curses-putwin.adb b/Ada95/src/terminal_interface-curses-putwin.adb new file mode 100644 index 00000000..545ccaa0 --- /dev/null +++ b/Ada95/src/terminal_interface-curses-putwin.adb @@ -0,0 +1,78 @@ +------------------------------------------------------------------------------ +-- -- +-- 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 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en +-- Version Control: +-- $Revision: 1.2 $ +-- 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; diff --git a/Ada95/src/terminal_interface-curses-putwin.ads b/Ada95/src/terminal_interface-curses-putwin.ads new file mode 100644 index 00000000..94220789 --- /dev/null +++ b/Ada95/src/terminal_interface-curses-putwin.ads @@ -0,0 +1,51 @@ +------------------------------------------------------------------------------ +-- -- +-- 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 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en +-- Version Control: +-- $Revision: 1.2 $ +-- 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; diff --git a/Ada95/src/terminal_interface-curses-termcap.adb b/Ada95/src/terminal_interface-curses-termcap.adb new file mode 100644 index 00000000..732a3fd6 --- /dev/null +++ b/Ada95/src/terminal_interface-curses-termcap.adb @@ -0,0 +1,164 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT ncurses Binding -- +-- -- +-- Terminal_Interface.Curses.Termcap -- +-- -- +-- 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 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en +-- Version Control: +-- $Revision: 1.4 $ +-- 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 : 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 : in 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 : t := (0 => 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 : t := (0 => 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; diff --git a/Ada95/src/terminal_interface-curses-termcap.ads b/Ada95/src/terminal_interface-curses-termcap.ads new file mode 100644 index 00000000..189891ff --- /dev/null +++ b/Ada95/src/terminal_interface-curses-termcap.ads @@ -0,0 +1,81 @@ +------------------------------------------------------------------------------ +-- -- +-- 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 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en +-- Version Control: +-- $Revision: 1.2 $ +-- 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; diff --git a/Ada95/src/terminal_interface-curses-terminfo.adb b/Ada95/src/terminal_interface-curses-terminfo.adb new file mode 100644 index 00000000..25a8eb0a --- /dev/null +++ b/Ada95/src/terminal_interface-curses-terminfo.adb @@ -0,0 +1,162 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT ncurses Binding -- +-- -- +-- Terminal_Interface.Curses.Terminfo -- +-- -- +-- 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 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en +-- Version Control: +-- $Revision: 1.2 $ +-- 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 : in chars_ptr) return Boolean; + + function Is_MinusOne_Pointer (P : in 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; diff --git a/Ada95/src/terminal_interface-curses-terminfo.ads b/Ada95/src/terminal_interface-curses-terminfo.ads new file mode 100644 index 00000000..ced5d4ea --- /dev/null +++ b/Ada95/src/terminal_interface-curses-terminfo.ads @@ -0,0 +1,82 @@ +------------------------------------------------------------------------------ +-- -- +-- 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 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en +-- Version Control: +-- $Revision: 1.2 $ +-- 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; diff --git a/Ada95/src/terminal_interface-curses-text_io-aux.adb b/Ada95/src/terminal_interface-curses-text_io-aux.adb index 812f6622..d7fff5bb 100644 --- a/Ada95/src/terminal_interface-curses-text_io-aux.adb +++ b/Ada95/src/terminal_interface-curses-text_io-aux.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package body Terminal_Interface.Curses.Text_IO.Aux is diff --git a/Ada95/src/terminal_interface-curses-text_io-aux.ads b/Ada95/src/terminal_interface-curses-text_io-aux.ads index 63a741fd..eaa68cb2 100644 --- a/Ada95/src/terminal_interface-curses-text_io-aux.ads +++ b/Ada95/src/terminal_interface-curses-text_io-aux.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.10 $ +-- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ private package Terminal_Interface.Curses.Text_IO.Aux is diff --git a/Ada95/src/terminal_interface-curses-text_io-complex_io.adb b/Ada95/src/terminal_interface-curses-text_io-complex_io.adb index a804ec65..4eb6a6d7 100644 --- a/Ada95/src/terminal_interface-curses-text_io-complex_io.adb +++ b/Ada95/src/terminal_interface-curses-text_io-complex_io.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Terminal_Interface.Curses.Text_IO.Float_IO; diff --git a/Ada95/src/terminal_interface-curses-text_io-complex_io.ads b/Ada95/src/terminal_interface-curses-text_io-complex_io.ads index 47146266..64a84908 100644 --- a/Ada95/src/terminal_interface-curses-text_io-complex_io.ads +++ b/Ada95/src/terminal_interface-curses-text_io-complex_io.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Numerics.Generic_Complex_Types; diff --git a/Ada95/src/terminal_interface-curses-text_io-decimal_io.adb b/Ada95/src/terminal_interface-curses-text_io-decimal_io.adb index d70a73f1..d3a70dda 100644 --- a/Ada95/src/terminal_interface-curses-text_io-decimal_io.adb +++ b/Ada95/src/terminal_interface-curses-text_io-decimal_io.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; diff --git a/Ada95/src/terminal_interface-curses-text_io-decimal_io.ads b/Ada95/src/terminal_interface-curses-text_io-decimal_io.ads index 60ac66b7..2b76feed 100644 --- a/Ada95/src/terminal_interface-curses-text_io-decimal_io.ads +++ b/Ada95/src/terminal_interface-curses-text_io-decimal_io.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic diff --git a/Ada95/src/terminal_interface-curses-text_io-enumeration_io.adb b/Ada95/src/terminal_interface-curses-text_io-enumeration_io.adb index 7abeffe7..4ad47043 100644 --- a/Ada95/src/terminal_interface-curses-text_io-enumeration_io.adb +++ b/Ada95/src/terminal_interface-curses-text_io-enumeration_io.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; diff --git a/Ada95/src/terminal_interface-curses-text_io-enumeration_io.ads b/Ada95/src/terminal_interface-curses-text_io-enumeration_io.ads index 3c13424c..2bcee123 100644 --- a/Ada95/src/terminal_interface-curses-text_io-enumeration_io.ads +++ b/Ada95/src/terminal_interface-curses-text_io-enumeration_io.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic diff --git a/Ada95/src/terminal_interface-curses-text_io-fixed_io.adb b/Ada95/src/terminal_interface-curses-text_io-fixed_io.adb index 760acb2b..493450a7 100644 --- a/Ada95/src/terminal_interface-curses-text_io-fixed_io.adb +++ b/Ada95/src/terminal_interface-curses-text_io-fixed_io.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; diff --git a/Ada95/src/terminal_interface-curses-text_io-fixed_io.ads b/Ada95/src/terminal_interface-curses-text_io-fixed_io.ads index 77f5743f..6ca314dc 100644 --- a/Ada95/src/terminal_interface-curses-text_io-fixed_io.ads +++ b/Ada95/src/terminal_interface-curses-text_io-fixed_io.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic diff --git a/Ada95/src/terminal_interface-curses-text_io-float_io.adb b/Ada95/src/terminal_interface-curses-text_io-float_io.adb index 47fe94a1..ee3cb224 100644 --- a/Ada95/src/terminal_interface-curses-text_io-float_io.adb +++ b/Ada95/src/terminal_interface-curses-text_io-float_io.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; diff --git a/Ada95/src/terminal_interface-curses-text_io-float_io.ads b/Ada95/src/terminal_interface-curses-text_io-float_io.ads index e46170e6..35d47b80 100644 --- a/Ada95/src/terminal_interface-curses-text_io-float_io.ads +++ b/Ada95/src/terminal_interface-curses-text_io-float_io.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic diff --git a/Ada95/src/terminal_interface-curses-text_io-integer_io.adb b/Ada95/src/terminal_interface-curses-text_io-integer_io.adb index 43d03a9f..fee7e0eb 100644 --- a/Ada95/src/terminal_interface-curses-text_io-integer_io.adb +++ b/Ada95/src/terminal_interface-curses-text_io-integer_io.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; diff --git a/Ada95/src/terminal_interface-curses-text_io-integer_io.ads b/Ada95/src/terminal_interface-curses-text_io-integer_io.ads index cd3b01b5..ba6cb145 100644 --- a/Ada95/src/terminal_interface-curses-text_io-integer_io.ads +++ b/Ada95/src/terminal_interface-curses-text_io-integer_io.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic diff --git a/Ada95/src/terminal_interface-curses-text_io-modular_io.adb b/Ada95/src/terminal_interface-curses-text_io-modular_io.adb index 75bd624a..0d107aa1 100644 --- a/Ada95/src/terminal_interface-curses-text_io-modular_io.adb +++ b/Ada95/src/terminal_interface-curses-text_io-modular_io.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.8 $ +-- $Revision: 1.9 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; diff --git a/Ada95/src/terminal_interface-curses-text_io-modular_io.ads b/Ada95/src/terminal_interface-curses-text_io-modular_io.ads index 32920775..a539ac61 100644 --- a/Ada95/src/terminal_interface-curses-text_io-modular_io.ads +++ b/Ada95/src/terminal_interface-curses-text_io-modular_io.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.9 $ +-- $Revision: 1.10 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ generic diff --git a/Ada95/src/terminal_interface-curses-text_io.adb b/Ada95/src/terminal_interface-curses-text_io.adb index cf7614b4..01076921 100644 --- a/Ada95/src/terminal_interface-curses-text_io.adb +++ b/Ada95/src/terminal_interface-curses-text_io.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.12 $ +-- $Revision: 1.13 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package body Terminal_Interface.Curses.Text_IO is diff --git a/Ada95/src/terminal_interface-curses-text_io.ads b/Ada95/src/terminal_interface-curses-text_io.ads index 02c3b7d5..d5192248 100644 --- a/Ada95/src/terminal_interface-curses-text_io.ads +++ b/Ada95/src/terminal_interface-curses-text_io.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.11 $ +-- $Revision: 1.12 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with Ada.Text_IO; diff --git a/Ada95/src/terminal_interface-curses-trace.adb_p b/Ada95/src/terminal_interface-curses-trace.adb_p new file mode 100644 index 00000000..a61ef4d4 --- /dev/null +++ b/Ada95/src/terminal_interface-curses-trace.adb_p @@ -0,0 +1,92 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT ncurses Binding -- +-- -- +-- Terminal_Interface.Curses.Trace -- +-- -- +-- 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 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en +-- Version Control: +-- $Revision: 1.3 $ +-- Binding Version 01.00 +------------------------------------------------------------------------------ +#if ADA_TRACE then +with Interfaces.C; use Interfaces.C; +with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux; +with Ada.Unchecked_Conversion; +#end if; + +package body Terminal_Interface.Curses.Trace is + +#if ADA_TRACE then + type C_TraceType is new C_UInt; + + function TraceAda_To_TraceC is new + Ada.Unchecked_Conversion (Source => Trace_Attribute_Set, + Target => C_TraceType); + + procedure Trace_On (x : Trace_Attribute_Set) is + procedure traceC (y : C_TraceType); + pragma Import (C, traceC, "trace"); + begin + traceC (TraceAda_To_TraceC (x)); + end Trace_On; + + -- 75. (12) A C function that takes a variable number of arguments can + -- correspond to several Ada subprograms, taking various specific + -- numbers and types of parameters. + + procedure Trace_Put (str : String) is + procedure tracef (format : char_array; s : char_array); + pragma Import (C, tracef, "_tracef"); + Txt : char_array (0 .. str'Length); + Length : size_t; + formatstr : constant String := "%s" & ASCII.Nul; + formattxt : char_array (0 .. formatstr'Length); + begin + To_C (formatstr, formattxt, Length); + To_C (str, Txt, Length); + tracef (formattxt, Txt); + end Trace_Put; +#else + procedure Trace_On (x : Trace_Attribute_Set) is + begin + null; + end Trace_On; + + procedure Trace_Put (str : String) is + begin + null; + end Trace_Put; +#end if; + +end Terminal_Interface.Curses.Trace; diff --git a/Ada95/src/terminal_interface-curses.adb b/Ada95/src/terminal_interface-curses.adb index 698f1c65..f196f3b5 100644 --- a/Ada95/src/terminal_interface-curses.adb +++ b/Ada95/src/terminal_interface-curses.adb @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.26 $ +-- $Revision: 1.28 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ with System; @@ -89,6 +90,27 @@ package body Terminal_Interface.Curses is function W_Get_Short is new W_Get_Element (C_Short); function W_Get_Byte is new W_Get_Element (Interfaces.C.unsigned_char); + function Get_Flag (Win : Window; + Offset : Natural) return Boolean; + + function Get_Flag (Win : Window; + Offset : Natural) return Boolean + is + Res : C_Int; + begin + case Sizeof_bool is + when 1 => Res := C_Int (W_Get_Byte (Win, Offset)); + when 2 => Res := C_Int (W_Get_Short (Win, Offset)); + when 4 => Res := C_Int (W_Get_Int (Win, Offset)); + when others => raise Curses_Exception; + end case; + + case Res is + when 0 => return False; + when others => return True; + end case; + end Get_Flag; + ------------------------------------------------------------------------------ function Key_Name (Key : in Real_Key_Code) return String is @@ -404,9 +426,8 @@ package body Terminal_Interface.Curses is Str : in String; Len : in Integer := -1) is - type Char_Ptr is access all Interfaces.C.char; function Waddnstr (Win : Window; - Str : Char_Ptr; + Str : char_array; Len : C_Int := -1) return C_Int; pragma Import (C, Waddnstr, "waddnstr"); @@ -414,7 +435,7 @@ package body Terminal_Interface.Curses is Length : size_t; begin To_C (Str, Txt, Length); - if Waddnstr (Win, Txt (Txt'First)'Access, C_Int (Len)) = Curses_Err then + if Waddnstr (Win, Txt, C_Int (Len)) = Curses_Err then raise Curses_Exception; end if; end Add; @@ -436,9 +457,8 @@ package body Terminal_Interface.Curses is Str : in Attributed_String; Len : in Integer := -1) is - type Chtype_Ptr is access all Attributed_Character; function Waddchnstr (Win : Window; - Str : Chtype_Ptr; + Str : chtype_array; Len : C_Int := -1) return C_Int; pragma Import (C, Waddchnstr, "waddchnstr"); @@ -449,7 +469,7 @@ package body Terminal_Interface.Curses is end loop; Txt (Str'Length) := Default_Character; if Waddchnstr (Win, - Txt (Txt'First)'Access, + Txt, C_Int (Len)) = Curses_Err then raise Curses_Exception; end if; @@ -616,6 +636,26 @@ package body Terminal_Interface.Curses is 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 : in Window := Standard_Window; Attr : in Character_Attribute_Set := Normal_Video; @@ -858,6 +898,13 @@ package body Terminal_Interface.Curses is end if; end Set_KeyPad_Mode; + function Get_KeyPad_Mode (Win : in Window := Standard_Window) + return Boolean + is + begin + return Get_Flag (Win, Offset_use_keypad); + end Get_KeyPad_Mode; + procedure Half_Delay (Amount : in Half_Delay_Amount) is function Halfdelay (Amount : C_Int) return C_Int; @@ -1036,21 +1083,11 @@ package body Terminal_Interface.Curses is end if; end Allow_Scrolling; - function Scrolling_Allowed (Win : Window := Standard_Window) return Boolean + function Scrolling_Allowed (Win : Window := Standard_Window) + return Boolean is - Res : C_Int; begin - case Sizeof_bool is - when 1 => Res := C_Int (W_Get_Byte (Win, Offset_scroll)); - when 2 => Res := C_Int (W_Get_Short (Win, Offset_scroll)); - when 4 => Res := C_Int (W_Get_Int (Win, Offset_scroll)); - when others => raise Curses_Exception; - end case; - - case Res is - when 0 => return False; - when others => return True; - end case; + return Get_Flag (Win, Offset_scroll); end Scrolling_Allowed; procedure Set_Scroll_Region @@ -1636,9 +1673,8 @@ package body Terminal_Interface.Curses is Str : in String; Len : in Integer := -1) is - type Char_Ptr is access all Interfaces.C.char; function Winsnstr (Win : Window; - Str : Char_Ptr; + Str : char_array; Len : Integer := -1) return C_Int; pragma Import (C, Winsnstr, "winsnstr"); @@ -1646,7 +1682,7 @@ package body Terminal_Interface.Curses is Length : size_t; begin To_C (Str, Txt, Length); - if Winsnstr (Win, Txt (Txt'First)'Access, Len) = Curses_Err then + if Winsnstr (Win, Txt, Len) = Curses_Err then raise Curses_Exception; end if; end Insert; @@ -1658,11 +1694,10 @@ package body Terminal_Interface.Curses is Str : in String; Len : in Integer := -1) is - type Char_Ptr is access all Interfaces.C.char; function Mvwinsnstr (Win : Window; Line : C_Int; Column : C_Int; - Str : Char_Ptr; + Str : char_array; Len : C_Int) return C_Int; pragma Import (C, Mvwinsnstr, "mvwinsnstr"); @@ -1670,8 +1705,7 @@ package body Terminal_Interface.Curses is Length : size_t; begin To_C (Str, Txt, Length); - if Mvwinsnstr (Win, C_Int (Line), C_Int (Column), - Txt (Txt'First)'Access, C_Int (Len)) + if Mvwinsnstr (Win, C_Int (Line), C_Int (Column), Txt, C_Int (Len)) = Curses_Err then raise Curses_Exception; end if; @@ -1723,14 +1757,13 @@ package body Terminal_Interface.Curses is Str : out Attributed_String; Len : in Integer := -1) is - type Chtype_Ptr is access all Attributed_Character; function Winchnstr (Win : Window; - Str : Chtype_Ptr; + Str : chtype_array; -- out Len : C_Int) return C_Int; pragma Import (C, Winchnstr, "winchnstr"); N : Integer := Len; - Txt : chtype_array (0 .. Str'Length); + Txt : chtype_array (0 .. Str'Length) := (0 => Default_Character); Cnt : Natural := 0; begin if N < 0 then @@ -1739,7 +1772,7 @@ package body Terminal_Interface.Curses is if N > Str'Length then raise Constraint_Error; end if; - if Winchnstr (Win, Txt (Txt'First)'Access, C_Int (N)) = Curses_Err then + if Winchnstr (Win, Txt, C_Int (N)) = Curses_Err then raise Curses_Exception; end if; for To in Str'Range loop @@ -1823,9 +1856,8 @@ package body Terminal_Interface.Curses is Text : in String; Fmt : in Label_Justification := Left) is - type Char_Ptr is access all Interfaces.C.char; function Slk_Set (Label : C_Int; - Txt : Char_Ptr; + Txt : char_array; Fmt : C_Int) return C_Int; pragma Import (C, Slk_Set, "slk_set"); @@ -1833,10 +1865,8 @@ package body Terminal_Interface.Curses is Len : size_t; begin To_C (Text, Txt, Len); - if Slk_Set (C_Int (Label), - Txt (Txt'First)'Access, - C_Int (Label_Justification'Pos (Fmt))) - = Curses_Err then + 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; @@ -1995,8 +2025,7 @@ package body Terminal_Interface.Curses is procedure Define_Key (Definition : in String; Key : in Special_Key_Code) is - type Char_Ptr is access all Interfaces.C.char; - function Defkey (Def : Char_Ptr; + function Defkey (Def : char_array; Key : C_Int) return C_Int; pragma Import (C, Defkey, "define_key"); @@ -2004,7 +2033,7 @@ package body Terminal_Interface.Curses is Length : size_t; begin To_C (Definition, Txt, Length); - if Defkey (Txt (Txt'First)'Access, C_Int (Key)) = Curses_Err then + if Defkey (Txt, C_Int (Key)) = Curses_Err then raise Curses_Exception; end if; end Define_Key; @@ -2410,5 +2439,123 @@ package body Terminal_Interface.Curses is 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 (Black)); + 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; +------------------------------------------------------------------------------ + 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 : in 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 : in 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 : in 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 : in 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; + diff --git a/Ada95/src/terminal_interface.ads b/Ada95/src/terminal_interface.ads index 89544bb0..c7c0984d 100644 --- a/Ada95/src/terminal_interface.ads +++ b/Ada95/src/terminal_interface.ads @@ -33,9 +33,10 @@ -- sale, use or other dealings in this Software without prior written -- -- authorization. -- ------------------------------------------------------------------------------ --- Author: Juergen Pfeifer 1996 +-- Author: Juergen Pfeifer, 1996 +-- Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en -- Version Control: --- $Revision: 1.10 $ +-- $Revision: 1.11 $ -- Binding Version 01.00 ------------------------------------------------------------------------------ package Terminal_Interface is diff --git a/INSTALL b/INSTALL index 26d57374..a1c56ebb 100644 --- a/INSTALL +++ b/INSTALL @@ -1,4 +1,4 @@ --- $Id: INSTALL,v 1.46 2000/10/14 17:57:02 Johnny.C.Lam Exp $ +-- $Id: INSTALL,v 1.56 2002/09/01 22:42:11 tom Exp $ --------------------------------------------------------------------- How to install Ncurses/Terminfo on your system --------------------------------------------------------------------- @@ -47,7 +47,7 @@ REQUIREMENTS: You will need the following in order to build and install ncurses under UNIX: - * ANSI C compiler (gcc is recommended) + * ANSI C compiler (gcc, for instance) * sh (bash will do) * awk (mawk or gawk will do) * sed @@ -106,6 +106,16 @@ INSTALLATION PROCEDURE: 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 + Linux using libiconv, sometimes requiring libutf8. + If you do not specify any models, the normal and debug libraries will be configured. Typing `configure' with no arguments is equivalent to: @@ -158,6 +168,9 @@ INSTALLATION PROCEDURE: databases are SVr4-compatible, but most seem to be. Exceptions include DEC's Digital Unix (formerly known as OSF/1). + 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). + 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. @@ -189,14 +202,14 @@ INSTALLATION PROCEDURE: 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 - for some bizarre binary-compatibility reason, you'll need to distinguish - between it and ncurses. 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. + 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 BSD curses installed in your system and you accidentally + 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. _waddbytes is one of them. + 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 @@ -221,26 +234,6 @@ INSTALLATION PROCEDURE: 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++. -7. If you're running an older Linux, you must either (a) tell Linux that the - console terminal type is `linux' or (b) make a link to or copy of the - linux entry in the appropriate place under your terminfo directory, named - `console'. All 1.3 and many 1.2 distributions (including Yggdrasil and - Red Hat) already have the console type set to `linux'. - - The way to change the wired-in console type depends on the configuration - of your system. This may involve editing /etc/inittab, /etc/ttytype, - /etc/profile and other such files. - - Warning: this is not for the fainthearted, if you mess up your console - getty entries you can make your system unusable! However, if you are - a distribution maker, this is the right thing to do (see the note for - integrators near the end of this file). - - The easier way is to link or copy l/linux to c/console under your terminfo - directory. Note: this will go away next time you do `make install.data' - and you'll have to redo it. There is no need to have entries for all - possible screen sizes, ncurses will figure out the size automatically. - SUMMARY OF CONFIGURE OPTIONS: ---------------------------- @@ -277,7 +270,9 @@ SUMMARY OF CONFIGURE OPTIONS: 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. + 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-ext-funcs Disable function-extensions. Configure ncurses without the functions @@ -444,13 +439,18 @@ SUMMARY OF CONFIGURE OPTIONS: --enable-widec Compile with experimental wide-character code. This makes a different version of the libraries (e.g., libncursesw.so), which stores - characters in 16-bits. We provide a simple UTF-8 driver and test - program to use this feature with terminals that can display UTF-8. + 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. @@ -464,6 +464,46 @@ SUMMARY OF CONFIGURE OPTIONS: --with-ada-objects=DIR Tell where to install the Ada objects (default: PREFIX/lib/ada/adalib) + --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-cc=XXX + If cross-compiling, specify a host C compiler, which is needed to + compile a few utilties 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. + + --with-build-cppflags=XXX + If cross-compiling, specify the host C preprocesor-flags. You might + need to do this if the target compiler has unusual flags which confuse + the host compiler. + + --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. + + --with-build-libs=XXX + If cross-compiling, the host libraries. You might need to do this if + the target environment requires unusual libraries. + + --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-database=XXX Specify the terminfo source file to install. Usually you will wish to install ncurses' default (misc/terminfo.src). Certain systems @@ -532,6 +572,19 @@ SUMMARY OF CONFIGURE OPTIONS: by running them through tbl to generate tables understandable by nroff. + --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-normal Generate normal (i.e., static) libraries (default). @@ -573,6 +626,10 @@ SUMMARY OF CONFIGURE OPTIONS: (libtinfo). This is done to accommodate applications that use only the latter. The terminfo library is about half the size of the total. + --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) + --without-ada Suppress the configure script's check for Ada95, do not build the Ada95 binding and related demo. @@ -616,6 +673,41 @@ COMPATIBILITY WITH OLDER VERSIONS OF NCURSES: you may encounter when building a system with different versions of ncurses: + 5.3 (pre-release) + 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_rootname() + _nc_trace_ttymode() debug + _nc_varargs() 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: diff --git a/MANIFEST b/MANIFEST index 24368e57..869e3bdb 100644 --- a/MANIFEST +++ b/MANIFEST @@ -18,10 +18,52 @@ ./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.ads.m4 ./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 @@ -95,6 +137,12 @@ ./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 @@ -113,6 +161,7 @@ ./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-curses.adb ./Ada95/src/terminal_interface.ads ./INSTALL @@ -229,6 +278,12 @@ ./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 @@ -247,6 +302,8 @@ ./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__ads.htm @@ -255,28 +312,41 @@ ./doc/html/index.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_mouse.3x.html ./doc/html/man/curs_move.3x.html @@ -407,21 +477,31 @@ ./form/fty_regex.c ./form/headers ./form/llib-lform +./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/headers ./include/nc_alloc.h ./include/nc_panel.h ./include/ncurses_cfg.hin ./include/ncurses_defs +./include/ncurses_dll.h ./include/term_entry.h ./include/termcap.h.in ./include/tic.h @@ -431,28 +511,41 @@ ./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_mouse.3x ./man/curs_move.3x @@ -545,6 +638,7 @@ ./menu/eti.h ./menu/headers ./menu/llib-lmenu +./menu/llib-lmenuw ./menu/m_attribs.c ./menu/m_cursor.c ./menu/m_driver.c @@ -605,6 +699,7 @@ ./mkinstalldirs ./ncurses/Makefile.in ./ncurses/README +./ncurses/README.IZ ./ncurses/SigAction.h ./ncurses/base/MKkeyname.awk ./ncurses/base/MKlib_gen.sh @@ -695,9 +790,11 @@ ./ncurses/curses.priv.h ./ncurses/fifo_defs.h ./ncurses/llib-lncurses +./ncurses/llib-lncursesw ./ncurses/modules ./ncurses/tinfo/MKcaptab.awk ./ncurses/tinfo/MKfallback.sh +./ncurses/tinfo/MKkeys_list.sh ./ncurses/tinfo/MKnames.awk ./ncurses/tinfo/README ./ncurses/tinfo/access.c @@ -715,7 +812,6 @@ ./ncurses/tinfo/getenv_num.c ./ncurses/tinfo/home_terminfo.c ./ncurses/tinfo/init_keytry.c -./ncurses/tinfo/keys.list ./ncurses/tinfo/lib_acs.c ./ncurses/tinfo/lib_baudrate.c ./ncurses/tinfo/lib_cur_term.c @@ -753,6 +849,8 @@ ./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 @@ -763,9 +861,26 @@ ./ncurses/tty/tty_display.h ./ncurses/tty/tty_input.h ./ncurses/tty/tty_update.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_nwstr.c +./ncurses/widechar/lib_ins_wch.c +./ncurses/widechar/lib_inwstr.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 ./panel/Makefile.in ./panel/headers ./panel/llib-lpanel +./panel/llib-lpanelw ./panel/modules ./panel/p_above.c ./panel/p_below.c diff --git a/Makefile.glibc b/Makefile.glibc index 780650a0..2535e9f3 100644 --- a/Makefile.glibc +++ b/Makefile.glibc @@ -219,12 +219,14 @@ libncurses-routines = \ trace/trace_buf \ trace/trace_tries \ trace/trace_xnames \ + trace/varargs \ + trace/visbuf \ tty/hardscroll \ tty/hashmap \ tty/lib_mvcur \ tty/lib_tstp \ - tty/lib_vidattr \ tty/lib_twait \ + tty/lib_vidattr \ tty/tty_update \ unctrl diff --git a/Makefile.in b/Makefile.in index 9489e9fe..7a30d322 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,4 +1,4 @@ -# $Id: Makefile.in,v 1.20 2000/08/19 19:11:56 tom Exp $ +# $Id: Makefile.in,v 1.22 2001/10/27 18:17:22 tom Exp $ ############################################################################## # Copyright (c) 1998 Free Software Foundation, Inc. # # # @@ -69,7 +69,7 @@ preinstall : @ echo ' lib directory: '$(libdir) @ echo ' include directory: '$(includedir) @ echo ' man directory: '$(mandir) - @ echo ' terminfo directory: '$(ticdir) +@MAKE_TERMINFO@ @ echo ' terminfo directory: '$(ticdir) @ echo '' @ test "$(includedir)" = "$(prefix)/include" || \ echo '** Include-directory is not in a standard location' @@ -87,6 +87,7 @@ clean \ distclean \ mostlyclean \ realclean \ +depend \ sources \ uninstall \ install :: diff --git a/NEWS b/NEWS index 796c894d..8ce31076 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ --- $Id: NEWS,v 1.602 2000/10/21 00:42:11 tom Exp $ +-- $Id: NEWS,v 1.714 2002/10/12 22:35:42 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. @@ -6,6 +6,1205 @@ 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 Dickey. +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 '@'. + > 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 ). + > 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 + > 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. + > 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 bugzilla #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 + bugzilla #68199 dated 2002-07-07. + + 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, #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 (Solaris, AIX). + +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. + + update 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 bug report #99550). + + add configure check if cast for _IO_va_list is needed to compile + C++ vscan code (Debian bug report #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 (patch by 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 bug report #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 + bug #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 bug #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'). + +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 @@ -82,7 +1281,7 @@ Changes since 1.9.9e are recorded by Thomas Dickey. (see assume_default_colors()). + rename configure option --enable-hashmap --disable-hashmap, and reorder the configure options, splitting the experimental and - development + 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 @@ -95,7 +1294,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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 ). + used for strcat/strcpy (report by Jouko Pynnonen + ). 20000930 + modify several descriptions, including those for setaf, setab, in @@ -118,7 +1318,7 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 20000923 + modify rs2 capability in xterm-r6 and similar where cursor - save/restore bracketed the sequence for resetting video attributes. + save/restore bracketed the sequence for resetting video attributes. The cursor restore would undo that (from a NetBSD bug report by John Hawkinson ). + using parameter check added to tic, corrected 27 typos in @@ -138,6 +1338,9 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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 @@ -161,7 +1364,7 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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: + with Sun WorkShop compilers since these tokens were empty (cf: 20000902, reported by Albert Chin-A-Young). 20000909 @@ -182,8 +1385,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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). + 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 @@ -461,7 +1664,7 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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). + 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. @@ -469,8 +1672,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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 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 @@ -1021,7 +2224,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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. + + 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 @@ -1047,11 +2251,11 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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 - ). + 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. @@ -1098,7 +2302,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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. + 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). @@ -1156,8 +2361,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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 (from discussion - with Alexander Lukyanov). + is given, by using a 'char' on i386 and related hosts (from + discussion with Alexander Lukyanov). 990605 pre-release + include time.h in lib_napms.c if nanosleep is used (patch by @@ -1208,7 +2413,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. > 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" ) + 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. @@ -1468,7 +2674,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. Otherwise, a relative path in $TERMINFO would confuse tic (from a Debian bug report). + correct/update ncsa terminfo entry (report by Larry Virden). - + update xterm-xfree86 terminfo to current (patch 90), smcur/rmcur changes + + 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 @@ -1592,8 +2799,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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 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). @@ -1664,8 +2871,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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 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 @@ -1673,8 +2880,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. to the SP struct. 980912 - + modify test-driver in lib_mvcur.s to use _nc_setbuffer, for consistent - treatment. + + 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 @@ -1714,8 +2921,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. Jaeger). 980815 - + modify lib_setup.c to eliminate unneeded include of when - termios is not used (patch by Todd C Miller). + + 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. @@ -1764,8 +2971,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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). + + 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. @@ -2087,7 +3294,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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 + + 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 @@ -2098,8 +3306,9 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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. + + 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 @@ -2352,7 +3561,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. NeXT (reported by Francisco A. Tomei Torres). 971101 - + force mandatory padding in bell and flash_screen, as specified in XSI. + + 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 @@ -2486,8 +3696,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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). + + 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. @@ -2580,7 +3790,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + #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. + + 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() @@ -2985,7 +4196,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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). + + 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) @@ -3049,8 +4261,9 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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 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. @@ -3089,12 +4302,13 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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). + 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). + + 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 @@ -3114,8 +4328,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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 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 @@ -3223,8 +4437,9 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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 (from diffs by H.J.Lu for libc). + + rename config.h to ncurses_cfg.h to avoid naming-conflict when + ncurses is integrated into larger systems (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 970124, also reported by @@ -3595,7 +4810,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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 ). + + 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). @@ -3820,8 +5036,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. Ju"rgen 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. + + 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 @@ -3889,8 +5105,9 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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. + + 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 @@ -3958,8 +5175,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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). + + 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). @@ -4062,7 +5279,8 @@ Changes since 1.9.9e are recorded by Thomas Dickey. + 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 + + 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). @@ -4271,10 +5489,10 @@ Changes since 1.9.9e are recorded by Thomas Dickey. 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 */ + #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 @@ -4562,7 +5780,7 @@ available separately from netcom.com:pub/zmbenhal/ * New scrolling code. * fixed bug that reversed the sense of nl() and nonl(). -#### ncurses 0.2 -> ncurses 0.3 #### Jan 20, 1993 #### +#### 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. diff --git a/README.emx b/README.emx index 3f3d526a..0605e67b 100644 --- a/README.emx +++ b/README.emx @@ -1,4 +1,4 @@ --- $Id: README.emx,v 1.4 2000/09/16 19:28:28 tom Exp $ +-- $Id: README.emx,v 1.6 2002/09/07 17:03:19 tom Exp $ -- Author: Thomas Dickey ------------------------------------------------------------------------------- @@ -16,13 +16,13 @@ the EMX development tools, of course. Get these programs to start: Apply the autoconf patches from - http://dickey.his.com/autoconf - ftp://dickey.his.com/autoconf + http://invisible-island.net/autoconf + ftp://invisible-island.net/autoconf These are ordered by date: - autoconf-2.13-20000819.patch.gz - autoconf-2.13-20000819-emx.patch.gz + autoconf-2.13-20020210.patch.gz + autoconf-2.13-20020210-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, diff --git a/TO-DO b/TO-DO index 21e8ee0c..e99051f5 100644 --- a/TO-DO +++ b/TO-DO @@ -1,4 +1,4 @@ --- $Id: TO-DO,v 1.39 1998/07/12 00:25:39 tom Exp $ +-- $Id: TO-DO,v 1.41 2002/08/31 21:32:43 tom Exp $ SHORT-TERM TO-DO ITEMS: @@ -7,12 +7,6 @@ Known Problems: * GNAT does not put libraries in the correct order, so a build only links properly if you use shared libraries since -lncurses is first. -* XPG4 specifies that the enhanced features are not available unless the - _XOPEN_SOURCE_EXTENDED test macro is defined by the application. Ncurses uses - this macro (incorrectly) to address a dependency upon wchar_t. The functions - which use wchar_t are not implemented, so the effect of the test macro is - pointless. - * 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. @@ -37,6 +31,9 @@ Known Problems: * The window classes defined in the c++ subdirectory need documentation. Some C++ programmer could earn a lot of good karma by doing this... +* The resizeterm() function does not handle ripped-off lines such as that + done for the slk_XXX functions. + Portability (or lack thereof): * Users of older System V UNIXes (but not Solaris, and probably not SVr4) @@ -86,6 +83,8 @@ Untested features: label_on, plab_norm, lab_f*) has not been tested. The label_format and lab_f* capabilities aren't presently used. +* The wide-character input functions need testing. + LONGER-TERM TO-DO ITEMS: 1. Extended COSE conformance @@ -95,68 +94,9 @@ 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. -Here are page references to all material involving wide or multi-byte -characters in Issue 4 of the XSI Curses standard, with notes on their -status in this implementation: - - Page 1 (1.1.2) New Features discussion of internationalization. - Page 12 (2.4): Definition of cchar_t, wchar_t. - Page 16 (3.3.2): Introduction of multi-column characters. - Page 17-18 (3.3.5): Description of non-spacing characters. - Page 19-21 (3.4.2): Basic character operations. - Page 34 (addnstr): These should now call underlying wide- -character functions, and do (through waddnstr) if _XOPEN_SOURCE_EXTENDED is on). - Page 35 (addnwstr): wide-character add-string functions. All macros -except waddnwstr() which is not yet defined. - Page 36 (add_wch): wide-character add-char functions. All macros -except wadd_wch() which is not yet defined. - Page 39 (attr_get): implemented -- we've just made the current- -attributes field of the window an attr_t. - Page 43 (bkgrnd): None of these are implemented. - Page 45 (border_set): Neither of these is implemented. - Page 47 (box_set): box_set implemented as macro, but the underlying -wborder_set() is not yet defined. - Page 78 (echo_wchar): echo_wchar() implemented as macro, underlying -wecho_wchar() not yet implemented. - Page 81 (erasechar): Neither entry point is implemented. - Page 87 (getbkgrnd): Not implemented. - Page 88 (getcchar): Not implemented. - Page 93 (getn_wstr): All implemented (as macros) except the -underlying wgetn_wstr(). - Page 97 (get_wch): All implemented (as macros) except the -underlying wget_wch(). - Page 99 (get_wstr): Xref to page 93. - Page 105 (hline_set): All implemented (as macros) except the -underlying whline_set(), wvline_set(). - Page 114 (innstr): Multi-byte character-completeness check is -not implemented. - Page 115 (innwstr): All implemented (as macros) except the -underlying winnw_str(). - Page 119 (insnstr): Implementation may not be correct for multi-byte -characters. - Page 120 (ins_nwstr): Not implemented. - Page 121 (insstr): Xref to page 119. - Page 122 (instr): Xref to page 119. - Page 123 (ins_wch): Not implemented. - Page 124 (ins_wstr): Xref to page 120. - Page 126 (in_wch): Not implemented. - Page 127 (in_wchnstr): Not implemented. - Page 128 (inwstr): Xref to page 115. - Page 133 (killwchar): killwchar not implemented. - Page 158 (pechochar): pecho_wchar() not implemented. - Page 176 (setcchar): Not implemented. - Page 181 (slk_attroff): slk_wset not implemented. - Page 200 (ungetch): unget_wch() not implemented. - Page 203 (vidattr): vid_attr() and vid_puts() not implemented. - Page 206 (vline_set): Xref to page 105. - Page 214 (wunctrl): Not implemented. - Page 216 (curses.h): cchar_t, wint_t, wchar_t references. - Page 220 (curses.h): KEY_CODE_YES - -Basically, the macro superstructure is there but the core is absent. We -need better multi-locale support guarantees from the OS to finish this. -If you are working on internationalization support, please contact us so -we can cooperate. +Current status: + pecho_wchar() not implemented. + slk_wset not implemented. 2. DOS port diff --git a/aclocal.m4 b/aclocal.m4 index 6782f0fb..19f9bd58 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,5 +1,5 @@ dnl*************************************************************************** -dnl Copyright (c) 1998-2000 Free Software Foundation, Inc. * +dnl Copyright (c) 1998-2000,2001,2002 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 * @@ -26,12 +26,12 @@ dnl sale, use or other dealings in this Software without prior written * dnl authorization. * dnl*************************************************************************** dnl -dnl Author: Thomas E. Dickey 1996,1997,1998,1999,2000 +dnl Author: Thomas E. Dickey 1996,1997,1998,1999,2000,2001 dnl -dnl $Id: aclocal.m4,v 1.238 2000/10/20 22:57:49 tom Exp $ +dnl $Id: aclocal.m4,v 1.285 2002/09/21 23:59:01 tom Exp $ dnl Macros used in NCURSES auto-configuration script. dnl -dnl See http://dickey.his.com/autoconf/ for additional information. +dnl See http://invisible-island.net/autoconf/ for additional information. dnl dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- @@ -55,16 +55,52 @@ elif test "$includedir" != "/usr/include"; then fi fi AC_SUBST(ACPPFLAGS) +])dnl +dnl --------------------------------------------------------------------------- +dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS +dnl The second parameter if given makes this macro verbose. +AC_DEFUN([CF_ADD_CFLAGS], +[ +cf_new_cflags= +cf_new_cppflags= +for cf_add_cflags in $1 +do + case $cf_add_cflags in #(vi + -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi + case "$CPPFLAGS" in + *$cf_add_cflags) #(vi + ;; + *) #(vi + cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + ;; + esac + ;; + *) + cf_new_cflags="$cf_new_cflags $cf_add_cflags" + ;; + 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 + ])dnl dnl --------------------------------------------------------------------------- dnl This is adapted from the macros 'fp_PROG_CC_STDC' and 'fp_C_PROTOTYPES' dnl in the sharutils 4.2 distribution. AC_DEFUN([CF_ANSI_CC_CHECK], [ -AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C) -AC_CACHE_VAL(cf_cv_ansi_cc,[ +AC_CACHE_CHECK(for ${CC-cc} option to accept ANSI C, cf_cv_ansi_cc,[ cf_cv_ansi_cc=no cf_save_CFLAGS="$CFLAGS" +cf_save_CPPFLAGS="$CPPFLAGS" # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi @@ -80,7 +116,7 @@ for cf_arg in "-DCC_HAS_PROTOS" \ "-Aa -D_HPUX_SOURCE" \ -Xc do - CFLAGS="$cf_save_CFLAGS $cf_arg" + CF_ADD_CFLAGS($cf_arg) AC_TRY_COMPILE( [ #ifndef CC_HAS_PROTOS @@ -95,12 +131,12 @@ choke me [cf_cv_ansi_cc="$cf_arg"; break]) done CFLAGS="$cf_save_CFLAGS" +CPPFLAGS="$cf_save_CPPFLAGS" ]) -AC_MSG_RESULT($cf_cv_ansi_cc) if test "$cf_cv_ansi_cc" != "no"; then if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then - CFLAGS="$CFLAGS $cf_cv_ansi_cc" + CF_ADD_CFLAGS($cf_cv_ansi_cc) else AC_DEFINE(CC_HAS_PROTOS) fi @@ -131,6 +167,9 @@ dnl Treat the configuration-variable specially here, since we're directly dnl substituting its value (i.e., 1/0). AC_DEFUN([CF_BOOL_DECL], [ +AC_CHECK_HEADER(stdbool.h, + cf_cv_header_stdbool_h=1, + cf_cv_header_stdbool_h=0) AC_MSG_CHECKING([for builtin bool type]) AC_CACHE_VAL(ifelse($1,,cf_cv_builtin_bool,[$1]),[ AC_TRY_COMPILE([ @@ -148,6 +187,9 @@ fi 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]) @@ -156,6 +198,9 @@ AC_CACHE_VAL(cf_cv_type_of_bool,[ AC_TRY_RUN([ #include #include + +#if defined(__cplusplus) + #ifdef HAVE_GXX_BUILTIN_H #include #elif HAVE_GPP_BUILTIN_H @@ -163,6 +208,15 @@ AC_CACHE_VAL(cf_cv_type_of_bool,[ #elif HAVE_BUILTIN_H #include #endif + +#else + +#if $cf_cv_header_stdbool_h +#include +#endif + +#endif + main() { FILE *fp = fopen("cf_test.out", "w"); @@ -179,15 +233,21 @@ main() exit(0); } ], - [cf_cv_type_of_bool=`cat cf_test.out`], + [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 - AC_MSG_WARN(Assuming unsigned for type of bool) - cf_cv_type_of_bool=unsigned + case .$NCURSES_BOOL in #(vi + .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 --------------------------------------------------------------------------- @@ -207,7 +267,7 @@ 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*|netbsd*|freebsd*|linux*) + openbsd*|netbsd*|freebsd*|linux*|cygwin*) prefix=/usr ;; *) prefix=$ac_default_prefix @@ -286,7 +346,7 @@ test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$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") +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)) @@ -298,14 +358,10 @@ 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 (I would use AC_CACHE_CHECK here, but it will not work when called in a -dnl loop from CF_SYS_ERRLIST). -dnl dnl $1 = the name to check AC_DEFUN([CF_CHECK_ERRNO], [ -AC_MSG_CHECKING(if external $1 is declared) -AC_CACHE_VAL(cf_cv_dcl_$1,[ +AC_CACHE_CHECK(if external $1 is declared, cf_cv_dcl_$1,[ AC_TRY_COMPILE([ #ifdef HAVE_STDLIB_H #include @@ -314,16 +370,12 @@ AC_CACHE_VAL(cf_cv_dcl_$1,[ #include #include ], [long x = (long) $1], - [eval 'cf_cv_dcl_'$1'=yes'], - [eval 'cf_cv_dcl_'$1'=no']) + [cf_cv_dcl_$1=yes], + [cf_cv_dcl_$1=no]) ]) -eval 'cf_result=$cf_cv_dcl_'$1 -AC_MSG_RESULT($cf_result) - -if test "$cf_result" = no ; then - eval 'cf_result=DECL_'$1 - CF_UPPER(cf_result,$cf_result) +if test "$cf_cv_dcl_$1" = no ; then + CF_UPPER(cf_result,decl_$1) AC_DEFINE_UNQUOTED($cf_result) fi @@ -337,22 +389,18 @@ dnl $1 = the name to check dnl $2 = its type AC_DEFUN([CF_CHECK_EXTERN_DATA], [ -AC_MSG_CHECKING(if external $1 exists) -AC_CACHE_VAL(cf_cv_have_$1,[ +AC_CACHE_CHECK(if external $1 exists, cf_cv_have_$1,[ AC_TRY_LINK([ #undef $1 extern $2 $1; ], [$1 = 2], - [eval 'cf_cv_have_'$1'=yes'], - [eval 'cf_cv_have_'$1'=no'])]) - -eval 'cf_result=$cf_cv_have_'$1 -AC_MSG_RESULT($cf_result) + [cf_cv_have_$1=yes], + [cf_cv_have_$1=no]) +]) -if test "$cf_result" = yes ; then - eval 'cf_result=HAVE_'$1 - CF_UPPER(cf_result,$cf_result) +if test "$cf_cv_have_$1" = yes ; then + CF_UPPER(cf_result,have_$1) AC_DEFINE_UNQUOTED($cf_result) fi @@ -363,8 +411,9 @@ 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 "$CXX" = yes ; then +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 { @@ -384,18 +433,102 @@ void 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) ])dnl dnl --------------------------------------------------------------------------- +dnl Check if the g++ compiler supports vscan function (not a standard feature). +AC_DEFUN([CF_CPP_VSCAN_FUNC], +[ +if test -n "$CXX"; then + +AC_LANG_SAVE +AC_LANG_CPLUSPLUS +AC_CHECK_HEADERS(strstream.h) + +AC_CACHE_CHECK(if $CXX supports vscan function,cf_cv_cpp_vscan_func,[ + for cf_vscan_func in strstream strstream_cast stdio + do + case $cf_vscan_func in #(vi + stdio) cf_vscan_defs=USE_STDIO_VSCAN ;; #(vi + strstream) cf_vscan_defs=USE_STRSTREAM_VSCAN ;; + strstream_cast) cf_vscan_defs=USE_STRSTREAM_VSCAN_CAST ;; + esac + AC_TRY_LINK([ +#include +#include +#define $cf_vscan_defs 1 +#if defined(USE_STDIO_VSCAN) +#elif defined(HAVE_STRSTREAM_H) && defined(USE_STRSTREAM_VSCAN) +#include +#endif + +int scanw(const char* fmt, ...) +{ + int result = -1; + char buf[BUFSIZ]; + + va_list args; + va_start(args, fmt); +#if defined(USE_STDIO_VSCAN) + if (::vsscanf(buf, fmt, args) != -1) + result = 0; +#elif defined(USE_STRSTREAM_VSCAN) + strstreambuf ss(buf, sizeof(buf)); + if (ss.vscan(fmt, args) != -1) + result = 0; +#elif defined(USE_STRSTREAM_VSCAN_CAST) + strstreambuf ss(buf, sizeof(buf)); + if (ss.vscan(fmt, (_IO_va_list)args) != -1) + result = 0; +#else +#error case $cf_vscan_func failed +#endif + va_end(args); + return result; +} +],[int tmp, foo = scanw("%d", &tmp)], + [cf_cv_cpp_vscan_func=$cf_vscan_func; break], + [cf_cv_cpp_vscan_func=no]) + test "$cf_cv_cpp_vscan_func" != no && break + done +]) + +AC_LANG_RESTORE +fi + +case $cf_cv_cpp_vscan_func in #(vi +stdio) #(vi + AC_DEFINE(CPP_HAS_VSCAN_FUNC) + AC_DEFINE(USE_STDIO_VSCAN) + ;; +strstream) + AC_DEFINE(CPP_HAS_VSCAN_FUNC) + AC_DEFINE(USE_STRSTREAM_VSCAN) + ;; +strstream_cast) + AC_DEFINE(CPP_HAS_VSCAN_FUNC) + AC_DEFINE(USE_STRSTREAM_VSCAN_CAST) + ;; +esac +])dnl +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 --------------------------------------------------------------------------- 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) - DIRS_TO_MAKE="$DIRS_TO_MAKE $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 @@ -519,6 +652,49 @@ tcgetattr(1, &foo);], [cf_cv_have_tcgetattr=yes], [cf_cv_have_tcgetattr=no])]) test "$cf_cv_have_tcgetattr" = yes && AC_DEFINE(HAVE_TCGETATTR) +])dnl +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 #(vi +vsscanf) AC_DEFINE(HAVE_VSSCANF);; #(vi +vfscanf) AC_DEFINE(HAVE_VFSCANF);; #(vi +_doscan) AC_DEFINE(HAVE__DOSCAN);; +esac + ])dnl dnl --------------------------------------------------------------------------- dnl Test for availability of useful gcc __attribute__ directives to quiet @@ -545,7 +721,6 @@ EOF if test "$GCC" = yes then AC_CHECKING([for $CC __attribute__ directives]) - changequote(,)dnl cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <>)dnl -cf_cv_gnat_version=`$cf_ada_make -v 2>&1 | grep '[0-9].[0-9][0-9]*' |\ - sed -e 's/[^0-9 \.]//g' | $AWK '{print $<<1>>;}'` +cf_cv_gnat_version=`$cf_ada_make -v 2>&1 | grep '[[0-9]].[[0-9]][[0-9]]*' |\ + sed -e 's/[[^0-9 \.]]//g' | $AWK '{print $[1];}'` case $cf_cv_gnat_version in - 3.1[1-9]*|3.[2-9]*|[4-9].*) + 3.1[[1-9]]*|3.[[2-9]]*|[[4-9]].*) cf_cv_prog_gnat_correct=yes ;; *) echo Unsupported GNAT version $cf_cv_gnat_version. Required is 3.11 or better. Disabling Ada95 binding. @@ -685,7 +857,7 @@ case $cf_cv_gnat_version in ;; esac case $cf_cv_gnat_version in - 3.1*|[4-9].*) + 3.1*|[[4-9]].*) cf_compile_generics=generics cf_generic_objects="\$(GENOBJS)" ;; @@ -693,9 +865,36 @@ case $cf_cv_gnat_version in cf_generic_objects= ;; esac -changequote([, ])dnl ]) 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 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. @@ -780,12 +979,32 @@ AC_MSG_RESULT($cf_cv_have_isascii) test "$cf_cv_have_isascii" = yes && AC_DEFINE(HAVE_ISASCII) ])dnl dnl --------------------------------------------------------------------------- +dnl Check for libutf8 +AC_DEFUN([CF_LIBUTF8], +[ +AC_CACHE_CHECK(for putwc in libutf8,cf_cv_libutf8,[ + cf_save_LIBS="$LIBS" + LIBS="-lutf8 $LIBS" +AC_TRY_LINK([ +#include ],[putwc(0,0);], + [cf_cv_libutf8=yes], + [cf_cv_libutf8=no]) + LIBS="$cf_save_LIBS" +]) + +if test "$cf_cv_libutf8" = yes ; then + AC_DEFINE(HAVE_LIBUTF8_H) + LIBS="-lutf8 $LIBS" +fi +])dnl +dnl --------------------------------------------------------------------------- dnl Compute the library-prefix for the given host system dnl $1 = variable to set AC_DEFUN([CF_LIB_PREFIX], [ case $cf_cv_system_name in - os2) LIB_PREFIX='' ;; + OS/2*) LIB_PREFIX='' ;; + os2*) LIB_PREFIX='' ;; *) LIB_PREFIX='lib' ;; esac ifelse($1,,,[$1=$LIB_PREFIX]) @@ -811,43 +1030,70 @@ for cf_dir in $SRC_SUBDIRS do if test -f $srcdir/$cf_dir/modules; then - cf_libs_to_make= + IMPORT_LIB= + SHARED_LIB= + LIBS_TO_MAKE= for cf_item in $CF_LIST_MODELS do CF_LIB_SUFFIX($cf_item,cf_suffix) if test $cf_item = shared ; then if test "$cf_cv_do_symlinks" = yes ; then case "$cf_cv_shlib_version" in #(vi - rel) cf_suffix="$cf_suffix"'.$(REL_VERSION)' ;; #(vi - abi) cf_suffix="$cf_suffix"'.$(ABI_VERSION)' ;; + rel) #(vi + case "$cf_cv_system_name" in #(vi + darwin*) cf_suffix='.$(REL_VERSION)'"$cf_suffix" ;; #(vi + *) cf_suffix="$cf_suffix"'.$(REL_VERSION)' ;; + esac + ;; + abi) + case "$cf_cv_system_name" in #(vi + darwin*) cf_suffix='.$(ABI_VERSION)'"$cf_suffix" ;; #(vi + *) cf_suffix="$cf_suffix"'.$(ABI_VERSION)' ;; + esac + ;; esac fi + # cygwin needs import library, and has unique naming convention + if test $cf_cv_shlib_version = cygdll ; then + SHARED_LIB="../lib/${cf_prefix}${cf_dir}\$(ABI_VERSION).dll" + IMPORT_LIB="../lib/${cf_prefix}${cf_dir}.dll.a" + LIBS_TO_MAKE="$LIBS_TO_MAKE \$(SHARED_LIB) \$(IMPORT_LIB)" + continue + fi fi - cf_libs_to_make="$cf_libs_to_make ../lib/${cf_prefix}${cf_dir}${cf_suffix}" + LIBS_TO_MAKE="$LIBS_TO_MAKE ../lib/${cf_prefix}${cf_dir}${cf_suffix}" done if test $cf_dir = ncurses ; then + cf_subsets="$LIB_SUBSETS" case "$LIB_SUBSETS" in #(vi termlib+*) #(vi ;; *) #(vi - cf_item=`echo $cf_libs_to_make |sed -e s/$LIB_NAME/$TINFO_NAME/g` - cf_libs_to_make="$cf_item $cf_libs_to_make" + cf_item=`echo $LIBS_TO_MAKE |sed -e s/$LIB_NAME/$TINFO_NAME/g` + LIBS_TO_MAKE="$cf_item $LIBS_TO_MAKE" ;; esac + else + cf_subsets=`echo "$LIB_SUBSETS" | sed -e 's/^termlib //'` fi - sed -e "s@\@LIBS_TO_MAKE\@@$cf_libs_to_make@" \ + sed -e "s%@LIBS_TO_MAKE@%$LIBS_TO_MAKE%" \ + -e "s%@IMPORT_LIB@%$IMPORT_LIB%" \ + -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 \ - name=$cf_dir \ + libname="${cf_dir}${LIB_SUFFIX}" subsets="$LIB_SUBSETS" \ $srcdir/$cf_dir/modules >>$cf_dir/Makefile - for cf_item in $CF_LIST_MODELS + for cf_subset in $cf_subsets do - echo 'Appending rules for '$cf_item' model ('$cf_dir')' + 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) CF_LIB_SUFFIX($cf_item,cf_suffix) CF_OBJ_SUBDIR($cf_item,cf_subdir) @@ -867,8 +1113,6 @@ do cf_depend="$cf_depend $cf_reldir/curses.priv.h" fi - for cf_subset in $LIB_SUBSETS - do $AWK -f $srcdir/mk-1st.awk \ name=$cf_dir \ traces=$LIB_TRACING \ @@ -878,6 +1122,7 @@ do suffix=$cf_suffix \ subset=$cf_subset \ ShlibVer=$cf_cv_shlib_version \ + ShlibVerInfix=$cf_cv_shlib_version_infix \ DoLinks=$cf_cv_do_symlinks \ rmSoLocs=$cf_cv_rm_so_locs \ ldconfig="$LDCONFIG" \ @@ -885,7 +1130,11 @@ do depend="$cf_depend" \ target="$target" \ $srcdir/$cf_dir/modules >>$cf_dir/Makefile - test $cf_dir = ncurses && WITH_OVERWRITE=no + 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 \ @@ -895,6 +1144,7 @@ do srcdir=$srcdir \ echo=$WITH_ECHO \ $srcdir/$cf_dir/modules >>$cf_dir/Makefile + cf_subdirs="$cf_subdirs $cf_subdir" done done fi @@ -950,11 +1200,11 @@ done cat >> Makefile <> Makefile <>headers.sh <>$cf_dir/Makefile <>$cf_dir/Makefile done 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 ])dnl @@ -1114,6 +1378,8 @@ AC_DEFUN([CF_LIB_SUFFIX], profile) $2='_p.a' ;; shared) case $cf_cv_system_name in + cygwin*) $2='.dll' ;; + darwin*) $2='.dylib' ;; hpux*) $2='.sl' ;; *) $2='.so' ;; esac @@ -1146,18 +1412,15 @@ 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 - changequote(,)dnl cat >conftest.$ac_ext <&5 1>/dev/null fi rm -f conftest.$ac_ext data.o - changequote(,)dnl cat >conftest.$ac_ext <&5 1>/dev/null @@ -1194,7 +1456,12 @@ EOF LIBS="$cf_saveLIBS" ]) AC_MSG_RESULT($cf_cv_link_dataonly) -test "$cf_cv_link_dataonly" = no && AC_DEFINE(BROKEN_LINKER) + +if test "$cf_cv_link_dataonly" = no ; then + AC_DEFINE(BROKEN_LINKER) + BROKEN_LINKER=1 +fi + ])dnl dnl --------------------------------------------------------------------------- dnl Most Unix systems have both link and symlink, a few don't have symlink. @@ -1258,12 +1525,12 @@ 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_MSG_CHECKING([for makeflags variable]) -AC_CACHE_VAL(cf_cv_makeflags,[ +AC_CACHE_CHECK(for makeflags variable, cf_cv_makeflags,[ cf_cv_makeflags='' for cf_option in '-$(MAKEFLAGS)' '$(MFLAGS)' do cat >cf_makeflags.tmp <man/edit_man.sed + sh $srcdir/man/make_sed.sh $MANPAGE_RENAMES >man/edit_man.sed fi fi -AC_MSG_RESULT($cf_manpage_renames) +AC_MSG_RESULT($MANPAGE_RENAMES) +AC_SUBST(MANPAGE_RENAMES) ])dnl dnl --------------------------------------------------------------------------- dnl Some people expect each tool to make all aliases for manpages in the @@ -1418,10 +1689,10 @@ AC_MSG_CHECKING(for manpage symlinks) AC_ARG_WITH(manpage-symlinks, [ --with-manpage-symlinks specify manpage-symlinks], - [cf_manpage_symlinks=$withval], - [cf_manpage_symlinks=yes]) + [MANPAGE_SYMLINKS=$withval], + [MANPAGE_SYMLINKS=yes]) -AC_MSG_RESULT($cf_manpage_symlinks) +AC_MSG_RESULT($MANPAGE_SYMLINKS) ])dnl dnl --------------------------------------------------------------------------- dnl This option causes manpages to be run through tbl(1) to generate tables @@ -1432,10 +1703,10 @@ AC_MSG_CHECKING(for manpage tbl) AC_ARG_WITH(manpage-tbl, [ --with-manpage-tbl specify manpage processing with tbl], - [cf_manpage_tbl=$withval], - [cf_manpage_tbl=no]) + [MANPAGE_TBL=$withval], + [MANPAGE_TBL=no]) -AC_MSG_RESULT($cf_manpage_tbl) +AC_MSG_RESULT($MANPAGE_TBL) ])dnl dnl --------------------------------------------------------------------------- dnl Try to determine if the man-pages on the system are compressed, and if @@ -1455,7 +1726,7 @@ CF_MANPAGE_TBL cf_prefix="$prefix" fi - case "$cf_manpage_form" in # (vi + case "$MANPAGE_FORMAT" in # (vi *formatted*) # (vi cf_subdir='$mandir/cat' cf_format=yes @@ -1468,13 +1739,13 @@ CF_MANPAGE_TBL test ! -d man && mkdir man cat >man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <\$TMP + < \$i | sed -f edit_man.sed >\$TMP CF_EOF else cat >>man/edit_man.sh <\$TMP + < \$i >\$TMP CF_EOF fi -if test $cf_manpage_tbl = yes ; then +if test $MANPAGE_TBL = yes ; then cat >>man/edit_man.sh <\$TMP.out mv \$TMP.out \$TMP @@ -1579,7 +1857,7 @@ cat >>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh < +#ifdef HAVE_LIBUTF8_H +#include +#endif], + [mbstate_t state], + [cf_cv_mbstate_t=no], + [AC_TRY_COMPILE([ +#include +#include +#ifdef HAVE_LIBUTF8_H +#include +#endif], + [mbstate_t value], + [cf_cv_mbstate_t=yes], + [cf_cv_mbstate_t=unknown])])]) + +if test "$cf_cv_mbstate_t" = yes ; then + AC_DEFINE(NEED_WCHAR_H) +fi + +if test "$cf_cv_mbstate_t" != unknown ; then + AC_DEFINE(HAVE_MBSTATE_T) +fi +])dnl +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], @@ -1709,6 +2017,54 @@ AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[ test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES) ])dnl 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 -f 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; + exit(result); +} +],[cf_cv_func_mkstemp=yes +],[cf_cv_func_mkstemp=no +],[AC_CHECK_FUNC(mkstemp) +]) +]) +if test "$cf_cv_func_mkstemp" = yes ; then + AC_DEFINE(HAVE_MKSTEMP) +fi +])dnl +dnl --------------------------------------------------------------------------- dnl Compute the object-directory name from the given model name AC_DEFUN([CF_OBJ_SUBDIR], [ @@ -1717,33 +2073,52 @@ AC_DEFUN([CF_OBJ_SUBDIR], normal) $2='objects' ;; debug) $2='obj_g' ;; profile) $2='obj_p' ;; - shared) $2='obj_s' ;; + shared) + case $cf_cv_system_name in #(vi + cygwin) #(vi + $2='objects' ;; + *) + $2='obj_s' ;; + esac + esac +])dnl +dnl --------------------------------------------------------------------------- +dnl Provide a value for the $PATH and similar separator +AC_DEFUN([CF_PATHSEP], +[ + case $cf_cv_system_name in + os2*) PATHSEP=';' ;; + *) PATHSEP=':' ;; esac +ifelse($1,,,[$1=$PATHSEP]) + AC_SUBST(PATHSEP) ])dnl 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 workaround autoconf's +dnl result begins with 'NONE'. This is necessary to work around autoconf's dnl delayed evaluation of those symbols. AC_DEFUN([CF_PATH_SYNTAX],[ case ".[$]$1" in #(vi -./*) #(vi +.\[$]\(*\)*|.\'*\'*) #(vi + ;; +..|./*|.\\*) #(vi ;; -.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX +.[[a-zA-Z]]:[[\\/]]*) #(vi OS/2 EMX ;; .\[$]{*prefix}*) #(vi eval $1="[$]$1" case ".[$]$1" in #(vi .NONE/*) - $1=`echo [$]$1 | sed -e s@NONE@$ac_default_prefix@` + $1=`echo [$]$1 | sed -e s%NONE%$ac_default_prefix%` ;; esac ;; #(vi .NONE/*) - $1=`echo [$]$1 | sed -e s@NONE@$ac_default_prefix@` + $1=`echo [$]$1 | sed -e s%NONE%$ac_default_prefix%` ;; *) - AC_ERROR(expected a pathname) + ifelse($2,,[AC_ERROR([expected a pathname, not \"[$]$1\"])],$2) ;; esac ])dnl @@ -1756,8 +2131,9 @@ PROG_EXT= case $cf_cv_system_name in os2*) # We make sure -Zexe is not used -- it would interfere with @PROG_EXT@ - CFLAGS="$CFLAGS -Zmt -D__ST_MT_ERRNO__" - CXXFLAGS="$CXXFLAGS -Zmt -D__ST_MT_ERRNO__" + CFLAGS="$CFLAGS -Zmt" + CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__" + CXXFLAGS="$CXXFLAGS -Zmt" LDFLAGS=`echo "$LDFLAGS -Zmt -Zcrtdll" | sed "s/-Zexe//g"` PROG_EXT=".exe" ;; @@ -1766,6 +2142,7 @@ cygwin*) ;; esac AC_SUBST(PROG_EXT) +test -n "$PROG_EXT" && AC_DEFINE_UNQUOTED(PROG_EXT,"$PROG_EXT") ])dnl dnl --------------------------------------------------------------------------- dnl Force $INSTALL to be an absolute-path. Otherwise, edit_man.sh and the @@ -1777,10 +2154,8 @@ case $INSTALL in /*) ;; *) -changequote({{,}})dnl - cf_dir=`echo $INSTALL|sed -e 's%/[^/]*$%%'` + CF_DIRNAME(cf_dir,$INSTALL) test -z "$cf_dir" && cf_dir=. -changequote([,])dnl INSTALL=`cd $cf_dir && pwd`/`echo $INSTALL | sed -e 's:^.*/::'` ;; esac @@ -1834,12 +2209,16 @@ 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_SUBST_NCURSES_VERSION]) - LOCAL_LDFLAGS= - LOCAL_LDFLAGS2= + LOCAL_LDFLAGS= + LOCAL_LDFLAGS2= LD_SHARED_OPTS= INSTALL_LIB="-m 644" @@ -1880,10 +2259,25 @@ AC_DEFUN([CF_SHARED_OPTS], CFLAGS="$cf_save_CFLAGS" fi + cf_cv_shlib_version_infix=no + case $cf_cv_system_name in beos*) MK_SHARED_LIB='$(CC) -o $[@] -Xlinker -soname=`basename $[@]` -nostart -e 0' ;; + cygwin*) + CC_SHARED_OPTS= + MK_SHARED_LIB='$(CC) -shared -Wl,--out-implib=$(IMPORT_LIB) -Wl,--export-all-symbols -o $(SHARED_LIB)' + cf_cv_shlib_version=cygdll + cf_cv_shlib_version_infix=cygdll + ;; + darwin*) + EXTRA_CFLAGS="-no-cpp-precomp" + CC_SHARED_OPTS="-dynamic" + MK_SHARED_LIB='$(CC) -dynamiclib -install_name $(DESTDIR)$(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 + ;; hpux*) # (tested with gcc 2.7.2 -- I don't have c89) if test "$GCC" = yes; then @@ -1911,8 +2305,8 @@ AC_DEFUN([CF_SHARED_OPTS], ;; linux*|gnu*) if test "$DFT_LWR_MODEL" = "shared" ; then - LOCAL_LDFLAGS="-Wl,-rpath,`pwd`/lib" - LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + LOCAL_LDFLAGS="-Wl,-rpath,`pwd`/lib" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_ld_rpath" = yes ; then cf_ld_rpath_opt="-Wl,-rpath," @@ -1934,8 +2328,8 @@ AC_DEFUN([CF_SHARED_OPTS], CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" test "$cf_cv_ld_rpath" = yes && cf_ld_rpath_opt="-Wl,-rpath," if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_ld_rpath" = yes ; then - LOCAL_LDFLAGS="-Wl,-rpath,`pwd`/lib" - LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + LOCAL_LDFLAGS="-Wl,-rpath,`pwd`/lib" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" EXTRA_LDFLAGS="-Wl,-rpath,\$(libdir) $EXTRA_LDFLAGS" MK_SHARED_LIB='$(CC) -shared -Wl,-soname,`basename $[@] .$(REL_VERSION)`.$(ABI_VERSION) -o $[@]' if test "$cf_cv_shlib_version" = auto; then @@ -1951,16 +2345,16 @@ AC_DEFUN([CF_SHARED_OPTS], # 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 $[@]`' + 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" + MK_SHARED_LIB="${MK_SHARED_LIB} -msym" ;; esac MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $[@]' if test "$DFT_LWR_MODEL" = "shared" ; then - LOCAL_LDFLAGS="-Wl,-rpath,`pwd`/lib" - LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + LOCAL_LDFLAGS="-Wl,-rpath,`pwd`/lib" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_ld_rpath" = yes ; then cf_ld_rpath_opt="-rpath" @@ -1998,7 +2392,7 @@ AC_DEFUN([CF_SHARED_OPTS], MK_SHARED_LIB='$(LD) -dy -G -h `basename $[@] .$(REL_VERSION)`.$(ABI_VERSION) -o $[@]' if test "$DFT_LWR_MODEL" = "shared" ; then LOCAL_LDFLAGS="-R `pwd`/lib:\$(libdir)" - LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi if test "$cf_cv_ld_rpath" = yes ; then cf_ld_rpath_opt="-R" @@ -2062,13 +2456,13 @@ 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_CFLAGS="$CFLAGS" + cf_save_CPPFLAGS="$CPPFLAGS" for cf_opts in "" "NEED_PTEM_H" do - CFLAGS="$cf_save_CFLAGS" - test -n "$cf_opts" && CFLAGS="$CFLAGS -D$cf_opts" + CPPFLAGS="$cf_save_CPPFLAGS" + test -n "$cf_opts" && CPPFLAGS="$CPPFLAGS -D$cf_opts" AC_TRY_COMPILE([#include #ifdef HAVE_TERMIOS_H #include @@ -2105,7 +2499,7 @@ do [cf_cv_sizechange=yes], [cf_cv_sizechange=no]) - CFLAGS="$cf_save_CFLAGS" + 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" @@ -2183,11 +2577,11 @@ do fi done AC_MSG_RESULT($cf_cv_src_modules) -TEST_ARGS="-L${LIB_DIR} -L\$(libdir) $TEST_ARGS" +TEST_ARGS="-L${LIB_DIR} $TEST_ARGS" AC_SUBST(TEST_DEPS) AC_SUBST(TEST_ARGS) -PROG_ARGS="-L${LIB_DIR} -L\$(libdir) $PROG_ARGS" +PROG_ARGS="-L${LIB_DIR} $PROG_ARGS" AC_SUBST(PROG_ARGS) SRC_SUBDIRS="man include" @@ -2195,7 +2589,8 @@ for cf_dir in $cf_cv_src_modules do SRC_SUBDIRS="$SRC_SUBDIRS $cf_dir" done -SRC_SUBDIRS="$SRC_SUBDIRS misc test" +SRC_SUBDIRS="$SRC_SUBDIRS test" +test -z "$MAKE_TERMINFO" && SRC_SUBDIRS="$SRC_SUBDIRS misc" test "$cf_with_cxx_binding" != no && SRC_SUBDIRS="$SRC_SUBDIRS c++" ADA_SUBDIRS= @@ -2288,7 +2683,7 @@ if test "$ISC" = yes ; then AC_CHECK_HEADERS( sys/termio.h ) fi if test "$ac_cv_header_termios_h" = yes ; then - case "$CFLAGS" in + case "$CFLAGS $CPPFLAGS" in *-D_POSIX_SOURCE*) termios_bad=dunno ;; *) termios_bad=maybe ;; @@ -2329,15 +2724,14 @@ dnl --------------------------------------------------------------------------- dnl Get the version-number for use in shared-library naming, etc. AC_DEFUN([CF_SUBST_NCURSES_VERSION], [ -changequote(,)dnl -NCURSES_MAJOR="`egrep '^NCURSES_MAJOR[ ]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`" -NCURSES_MINOR="`egrep '^NCURSES_MINOR[ ]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`" -NCURSES_PATCH="`egrep '^NCURSES_PATCH[ ]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`" -changequote([,])dnl +NCURSES_MAJOR="`egrep '^NCURSES_MAJOR[[ ]]*=' $srcdir/dist.mk | sed -e 's/^[[^0-9]]*//'`" +NCURSES_MINOR="`egrep '^NCURSES_MINOR[[ ]]*=' $srcdir/dist.mk | sed -e 's/^[[^0-9]]*//'`" +NCURSES_PATCH="`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 -AC_MSG_RESULT(Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version (`date`)) +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) @@ -2347,6 +2741,7 @@ AC_SUBST(cf_cv_rel_version) AC_SUBST(cf_cv_abi_version) AC_SUBST(cf_cv_cc_bool_type) AC_SUBST(cf_cv_builtin_bool) +AC_SUBST(cf_cv_header_stdbool_h) AC_SUBST(cf_cv_type_of_bool)dnl ])dnl dnl --------------------------------------------------------------------------- @@ -2471,62 +2866,12 @@ dnl Make an uppercase version of a variable dnl $1=uppercase($2) AC_DEFUN([CF_UPPER], [ -changequote(,)dnl $1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` -changequote([,])dnl ])dnl dnl --------------------------------------------------------------------------- -dnl Compute the shift-mask that we'll use for wide-character indices. We use -dnl all but the index portion of chtype for storing attributes. -AC_DEFUN([CF_WIDEC_SHIFT], -[ -AC_REQUIRE([CF_TYPEOF_CHTYPE]) -AC_MSG_CHECKING([for number of bits in chtype]) -AC_CACHE_VAL(cf_cv_shift_limit,[ - AC_TRY_RUN([ -#include -int main() -{ - FILE *fp = fopen("cf_test.out", "w"); - if (fp != 0) { - int n; - unsigned TYPEOF_CHTYPE x = 1L; - for (n = 0; ; n++) { - unsigned long y = (x >> n); - if (y != 1 || x == 0) - break; - x <<= 1; - } - fprintf(fp, "%d", n); - fclose(fp); - } - exit(0); -} - ], - [cf_cv_shift_limit=`cat cf_test.out`], - [cf_cv_shift_limit=32], - [cf_cv_shift_limit=32]) - rm -f cf_test.out - ]) -AC_MSG_RESULT($cf_cv_shift_limit) -AC_SUBST(cf_cv_shift_limit) - -AC_MSG_CHECKING([for width of character-index]) -AC_CACHE_VAL(cf_cv_widec_shift,[ -if test ".$with_widec" = ".yes" ; then - cf_attrs_width=39 - if ( expr $cf_cv_shift_limit \> $cf_attrs_width >/dev/null ) - then - cf_cv_widec_shift=`expr 16 + $cf_cv_shift_limit - $cf_attrs_width` - else - cf_cv_widec_shift=16 - fi -else - cf_cv_widec_shift=8 -fi -]) -AC_MSG_RESULT($cf_cv_widec_shift) -AC_SUBST(cf_cv_widec_shift) +dnl Use AC_VERBOSE w/o the warnings +AC_DEFUN([CF_VERBOSE], +[test -n "$verbose" && echo " $1" 1>&AC_FD_MSG ])dnl dnl --------------------------------------------------------------------------- dnl Wrapper for AC_ARG_WITH to ensure that user supplies a pathname, not just @@ -2553,12 +2898,14 @@ 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 +ifelse($4,,[withval=${$3}],[withval=${$3-ifelse($5,,$4,$5)}]))dnl -IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" +IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${PATHSEP}" cf_dst_path= for cf_src_path in $withval do @@ -2568,6 +2915,18 @@ do done IFS="$ac_save_ifs" -eval $3="$cf_dst_path" +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 #(vi +\'*) + cf_dst_path=`echo $cf_dst_path |sed -e s/\'// -e s/\'\$//` + ;; +esac +cf_dst_path=`echo "$cf_dst_path" | sed -e 's/\\\\/\\\\\\\\/g'` +]) + +eval '$3="$cf_dst_path"' AC_SUBST($3)dnl + ])dnl diff --git a/announce.html.in b/announce.html.in index 58be91d0..403e6762 100644 --- a/announce.html.in +++ b/announce.html.in @@ -1,10 +1,10 @@ -Announcing ncurses @VERSION@ +Announcing ncurses @VERSION@ Pre-Release @@ -22,8 +22,11 @@ considered 4.4BSD curses obsolete, and is encouraging the keepers of Unix releases such as BSD/OS, freeBSD and netBSD to switch over to ncurses.

-The ncurses code was developed under GNU/Linux. It should port easily to -any ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 Warp!

+The ncurses code was developed under GNU/Linux. +It has been in use for some time with OpenBSD as the system curses library, +and on FreeBSD and NetBSD as an external package. +It should port easily to any ANSI/POSIX-conforming UNIX. +It has even been ported to OS/2 Warp!

The distribution includes the library and support utilities, including a terminfo compiler tic(1), a decompiler infocmp(1), clear(1), tput(1), tset(1), @@ -34,331 +37,171 @@ The ncurses distribution is available via anonymous FTP at the GNU distribution site ftp://ftp.gnu.org/pub/gnu/ncurses.
It is also available at -ftp://dickey.his.com/ncurses. +ftp://invisible-island.net/ncurses.

Release Notes

-This release is designed to be upward compatible from ncurses 5.0 and 5.1; +This release is designed to be upward compatible from ncurses 5.0 and 5.2; very few applications will require recompilation, depending on the platform. -These are the highlights from the change-log since ncurses 5.1 release. +These are the highlights from the change-log since ncurses 5.2 release.

Interface changes:

    -
  • change type of ospeed variable back to - short to match its use in legacy applications. It was - altered after ncurses 4.2 to speed_t to repair a type - mismatch which was introduced after 1.9.4 in 1995. The principal - users of termcap continued to use short, which is - not the same size. -

    - NOTE: A few applications will have to be recompiled - (about 1% of the programs in a typical Linux distribution, - 10% of the programs that use ncurses). These are easy to - identify with nm or strings. - -

  • remove a private function _nc_can_clear_with(), which - was built with the configure --enable-expanded option but not used. - -
  • add several private functions (prefixed with "_nc_") for tracing - chtype values in the debug library, and for better - access and buffer limit checking. -
-New features and improvements: -
    -
  • rewrote tgoto() to make it better support existing - termcap applications which use hardcoded strings rather than obtain - all of their information from the termcap file. If the string does - not appear to be a terminfo string (i.e., does not refer to a "%p" - parameter, or terminfo-style padding), and termcap support is configured, tgoto() - will interpret it as termcap. Otherwise, as before, it will use - tparm(). - -
  • to ensure that the tgoto() changes work properly, - added checks to tic which report capabilities that do - not reference the expected number of parameters. - -
  • new configure script options: -
      -
    • option --disable-root-environ adds runtime checks - which tell ncurses to disregard $TERMINFO and similar environment - variables if the current user is root, or running setuid/setgid. - -
    • option --disable-assumed-color allows you to use the - pre-5.1 convention of default colors used for color-pair 0 to be - configured (see assume_default_colors()). - -
    • implement configure script options that transform installed - program names, e.g., --program-prefix, including the - manpage names and cross references. +
    • change type for bool used in headers to NCURSES_BOOL, + which usually is the same as the compiler's definition for + bool. -
    • option --with-database allows you to specify a - different terminfo source-file to install. On OS/2 EMX, the - default is misc/emx.src, otherwise misc/terminfo.src +
    • 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() +
      -
    • option --with-default-terminfo-dir allows you to - specify the default terminfo database directory. - -
    • option --with-libtool allows you to build with - libtool.

      NOTE: libtool - uses a different notation for numbering shared library versions - from the existing ncurses configuration. - -

    • option --with-manpage-tbl causes the manpages to be - preprocessed by tbl(1) prior to installation, - -
    • option --without-curses-h causes the installation - process to install curses.h as ncurses.h and make appropriate - changes to headers and manpages. -
    - -
  • modified configure script options: -
      -
    • change symbol used by the --install-prefix configure - option from INSTALL_PREFIX to DESTDIR - (the latter has become common usage although the name is - misleading). - -
    • modify ld -rpath options (e.g., Linux, and Solaris) - to use an absolute pathname for the build tree's lib directory, - avoiding confusion with directories relative to the current one - with the installed programs. - -
    • modified misc/run_tic.in to use - tic -o, to eliminate dependency on - $TERMINFO variable for installs. -
    +
  • add environment variable $NCURSES_ASSUMED_COLORS to + modify the assume_default_colors() extension. -
  • terminfo database: +
+New features and improvements: +
    +
  • Improved support for termcap applications:
      -
    • updated xterm terminfo entries to match XFree86 xterm patch #146. - -
    • added amiga-vnc, - Matrix Orbital, and - QNX qansi to misc/terminfo.src. +
    • 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. -
    • added os2 entry to misc/emx.src. +
    • 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. -
    • add S0 and E0 extensions to screen's terminfo entry - since otherwise the FreeBSD port makes it pass termcap equivalents - to tgoto, which would be misinterpreted by older - versions of ncurses. -
    +
  • 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. -
  • improvements to program usability: -
      -
    • 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. +
    • add tic -A option to suppress capabilities which are commented out + when translating to termcap. -
    • 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. +
    • modify logic in lib_baudrate.c for ospeed, for FreeBSD to make it + work properly for termcap applications (patch by Andrey A Chernov). -
    • add error checking to infocmp's -v and -m options to ensure that - the option value is indeed a number.
    -
  • improved performance: -
      -
    • replace a lookup table in lib_vidattr.c used to decode - no_color_video with a logic expression which is faster. -
    +
  • 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). +
  • 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.
Major bug fixes:
    -
  • correct manlinks.sed script introduced in ncurses 5.1 - to avoid using ERE "\+", which is not understood by standard versions - of sed. This happens to work with GNU sed, - but is not portable, and was the initial motivation for this release. - -
  • 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. - -
  • guard against corrupt terminfo data: -
      -
    • 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 parse_format() in lib_tparm.c to ignore - precision if it is longer than 10000. - -
    • rewrote limit checks in lib_mvcur.c using new functions - _nc_safe_strcat(), etc. Made other related changes to - check lengths used for strcat() and - strcpy(). -
    - -
  • corrections to screen optimization: -
      -
    • added special case in lib_vidattr.c to reset underline and - standout for devices that have no sgr0 defined. - -
    • 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. +
    • 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. -
    • modify rs2 capability in xterm-r6 and similar entries - where cursor save/restore bracketed the sequence for resetting video - attributes. The cursor restore would undo that. -
    - -
  • UTF-8 support: -
      -
    • when checking LC_ALL, LC_CTYPE, and 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. -
    - -
  • other library fixes: -
      -
    • added checks for an empty $HOME environment - variable, to avoid retrieving terminfo descriptions from - ./.terminfo . - -
    • change functions _nc_parse_entry() and - postprocess_termcap() to avoid using - strtok(), because it is non-reentrant. - -
    • 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. - -
    • add a check for null pointer in Make_Enum_Type(). - -
    • fix a heap problem with the c++ binding. +
    • 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(). -
    • correct missing includes for <string.h> in several places, - including the C++ binding. This is not noted by gcc unless we use - the -fno-builtin option. -
    +
  • 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. -
  • several fixes for tic: -
      -
    • 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). +
    • modified wresize() to ensure that a failed realloc will not corrupt + the window structure, and to make subwindows fit within the resized + window. -
    • modify tic to verify that its inputs are really files, - in case someone tries to read a directory (or - /dev/zero). +
    • altered resizeterm() to avoid having it fail when a child window + cannot be resized because it would be larger than its parent. -
    • correct an uninitialized parameter to open_tempfile() - in tic.c which made "tic -I" give an ambiguous error message about - tmpnam. +
    • 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. -
    • 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. -
    +
  • 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. -
  • using new checks in tic for parameter counts in - capability strings, found/fixed several errors both in the - terminfo database and in the include/Caps file. -
      -
    • modified several terminfo capability strings, including the - definitions 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. This fixes a - problem where the generated termcap would contain a spurious "%p1" - for the terminfo "%p1%d". - -
    • correct parameter counts in include/Caps for dclk as well as some - printer-specific capabilities: csnm, defc, scs, scsd, smgtp, smglp. -
    +
  • add a check in relative_move() to guard against buffer overflow in + the overwrite logic. -
  • various fixes for install scripts used to support configure - --srcdir and --with-install-prefix. +
  • add some limit/pointer checks to -S option of tputs. -
  • 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. +
  • 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).
Portability:
  • configure script:
      -
    • newer config.guess, config.sub, including changes to support OS/2 - EMX. The configure script for OS/2 EMX still relies on a patch - since there is no (working) support for that platform in the main - autoconf distribution. +
    • 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 who do not read the INSTALL notes. -
    • 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. +
    • correct a typo in configure --enable-colorfgbg option, and move it + to the experimental section (cf: 20011208). -
    • change configure script to use AC_CANONICAL_SYSTEM rather than - AC_CANONICAL_HOST, which means that configure --target - will set a default program-prefix. +
    • modify configure script to allow building with termcap only, or with + fallbacks only. In this case, we do not build tic and toe. -
    • 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). +
    • 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. -
    • modify configure test for tcgetattr() to allow for - old implementations, e.g., on BeOS, which only defined it as a - macro. +
    • 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. -
    • 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. +
    • add several configure script options to aid with cross-compiling: + --with-build-cc, --with-build-cflags, --with-build-ldflags, and + --with-build-libs. -
    • 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". +
    • add experimental --with-caps=XXX option to customize to similar + terminfo database formats such as AIX 4.x -
    • change most remaining unquoted parameters of test in - configure script to use quotes, for instance fixing a problem in the - --disable-database option. - -
    • modify scripts so that "make install.data" works on OS/2 EMX. - -
    • modify scripts and makefiles so the Ada95 directory builds on - OS/2 EMX. -
    +
  • add configure option --with-ospeed to assist packagers in transition + to 5.3 change to ospeed type. +
  • library:
      -
    • 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. +
    • implement a simple vsscanf() fallback function which uses the %n + conversion to help parse the input data. -
    • improved OS/2 mouse support by retrying as a 2-button mouse if code - fails to set up a 3-button mouse. +
    • various fixes to build/work with different implementations of + vsscanf(). -
    • added private entrypoint _nc_basename(), used to - consolidate related code in progs, as well as accommodating OS/2 EMX - pathnames. +
    • add/use macro to suppress sign-extension of char type on + platforms where this is a problem in ctype macros, e.g., Solaris. -
    • alter definition of NCURSES_CONST to make it non-empty. +
    • finish changes needed to build dll's on cygwin. -
    • redefine 'TEXT' in menu.h for AMIGA, since it is reported to have - an (unspecified) symbol conflict. +
    • add #undef's before possible redefinition of ERR and OK in curses.h
  • programs:
      -
    • 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). -
    +
  • modify ifdef's in write_entry.c to allow use of symbolic links on + platforms with no hard links, e.g., BeOS. + +
  • 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. +
  • 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". +

    Features of Ncurses

    @@ -474,23 +317,23 @@ including (versions starting with those noted):
    cdk
    Curses Development Kit
    -http://www.vexus.ca/CDK.html +http://invisible-island.net/cdk.
    -http://dickey.his.com/cdk. +http://www.vexus.ca/CDK.html
    ded
    directory-editor
    -http://dickey.his.com/ded. +http://invisible-island.net/ded.
    dialog
    the underlying application used in Slackware's setup, and the basis for similar applications on GNU/Linux.
    -http://dickey.his.com/dialog. +http://invisible-island.net/dialog.
    lynx
    the character-screen WWW browser
    http://lynx.isc.org/release. -
    Midnight Commander 4.1 +
    Midnight Commander
    file manager
    www.gnome.org/mc/. @@ -528,7 +371,7 @@ as well as some that use ncurses for the terminfo support alone:
    vile
    vi-like-emacs
    -http://dickey.his.com/vile. +http://invisible-island.net/vile.

    @@ -543,7 +386,7 @@ HREF="mailto:zmbenhal@netcom.com">Zeyd Ben-Halim and Ongoing work is being done by Thomas Dickey and -Jürgen Pfeifer. +Jürgen Pfeifer. Thomas Dickey acts as the maintainer for the Free Software Foundation, which holds the copyright on ncurses. @@ -561,7 +404,7 @@ 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://dickey.his.com/ncurses. +ftp://invisible-island.net/ncurses.

    Future Plans

      diff --git a/c++/Makefile.in b/c++/Makefile.in index 63049945..9555320e 100644 --- a/c++/Makefile.in +++ b/c++/Makefile.in @@ -1,6 +1,6 @@ -# $Id: Makefile.in,v 1.56 2000/10/15 00:43:38 tom Exp $ +# $Id: Makefile.in,v 1.64 2002/01/19 20:25:31 NIIBE.Yutaka Exp $ ############################################################################## -# Copyright (c) 1998,1999 Free Software Foundation, Inc. # +# Copyright (c) 1998,1999,2000,2001,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"), # @@ -55,9 +55,13 @@ INSTALL_DATA = @INSTALL_DATA@ AR = @AR@ AR_OPTS = @AR_OPTS@ + +CXX_AR = @CXX_AR@ +CXX_AR_OPTS = @CXX_AR_OPTS@ RANLIB = @RANLIB@ CXX = @CXX@ +CPP = @CPP@ CXXFLAGS = @CXXFLAGS@ CXXLIBS = @CXXLIBS@ @@ -87,9 +91,9 @@ LIBNAME_LIBTOOL = @LIB_PREFIX@$(LIBROOT)@LIB_SUFFIX@.la LIBNAME_NORMAL = @LIB_PREFIX@$(LIBROOT)@LIB_SUFFIX@.a LIBNAME = @LIB_PREFIX@$(LIBROOT)@CXX_LIB_SUFFIX@ -LINK_FLAGS = @EXTRA_LDFLAGS@ -L../lib -L$(libdir) -l$(LIBROOT) +LINK_FLAGS = @EXTRA_LDFLAGS@ -L../lib -l$(LIBROOT)@LIB_SUFFIX@ -LINK_LIBTOOL = @EXTRA_LDFLAGS@ -L../lib -L$(libdir) ../lib/$(LIBNAME) +LINK_LIBTOOL = @EXTRA_LDFLAGS@ -L../lib ../lib/$(LIBNAME) LINK_NORMAL = $(LINK_FLAGS) LINK_DEBUG = $(LINK_FLAGS) LINK_PROFILE = $(LINK_FLAGS) @@ -116,6 +120,8 @@ all :: demo$x sources : $(AUTO_SRC) +depend : + # Build a conventional library for installing, since a shared library would # pull in all of the ncurses libraries (panel, menu, form, ncurses) as direct # dependencies. @@ -130,7 +136,7 @@ LIB_OBJS = \ $(MODEL)/cursesmain.o ../lib/$(LIBNAME_NORMAL) : $(LIB_OBJS) - $(AR) $(AR_OPTS) $@ $? + $(CXX_AR) $(CXX_AR_OPTS) $@ $? $(RANLIB) $@ ../lib/$(LIBNAME_LIBTOOL) : $(LIB_OBJS) @@ -153,7 +159,7 @@ etip.h: $(srcdir)/etip.h.in $(srcdir)/edit_cfg.sh sh $(srcdir)/edit_cfg.sh ../include/ncurses_cfg.h $@ $(DESTDIR)$(libdir) : - $(srcdir)/../mkinstalldirs $@ + sh $(srcdir)/../mkinstalldirs $@ install \ install.libs:: ../lib/$(LIBNAME) $(DESTDIR)$(libdir) @@ -164,9 +170,10 @@ uninstall.libs:: -$(LIBTOOL) rm -f $(DESTDIR)$(libdir)/$(LIBNAME) mostlyclean :: - -rm -f core tags TAGS *~ *.ln *.atac trace + -rm -f core tags TAGS *~ *.bak *.i *.ii *.ln *.atac trace clean :: mostlyclean + -rm -rf $(MODEL)/SunWS_cache -$(LIBTOOL) rm -f demo$x $(AUTO_SRC) ../lib/$(LIBNAME) $(LIB_OBJS) $(LIB_OBJS:.o=.lo) $(OBJS_DEMO) -rm -rf .libs diff --git a/c++/README-first b/c++/README-first index eb37ac67..747fb1e7 100644 --- a/c++/README-first +++ b/c++/README-first @@ -55,4 +55,4 @@ Authors of first ncurses based release (NCursesWindow, NCursesPanel): and Anatoly Ivasyuk Author of this release: - Juergen Pfeifer + Juergen Pfeifer http://www.familiepfeifer.de/Contact.aspx?Lang=en diff --git a/c++/cursesapp.cc b/c++/cursesapp.cc index eaaadc7e..5b7ab5c0 100644 --- a/c++/cursesapp.cc +++ b/c++/cursesapp.cc @@ -1,6 +1,6 @@ // * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998,1999 Free Software Foundation, Inc. * + * Copyright (c) 1998,1999,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 * @@ -28,13 +28,14 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ -#include "cursesapp.h" #include "internal.h" +#include "cursesapp.h" -MODULE_ID("$Id: cursesapp.cc,v 1.6 1999/10/30 23:59:37 tom Exp $") +MODULE_ID("$Id: cursesapp.cc,v 1.9 2002/07/06 15:47:52 juergen Exp $") void NCursesApplication::init(bool bColors) { diff --git a/c++/cursesapp.h b/c++/cursesapp.h index f13fd1bd..3eb25d03 100644 --- a/c++/cursesapp.h +++ b/c++/cursesapp.h @@ -1,6 +1,6 @@ // * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998 Free Software Foundation, Inc. * + * 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 * @@ -28,17 +28,18 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ -// $Id: cursesapp.h,v 1.5 1999/05/16 17:29:59 juergen Exp $ +// $Id: cursesapp.h,v 1.8 2002/07/06 15:47:52 juergen Exp $ -#ifndef _CURSESAPP_H -#define _CURSESAPP_H +#ifndef NCURSES_CURSESAPP_H_incl +#define NCURSES_CURSESAPP_H_incl #include -class NCursesApplication { +class NCURSES_IMPEXP NCursesApplication { public: typedef struct _slk_link { // This structure is used to maintain struct _slk_link* prev; // a stack of SLKs @@ -160,4 +161,4 @@ public: }; -#endif // _CURSESAPP_H +#endif // NCURSES_CURSESAPP_H_incl diff --git a/c++/cursesf.cc b/c++/cursesf.cc index a3b066cb..aff7b4f8 100644 --- a/c++/cursesf.cc +++ b/c++/cursesf.cc @@ -1,6 +1,6 @@ // * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998 Free Software Foundation, Inc. * + * Copyright (c) 1998,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 * @@ -28,15 +28,16 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ +#include "internal.h" #include "cursesf.h" #include "cursesapp.h" -#include "internal.h" -MODULE_ID("$Id: cursesf.cc,v 1.11 2000/06/09 16:15:40 juergen Exp $") - +MODULE_ID("$Id: cursesf.cc,v 1.15 2002/07/06 15:47:52 juergen Exp $") + NCursesFormField::~NCursesFormField () { if (field) OnError(::free_field (field)); @@ -54,16 +55,16 @@ NCursesForm::mapFields(NCursesFormField* nfields[]) { 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,(FIELD**)0); delete[] old_fields; @@ -104,7 +105,7 @@ NCursesForm::InitForm(NCursesFormField* nfields[], bool with_frame, bool autoDelete_Fields) { int mrows, mcols; - + keypad(TRUE); meta(TRUE); @@ -115,24 +116,24 @@ NCursesForm::InitForm(NCursesFormField* nfields[], 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,(void*)hook); - + ::set_form_init (form, NCursesForm::frm_init); ::set_form_term (form, NCursesForm::frm_term); ::set_field_init (form, NCursesForm::fld_init); ::set_field_term (form, NCursesForm::fld_term); - + scale(mrows, mcols); ::set_form_win(form, w); - + if (with_frame) { if ((mrows > height()-2) || (mcols > width()-2)) - OnError(E_NO_ROOM); + OnError(E_NO_ROOM); sub = new NCursesWindow(*this,mrows,mcols,1,1,'r'); ::set_form_sub(form, sub->w); b_sub_owner = TRUE; @@ -161,14 +162,14 @@ NCursesForm::~NCursesForm() { if (b_autoDelete) { if (cnt>0) { for (int i=0; i <= cnt; i++) - delete my_fields[i]; + delete my_fields[i]; } delete[] my_fields; } ::free_form(form); // It's essential to do this after free_form() - delete[] fields; + delete[] fields; } } @@ -186,7 +187,7 @@ NCursesForm::setSubWindow(NCursesWindow& nsub) { /* 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 + * so in C++ providing a hook is done simply by * implementing a virtual method in a derived class */ void @@ -228,7 +229,7 @@ NCursesForm::On_Field_Termination(NCursesFormField& field) { } // call the form driver and do basic error checking. -int +int NCursesForm::driver (int c) { int res = ::form_driver (form, c); switch (res) { @@ -244,15 +245,15 @@ NCursesForm::driver (int c) { } void NCursesForm::On_Request_Denied(int c) const { - beep(); + ::beep(); } void NCursesForm::On_Invalid_Field(int c) const { - beep(); + ::beep(); } void NCursesForm::On_Unknown_Command(int c) const { - beep(); + ::beep(); } static const int CMD_QUIT = MAX_COMMAND + 1; @@ -266,8 +267,8 @@ NCursesForm::operator()(void) { post(); show(); refresh(); - - while (((drvCmnd = virtualize((c=getch()))) != CMD_QUIT)) { + + while (((drvCmnd = virtualize((c=getKey()))) != CMD_QUIT)) { switch((err=driver(drvCmnd))) { case E_REQUEST_DENIED: On_Request_Denied(c); @@ -295,7 +296,7 @@ NCursesForm::operator()(void) { // code c into a form request code. // The default implementation provides a hopefully straightforward // mapping for the most common keystrokes and form requests. -int +int NCursesForm::virtualize(int c) { switch(c) { @@ -318,7 +319,7 @@ NCursesForm::virtualize(int c) { 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('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 @@ -341,7 +342,7 @@ NCursesForm::virtualize(int c) { case CTRL('N') : return(REQ_NEXT_CHOICE); case CTRL('P') : return(REQ_PREV_CHOICE); - + default: return(c); } @@ -362,7 +363,7 @@ bool UserDefinedFieldType::fcheck(FIELD *f, const void *u) { bool UserDefinedFieldType::ccheck(int c, const void *u) { NCursesFormField* F = (NCursesFormField*)u; assert(F != 0); - UserDefinedFieldType* udf = + UserDefinedFieldType* udf = (UserDefinedFieldType*)(F->fieldtype()); assert(udf != 0); return udf->char_check(c); @@ -383,7 +384,7 @@ FIELDTYPE* UserDefinedFieldType_With_Choice::generic_fieldtype_with_choice = bool UserDefinedFieldType_With_Choice::next_choice(FIELD *f, const void *u) { NCursesFormField* F = (NCursesFormField*)u; assert(F != 0); - UserDefinedFieldType_With_Choice* udf = + UserDefinedFieldType_With_Choice* udf = (UserDefinedFieldType_With_Choice*)(F->fieldtype()); assert(udf != 0); return udf->next(*F); @@ -392,7 +393,7 @@ bool UserDefinedFieldType_With_Choice::next_choice(FIELD *f, const void *u) { bool UserDefinedFieldType_With_Choice::prev_choice(FIELD *f, const void *u) { NCursesFormField* F = (NCursesFormField*)u; assert(F != 0); - UserDefinedFieldType_With_Choice* udf = + UserDefinedFieldType_With_Choice* udf = (UserDefinedFieldType_With_Choice*)(F->fieldtype()); assert(udf != 0); return udf->previous(*F); @@ -408,7 +409,7 @@ public: UserDefinedFieldType::makearg, NULL, NULL); - if (code==E_OK) + if (code==E_OK) code = ::set_fieldtype_arg (UserDefinedFieldType_With_Choice::generic_fieldtype_with_choice, UserDefinedFieldType::makearg, diff --git a/c++/cursesf.h b/c++/cursesf.h index 40f41461..abd2a7dc 100644 --- a/c++/cursesf.h +++ b/c++/cursesf.h @@ -1,6 +1,6 @@ // * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998,1999,2000 Free Software Foundation, Inc. * + * Copyright (c) 1998,1999,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 * @@ -28,13 +28,14 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ -// $Id: cursesf.h,v 1.12 2000/07/15 21:08:25 tom Exp $ +// $Id: cursesf.h,v 1.17 2002/07/06 15:47:52 juergen Exp $ -#ifndef _CURSESF_H -#define _CURSESF_H +#ifndef NCURSES_CURSESF_H_incl +#define NCURSES_CURSESF_H_incl 1 #include #include @@ -47,11 +48,11 @@ extern "C" { // The abstract base class for buitin and user defined Fieldtypes. // ------------------------------------------------------------------------- // -class NCursesFormField; // forward declaration +class NCURSES_IMPEXP NCursesFormField; // forward declaration // Class to represent builtin field types as well as C++ written new // fieldtypes (see classes UserDefineFieldType... -class NCursesFieldType { +class NCURSES_IMPEXP NCursesFieldType { friend class NCursesFormField; protected: @@ -80,7 +81,7 @@ public: // The class representing a forms field, wrapping the lowlevel FIELD struct // ------------------------------------------------------------------------- // -class NCursesFormField { +class NCURSES_IMPEXP NCursesFormField { friend class NCursesForm; protected: @@ -265,7 +266,7 @@ public: OnError(::set_field_buffer(field,buffer,val)); } - // Retrieve the value of a fields buffer. The defaukt buffer is nr. 0 + // 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); } @@ -288,7 +289,7 @@ public: // The class representing a form, wrapping the lowlevel FORM struct // ------------------------------------------------------------------------- // -class NCursesForm : public NCursesPanel { +class NCURSES_IMPEXP NCursesForm : public NCursesPanel { protected: FORM* form; // the lowlevel structure @@ -541,7 +542,7 @@ public: // data belongs to some class T. Use T as template argument // to create a UserField. // ------------------------------------------------------------------------- -template class NCursesUserField : public NCursesFormField +template class NCURSES_IMPEXP NCursesUserField : public NCursesFormField { public: NCursesUserField (int rows, @@ -574,7 +575,7 @@ public: // The same mechanism is used to attach user data to a form // ------------------------------------------------------------------------- // -template class NCursesUserForm : public NCursesForm +template class NCURSES_IMPEXP NCursesUserForm : public NCursesForm { protected: // 'Internal' constructor, builds an object without association to a @@ -637,7 +638,7 @@ public: // Builtin Fieldtypes // ------------------------------------------------------------------------- // -class Alpha_Field : public NCursesFieldType { +class NCURSES_IMPEXP Alpha_Field : public NCursesFieldType { private: int min_field_width; @@ -652,7 +653,7 @@ public: } }; -class Alphanumeric_Field : public NCursesFieldType { +class NCURSES_IMPEXP Alphanumeric_Field : public NCursesFieldType { private: int min_field_width; @@ -667,7 +668,7 @@ public: } }; -class Integer_Field : public NCursesFieldType { +class NCURSES_IMPEXP Integer_Field : public NCursesFieldType { private: int precision; long lower_limit, upper_limit; @@ -684,7 +685,7 @@ public: } }; -class Numeric_Field : public NCursesFieldType { +class NCURSES_IMPEXP Numeric_Field : public NCursesFieldType { private: int precision; double lower_limit, upper_limit; @@ -701,7 +702,7 @@ public: } }; -class Regular_Expression_Field : public NCursesFieldType { +class NCURSES_IMPEXP Regular_Expression_Field : public NCursesFieldType { private: char* regex; @@ -712,8 +713,8 @@ private: public: Regular_Expression_Field(const char *expr) : NCursesFieldType(TYPE_REGEXP) { - regex = new char[1+::strlen(expr)]; - (strcpy)(regex,expr); + regex = new char[1 + ::strlen(expr)]; + (::strcpy)(regex,expr); } ~Regular_Expression_Field() { @@ -721,7 +722,7 @@ public: } }; -class Enumeration_Field : public NCursesFieldType { +class NCURSES_IMPEXP Enumeration_Field : public NCursesFieldType { private: char** list; int case_sensitive; @@ -742,7 +743,7 @@ public: } }; -class IPV4_Address_Field : public NCursesFieldType { +class NCURSES_IMPEXP IPV4_Address_Field : public NCursesFieldType { private: void set(NCursesFormField& f) { OnError(::set_field_type(f.get_field(),fieldtype)); @@ -757,7 +758,7 @@ public: // Abstract base class for User-Defined Fieldtypes // ------------------------------------------------------------------------- // -class UserDefinedFieldType : public NCursesFieldType { +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 @@ -793,7 +794,7 @@ public: // Abstract base class for User-Defined Fieldtypes with Choice functions // ------------------------------------------------------------------------- // -class UserDefinedFieldType_With_Choice : public UserDefinedFieldType { +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 @@ -820,5 +821,5 @@ public: } }; -#endif // _CURSESF_H +#endif // NCURSES_CURSESF_H_incl diff --git a/c++/cursesm.cc b/c++/cursesm.cc index 3b4dbd58..f1ff5766 100644 --- a/c++/cursesm.cc +++ b/c++/cursesm.cc @@ -1,6 +1,6 @@ // * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998,1999 Free Software Foundation, Inc. * + * Copyright (c) 1998,1999,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 * @@ -28,21 +28,22 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ +#include "internal.h" #include "cursesm.h" #include "cursesapp.h" -#include "internal.h" -MODULE_ID("$Id: cursesm.cc,v 1.12 1999/10/30 23:59:37 tom Exp $") - +MODULE_ID("$Id: cursesm.cc,v 1.17 2002/07/06 15:47:52 juergen Exp $") + NCursesMenuItem::~NCursesMenuItem() { if (item) OnError(::free_item(item)); } -bool +bool NCursesMenuItem::action() { return FALSE; }; @@ -50,7 +51,7 @@ NCursesMenuItem::action() { NCursesMenuCallbackItem::~NCursesMenuCallbackItem() { } -bool +bool NCursesMenuCallbackItem::action() { if (p_fct) return p_fct (*this); @@ -60,7 +61,7 @@ NCursesMenuCallbackItem::action() { /* 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 + * so in C++ providing a hook is done simply by * implementing a virtual method in a derived class */ void @@ -91,21 +92,21 @@ NCursesMenu::itm_term(MENU *m) { ITEM** NCursesMenu::mapItems(NCursesMenuItem* nitems[]) { int itemCount = 0,lcv; - + for (lcv=0; nitems[lcv]->item; ++lcv) ++itemCount; - + ITEM** items = new ITEM*[itemCount + 1]; - + for (lcv=0;nitems[lcv]->item;++lcv) { items[lcv] = nitems[lcv]->item; } items[lcv] = NULL; - + my_items = nitems; - + if (menu) - delete[] ::menu_items(menu); + delete[] ::menu_items(menu); return items; } @@ -114,7 +115,7 @@ NCursesMenu::InitMenu(NCursesMenuItem* nitems[], bool with_frame, bool autoDelete_Items) { int mrows, mcols; - + keypad(TRUE); meta(TRUE); @@ -125,24 +126,24 @@ NCursesMenu::InitMenu(NCursesMenuItem* nitems[], 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,(void*)hook); - + ::set_menu_init (menu, NCursesMenu::mnu_init); ::set_menu_term (menu, NCursesMenu::mnu_term); ::set_item_init (menu, NCursesMenu::itm_init); ::set_item_term (menu, NCursesMenu::itm_term); - + scale(mrows, mcols); ::set_menu_win(menu, w); - + if (with_frame) { if ((mrows > height()-2) || (mcols > width()-2)) - OnError(E_NO_ROOM); + OnError(E_NO_ROOM); sub = new NCursesWindow(*this,mrows,mcols,1,1,'r'); ::set_menu_sub(menu, sub->w); b_sub_owner = TRUE; @@ -180,14 +181,14 @@ NCursesMenu::~NCursesMenu() { if (b_autoDelete) { if (cnt>0) { for (int i=0; i <= cnt; i++) - delete my_items[i]; + delete my_items[i]; } delete[] my_items; } ::free_menu(menu); // It's essential to do this after free_menu() - delete[] itms; + delete[] itms; } } @@ -218,7 +219,7 @@ NCursesMenu::set_pattern (const char *pat) { } // call the menu driver and do basic error checking. -int +int NCursesMenu::driver (int c) { int res = ::menu_driver (menu, c); switch (res) { @@ -243,7 +244,7 @@ static const int CMD_ACTION = MAX_COMMAND + 2; // The default implementation provides a hopefully straightforward // mapping for the most common keystrokes and menu requests. // ------------------------------------------------------------------------- -int +int NCursesMenu::virtualize(int c) { switch(c) { case CTRL('X') : return(CMD_QUIT); // eXit @@ -291,8 +292,8 @@ NCursesMenu::operator()(void) { show(); refresh(); - while (!b_action && ((drvCmnd = virtualize((c=getch()))) != CMD_QUIT)) { - + while (!b_action && ((drvCmnd = virtualize((c=getKey()))) != CMD_QUIT)) { + switch((err=driver(drvCmnd))) { case E_REQUEST_DENIED: On_Request_Denied(c); @@ -363,21 +364,20 @@ NCursesMenu::On_Item_Termination(NCursesMenuItem& item) { void NCursesMenu::On_Request_Denied(int c) const { - beep(); + ::beep(); } void NCursesMenu::On_Not_Selectable(int c) const { - beep(); + ::beep(); } void NCursesMenu::On_No_Match(int c) const { - beep(); + ::beep(); } void NCursesMenu::On_Unknown_Command(int c) const { - beep(); + ::beep(); } - diff --git a/c++/cursesm.h b/c++/cursesm.h index 26e0b4ce..8873eca3 100644 --- a/c++/cursesm.h +++ b/c++/cursesm.h @@ -1,6 +1,6 @@ // * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998,1999 Free Software Foundation, Inc. * + * Copyright (c) 1998,1999,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 * @@ -28,13 +28,14 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ -// $Id: cursesm.h,v 1.13 1999/10/30 23:59:37 tom Exp $ +// $Id: cursesm.h,v 1.16 2002/07/06 15:47:52 juergen Exp $ -#ifndef _CURSESM_H -#define _CURSESM_H +#ifndef NCURSES_CURSESM_H_incl +#define NCURSES_CURSESM_H_incl 1 #include @@ -46,7 +47,7 @@ extern "C" { // This wraps the ITEM type of // ------------------------------------------------------------------------- // -class NCursesMenuItem { +class NCURSES_IMPEXP NCursesMenuItem { friend class NCursesMenu; protected: @@ -135,7 +136,7 @@ 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 NCursesMenuCallbackItem : public NCursesMenuItem { +class NCURSES_IMPEXP NCursesMenuCallbackItem : public NCursesMenuItem { private: ITEMCALLBACK* p_fct; @@ -156,7 +157,7 @@ public: // This wraps the MENU type of // ------------------------------------------------------------------------- // -class NCursesMenu : public NCursesPanel { +class NCURSES_IMPEXP NCursesMenu : public NCursesPanel { protected: MENU *menu; @@ -514,7 +515,7 @@ public: // to create a UserItem. // ------------------------------------------------------------------------- // -template class NCursesUserItem : public NCursesMenuItem +template class NCURSES_IMPEXP NCursesUserItem : public NCursesMenuItem { public: NCursesUserItem (const char* p_name, @@ -541,7 +542,7 @@ public: // The same mechanism is used to attach user data to a menu // ------------------------------------------------------------------------- // -template class NCursesUserMenu : public NCursesMenu +template class NCURSES_IMPEXP NCursesUserMenu : public NCursesMenu { protected: NCursesUserMenu( int lines, @@ -589,4 +590,4 @@ public: } }; -#endif // _CURSESM_H +#endif // NCURSES_CURSESM_H_incl diff --git a/c++/cursesmain.cc b/c++/cursesmain.cc index 09400b8d..7a3721dd 100644 --- a/c++/cursesmain.cc +++ b/c++/cursesmain.cc @@ -1,6 +1,6 @@ // * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998 Free Software Foundation, Inc. * + * Copyright (c) 1998,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 * @@ -28,13 +28,14 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ -#include "cursesapp.h" #include "internal.h" +#include "cursesapp.h" -MODULE_ID("$Id: cursesmain.cc,v 1.5 1999/05/16 17:31:22 juergen Exp $") +MODULE_ID("$Id: cursesmain.cc,v 1.9 2002/07/06 15:47:52 juergen Exp $") /* This is the default implementation of main() for a NCursesApplication. * You only have to instantiate a static NCursesApplication object in your @@ -45,7 +46,13 @@ int main(int argc, char* argv[]) NCursesApplication* A = NCursesApplication::getApplication(); if (!A) return(1); - A->handleArgs(argc,argv); - ::endwin(); - return((*A)()); + else { + int res; + + A->handleArgs(argc,argv); + ::endwin(); + res = (*A)(); + ::endwin(); + return(res); + } } diff --git a/c++/cursesp.cc b/c++/cursesp.cc index 50095d3d..2e6931b1 100644 --- a/c++/cursesp.cc +++ b/c++/cursesp.cc @@ -1,6 +1,6 @@ // * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998,1999,2000 Free Software Foundation, Inc. * + * Copyright (c) 1998,1999,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 * @@ -28,14 +28,15 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1993,1997 * + * Author: Juergen Pfeifer, 1993, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ -#include "cursesp.h" #include "internal.h" +#include "cursesp.h" #include -MODULE_ID("$Id: cursesp.cc,v 1.16 2000/07/15 21:08:13 tom Exp $") +MODULE_ID("$Id: cursesp.cc,v 1.20 2002/07/13 11:35:08 juergen Exp $") NCursesPanel* NCursesPanel::dummy = (NCursesPanel*)0; @@ -75,7 +76,7 @@ NCursesPanel::redraw() { int NCursesPanel::refresh() { ::update_panels(); - return doupdate(); + return ::doupdate(); } int @@ -116,9 +117,14 @@ NCursesPanel::label(const char *tLabel, const char *bLabel) { void NCursesPanel::centertext(int row,const char *label) { if (label) { - int x = (maxx() - strlen(label)) / 2; + int x = (maxx() - ::strlen(label)) / 2; if (x<0) x=0; OnError(addstr(row, x, label, width())); } } + +int +NCursesPanel::getKey(void) { + return getch(); +} diff --git a/c++/cursesp.h b/c++/cursesp.h index 6293dd10..f5295e41 100644 --- a/c++/cursesp.h +++ b/c++/cursesp.h @@ -1,6 +1,6 @@ // * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998,1999 Free Software Foundation, Inc. * + * Copyright (c) 1998,1999,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 * @@ -28,13 +28,14 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ -#ifndef _CURSESP_H -#define _CURSESP_H +#ifndef NCURSES_CURSESP_H_incl +#define NCURSES_CURSESP_H_incl 1 -// $Id: cursesp.h,v 1.12 1999/10/31 00:00:02 tom Exp $ +// $Id: cursesp.h,v 1.17 2002/07/06 15:47:52 juergen Exp $ #include @@ -42,7 +43,7 @@ extern "C" { # include } -class NCursesPanel : public NCursesWindow { +class NCURSES_IMPEXP NCursesPanel : public NCursesWindow { protected: PANEL *p; static NCursesPanel *dummy; @@ -79,6 +80,9 @@ protected: // 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 lines, int cols, @@ -215,4 +219,4 @@ public: // Associate the user panel with the user data pointed to by p_UserData. }; -#endif // _CURSESP_H +#endif // NCURSES_CURSESP_H_incl diff --git a/c++/cursespad.cc b/c++/cursespad.cc index b82d3939..815f51ce 100644 --- a/c++/cursespad.cc +++ b/c++/cursespad.cc @@ -1,6 +1,6 @@ // * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1999 Free Software Foundation, Inc. * + * Copyright (c) 1998-2001,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 * @@ -28,14 +28,15 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1999 * + * Author: Juergen Pfeifer, 1999 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ +#include "internal.h" #include "etip.h" #include "cursesw.h" -#include "internal.h" -MODULE_ID("$Id: cursespad.cc,v 1.2 1999/09/11 23:25:54 tom Exp $") +MODULE_ID("$Id: cursespad.cc,v 1.6 2002/09/22 19:32:55 tom Exp $") NCursesPad::NCursesPad(int lines, int cols) : NCursesWindow(), @@ -53,7 +54,8 @@ NCursesPad::NCursesPad(int lines, int cols) } -int NCursesPad::driver (int key) { +int NCursesPad::driver (int key) +{ // Default implementation switch(key) { case KEY_UP: @@ -79,7 +81,8 @@ int NCursesPad::driver (int key) { } -void NCursesPad::operator()(void) { +void NCursesPad::operator()(void) +{ NCursesWindow* W = Win(); if ((NCursesWindow*)0 != W) { @@ -164,7 +167,8 @@ void NCursesPad::operator()(void) { } -int NCursesPad::refresh() { +int NCursesPad::refresh() +{ int res = noutrefresh(); if (res==OK && ((NCursesWindow*)0 != viewWin)) { res = (viewWin->refresh()); @@ -172,7 +176,8 @@ int NCursesPad::refresh() { return(res); } -int NCursesPad::noutrefresh() { +int NCursesPad::noutrefresh() +{ int res = OK; NCursesWindow* W = Win(); if ((NCursesWindow*)0 != W) { @@ -210,7 +215,8 @@ void NCursesPad::setSubWindow(NCursesWindow& sub) viewSub = ⊂ } -void NCursesFramedPad::OnOperation(int pad_req) { +void NCursesFramedPad::OnOperation(int pad_req) +{ NCursesWindow* W = Win(); NCursesWindow* Win = getWindow(); diff --git a/c++/cursesw.cc b/c++/cursesw.cc index b61a7056..905a7b52 100644 --- a/c++/cursesw.cc +++ b/c++/cursesw.cc @@ -19,13 +19,14 @@ modified by Ulrich Drepper (drepper@karlsruhe.gmd.de) and Anatoly Ivasyuk (anatoly@nick.csh.rit.edu) - modified by Juergen Pfeifer (juergen.pfeifer@gmx.net) + modified by Juergen Pfeifer + Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en */ -#include "cursesw.h" #include "internal.h" +#include "cursesw.h" -MODULE_ID("$Id: cursesw.cc,v 1.17 2000/09/02 18:55:31 tom Exp $") +MODULE_ID("$Id: cursesw.cc,v 1.25 2002/07/06 15:47:52 juergen Exp $") #define COLORS_NEED_INITIALIZATION -1 #define COLORS_NOT_INITIALIZED 0 @@ -36,6 +37,14 @@ MODULE_ID("$Id: cursesw.cc,v 1.17 2000/09/02 18:55:31 tom Exp $") long NCursesWindow::count = 0L; bool NCursesWindow::b_initialized = FALSE; +/* + * The ncurses library has a fallback for vsscanf(), which may work... + */ +#if !(USE_STRSTREAM_VSCAN || USE_STRSTREAM_VSCAN_CAST) +# undef USE_STDIO_VSCAN +# define USE_STDIO_VSCAN 1 +#endif + #if defined(__GNUG__) # ifndef _IO_va_list # define _IO_va_list char * @@ -45,43 +54,56 @@ bool NCursesWindow::b_initialized = FALSE; int NCursesWindow::scanw(const char* fmt, ...) { -#if defined(__GNUG__) - va_list args; - va_start(args, fmt); + int result = ERR; char buf[BUFSIZ]; - int result = wgetstr(w, buf); - if (result == OK) { + + if (::wgetnstr(w, buf, sizeof(buf)) != ERR) { + va_list args; + va_start(args, fmt); +#if USE_STDIO_VSCAN + if (::vsscanf(buf, fmt, args) != -1) + result = OK; +#elif USE_STRSTREAM_VSCAN /* powerpc, os390 */ + strstreambuf ss(buf, sizeof(buf)); + if (ss.vscan(fmt, args) != -1) + result = OK; +#elif USE_STRSTREAM_VSCAN_CAST /* pre-gcc 3.0 */ strstreambuf ss(buf, sizeof(buf)); - result = ss.vscan(fmt, (_IO_va_list)args); + if (ss.vscan(fmt, (_IO_va_list)args) != -1) + result = OK; +#endif + va_end(args); } - va_end(args); return result; -#else - return ERR; -#endif } int NCursesWindow::scanw(int y, int x, const char* fmt, ...) { -#if defined(__GNUG__) - va_list args; - va_start(args, fmt); + int result = ERR; char buf[BUFSIZ]; - int result = wmove(w, y, x); - if (result == OK) { - result = wgetstr(w, buf); - if (result == OK) { + + if (::wmove(w, y, x) != ERR) { + if (::wgetnstr(w, buf, sizeof(buf)) != ERR) { + va_list args; + va_start(args, fmt); +#if USE_STDIO_VSCAN + if (::vsscanf(buf, fmt, args) != -1) + result = OK; +#elif USE_STRSTREAM_VSCAN /* powerpc, os390 */ + strstreambuf ss(buf, sizeof(buf)); + if (ss.vscan(fmt, args) != -1) + result = OK; +#elif USE_STRSTREAM_VSCAN_CAST /* pre-gcc 3.0 */ strstreambuf ss(buf, sizeof(buf)); - result = ss.vscan(fmt, (_IO_va_list)args); + if (ss.vscan(fmt, (_IO_va_list)args) != -1) + result = OK; +#endif + va_end(args); } } - va_end(args); return result; -#else - return ERR; -#endif } @@ -91,7 +113,7 @@ NCursesWindow::printw(const char * fmt, ...) va_list args; va_start(args, fmt); char buf[BUFSIZ]; - vsprintf(buf, fmt, args); + ::vsprintf(buf, fmt, args); va_end(args); return waddstr(w, buf); } @@ -102,10 +124,10 @@ NCursesWindow::printw(int y, int x, const char * fmt, ...) { va_list args; va_start(args, fmt); - int result = wmove(w, y, x); + int result = ::wmove(w, y, x); if (result == OK) { char buf[BUFSIZ]; - vsprintf(buf, fmt, args); + ::vsprintf(buf, fmt, args); result = waddstr(w, buf); } va_end(args); @@ -142,8 +164,7 @@ NCursesWindow::initialize() { } NCursesWindow::NCursesWindow() { - if (!b_initialized) - initialize(); + initialize(); w = (WINDOW *)0; init(); @@ -154,8 +175,7 @@ NCursesWindow::NCursesWindow() { NCursesWindow::NCursesWindow(int lines, int cols, int begin_y, int begin_x) { - if (!b_initialized) - initialize(); + initialize(); w = ::newwin(lines, cols, begin_y, begin_x); if (w == 0) { @@ -170,8 +190,7 @@ NCursesWindow::NCursesWindow(int lines, int cols, int begin_y, int begin_x) NCursesWindow::NCursesWindow(WINDOW* &window) { - if (!b_initialized) - initialize(); + initialize(); w = window; init(); @@ -183,6 +202,7 @@ NCursesWindow::NCursesWindow(WINDOW* &window) NCursesWindow::NCursesWindow(NCursesWindow& win, int l, int c, int begin_y, int begin_x, char absrel) { + initialize(); if (absrel == 'a') { // absolute origin begin_y -= win.begy(); begin_x -= win.begx(); @@ -208,6 +228,7 @@ NCursesWindow::NCursesWindow(NCursesWindow& win, int l, int c, NCursesWindow::NCursesWindow(NCursesWindow& win, bool do_box NCURSES_PARAM_INIT(TRUE)) { + initialize(); w = :: derwin(win.w,win.height()-2,win.width()-2,1,1); if (w == 0) { err_handler("Cannot construct subwindow"); @@ -244,6 +265,7 @@ static RIPOFFINIT* prip = R_INIT; extern "C" int _nc_ripoffline(int,int (*init)(WINDOW*,int)); NCursesWindow::NCursesWindow(WINDOW *win, int cols) { + initialize(); w = win; assert((w->_maxx+1)==cols); alloced = FALSE; @@ -323,7 +345,7 @@ NCursesWindow::~NCursesWindow() } if (alloced && w != 0) - delwin(w); + ::delwin(w); if (alloced) { --count; @@ -364,7 +386,7 @@ NCursesWindow::getcolor(int getback) const short fore, back; if (colorInitialized==COLORS_ARE_REALLY_THERE) { - if (pair_content((short)PAIR_NUMBER(w->_attrs), &fore, &back)) + if (::pair_content((short)PAIR_NUMBER(w->_attrs), &fore, &back)) err_handler("Can't get color pair"); } else { @@ -396,7 +418,7 @@ int NCursesWindow::setpalette(short fore, short back, short pair) { if (colorInitialized==COLORS_ARE_REALLY_THERE) - return init_pair(pair, fore, back); + return ::init_pair(pair, fore, back); else return OK; } diff --git a/c++/cursesw.h b/c++/cursesw.h index 8091194c..5383399d 100644 --- a/c++/cursesw.h +++ b/c++/cursesw.h @@ -1,19 +1,42 @@ // * This makes emacs happy -*-Mode: C++;-*- -#ifndef _CURSESW_H -#define _CURSESW_H - -// $Id: cursesw.h,v 1.18 1999/10/23 15:16:53 tom Exp $ +/**************************************************************************** + * Copyright (c) 1998,1999,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. * + ****************************************************************************/ + +#ifndef NCURSES_CURSESW_H_incl +#define NCURSES_CURSESW_H_incl 1 + +// $Id: cursesw.h,v 1.28 2001/07/15 01:17:56 tom Exp $ #include #include #include -#ifdef __MWERKS__ -/* This is a bogus check, stringstream is actually ANSI C++ standard, - * but old compilers like GCC don't have it, and new compilers like Metrowerks - * don't have strstream - */ -#include -#else + +#if HAVE_STRSTREAM_H && (USE_STRSTREAM_VSCAN||USE_STRSTREAM_VSCAN_CAST) #include #endif @@ -118,7 +141,7 @@ inline int UNDEF(clearok)(WINDOW* win, bool bf) { return clearok(win, bf); } #undef clearok #define clearok UNDEF(clearok) #else -extern "C" int clearok(WINDOW*, bool); +extern "C" NCURSES_IMPEXP int NCURSES_API clearok(WINDOW*, bool); #endif #ifdef clrtobot @@ -152,7 +175,7 @@ inline int UNDEF(erase)() { return erase(); } #endif #ifdef flushok -inline int UNDEF(flushok)(WINDOW* _win, bool _bf) { +inline int UNDEF(flushok)(WINDOW* _win, bool _bf) { return flushok(_win, _bf); } #undef flushok #define flushok UNDEF(flushok) @@ -185,49 +208,49 @@ inline int UNDEF(innstr)(char *_str, int n) { return innstr(_str,n); } #endif #ifdef mvwinnstr -inline int UNDEF(mvwinnstr)(WINDOW *win, int y, int x, char *_str, int n) { +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 mvinnstr -inline int UNDEF(mvinnstr)(int y, int x, char *_str, int n) { +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 winsstr -inline int UNDEF(winsstr)(WINDOW *w, const char *_str) { +inline int UNDEF(winsstr)(WINDOW *w, const char *_str) { return winsstr(w,_str); } #undef winsstr #define winsstr UNDEF(winsstr) #endif #ifdef mvwinsstr -inline int UNDEF(mvwinsstr)(WINDOW *w, int y, int x, const char *_str) { +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 insstr -inline int UNDEF(insstr)(const char *_str) { +inline int UNDEF(insstr)(const char *_str) { return insstr(_str); } #undef insstr #define insstr UNDEF(insstr) #endif #ifdef mvinsstr -inline int UNDEF(mvinsstr)(int y, int x,const char *_str) { +inline int UNDEF(mvinsstr)(int y, int x,const char *_str) { return mvinsstr(y,x,_str); } #undef mvinsstr #define mvinsstr UNDEF(mvinsstr) #endif #ifdef insnstr -inline int UNDEF(insnstr)(const char *_str, int n) { +inline int UNDEF(insnstr)(const char *_str, int n) { return insnstr(_str,n); } #undef insnstr #define insnstr UNDEF(insnstr) @@ -254,7 +277,7 @@ inline int UNDEF(getnstr)(char *_str, int n) { return getnstr(_str,n); } #endif #ifdef getyx -inline void UNDEF(getyx)(const WINDOW* win, int& y, int& x) { +inline void UNDEF(getyx)(const WINDOW* win, int& y, int& x) { getyx(win, y, x); } #undef getyx #define getyx UNDEF(getyx) @@ -301,7 +324,7 @@ inline int UNDEF(leaveok)(WINDOW* win, bool bf) { return leaveok(win, bf); } #undef leaveok #define leaveok UNDEF(leaveok) #else -extern "C" int leaveok(WINDOW* win, bool bf); +extern "C" NCURSES_IMPEXP int NCURSES_API leaveok(WINDOW* win, bool bf); #endif #ifdef move @@ -340,9 +363,9 @@ inline int UNDEF(scrollok)(WINDOW* win, bool bf) { return scrollok(win, bf); } #define scrollok UNDEF(scrollok) #else #if defined(__NCURSES_H) -extern "C" int scrollok(WINDOW*, bool); +extern "C" NCURSES_IMPEXP int NCURSES_API scrollok(WINDOW*, bool); #else -extern "C" int scrollok(WINDOW*, char); +extern "C" NCURSES_IMPEXP int NCURSES_API scrollok(WINDOW*, char); #endif #endif @@ -365,7 +388,7 @@ inline int UNDEF(standout)() { return standout(); } #endif #ifdef subpad -inline WINDOW *UNDEF(subpad)(WINDOW *p, int l, int c, int y, int x) +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) @@ -434,7 +457,7 @@ inline int UNDEF(wattroff)(WINDOW *win, int att) { return wattroff(win, att); } #endif #ifdef chgat -inline int UNDEF(chgat)(int n,attr_t attr, short color, const void *opts) { +inline int UNDEF(chgat)(int n,attr_t attr, short color, const void *opts) { return chgat(n,attr,color,opts); } #undef chgat #define chgat UNDEF(chgat) @@ -442,7 +465,7 @@ inline int UNDEF(chgat)(int n,attr_t attr, short color, const void *opts) { #ifdef mvchgat inline int UNDEF(mvchgat)(int y, int x, int n, - attr_t attr, short color, const void *opts) { + attr_t attr, short color, const void *opts) { return mvchgat(y,x,n,attr,color,opts); } #undef mvchgat #define mvchgat UNDEF(mvchgat) @@ -450,7 +473,7 @@ inline int UNDEF(mvchgat)(int y, int x, int n, #ifdef mvwchgat inline int UNDEF(mvwchgat)(WINDOW *win, int y, int x, int n, - attr_t attr, short color, const void *opts) { + attr_t attr, short color, const void *opts) { return mvwchgat(win,y,x,n,attr,color,opts); } #undef mvwchgat #define mvwchgat UNDEF(mvwchgat) @@ -538,7 +561,7 @@ inline int UNDEF(mvwgetnstr)(WINDOW *win, int y, int x, char *str, int n) #endif #ifdef mvwinch -inline chtype UNDEF(mvwinch)(WINDOW *win, int y, int x) { +inline chtype UNDEF(mvwinch)(WINDOW *win, int y, int x) { return mvwinch(win, y, x);} #undef mvwinch #define mvwinch UNDEF(mvwinch) @@ -671,18 +694,18 @@ inline void UNDEF(bkgdset)(chtype ch) { bkgdset(ch); } * */ -class NCursesWindow +class NCURSES_IMPEXP NCursesWindow { friend class NCursesMenu; friend class NCursesForm; - + private: static bool b_initialized; static void initialize(); static int ripoff_init(WINDOW *,int); - void init(); - + void init(); + short getcolor(int getback) const; static int setpalette(short fore, short back, short pair); @@ -700,15 +723,15 @@ protected: // 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. @@ -718,18 +741,18 @@ protected: public: NCursesWindow(WINDOW* &window); // useful only for stdscr - + NCursesWindow(int lines, // number of lines int cols, // number of columns int begin_y, // line origin int begin_x); // col origin - + NCursesWindow(NCursesWindow& par,// parent window int lines, // number of lines int cols, // number of columns int begin_y, // absolute or relative int begin_x, // origins: - char absrel = 'a');// if `a', by & bx are + 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 @@ -751,31 +774,31 @@ public: 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. + // 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 defered until ncurses gets initialized. + // creation of the window is deferred until ncurses gets initialized. // The initialization function is then called. // ------------------------------------------------------------------------- // terminal status // ------------------------------------------------------------------------- - int lines() const { return LINES; } + int lines() const { initialize(); return LINES; } // Number of lines on terminal, *not* window - int cols() const { return COLS; } + int cols() const { initialize(); return COLS; } // Number of cols on terminal, *not* window - int tabsize() const { return TABSIZE; } + 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(); } + int colors() const { return NumberOfColors(); } // Number of available colors - + // ------------------------------------------------------------------------- // window status // ------------------------------------------------------------------------- @@ -797,25 +820,25 @@ public: int maxy() const { return w->_maxy; } // Largest y coord in window - short getcolor() const; + short getcolor() const; // Actual color pair - short foreground() const { return getcolor(0); } + short foreground() const { return getcolor(0); } // Actual foreground color - short background() const { return getcolor(1); } + short background() const { return getcolor(1); } // Actual background color - int setpalette(short fore, short back); + int setpalette(short fore, short back); // Set color palette entry - int setcolor(short pair); + int setcolor(short pair); // Set actually used palette entry - + // ------------------------------------------------------------------------- // window positioning // ------------------------------------------------------------------------- - virtual int mvwin(int begin_y, int begin_x) { + 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. @@ -827,12 +850,12 @@ public: // Move cursor the this position void getyx(int& y, int& x) const { ::getyx(w, y, x); } - // Get current position of the cursor + // Get current position of the cursor - int mvcur(int oldrow, int oldcol, int newrow, int newcol) const { + 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 // ------------------------------------------------------------------------- @@ -842,13 +865,13 @@ public: 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) { + 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) { + 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. @@ -864,8 +887,7 @@ public: // as described above. int scanw(const char* fmt, ...) - // Perform a scanw function from the window. This only works if you're - // using the GNU C++ compiler. + // Perform a scanw function from the window. #if __GNUG__ >= 2 __attribute__ ((format (scanf, 2, 3))); #else @@ -874,18 +896,18 @@ public: int scanw(int y, int x, const char* fmt, ...) // Move the cursor to the requested position and then perform a scanw - // from the window. This nly works if you're using the GNU C++ compiler. + // from the window. #if __GNUG__ >= 2 __attribute__ ((format (scanf, 4, 5))); #else ; #endif - + // ------------------------------------------------------------------------- // output // ------------------------------------------------------------------------- int addch(const chtype ch) { return ::waddch(w, ch); } - // Put attributed character to the window. + // Put attributed character to the window. int addch(int y, int x, const chtype ch) { return ::mvwaddch(w,y,x,ch); } @@ -895,10 +917,10 @@ public: 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) { + int addstr(const char* str, int n=-1) { return ::waddnstr(w, (char*)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. + // 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,(char*)str,n); } @@ -907,7 +929,7 @@ public: int printw(const char* fmt, ...) // Do a formatted print to the window. -#if __GNUG__ >= 2 +#if (__GNUG__ >= 2) && !defined(printf) __attribute__ ((format (printf, 2, 3))); #else ; @@ -915,7 +937,7 @@ public: int printw(int y, int x, const char * fmt, ...) // Move the cursor and then do a formatted print to the window. -#if __GNUG__ >= 2 +#if (__GNUG__ >= 2) && !defined(printf) __attribute__ ((format (printf, 4, 5))); #else ; @@ -939,7 +961,7 @@ public: 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. @@ -949,7 +971,7 @@ public: // 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() @@ -957,7 +979,7 @@ public: int attron (chtype at) { return ::wattron (w, at); } // Switch on the window attributes; - + int attroff(chtype at) { return ::wattroff(w, (int) at); } // Switch off the window attributes; @@ -995,10 +1017,10 @@ public: // ------------------------------------------------------------------------- // borders // ------------------------------------------------------------------------- - int box(chtype vert=0, chtype hor=0) { + 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 specifiy a zero as character, curses will try + // 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, @@ -1016,7 +1038,7 @@ public: // ------------------------------------------------------------------------- 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. + // 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); } @@ -1029,7 +1051,7 @@ public: 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 // ------------------------------------------------------------------------- @@ -1050,7 +1072,7 @@ public: // Clear to the end of the line. int delch() { return ::wdelch(w); } - // Delete character under the cursor. + // 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 @@ -1090,18 +1112,18 @@ public: int untouchwin() { return ::wtouchln(w,0,height(),0); } // Mark the whole window as unmodified. - int touchln(int s, int cnt, bool changed=TRUE) { + int touchln(int s, int cnt, bool changed=TRUE) { return ::wtouchln(w,s,cnt,(int)(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 { + bool is_linetouched(int line) const { return (::is_linetouched(w,line) ? TRUE:FALSE); } - // Return TRUE if line is marked as changed, FALSE otherwise + // Return TRUE if line is marked as changed, FALSE otherwise - bool is_wintouched() const { + bool is_wintouched() const { return (::is_wintouched(w) ? TRUE:FALSE); } - // Return TRUE if window is marked as changed, FALSE otherwise + // 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 @@ -1141,7 +1163,7 @@ public: 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. + // 7-Bit characters are generated. int standout() { return ::wstandout(w); } // Enable "standout" attributes @@ -1158,9 +1180,9 @@ public: // doupdate(). This is redefined in NCursesPanel. virtual int noutrefresh() { return ::wnoutrefresh(w); } - // Propagate the changes in this window to the virtual screen. This is + // Propagate the changes in this window to the virtual screen. This is // redefined in NCursesPanel. - + // ------------------------------------------------------------------------- // multiple window control // ------------------------------------------------------------------------- @@ -1207,7 +1229,7 @@ public: // ------------------------------------------------------------------------- // We leave this here for compatibility reasons. // ------------------------------------------------------------------------- -class NCursesColorWindow : public NCursesWindow { +class NCURSES_IMPEXP NCursesColorWindow : public NCursesWindow { public: NCursesColorWindow(WINDOW* &window) // useful only for stdscr : NCursesWindow(window) { @@ -1228,8 +1250,8 @@ public: char absrel = 'a') // if `a', by & bx are : NCursesWindow(par,lines,cols, // absolute screen pos, begin_y,begin_x, // else if `r', they are - absrel ) { // relative to par origin - useColors(); } + absrel ) { // relative to par origin + useColors(); } }; // These enum definitions really belong inside the NCursesPad class, but only @@ -1251,7 +1273,7 @@ public: // Pad Support. We allow an association of a pad with a "real" window // through which the pad may be viewed. // ------------------------------------------------------------------------- -class NCursesPad : public NCursesWindow { +class NCURSES_IMPEXP NCursesPad : public NCursesWindow { private: NCursesWindow* viewWin; // the "viewport" window NCursesWindow* viewSub; // the "viewport" subwindow @@ -1301,7 +1323,7 @@ public: 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. @@ -1326,7 +1348,7 @@ public: return ::pnoutrefresh(w,pminrow,pmincol, sminrow,smincol,smaxrow,smaxcol); } - // Does the same like refresh() but without calling doupdate(). + // 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. @@ -1343,7 +1365,7 @@ public: // 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 NCursesFramedPad : public NCursesPad { +class NCURSES_IMPEXP NCursesFramedPad : public NCursesPad { protected: virtual void OnOperation(int pad_req); @@ -1372,4 +1394,4 @@ public: }; -#endif // _CURSESW_H +#endif // NCURSES_CURSESW_H_incl diff --git a/c++/cursslk.cc b/c++/cursslk.cc index 236d3a55..2107625b 100644 --- a/c++/cursslk.cc +++ b/c++/cursslk.cc @@ -1,6 +1,6 @@ // * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998,2000 Free Software Foundation, Inc. * + * 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 * @@ -28,26 +28,27 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ +#include "internal.h" #include "cursslk.h" #include "cursesapp.h" -#include "internal.h" #include -MODULE_ID("$Id: cursslk.cc,v 1.6 2000/07/15 21:07:50 tom Exp $") +MODULE_ID("$Id: cursslk.cc,v 1.10 2002/07/13 11:35:08 juergen Exp $") void Soft_Label_Key_Set::Soft_Label_Key::operator=(char *text) { delete[] label; label = new char[1 + ::strlen(text)]; - (strcpy)(label,text); + (::strcpy)(label,text); } 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::Label_Layout Soft_Label_Key_Set::format = None; void Soft_Label_Key_Set::init() { diff --git a/c++/cursslk.h b/c++/cursslk.h index 1598b063..ab6a9c0f 100644 --- a/c++/cursslk.h +++ b/c++/cursslk.h @@ -1,6 +1,6 @@ // * this is for making emacs happy: -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998 Free Software Foundation, Inc. * + * 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 * @@ -28,20 +28,21 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ -// $Id: cursslk.h,v 1.5 1999/05/16 17:30:08 juergen Exp $ +// $Id: cursslk.h,v 1.8 2002/07/06 15:47:52 juergen Exp $ -#ifndef _CURSSLK_H -#define _CURSSLK_H +#ifndef NCURSES_CURSSLK_H_incl +#define NCURSES_CURSSLK_H_incl #include -class Soft_Label_Key_Set { +class NCURSES_IMPEXP Soft_Label_Key_Set { public: // This inner class represents the attributes of a Soft Label Key (SLK) - class Soft_Label_Key { + class NCURSES_IMPEXP Soft_Label_Key { friend class Soft_Label_Key_Set; public: typedef enum { Left=0, Center=1, Right=2 } Justification; @@ -83,10 +84,10 @@ public: } Label_Layout; private: - static long count; // Number of Key Sets - static Label_Layout format; // Layout of the Key Sets - static int num_labels; // Number Of Labels in Key Sets - bool b_attrInit; // Are attributes initialized + 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 @@ -126,12 +127,12 @@ public: // This constructor assumes, that you already constructed a Key Set // with a layout by the constructor above. This layout will be reused. - Soft_Label_Key_Set(); + NCURSES_IMPEXP Soft_Label_Key_Set(); virtual ~Soft_Label_Key_Set(); // Get Label# i. Label counting starts with 1! - Soft_Label_Key& operator[](int i); + NCURSES_IMPEXP Soft_Label_Key& operator[](int i); // Retrieve number of Labels inline int labels() const { return num_labels; } @@ -202,4 +203,4 @@ public: } }; -#endif // _CURSSLK_H +#endif // NCURSES_CURSSLK_H_incl diff --git a/c++/demo.cc b/c++/demo.cc index 088dc2fb..047e4b24 100644 --- a/c++/demo.cc +++ b/c++/demo.cc @@ -4,9 +4,10 @@ * written by Anatoly Ivasyuk (anatoly@nick.csh.rit.edu) * * Demo code for NCursesMenu and NCursesForm written by - * Juergen Pfeifer + * Juergen Pfeifer + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * - * $Id: demo.cc,v 1.18 1999/09/11 18:57:54 tom Exp $ + * $Id: demo.cc,v 1.22 2002/07/06 15:47:52 juergen Exp $ */ #include "cursesapp.h" @@ -19,7 +20,7 @@ extern "C" unsigned int sleep(unsigned int); -#undef index // needed for NeXT +#undef index // needed for NeXT // // ------------------------------------------------------------------------- @@ -140,7 +141,7 @@ template class MyAction : public NCursesUserItem { public: MyAction (const char* p_name, - const T* p_UserData) + const T* p_UserData) : NCursesUserItem(p_name, (const char*)0, p_UserData) {}; @@ -170,7 +171,7 @@ class Label : public NCursesFormField { public: Label(const char* title, - int row, int col) + int row, int col) : NCursesFormField(1,(int)::strlen(title),row,col) { set_value(title); options_off(O_EDIT|O_ACTIVE); @@ -293,18 +294,18 @@ public: 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((chtype)('A' + (gridcount++ % 26))); - } - else if (i % GRIDSIZE == 0) - FP.addch('-'); - else if (j % GRIDSIZE == 0) - FP.addch('|'); - else - FP.addch(' '); + if (i % GRIDSIZE == 0 && j % GRIDSIZE == 0) { + if (i==0 || j==0) + FP.addch('+'); + else + FP.addch((chtype)('A' + (gridcount++ % 26))); + } + else if (i % GRIDSIZE == 0) + FP.addch('-'); + else if (j % GRIDSIZE == 0) + FP.addch('|'); + else + FP.addch(' '); } } @@ -324,6 +325,49 @@ public: options_off(O_SELECTABLE); } }; + +// +// ------------------------------------------------------------------------- +// +class ScanAction : public NCursesMenuItem +{ +public: + ScanAction(const char* s) : NCursesMenuItem(s) { + } + + bool action() { + NCursesPanel *std = new NCursesPanel(); + + NCursesPanel *w = new NCursesPanel(std->lines() - 2, std->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 value = -1; + int result = 0; + while (value != 0) { + value = 0; + s->scanw("%d", &value); + if (value != 0) { + s->printw("%d: ", result += value); + } + s->refresh(); + } + s->printw("\nPress any key to continue..."); + s->getch(); + + delete s; + delete w; + delete std; + ::noecho(); + return FALSE; + } +}; + // // ------------------------------------------------------------------------- // @@ -346,7 +390,7 @@ public: I[2] = new MyAction ("Silly", u); I[3] = new FormAction("Form"); I[4] = new PadAction("Pad"); - I[5] = new PassiveItem("Six"); + I[5] = new ScanAction("Scan"); I[6] = new QuitItem(); I[7] = new NCursesMenuItem(); // Terminating empty item diff --git a/c++/edit_cfg.sh b/c++/edit_cfg.sh index efea8332..e0c18225 100755 --- a/c++/edit_cfg.sh +++ b/c++/edit_cfg.sh @@ -1,7 +1,7 @@ #!/bin/sh -# $Id: edit_cfg.sh,v 1.8 2000/07/01 16:07:37 tom Exp $ +# $Id: edit_cfg.sh,v 1.12 2001/12/08 20:44:59 tom Exp $ ############################################################################## -# Copyright (c) 1998,2000 Free Software Foundation, Inc. # +# 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"), # @@ -42,10 +42,13 @@ for name in \ ETIP_NEEDS_MATH_EXCEPTION \ ETIP_NEEDS_MATH_H \ HAVE_BUILTIN_H \ - HAVE_GXX_BUILTIN_H \ HAVE_GPP_BUILTIN_H \ + HAVE_GXX_BUILTIN_H \ + HAVE_STRSTREAM_H \ HAVE_TYPEINFO \ - HAVE_VALUES_H + HAVE_VALUES_H \ + USE_STRSTREAM_VSCAN \ + USE_STRSTREAM_VSCAN_CAST do mv $2 $2.bak if ( grep "[ ]$name[ ]1" $1 2>&1 >/dev/null) diff --git a/c++/etip.h.in b/c++/etip.h.in index 985cd1eb..d41c7d43 100644 --- a/c++/etip.h.in +++ b/c++/etip.h.in @@ -1,6 +1,6 @@ // * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998,1999 Free Software Foundation, Inc. * + * Copyright (c) 1998,1999,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 * @@ -28,13 +28,14 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ -// $Id: etip.h.in,v 1.13 1999/09/12 02:01:59 tom Exp $ +// $Id: etip.h.in,v 1.24 2002/10/12 22:33:07 Dimitar.Zhekov Exp $ -#ifndef _ETIP_H -#define _ETIP_H +#ifndef NCURSES_ETIP_H_incl +#define NCURSES_ETIP_H_incl 1 // These are substituted at configure/build time #ifndef HAVE_BUILTIN_H @@ -49,6 +50,10 @@ #define HAVE_GPP_BUILTIN_H 0 #endif +#ifndef HAVE_STRSTREAM_H +#define HAVE_STRSTREAM_H 0 +#endif + #ifndef HAVE_TYPEINFO #define HAVE_TYPEINFO 0 #endif @@ -69,6 +74,14 @@ #define CPP_HAS_PARAM_INIT 0 #endif +#ifndef USE_STRSTREAM_VSCAN +#define USE_STRSTREAM_VSCAN 0 +#endif + +#ifndef USE_STRSTREAM_VSCAN_CAST +#define USE_STRSTREAM_VSCAN_CAST 0 +#endif + #ifdef __GNUG__ # if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) # if HAVE_TYPEINFO @@ -104,6 +117,8 @@ # include #endif +#include + extern "C" { #if HAVE_VALUES_H # include @@ -122,11 +137,11 @@ extern "C" { #endif // Forward Declarations -class NCursesPanel; -class NCursesMenu; -class NCursesForm; +class NCURSES_IMPEXP NCursesPanel; +class NCURSES_IMPEXP NCursesMenu; +class NCURSES_IMPEXP NCursesForm; -class NCursesException +class NCURSES_IMPEXP NCursesException { public: const char *message; @@ -145,30 +160,30 @@ public: } }; -class NCursesPanelException : public NCursesException +class NCURSES_IMPEXP NCursesPanelException : public NCursesException { public: const NCursesPanel* p; - NCursesPanelException (const char *msg, int err) : + NCursesPanelException (const char *msg, int err) : NCursesException (msg, err), p ((NCursesPanel*)0) {}; NCursesPanelException (const NCursesPanel* panel, const char *msg, - int err) : + int err) : NCursesException (msg, err), p (panel) {}; - NCursesPanelException (int err) : + NCursesPanelException (int err) : NCursesException ("panel library error", err), p ((NCursesPanel*)0) {}; NCursesPanelException (const NCursesPanel* panel, - int err) : + int err) : NCursesException ("panel library error", err), p (panel) {}; @@ -179,30 +194,30 @@ public: }; -class NCursesMenuException : public NCursesException +class NCURSES_IMPEXP NCursesMenuException : public NCursesException { public: const NCursesMenu* m; - NCursesMenuException (const char *msg, int err) : + NCursesMenuException (const char *msg, int err) : NCursesException (msg, err), m ((NCursesMenu *)0) {}; NCursesMenuException (const NCursesMenu* menu, const char *msg, - int err) : + int err) : NCursesException (msg, err), m (menu) {}; - NCursesMenuException (int err) : + NCursesMenuException (int err) : NCursesException ("menu library error", err), m ((NCursesMenu *)0) {}; NCursesMenuException (const NCursesMenu* menu, - int err) : + int err) : NCursesException ("menu library error", err), m (menu) {}; @@ -213,30 +228,30 @@ public: }; -class NCursesFormException : public NCursesException +class NCURSES_IMPEXP NCursesFormException : public NCursesException { public: const NCursesForm* f; - NCursesFormException (const char *msg, int err) : + NCursesFormException (const char *msg, int err) : NCursesException (msg, err), f ((NCursesForm*)0) {}; NCursesFormException (const NCursesForm* form, const char *msg, - int err) : + int err) : NCursesException (msg, err), f (form) {}; - NCursesFormException (int err) : + NCursesFormException (int err) : NCursesException ("form library error", err), f ((NCursesForm*)0) {}; NCursesFormException (const NCursesForm* form, - int err) : + int err) : NCursesException ("form library error", err), f (form) {}; @@ -247,27 +262,31 @@ public: }; -#if !(defined(__GNUG__)||defined(__SUNPRO_CC)) +#if !((defined(__GNUG__) && defined(__EXCEPTIONS)) || defined(__SUNPRO_CC)) # include extern "C" void exit(int); #endif inline void THROW(const NCursesException *e) { -#if defined(__GNUG__) +#if defined(__GNUG__) && defined(__EXCEPTIONS) # if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8)) (*lib_error_handler)(e?e->classname():"",e?e->message:""); #else throw *e; #endif #elif defined(__SUNPRO_CC) +# if !defined(__SUNPRO_CC_COMPAT) || (__SUNPRO_CC_COMPAT < 5) genericerror(1, ((e != 0) ? (char *)(e->message) : "")); +#else + throw *e; +#endif #else if (e) cerr << e->message << endl; exit(0); -#endif +#endif } #define THROWS(s) -#endif // _ETIP_H +#endif // NCURSES_ETIP_H_incl diff --git a/c++/internal.h b/c++/internal.h index 67bc3ff2..d680d144 100644 --- a/c++/internal.h +++ b/c++/internal.h @@ -1,6 +1,6 @@ // * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** - * Copyright (c) 1998,2000 Free Software Foundation, Inc. * + * 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 * @@ -28,13 +28,16 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1997 * + * Author: Juergen Pfeifer, 1997 * + * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ -// $Id: internal.h,v 1.6 2000/09/02 18:22:23 tom Exp $ +// $Id: internal.h,v 1.9 2002/07/13 11:35:08 juergen Exp $ -#ifndef _CPLUS_INTERNAL_H -#define _CPLUS_INTERNAL_H 1 +#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; @@ -44,4 +47,4 @@ #define CTRL(x) ((x) & 0x1f) -#endif +#endif // NCURSES_CPLUS_INTERNAL_H diff --git a/config.guess b/config.guess index b100dbe1..9f4e5a6d 100755 --- a/config.guess +++ b/config.guess @@ -1,9 +1,9 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 -# Free Software Foundation, Inc. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002 Free Software Foundation, Inc. -version='2000-06-13' +timestamp='2002-08-23' # 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 @@ -24,38 +24,50 @@ version='2000-06-13' # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. -# Written by Per Bothner . -# Please send patches to . +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you -# don't specify an explicit system type (host/target name). -# -# Only a few systems have been added to this list; please add others -# (but try to keep the structure clean). -# +# don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] -Output the configuration name of this system. +Output the configuration name of the system \`$me' is run on. Operation modes: - -h, --help print this help, then exit - -V, --version print version number, then exit" + -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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +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 - --version | --vers* | -V ) + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; @@ -64,9 +76,7 @@ while test $# -gt 0 ; do - ) # Use stdin as input. break ;; -* ) - exec >&2 - echo "$me: invalid option $1" - echo "$help" + echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; @@ -78,70 +88,95 @@ if test $# != 0; then exit 1 fi -# Use $HOST_CC if defined. $CC may point to a cross-compiler -if test x"$CC_FOR_BUILD" = x; then - if test x"$HOST_CC" != x; then - CC_FOR_BUILD="$HOST_CC" - else - if test x"$CC" != x; then - CC_FOR_BUILD="$CC" - else - CC_FOR_BUILD=cc - fi - fi -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. + +# This shell variable is my proudest work .. or something. --bje + +set_cc_for_build='tmpdir=${TMPDIR-/tmp}/config-guess-$$ ; +(old=`umask` && umask 077 && mkdir $tmpdir && umask $old && unset old) + || (echo "$me: cannot create $tmpdir" >&2 && exit 1) ; +dummy=$tmpdir/dummy ; +files="$dummy.c $dummy.o $dummy.rel $dummy" ; +trap '"'"'rm -f $files; rmdir $tmpdir; exit 1'"'"' 1 2 15 ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + rm -f $files ; + 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 ; +unset files' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 8/24/94.) +# (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_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -dummy=dummy-$$ -trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 - # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - i?86:OS/2:*:*) - echo "i386-unknown-os2" - exit 0;; *:NetBSD:*:*) - # Netbsd (nbsd) targets should (where applicable) match one or + # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-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. - # Determine the machine/vendor (is the vendor relevant). - case "${UNAME_MACHINE}" in - amiga) machine=m68k-cbm ;; - arm32) machine=arm-unknown ;; - atari*) machine=m68k-atari ;; - sun3*) machine=m68k-sun ;; - mac68k) machine=m68k-apple ;; - macppc) machine=powerpc-apple ;; - hp3[0-9][05]) machine=m68k-hp ;; - ibmrt|romp-ibm) machine=romp-ibm ;; - *) machine=${UNAME_MACHINE}-unknown ;; + # + # 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=`(/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 ;; + *) 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*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + 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 - # The Operating System including object format. - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi # The OS release release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: @@ -149,6 +184,45 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` @@ -157,6 +231,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # 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. + eval $set_cc_for_build cat <$dummy.s .data \$Lformat: @@ -184,7 +259,7 @@ main: EOF $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then - case `./$dummy` in + case `$dummy` in 0-0) UNAME_MACHINE="alpha" ;; @@ -203,9 +278,15 @@ EOF 2-307) UNAME_MACHINE="alphaev67" ;; + 2-1307) + UNAME_MACHINE="alphaev68" + ;; + 3-1307) + UNAME_MACHINE="alphaev7" + ;; esac fi - rm -f $dummy.s $dummy + rm -f $dummy.s $dummy && rmdir $tmpdir echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) @@ -218,31 +299,13 @@ EOF echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) - echo m68k-cbm-sysv4 + echo m68k-unknown-sysv4 exit 0;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; - arc64:OpenBSD:*:*) - echo mips64el-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - arc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hkmips:OpenBSD:*:*) - echo mips-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - pmax:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mips-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - wgrisc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition @@ -250,7 +313,7 @@ EOF arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; - SR2?01:HI-UX/MPP:*:*) + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) @@ -264,6 +327,10 @@ EOF NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; @@ -292,7 +359,7 @@ EOF echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) - UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + 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) @@ -306,9 +373,6 @@ EOF aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; - atari*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; # 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 @@ -335,18 +399,6 @@ EOF *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; - sun3*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; @@ -363,6 +415,7 @@ EOF echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ @@ -385,11 +438,20 @@ EOF } EOF $CC_FOR_BUILD $dummy.c -o $dummy \ - && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 + rm -f $dummy.c $dummy && rmdir $tmpdir echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS) + echo powerpc-harris-powermax + exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; @@ -434,14 +496,23 @@ EOF *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + ????????: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 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i?86:AIX:*:*) + i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; + 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 0 ;; *: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 @@ -453,8 +524,8 @@ EOF exit(0); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy + $CC_FOR_BUILD $dummy.c -o $dummy && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 + rm -f $dummy.c $dummy && rmdir $tmpdir echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 @@ -462,9 +533,9 @@ EOF echo rs6000-ibm-aix3.2 fi exit 0 ;; - *:AIX:*:4) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` - if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then + *:AIX:*:[45]) + 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 @@ -472,7 +543,7 @@ EOF if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=4.${UNAME_RELEASE} + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; @@ -498,11 +569,28 @@ EOF echo m68k-hp-bsd4.4 exit 0 ;; 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]) - sed 's/^ //' << EOF >$dummy.c + 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 @@ -535,13 +623,19 @@ EOF exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` - rm -f $dummy.c $dummy + (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`$dummy` + if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi + rm -f $dummy.c $dummy && rmdir $tmpdir + fi ;; esac - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; 3050*:HI-UX:*:*) + eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int @@ -567,8 +661,8 @@ EOF exit (0); } EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy + $CC_FOR_BUILD $dummy.c -o $dummy && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 + rm -f $dummy.c $dummy && rmdir $tmpdir echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) @@ -577,7 +671,7 @@ EOF 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; - *9??*:MPE/iX:*:*) + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) @@ -586,7 +680,7 @@ EOF hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; - i?86:OSF1:*:*) + i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else @@ -596,9 +690,6 @@ EOF parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; - hppa*:OpenBSD:*:*) - echo hppa-unknown-openbsd - exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; @@ -617,41 +708,34 @@ EOF C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; - CRAY*X-MP:*:*:*) - echo xmp-cray-unicos - exit 0 ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; - CRAY*T3E:*:*:*) + CRAY*T3D:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; - CRAY-2:*:*:*) - echo cray2-cray-unicos - exit 0 ;; - F300:UNIX_System_V:*:*) + 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 "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; - F301:UNIX_System_V:*:*) - echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) @@ -661,10 +745,19 @@ EOF echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + rm -f $dummy.c && rmdir $tmpdir + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin @@ -672,6 +765,12 @@ EOF i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:3*) + echo i386-pc-interix3 + exit 0 ;; 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 @@ -693,223 +792,139 @@ EOF i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; - *:Linux:*:*) - + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + rm -f $dummy.c && rmdir $tmpdir + test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + 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 ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + 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-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. - ld_help_string=`cd /; ld --help 2>&1` - ld_supported_emulations=`echo $ld_help_string \ - | sed -ne '/supported emulations:/!d + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g - s/.*supported emulations: *// + s/.*supported targets: *// s/ .*// p'` - case "$ld_supported_emulations" in - *ia64) - echo "${UNAME_MACHINE}-unknown-linux" - exit 0 + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; - i?86linux) + a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit 0 - ;; - elf_i?86) - echo "${UNAME_MACHINE}-pc-linux" - exit 0 - ;; - i?86coff) + exit 0 ;; + coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit 0 - ;; - sparclinux) - echo "${UNAME_MACHINE}-unknown-linux-gnuaout" - exit 0 - ;; - armlinux) - echo "${UNAME_MACHINE}-unknown-linux-gnuaout" - exit 0 - ;; - elf32arm*) - echo "${UNAME_MACHINE}-unknown-linux-gnuoldld" - exit 0 - ;; - armelf_linux*) - echo "${UNAME_MACHINE}-unknown-linux-gnu" - exit 0 - ;; - m68klinux) - echo "${UNAME_MACHINE}-unknown-linux-gnuaout" - exit 0 - ;; - elf32ppc | elf32ppclinux) - # Determine Lib Version - cat >$dummy.c < -#if defined(__GLIBC__) -extern char __libc_version[]; -extern char __libc_release[]; -#endif -main(argc, argv) - int argc; - char *argv[]; -{ -#if defined(__GLIBC__) - printf("%s %s\n", __libc_version, __libc_release); -#else - printf("unkown\n"); -#endif - return 0; -} -EOF - LIBC="" - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null - if test "$?" = 0 ; then - ./$dummy | grep 1\.99 > /dev/null - if test "$?" = 0 ; then - LIBC="libc1" - fi - fi - rm -f $dummy.c $dummy - echo powerpc-unknown-linux-gnu${LIBC} - exit 0 - ;; - shelf_linux) - echo "${UNAME_MACHINE}-unknown-linux-gnu" - exit 0 - ;; + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; esac - - if test "${UNAME_MACHINE}" = "alpha" ; then - cat <$dummy.s - .data - \$Lformat: - .byte 37,100,45,37,120,10,0 # "%d-%x\n" - - .text - .globl main - .align 4 - .ent main - main: - .frame \$30,16,\$26,0 - ldgp \$29,0(\$27) - .prologue 1 - .long 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - LIBC="" - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) - UNAME_MACHINE="alpha" - ;; - 1-0) - UNAME_MACHINE="alphaev5" - ;; - 1-1) - UNAME_MACHINE="alphaev56" - ;; - 1-101) - UNAME_MACHINE="alphapca56" - ;; - 2-303) - UNAME_MACHINE="alphaev6" - ;; - 2-307) - UNAME_MACHINE="alphaev67" - ;; - esac - - objdump --private-headers $dummy | \ - grep ld.so.1 > /dev/null - if test "$?" = 0 ; then - LIBC="libc1" - fi - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 - elif test "${UNAME_MACHINE}" = "mips" ; then - cat >$dummy.c < /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif -#ifdef __MIPSEB__ - printf ("%s-unknown-linux-gnu\n", argv[1]); -#endif -#ifdef __MIPSEL__ - printf ("%sel-unknown-linux-gnu\n", argv[1]); -#endif - return 0; -} -EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - elif test "${UNAME_MACHINE}" = "s390"; then - echo s390-ibm-linux && exit 0 - else - # Either a pre-BFD a.out linker (linux-gnuoldld) - # or one that does not give us useful --help. - # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. - # If ld does not provide *any* "supported emulations:" - # that means it is gnuoldld. - echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" - test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 - - case "${UNAME_MACHINE}" in - i?86) - VENDOR=pc; - ;; - *) - VENDOR=unknown; - ;; - esac - # Determine whether the default compiler is a.out or elf - cat >$dummy.c < -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif -#ifdef __ELF__ -# ifdef __GLIBC__ -# if __GLIBC__ >= 2 - printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); -# else - printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); -# endif -# else - printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); -# endif -#else - printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); -#endif - return 0; -} + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - fi ;; -# 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. - i?86:DYNIX/ptx:4*:*) + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + rm -f $dummy.c && rmdir $tmpdir + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + 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 0 ;; - i?86:UNIX_SV:4.2MP:2.*) + 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, @@ -917,7 +932,7 @@ EOF # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; - i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + 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} @@ -925,34 +940,33 @@ EOF echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; - i?86:*:5:7*) - # Fixed at (any) Pentium or better - UNAME_MACHINE=i586 - if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then - echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} - fi + i*86:*:5:[78]*) + 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 0 ;; - i?86:*:3.2:*) + 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|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + 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|egrep '^Machine.*Pent ?II' >/dev/null) \ + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 - (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + (/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 0 ;; - i?86:*DOS:*:*) + i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; pc:*:*:*) @@ -978,9 +992,12 @@ EOF # "miniframe" echo m68010-convergent-sysv exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + 3[34]??:*: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) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` @@ -991,21 +1008,24 @@ EOF 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:*) + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; - i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; - rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; @@ -1023,8 +1043,8 @@ EOF echo ns32k-sni-sysv fi exit 0 ;; - PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) @@ -1036,10 +1056,14 @@ EOF # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; - news*:NEWS-OS:*:6*) + news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) @@ -1064,6 +1088,9 @@ EOF SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; @@ -1074,28 +1101,74 @@ EOF echo `uname -p`-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) - if test "${UNAME_MACHINE}" = "x86pc"; then + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo `uname -p`-${UNAME_MACHINE}-nto-qnx + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; - NSR-W:NONSTOP_KERNEL:*:*) + NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; + *: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 0 ;; + 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 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 +eval $set_cc_for_build cat >$dummy.c < @@ -1182,11 +1255,24 @@ main () #endif #if defined (vax) -#if !defined (ultrix) - printf ("vax-dec-bsd\n"); exit (0); -#else - printf ("vax-dec-ultrix\n"); exit (0); -#endif +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif #endif #if defined (alliant) && defined (i860) @@ -1197,8 +1283,8 @@ main () } EOF -$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 -rm -f $dummy.c $dummy +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 +rm -f $dummy.c $dummy && rmdir $tmpdir # Apollos put the system type in the environment. @@ -1233,8 +1319,9 @@ fi cat >&2 < in order to provide the needed information to handle your system. -config.guess version = $version +config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` @@ -1270,7 +1357,7 @@ exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "version='" +# time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: diff --git a/config.sub b/config.sub index f8ec622e..b0222f7e 100755 --- a/config.sub +++ b/config.sub @@ -1,9 +1,9 @@ #! /bin/sh -# Configuration validation subroutine script, version 1.1. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 -# Free Software Foundation, Inc. +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002 Free Software Foundation, Inc. -version='2000-07-06' +timestamp='2002-08-22' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -29,7 +29,8 @@ version='2000-07-06' # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. -# Please send patches to . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -60,16 +61,30 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS Canonicalize a configuration name. Operation modes: - -h, --help print this help, then exit - -V, --version print version number, then exit" + -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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +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 - --version | --vers* | -V ) + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; @@ -78,9 +93,7 @@ while test $# -gt 0 ; do - ) # Use stdin as input. break ;; -* ) - exec >&2 - echo "$me: invalid option $1" - echo "$help" + echo "$me: invalid option $1$help" exit 1 ;; *local*) @@ -105,7 +118,7 @@ esac # 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*) + nto-qnx* | linux-gnu* | freebsd*-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; @@ -122,9 +135,6 @@ esac ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in - -os2) - basic_machine=`echo $1 | sed -e 's/86-.*/86/'` - ;; -sun*os*) # Prevent following clause from handling this invalid input. ;; @@ -148,6 +158,14 @@ case $os in os=-vxworks basic_machine=$1 ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; -hiux*) os=-hiuxwe2 ;; @@ -206,22 +224,46 @@ esac case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. - tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ - | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ - | 580 | i960 | h8300 \ - | x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \ - | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ - | hppa64 \ - | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ - | alphaev6[78] \ - | we32k | ns16k | clipper | i370 | sh | sh[34] \ - | powerpc | powerpcle \ - | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ - | mips64orion | mips64orionel | mipstx39 | mipstx39el \ - | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ - | mips64vr5000 | miprs64vr5000el | mcore \ - | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ - | thumb | d10v | d30v | fr30 | avr) + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) @@ -229,13 +271,13 @@ case $basic_machine in basic_machine=$basic_machine-unknown os=-none ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl) + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # 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[234567]86) + i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. @@ -244,28 +286,56 @@ case $basic_machine in exit 1 ;; # Recognize the basic CPU types with company name. - # FIXME: clean up the formatting here. - vax-* | tahoe-* | i[234567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ - | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ - | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ - | xmp-* | ymp-* \ - | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \ - | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ - | hppa2.0n-* | hppa64-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ - | alphaev6[78]-* \ - | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ - | clipper-* | orion-* \ - | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ - | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ - | mips64el-* | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ - | mipstx39-* | mipstx39el-* | mcore-* \ - | f301-* | armv*-* | s390-* | sv1-* | t3e-* \ - | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ - | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \ - | bs2000-* | tic54x-* | c54x-*) + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c54x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* \ + | m32r-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39 | mipstx39el \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. @@ -302,14 +372,14 @@ case $basic_machine in os=-sysv ;; amiga | amiga-*) - basic_machine=m68k-cbm + basic_machine=m68k-unknown ;; amigaos | amigados) - basic_machine=m68k-cbm + basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) - basic_machine=m68k-cbm + basic_machine=m68k-unknown os=-sysv4 ;; apollo68) @@ -328,6 +398,10 @@ case $basic_machine in basic_machine=ns32k-sequent os=-dynix ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -348,16 +422,8 @@ case $basic_machine in basic_machine=c38-convex os=-bsd ;; - cray | ymp) - basic_machine=ymp-cray - os=-unicos - ;; - cray2) - basic_machine=cray2-cray - os=-unicos - ;; - [ctj]90-cray) - basic_machine=c90-cray + cray | j90) + basic_machine=j90-cray os=-unicos ;; crds | unos) @@ -372,6 +438,14 @@ case $basic_machine in 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 @@ -413,6 +487,10 @@ case $basic_machine in basic_machine=tron-gmicro os=-sysv ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 @@ -488,19 +566,19 @@ case $basic_machine in basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? - i[34567]86v32) + i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; - i[34567]86v4*) + i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; - i[34567]86v) + i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; - i[34567]86sol2) + i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; @@ -512,14 +590,6 @@ case $basic_machine in basic_machine=i386-unknown os=-vsta ;; - i386-go32 | go32) - basic_machine=i386-unknown - os=-go32 - ;; - i386-mingw32 | mingw32) - basic_machine=i386-unknown - os=-mingw32 - ;; iris | iris4d) basic_machine=mips-sgi case $os in @@ -545,6 +615,10 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; miniframe) basic_machine=m68000-convergent ;; @@ -552,14 +626,6 @@ case $basic_machine in basic_machine=m68k-atari os=-mint ;; - mipsel*-linux*) - basic_machine=mipsel-unknown - os=-linux-gnu - ;; - mips*-linux*) - basic_machine=mips-unknown - os=-linux-gnu - ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; @@ -574,8 +640,12 @@ case $basic_machine in basic_machine=m68k-rom68k os=-coff ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; msdos) - basic_machine=i386-unknown + basic_machine=i386-pc os=-msdos ;; mvs) @@ -639,6 +709,10 @@ case $basic_machine in basic_machine=i960-intel os=-mon960 ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; np1) basic_machine=np1-gould ;; @@ -649,6 +723,10 @@ case $basic_machine in basic_machine=hppa1.1-oki os=-proelf ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose @@ -671,45 +749,59 @@ case $basic_machine in pbb) basic_machine=m68k-tti ;; - pc532 | pc532-*) + pc532 | pc532-*) basic_machine=ns32k-pc532 ;; - pentium | p5 | k5 | k6 | nexen) + pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; - pentiumpro | p6 | 6x86 | athlon) + pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2) - basic_machine=i786-pc + basic_machine=i686-pc ;; - pentium-* | p5-* | k5-* | k6-* | nexen-*) + 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-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; - power) basic_machine=rs6000-ibm + power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown - ;; + ;; ppc-*) 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 + ;; rom68k) basic_machine=m68k-rom68k os=-coff @@ -720,10 +812,22 @@ case $basic_machine in 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 + ;; sequent) basic_machine=i386-sequent ;; @@ -731,7 +835,7 @@ case $basic_machine in basic_machine=sh-hitachi os=-hms ;; - sparclite-wrs) + sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; @@ -797,8 +901,16 @@ case $basic_machine in basic_machine=i386-sequent os=-dynix ;; + t3d) + basic_machine=alpha-cray + os=-unicos + ;; t3e) - basic_machine=t3e-cray + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) @@ -811,6 +923,10 @@ case $basic_machine in tx39el) basic_machine=mipstx39el-unknown ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; tower | tower-32) basic_machine=m68k-ncr ;; @@ -835,8 +951,8 @@ case $basic_machine in os=-vms ;; vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; + basic_machine=f301-fujitsu + ;; vxworks960) basic_machine=i960-wrs os=-vxworks @@ -857,13 +973,17 @@ case $basic_machine in basic_machine=hppa1.1-winbond os=-proelf ;; - xmp) - basic_machine=xmp-cray - os=-unicos + windows32) + basic_machine=i386-pc + os=-windows32-msvcrt ;; - xps | xps100) + xps | xps100) basic_machine=xps100-honeywell ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim @@ -884,13 +1004,6 @@ case $basic_machine in op60c) basic_machine=hppa1.1-oki ;; - mips) - if [ x$os = x-linux-gnu ]; then - basic_machine=mips-unknown - else - basic_machine=mips-mips - fi - ;; romp) basic_machine=romp-ibm ;; @@ -900,19 +1013,26 @@ case $basic_machine in 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 ;; - sh3 | sh4) - base_machine=sh-unknown + sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele) + basic_machine=sh-unknown ;; - sparc | sparcv9) + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; - cydra) + cydra) basic_machine=cydra-cydrome ;; orion) @@ -931,6 +1051,9 @@ case $basic_machine in basic_machine=c4x-none os=-coff ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 @@ -987,15 +1110,19 @@ case $os in | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit*) + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* | -powermax*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in - x86-* | i[34567]86-*) + x86-* | i*86-*) ;; *) os=-nto$os @@ -1006,7 +1133,6 @@ case $os in os=-nto-qnx ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -os2 \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; @@ -1043,16 +1169,22 @@ case $os in -acis*) os=-aos ;; + -atheos*) + os=-atheos + ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; + -nova*) + os=-rtmk-nova + ;; -ns2 ) - os=-nextstep2 + os=-nextstep2 ;; - -nsk) + -nsk*) os=-nsk ;; # Preserve the version number of sinix5. @@ -1089,8 +1221,8 @@ case $os in -xenix) os=-xenix ;; - -*mint | -*MiNT) - os=-mint + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint ;; -none) ;; @@ -1123,7 +1255,11 @@ case $basic_machine in arm*-semi) os=-aout ;; - pdp11-*) + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) os=-none ;; *-dec | vax-*) @@ -1150,6 +1286,9 @@ case $basic_machine in mips*-*) os=-elf ;; + or32-*) + os=-coff + ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; @@ -1213,25 +1352,25 @@ case $basic_machine in *-next) os=-nextstep3 ;; - *-gould) + *-gould) os=-sysv ;; - *-highlevel) + *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; - *-sgi) + *-sgi) os=-irix ;; - *-siemens) + *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; - f301-fujitsu) + f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) @@ -1297,7 +1436,7 @@ case $basic_machine in -ptx*) vendor=sequent ;; - -vxsim* | -vxworks*) + -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) @@ -1309,9 +1448,12 @@ case $basic_machine in -mpw* | -macos*) vendor=apple ;; - -*mint | -*MiNT) + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; + -vos*) + vendor=stratus + ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; @@ -1322,7 +1464,7 @@ exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "version='" +# time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: diff --git a/configure b/configure index c18a988f..c20c60f3 100755 --- a/configure +++ b/configure @@ -1,30 +1,120 @@ #! /bin/sh - -# From configure.in Revision: 1.220 - - - +# From configure.in Revision: 1.274 . # Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.13.20000819 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# Generated by Autoconf 2.52.20011227. # +# 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. -# Defaults: -ac_help= +# 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 -# Any additions from configure.in: +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" # 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. -build=NONE -cache_file=./config.cache +cache_file=/dev/null exec_prefix=NONE -host=NONE no_create= -nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE @@ -33,10 +123,15 @@ program_transform_name=s,x,x, silent= site= srcdir= -target=NONE 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' @@ -50,17 +145,16 @@ oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 +# 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" @@ -68,59 +162,59 @@ do continue fi - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. - case "$ac_option" in + case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; + bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) - ac_prev=build ;; + ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; + 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" ;; + 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" ;; + datadir=$ac_optarg ;; -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; + 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=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; + 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'" ;; + eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -129,175 +223,47 @@ do -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; + exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; - -help | --help | --hel | --he) - # 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 << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF -cat <&2; exit 1; } - fi + 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 - *=*) ;; + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac - eval "with_${ac_package}='$ac_optarg'" ;; + eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; + 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. @@ -451,98 +416,98 @@ EOF 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_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" ;; + x_libraries=$ac_optarg ;; - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + -*) { 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 ;; + *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" + # 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 - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } fi -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 +# 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 -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; + 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 -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -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 +# 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 -# 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 +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=ncurses/base/lib_initscr.c +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%/[^/][^/]*$%%'` + 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 @@ -553,13 +518,408 @@ else fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + { echo "$as_me: error: cannot find sources in $srcdir" >&2 + { (exit 1); exit 1; }; } fi fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` +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 @@ -570,57 +930,118 @@ if test -z "$CONFIG_SITE"; then fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" + { echo "$as_me:933: 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 - echo "loading cache $cache_file" - . $cache_file + # 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:944: 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 "creating cache $cache_file" - > $cache_file + { echo "$as_me:952: 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:968: 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:972: 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:978: 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:980: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:982: 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:1001: 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:1003: 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 -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -ac_exeext= -ac_objext=o -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi +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 + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' 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:1023: PATH=\".;.\"; conftest.sh") >&5 + (PATH=".;."; conftest.sh) 2>&5 + ac_status=$? + echo "$as_me:1026: \$? = $ac_status" >&5 + (exit $ac_status); }; then + ac_path_separator=';' else - ac_n= ac_c='\c' ac_t= + 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" NCURSES_MAJOR="`egrep '^NCURSES_MAJOR[ ]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`" NCURSES_MINOR="`egrep '^NCURSES_MINOR[ ]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`" NCURSES_PATCH="`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} -echo "$ac_t""Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version (`date`)" 1>&6 - - - - - - - +cf_cv_timestamp=`date` +echo "$as_me:1043: 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 ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do @@ -632,106 +1053,101 @@ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do 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 "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } + { { echo "$as_me:1063: 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=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. +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:1073: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:1077: 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:1086: 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:1090: 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:1095: 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:1102: 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:1111: 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:1116: 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 ; then - -# Do some error checking and defaulting for the host and target type. -# The inputs are: -# configure --host=HOST --target=TARGET --build=BUILD NONOPT -# -# The rules are: -# 1. You are not allowed to specify --host, --target, and nonopt at the -# same time. -# 2. Host defaults to nonopt. -# 3. If nonopt is not specified, then host defaults to the current host, -# as determined by config.guess. -# 4. Target and build default to nonopt. -# 5. If nonopt is not specified, then target and build default to host. + echo "$as_me:1124: 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:1133: 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:1138: 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. -case $host---$target---$nonopt in -NONE---*---* | *---NONE---* | *---*---NONE) ;; -*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; -esac - - -# Make sure we can run config.sub. -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : -else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } -fi - -echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:675: checking host system type" >&5 - -host_alias=$host -case "$host_alias" in -NONE) - case $nonopt in - NONE) - if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : - else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } - fi ;; - *) host_alias=$nonopt ;; - esac ;; -esac - -host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$host" 1>&6 - -echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:696: checking target system type" >&5 - -target_alias=$target -case "$target_alias" in -NONE) - case $nonopt in - NONE) target_alias=$host_alias ;; - *) target_alias=$nonopt ;; - esac ;; -esac - -target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` -target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$target" 1>&6 - -echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:714: checking build system type" >&5 - -build_alias=$build -case "$build_alias" in -NONE) - case $nonopt in - NONE) build_alias=$host_alias ;; - *) build_alias=$nonopt ;; - esac ;; -esac - -build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` -build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$build" 1>&6 - -test "$host_alias" != "$target_alias" && +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`" @@ -739,33 +1155,35 @@ else system_name="`(hostname) 2>/dev/null`" fi fi -test -n "$system_name" && cat >> confdefs.h <>confdefs.h <&6 +if test "${cf_cv_system_name+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&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 "$ac_t"""Configuring for $cf_cv_system_name"" 1>&6 +test -n "$cf_cv_system_name" && echo "$as_me:1169: 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 "$ac_t""Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" 1>&6 - { echo "configure: error: "Please remove config.cache and try again."" 1>&2; exit 1; } + echo "$as_me:1173: 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:1175: 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 "configure: warning: overriding system type to $withval" 1>&2 + { echo "$as_me:1183: WARNING: overriding system type to $withval" >&5 +echo "$as_me: WARNING: overriding system type to $withval" >&2;} cf_cv_system_name=$withval -fi - +fi; # We need a configure script only when compiling as part of GNU C library. # Here we have to generate one of the files we need while compiling. @@ -783,8 +1201,7 @@ if test "${enable_add_ons+set}" = set; then glibc_add_on=yes else glibc_add_on= -fi - +fi; if test x"$glibc_add_on" = "xyes" ; then rm -f $srcdir/Banner @@ -802,23 +1219,24 @@ cf_user_CFLAGS="$CFLAGS" ### Default install-location -echo $ac_n "checking for prefix""... $ac_c" 1>&6 -echo "configure:807: checking for prefix" >&5 +echo "$as_me:1222: 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*|netbsd*|freebsd*|linux*) + openbsd*|netbsd*|freebsd*|linux*|cygwin*) prefix=/usr ;; *) prefix=$ac_default_prefix ;; esac fi -echo "$ac_t""$prefix" 1>&6 +echo "$as_me:1234: result: $prefix" >&5 +echo "${ECHO_T}$prefix" >&6 if test "x$prefix" = "xNONE" ; then -echo $ac_n "checking for default include-directory""... $ac_c" 1>&6 -echo "configure:822: checking for default include-directory" >&5 +echo "$as_me:1238: 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 \ @@ -840,219 +1258,583 @@ do fi test -n "$verbose" && echo " tested $cf_dir" 1>&6 done -echo "$ac_t""$includedir" 1>&6 +echo "$as_me:1261: result: $includedir" >&5 +echo "${ECHO_T}$includedir" >&6 fi - ### Checks for programs. -# Extract the first word of "gcc", so it can be a program name with args. +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 +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:1274: 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:1289: found $ac_dir/$ac_word" >&5 +break +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:1297: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:1300: 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:852: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:1309: 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:1324: 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:1332: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:1335: 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:1348: 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 - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" + 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:1363: found $ac_dir/$ac_word" >&5 +break +done + fi fi -CC="$ac_cv_prog_CC" +CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 + echo "$as_me:1371: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:1374: 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:1383: 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:1398: 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:1406: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:1409: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC else - echo "$ac_t""no" 1>&6 + 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:882: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:1422: 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 - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" + 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:1442: 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 $# -gt 0; then + 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" "$@" + set dummy "$ac_dir/$ac_word" ${1+"$@"} shift ac_cv_prog_CC="$@" fi fi fi fi -CC="$ac_cv_prog_CC" +CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 + echo "$as_me:1464: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:1467: result: no" >&5 +echo "${ECHO_T}no" >&6 fi - if test -z "$CC"; then - case "`uname -s`" in - *win32* | *WIN32*) - # Extract the first word of "cl", so it can be a program name with args. -set dummy cl; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:933: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +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:1478: 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 - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="cl" - break - fi - done - IFS="$ac_save_ifs" + 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:1493: found $ac_dir/$ac_word" >&5 +break +done + fi fi -CC="$ac_cv_prog_CC" +CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 + echo "$as_me:1501: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 else - echo "$ac_t""no" 1>&6 -fi - ;; - esac - fi - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } + echo "$as_me:1504: result: no" >&5 +echo "${ECHO_T}no" >&6 fi -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:965: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + 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:1517: 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:1532: found $ac_dir/$ac_word" >&5 +break +done -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:1540: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:1543: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi -cat > conftest.$ac_ext << EOF + test -n "$ac_ct_CC" && break +done -#line 976 "configure" + CC=$ac_ct_CC +fi + +fi + +test -z "$CC" && { { echo "$as_me:1555: 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:1560:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:1563: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:1566: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:1568: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:1571: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:1573: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:1576: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +#line 1580 "configure" #include "confdefs.h" -main(){return(0);} -EOF -if { (eval echo configure:981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cc_cross=no +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:1596: 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:1599: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:1602: \$? = $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 | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;; + 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:1625: 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:1631: 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:1636: 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:1642: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1645: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no else - ac_cv_prog_cc_cross=yes + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:1652: 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 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cc_works=no fi -rm -fr conftest* -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 -if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } -fi -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1007: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 -cross_compiling=$ac_cv_prog_cc_cross - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1012: checking whether we are using GNU C" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes +echo "$as_me:1660: 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:1667: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:1669: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:1672: checking for executable suffix" >&5 +echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 +if { (eval echo "$as_me:1674: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:1677: \$? = $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 | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done else - ac_cv_prog_gcc=no -fi + { { echo "$as_me:1693: 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 -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 +rm -f conftest$ac_cv_exeext +echo "$as_me:1699: 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:1705: 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 1711 "configure" +#include "confdefs.h" + +int +main () +{ -if test $ac_cv_prog_gcc = yes; then - GCC=yes + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:1723: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1726: \$? = $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 | *.pdb ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done else - GCC= + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +{ { echo "$as_me:1738: error: cannot compute OBJEXT: cannot compile" >&5 +echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} + { (exit 1); exit 1; }; } fi -ac_test_CFLAGS="${CFLAGS+set}" -ac_save_CFLAGS="$CFLAGS" -CFLAGS= -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:1040: checking whether ${CC-cc} accepts -g" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:1745: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:1749: 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 - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + cat >conftest.$ac_ext <<_ACEOF +#line 1755 "configure" +#include "confdefs.h" + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1770: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1773: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1776: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1779: \$? = $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:1791: 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:1797: 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 1803 "configure" +#include "confdefs.h" + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1815: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1818: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1821: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1824: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else - ac_cv_prog_cc_g=no + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_prog_cc_g=no fi -rm -f conftest* - +rm -f conftest.$ac_objext conftest.$ac_ext fi - -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +echo "$as_me:1834: 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" + CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" @@ -1066,186 +1848,458 @@ 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:1861: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1864: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1867: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1870: \$? = $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 1882 "configure" +#include "confdefs.h" +#include +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1895: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1898: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1901: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1904: \$? = $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 1914 "configure" +#include "confdefs.h" +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:1926: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:1929: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:1932: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:1935: \$? = $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 -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi -if test "$GCC" = yes ; then - echo $ac_n "checking version of gcc""... $ac_c" 1>&6 -echo "configure:1073: checking version of gcc" >&5 - eval "$CC --version" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 fi -if test "$host" != $build; then - for ac_prog in $CC gcc cc +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 + +GCC_VERSION=none +if test "$GCC" = yes ; then + echo "$as_me:1964: checking version of gcc" >&5 +echo $ECHO_N "checking version of gcc... $ECHO_C" >&6 + GCC_VERSION="`${CC} --version|head -1`" + echo "$as_me:1967: result: $GCC_VERSION" >&5 +echo "${ECHO_T}$GCC_VERSION" >&6 +fi + +# If we're cross-compiling, allow the user to override the tools and their +# options. The configure script is oriented toward identifying the target +# compiler, etc., but we need a host compiler to generate parts of the source. +BUILD_CC='$(CC)' +BUILD_CFLAGS='$(CFLAGS)' +BUILD_CPPFLAGS='$(CPPFLAGS)' +BUILD_LDFLAGS='$(LDFLAGS)' +BUILD_LIBS='$(LIBS)' +if test "$host_alias" != "$target_alias" ; then + +# 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 $CC gcc cc do -# Extract the first word of "$ac_prog", so it can be a program name with args. + # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1082: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:1990: 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 - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_BUILD_CC="$ac_prog" - break - fi - done - IFS="$ac_save_ifs" + 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:2005: found $ac_dir/$ac_word" >&5 +break +done + fi fi -BUILD_CC="$ac_cv_prog_BUILD_CC" +BUILD_CC=$ac_cv_prog_BUILD_CC if test -n "$BUILD_CC"; then - echo "$ac_t""$BUILD_CC" 1>&6 + echo "$as_me:2013: result: $BUILD_CC" >&5 +echo "${ECHO_T}$BUILD_CC" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:2016: result: no" >&5 +echo "${ECHO_T}no" >&6 fi -test -n "$BUILD_CC" && break + test -n "$BUILD_CC" && break done -else - BUILD_CC="$CC" +fi; + +# 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; + +# 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; + +# 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; + +# 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; fi -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1116: checking how to run the C preprocessor" >&5 +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 +echo "$as_me:2055: 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 eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" + # 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. - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +#line 2076 "configure" #include "confdefs.h" #include -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then + Syntax error +_ACEOF +if { (eval echo "$as_me:2081: \"$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:2087: \$? = $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 "$ac_err" >&5 - echo "configure: failed program was:" >&5 + echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +#line 2110 "configure" #include "confdefs.h" -#include -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1154: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : +#include +_ACEOF +if { (eval echo "$as_me:2114: \"$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:2120: \$? = $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 "$ac_err" >&5 - echo "configure: failed program was:" >&5 + echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -nologo -E" - cat > conftest.$ac_ext <&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 2167 "configure" #include "confdefs.h" #include -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1171: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then + Syntax error +_ACEOF +if { (eval echo "$as_me:2172: \"$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:2178: \$? = $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 "$ac_err" >&5 - echo "configure: failed program was:" >&5 + echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* + # Broken: fails on valid input. +continue fi -rm -f conftest* +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 2201 "configure" +#include "confdefs.h" +#include +_ACEOF +if { (eval echo "$as_me:2205: \"$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:2211: \$? = $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 -rm -f conftest* - ac_cv_prog_CPP="$CPP" +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 - CPP="$ac_cv_prog_CPP" +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 - ac_cv_prog_CPP="$CPP" + { { echo "$as_me:2239: error: C preprocessor \"$CPP\" fails sanity check" >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} + { (exit 1); exit 1; }; } fi -echo "$ac_t""$CPP" 1>&6 -if test $ac_cv_prog_gcc = yes; then - echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 -echo "configure:1197: checking whether ${CC-cc} needs -traditional" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +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 + +if test $ac_cv_c_compiler_gnu = yes; then + echo "$as_me:2251: 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 <conftest.$ac_ext <<_ACEOF +#line 2258 "configure" #include "confdefs.h" #include Autoconf TIOCGETP -EOF +_ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "$ac_pattern" >/dev/null 2>&1; then - rm -rf conftest* ac_cv_prog_gcc_traditional=yes else - rm -rf conftest* ac_cv_prog_gcc_traditional=no fi rm -f conftest* - if test $ac_cv_prog_gcc_traditional = no; then - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +#line 2273 "configure" #include "confdefs.h" #include Autoconf TCGETA -EOF +_ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "$ac_pattern" >/dev/null 2>&1; then - rm -rf conftest* ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi - -echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6 +echo "$as_me:2286: 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 $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1243: checking for POSIXized ISC" >&5 +echo "$as_me:2293: checking for POSIXized ISC" >&5 +echo $ECHO_N "checking for POSIXized ISC... $ECHO_C" >&6 if test -d /etc/conf/kconfig.d && - grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 + grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then - echo "$ac_t""yes" 1>&6 + echo "$as_me:2298: result: yes" >&5 +echo "${ECHO_T}yes" >&6 ISC=yes # If later tests want to check for ISC. - cat >> confdefs.h <<\EOF + +cat >>confdefs.h <<\EOF #define _POSIX_SOURCE 1 EOF @@ -1255,19 +2309,20 @@ EOF CC="$CC -Xp" fi else - echo "$ac_t""no" 1>&6 + echo "$as_me:2312: result: no" >&5 +echo "${ECHO_T}no" >&6 ISC= fi - -echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6 -echo "configure:1265: checking for ${CC-cc} option to accept ANSI C" >&5 -if eval "test \"`echo '$''{'cf_cv_ansi_cc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:2317: checking for ${CC-cc} option to accept ANSI C" >&5 +echo $ECHO_N "checking for ${CC-cc} option to accept ANSI C... $ECHO_C" >&6 +if test "${cf_cv_ansi_cc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - + cf_cv_ansi_cc=no cf_save_CFLAGS="$CFLAGS" +cf_save_CPPFLAGS="$CPPFLAGS" # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi @@ -1283,9 +2338,39 @@ for cf_arg in "-DCC_HAS_PROTOS" \ "-Aa -D_HPUX_SOURCE" \ -Xc do - CFLAGS="$cf_save_CFLAGS $cf_arg" - cat > conftest.$ac_ext <conftest.$ac_ext <<_ACEOF +#line 2373 "configure" #include "confdefs.h" #ifndef CC_HAS_PROTOS @@ -1294,56 +2379,105 @@ choke me #endif #endif -int main() { +int +main () +{ int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; -; return 0; } -EOF -if { (eval echo configure:1305: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:2394: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:2397: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:2400: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2403: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then cf_cv_ansi_cc="$cf_arg"; break else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 fi -rm -f conftest* +rm -f conftest.$ac_objext conftest.$ac_ext done CFLAGS="$cf_save_CFLAGS" +CPPFLAGS="$cf_save_CPPFLAGS" fi - -echo "$ac_t""$cf_cv_ansi_cc" 1>&6 +echo "$as_me:2416: result: $cf_cv_ansi_cc" >&5 +echo "${ECHO_T}$cf_cv_ansi_cc" >&6 if test "$cf_cv_ansi_cc" != "no"; then if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then - CFLAGS="$CFLAGS $cf_cv_ansi_cc" + +cf_new_cflags= +cf_new_cppflags= +for cf_add_cflags in $cf_cv_ansi_cc +do + case $cf_add_cflags in #(vi + -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi + case "$CPPFLAGS" in + *$cf_add_cflags) #(vi + ;; + *) #(vi + cf_new_cppflags="$cf_new_cppflags $cf_add_cflags" + ;; + esac + ;; + *) + cf_new_cflags="$cf_new_cflags $cf_add_cflags" + ;; + 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 + else - cat >> confdefs.h <<\EOF + cat >>confdefs.h <<\EOF #define CC_HAS_PROTOS 1 EOF fi fi - if test "$cf_cv_ansi_cc" = "no"; then - { echo "configure: error: Your compiler does not appear to recognize prototypes. + { { echo "$as_me:2461: error: Your compiler does not appear to recognize prototypes. +You have the following choices: + a. adjust your compiler options + b. get an up-to-date compiler + c. use a wrapper such as unproto" >&5 +echo "$as_me: error: Your compiler does not appear to recognize prototypes. You have the following choices: a. adjust your compiler options b. get an up-to-date compiler - c. use a wrapper such as unproto" 1>&2; exit 1; } + c. use a wrapper such as unproto" >&2;} + { (exit 1); exit 1; }; } fi - - PROG_EXT= case $cf_cv_system_name in os2*) # We make sure -Zexe is not used -- it would interfere with @PROG_EXT@ - CFLAGS="$CFLAGS -Zmt -D__ST_MT_ERRNO__" - CXXFLAGS="$CXXFLAGS -Zmt -D__ST_MT_ERRNO__" + CFLAGS="$CFLAGS -Zmt" + CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__" + CXXFLAGS="$CXXFLAGS -Zmt" LDFLAGS=`echo "$LDFLAGS -Zmt -Zcrtdll" | sed "s/-Zexe//g"` PROG_EXT=".exe" ;; @@ -1352,7 +2486,9 @@ cygwin*) ;; esac - +test -n "$PROG_EXT" && cat >>confdefs.h <&6 -echo "configure:1366: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_LDCONFIG'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:2500: 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 - /*) + case $LDCONFIG in + [\\/]* | ?:[\\/]*) ac_cv_path_LDCONFIG="$LDCONFIG" # Let the user override the test with a path. ;; - ?:/*) - ac_cv_path_LDCONFIG="$LDCONFIG" # Let the user override the test with a dos path. - ;; *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$LDPATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_LDCONFIG="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" + 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:2517: found $ac_dir/$ac_word" >&5 + break +fi +done + ;; esac fi -LDCONFIG="$ac_cv_path_LDCONFIG" +LDCONFIG=$ac_cv_path_LDCONFIG + if test -n "$LDCONFIG"; then - echo "$ac_t""$LDCONFIG" 1>&6 + echo "$as_me:2528: result: $LDCONFIG" >&5 +echo "${ECHO_T}$LDCONFIG" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:2531: result: no" >&5 +echo "${ECHO_T}no" >&6 fi ;; esac - -echo $ac_n "checking if you want to ensure bool is consistent with C++""... $ac_c" 1>&6 -echo "configure:1403: checking if you want to ensure bool is consistent with C++" >&5 +echo "$as_me:2538: 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 @@ -1407,142 +2544,208 @@ if test "${with_cxx+set}" = set; then cf_with_cxx=$withval else cf_with_cxx=yes -fi - -echo "$ac_t""$cf_with_cxx" 1>&6 +fi; +echo "$as_me:2548: result: $cf_with_cxx" >&5 +echo "${ECHO_T}$cf_with_cxx" >&6 if test "X$cf_with_cxx" = Xno ; then CXX="" GXX="" else - for ac_prog in $CCC c++ g++ gcc CC cxx 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 $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1423: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + 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 +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:2564: 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 - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CXX="$ac_prog" - break - fi - done - IFS="$ac_save_ifs" + 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:2579: found $ac_dir/$ac_word" >&5 +break +done + fi fi -CXX="$ac_cv_prog_CXX" +CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - echo "$ac_t""$CXX" 1>&6 + echo "$as_me:2587: result: $CXX" >&5 +echo "${ECHO_T}$CXX" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:2590: result: no" >&5 +echo "${ECHO_T}no" >&6 fi -test -n "$CXX" && break + 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:2603: 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:2618: found $ac_dir/$ac_word" >&5 +break done -test -n "$CXX" || CXX="gcc" - - -echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1455: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 - -ac_ext=C -# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cxx_cross -cat > conftest.$ac_ext << EOF +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + echo "$as_me:2626: result: $ac_ct_CXX" >&5 +echo "${ECHO_T}$ac_ct_CXX" >&6 +else + echo "$as_me:2629: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi -#line 1466 "configure" + 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:2641:" \ + "checking for C++ compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:2644: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:2647: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:2649: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:2652: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:2654: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:2657: \$? = $ac_status" >&5 + (exit $ac_status); } + +echo "$as_me:2660: 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 2666 "configure" #include "confdefs.h" -int main(){return(0);} -EOF -if { (eval echo configure:1471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - ac_cv_prog_cxx_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cxx_cross=no - else - ac_cv_prog_cxx_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cxx_works=no -fi -rm -fr conftest* -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6 -if test $ac_cv_prog_cxx_works = no; then - echo "$ac_t""You don't have any C++ compiler, too bad" 1>&6; cf_with_cxx=no; CXX=""; GXX=""; -fi -echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1497: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 -cross_compiling=$ac_cv_prog_cxx_cross - -echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 -echo "configure:1502: checking whether we are using GNU C++" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.C <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gxx=yes -else - ac_cv_prog_gxx=no -fi -fi -echo "$ac_t""$ac_cv_prog_gxx" 1>&6 + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:2681: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:2684: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:2687: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2690: \$? = $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:2702: 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:2708: 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 2714 "configure" +#include "confdefs.h" -if test $ac_cv_prog_gxx = yes; then - GXX=yes -else - GXX= -fi +int +main () +{ -ac_test_CXXFLAGS="${CXXFLAGS+set}" -ac_save_CXXFLAGS="$CXXFLAGS" -CXXFLAGS= -echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 -echo "configure:1530: checking whether ${CXX-g++} accepts -g" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.cc -if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:2726: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:2729: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:2732: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2735: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else - ac_cv_prog_cxx_g=no + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_prog_cxx_g=no fi -rm -f conftest* - +rm -f conftest.$ac_objext conftest.$ac_ext fi - -echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6 +echo "$as_me:2745: 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" + CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" @@ -1556,21 +2759,112 @@ 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 2772 "configure" +#include "confdefs.h" +#include +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:2785: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:2788: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:2791: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2794: \$? = $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 2804 "configure" +#include "confdefs.h" +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:2816: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:2819: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:2822: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:2825: \$? = $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 -f 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 fi +GXX_VERSION=none if test "$GXX" = yes; then - case "`${CXX-g++} --version`" in + echo "$as_me:2851: checking version of g++" >&5 +echo $ECHO_N "checking version of g++... $ECHO_C" >&6 + GXX_VERSION="`${CXX-g++} --version|head -1`" + echo "$as_me:2854: result: $GXX_VERSION" >&5 +echo "${ECHO_T}$GXX_VERSION" >&6 + case $GXX_VERSION in 1*|2.[0-6]*) - GXX=""; CXX=""; ac_cv_prog_gxx=no + GXX=""; CXX=""; ac_cv_cxx_compiler_gnu=no cf_cxx_library=no - echo No: templates do not work + { echo "$as_me:2860: WARNING: templates do not work" >&5 +echo "$as_me: WARNING: templates do not work" >&2;} ;; esac fi -echo $ac_n "checking if you want to build C++ binding and demo""... $ac_c" 1>&6 -echo "configure:1574: checking if you want to build C++ binding and demo" >&5 +echo "$as_me:2866: 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 @@ -1578,12 +2872,12 @@ if test "${with_cxx_binding+set}" = set; then cf_with_cxx_binding=$withval else cf_with_cxx_binding=$cf_with_cxx -fi - -echo "$ac_t""$cf_with_cxx_binding" 1>&6 +fi; +echo "$as_me:2876: result: $cf_with_cxx_binding" >&5 +echo "${ECHO_T}$cf_with_cxx_binding" >&6 -echo $ac_n "checking if you want to build with Ada95""... $ac_c" 1>&6 -echo "configure:1587: checking if you want to build with Ada95" >&5 +echo "$as_me:2879: checking if you want to build with Ada95" >&5 +echo $ECHO_N "checking if you want to build with Ada95... $ECHO_C" >&6 # Check whether --with-ada or --without-ada was given. if test "${with_ada+set}" = set; then @@ -1591,12 +2885,12 @@ if test "${with_ada+set}" = set; then cf_with_ada=$withval else cf_with_ada=yes -fi - -echo "$ac_t""$cf_with_ada" 1>&6 +fi; +echo "$as_me:2889: result: $cf_with_ada" >&5 +echo "${ECHO_T}$cf_with_ada" >&6 -echo $ac_n "checking if you want to build programs such as tic""... $ac_c" 1>&6 -echo "configure:1600: checking if you want to build programs such as tic" >&5 +echo "$as_me:2892: 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 @@ -1604,12 +2898,12 @@ if test "${with_progs+set}" = set; then cf_with_progs=$withval else cf_with_progs=yes -fi - -echo "$ac_t""$cf_with_progs" 1>&6 +fi; +echo "$as_me:2902: result: $cf_with_progs" >&5 +echo "${ECHO_T}$cf_with_progs" >&6 -echo $ac_n "checking if you wish to install curses.h""... $ac_c" 1>&6 -echo "configure:1613: checking if you wish to install curses.h" >&5 +echo "$as_me:2905: 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 @@ -1617,9 +2911,9 @@ if test "${with_curses_h+set}" = set; then with_curses_h=$withval else with_curses_h=yes -fi - -echo "$ac_t""$with_curses_h" 1>&6 +fi; +echo "$as_me:2915: result: $with_curses_h" >&5 +echo "${ECHO_T}$with_curses_h" >&6 modules_to_build="ncurses" if test "X$cf_with_progs" != Xno ; then @@ -1627,83 +2921,82 @@ modules_to_build="$modules_to_build progs tack" fi modules_to_build="$modules_to_build panel menu form" -if test "$program_transform_name" = s,x,x,; then - program_transform_name= -else - # Double any \ or $. echo might interpret backslashes. - cat <<\EOF_SED > conftestsed -s,\\,\\\\,g; s,\$,$$,g -EOF_SED - program_transform_name="`echo $program_transform_name|sed -f conftestsed`" - rm -f conftestsed -fi test "$program_prefix" != NONE && - program_transform_name="s,^,${program_prefix},; $program_transform_name" + 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" - -# sed with no file args requires a program. -test "$program_transform_name" = "" && program_transform_name="s,x,x," + 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. + # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1655: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:2941: 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 - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_AWK="$ac_prog" - break - fi - done - IFS="$ac_save_ifs" + 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:2956: found $ac_dir/$ac_word" >&5 +break +done + fi fi -AWK="$ac_cv_prog_AWK" +AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - echo "$ac_t""$AWK" 1>&6 + echo "$as_me:2964: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:2967: result: no" >&5 +echo "${ECHO_T}no" >&6 fi -test -n "$AWK" && break + test -n "$AWK" && break done -echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:1685: checking whether ${MAKE-make} sets \${MAKE}" >&5 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:2974: 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 > conftestmake <<\EOF + 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 conftestmake 2>/dev/null | grep temp=` +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 conftestmake +rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$ac_t""yes" 1>&6 + echo "$as_me:2994: result: yes" >&5 +echo "${ECHO_T}yes" >&6 SET_MAKE= else - echo "$ac_t""no" 1>&6 + echo "$as_me:2998: result: no" >&5 +echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi @@ -1714,31 +3007,39 @@ fi # 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 $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1723: checking for a BSD compatible install" >&5 +echo "$as_me:3015: 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 eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + 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 - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + 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 test -f $ac_dir/$ac_prog; then + 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 + 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 @@ -1748,26 +3049,26 @@ else ;; esac done - IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then - INSTALL="$ac_cv_path_install" + 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" + INSTALL=$ac_install_sh fi fi -echo "$ac_t""$INSTALL" 1>&6 +echo "$as_me:3064: 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_PROGRAM}' +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' @@ -1775,16 +3076,16 @@ case $INSTALL in /*) ;; *) - cf_dir=`echo $INSTALL|sed -e 's%/[^/]*$%%'` + cf_dir=`echo $INSTALL | sed -e 's:/[^/]*$::'` test -z "$cf_dir" && cf_dir=. INSTALL=`cd $cf_dir && pwd`/`echo $INSTALL | sed -e 's:^.*/::'` ;; esac -echo $ac_n "checking for long file names""... $ac_c" 1>&6 -echo "configure:1786: checking for long file names" >&5 -if eval "test \"`echo '$''{'ac_cv_sys_long_file_names'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:3085: 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: @@ -1798,40 +3099,44 @@ else # /var/tmp likewise # /usr/tmp likewise if test -n "$TMPDIR" && test -d "$TMPDIR" && test -w "$TMPDIR"; then - ac_tmpdirs="$TMPDIR" + 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. - (echo 1 > $ac_dir/conftest9012345) 2>/dev/null - (echo 2 > $ac_dir/conftest9012346) 2>/dev/null - val=`cat $ac_dir/conftest9012345 2>/dev/null` - if test ! -f $ac_dir/conftest9012345 || test "$val" != 1; then + 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 -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2>/dev/null + rm -rf $ac_xdir 2>/dev/null break fi - rm -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2>/dev/null + rm -rf $ac_xdir 2>/dev/null done fi - -echo "$ac_t""$ac_cv_sys_long_file_names" 1>&6 +echo "$as_me:3124: 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 + +cat >>confdefs.h <<\EOF #define HAVE_LONG_FILE_NAMES 1 EOF fi - -echo $ac_n "checking if filesystem supports mixed-case filenames""... $ac_c" 1>&6 -echo "configure:1831: checking if filesystem supports mixed-case filenames" >&5 -if eval "test \"`echo '$''{'cf_cv_mixedcase'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:3134: 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 - + rm -f conftest CONFTEST echo test >conftest if test -f CONFTEST ; then @@ -1842,126 +3147,162 @@ else rm -f conftest CONFTEST fi - -echo "$ac_t""$cf_cv_mixedcase" 1>&6 -test "$cf_cv_mixedcase" = yes && cat >> confdefs.h <<\EOF +echo "$as_me:3150: 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 - -echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1854: checking whether ln -s works" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - rm -f conftestdata -if ln -s X conftestdata 2>/dev/null -then - rm -f conftestdata - ac_cv_prog_LN_S="ln -s" -else - ac_cv_prog_LN_S=ln -fi -fi -LN_S="$ac_cv_prog_LN_S" -if test "$ac_cv_prog_LN_S" = "ln -s"; then - echo "$ac_t""yes" 1>&6 +echo "$as_me:3156: 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:3160: result: yes" >&5 +echo "${ECHO_T}yes" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:3163: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6 fi -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1877: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&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:3170: 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 - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" + 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:3185: found $ac_dir/$ac_word" >&5 +break +done + fi fi -RANLIB="$ac_cv_prog_RANLIB" +RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 + echo "$as_me:3193: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6 else - echo "$ac_t""no" 1>&6 + echo "$as_me:3196: 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:3205: 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:3220: 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:3229: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 +else + echo "$as_me:3232: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" +fi # Extract the first word of "ctags", so it can be a program name with args. set dummy ctags; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1909: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_MAKE_LOWER_TAGS'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +echo "$as_me:3243: 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 - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_MAKE_LOWER_TAGS="yes" - break - fi - done - IFS="$ac_save_ifs" + 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:3258: 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" +MAKE_LOWER_TAGS=$ac_cv