# $Id: programs,v 1.57 2023/11/10 11:48:38 tom Exp $
##############################################################################
# Copyright 2018-2022,2023 Thomas E. Dickey                                  #
# Copyright 2006-2016,2017 Free Software Foundation, Inc.                    #
#                                                                            #
# Permission is hereby granted, free of charge, to any person obtaining a    #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation  #
# the rights to use, copy, modify, merge, publish, distribute, distribute    #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the  #
# following conditions:                                                      #
#                                                                            #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software.                        #
#                                                                            #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
# DEALINGS IN THE SOFTWARE.                                                  #
#                                                                            #
# Except as contained in this notice, the name(s) of the above copyright     #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written               #
# authorization.                                                             #
##############################################################################
#
# Author: Thomas E. Dickey
#
# programs used for ncurses tests
back_ground	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	back_ground dump_window
background	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	background dump_window
blue		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	blue
bs		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	bs
cardfile	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	cardfile
chgat		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	chgat popup_msg
clip_printw	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	clip_printw popup_msg
color_content	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	color_content
color_set	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	color_set
combine		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	combine dump_window popup_msg
demo_altkeys	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	demo_altkeys
demo_defkey	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	demo_defkey
demo_forms	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	demo_forms edit_field popup_msg
demo_keyok	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	demo_keyok
demo_menus	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	demo_menus
demo_new_pair	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	demo_new_pair popup_msg
demo_panels	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	demo_panels
demo_tabs	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	demo_tabs
demo_termcap	$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	demo_termcap
demo_terminfo	$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	demo_terminfo
ditto		$(LDFLAGS_THREADS)	$(LOCAL_LIBS)	ditto
dots		$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	dots
dots_curses	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	dots_curses
dots_mvcur	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	dots_mvcur
dots_termcap	$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	dots_termcap
dots_xcurses	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	dots_xcurses
dup_field	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	dup_field edit_field popup_msg
echochar	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	echochar
extended_color	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	extended_color
filter		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	filter
firework	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	firework
firstlast	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	firstlast
foldkeys	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	foldkeys
form_driver_w	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	form_driver_w popup_msg
gdc		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	gdc
hanoi		$(LDFLAGS_CURSES_M)	$(LOCAL_LIBS)	hanoi
hashtest	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	hashtest
inch_wide	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	inch_wide popup_msg
inchs		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	inchs popup_msg
ins_wide	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	ins_wide
insdelln	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	insdelln popup_msg
inserts		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	inserts
key_names	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	key_names
keynames	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	keynames
knight		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	knight
list_keys	$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	list_keys
lrtest		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	lrtest
move_field	$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	move_field edit_field popup_msg
movewindow	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	movewindow popup_msg
ncurses		$(LDFLAGS_DEFAULT)	$(LOCAL_LIBS)	ncurses
newdemo		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	newdemo
padview		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	padview popup_msg
pair_content	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	pair_content
picsmap		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	picsmap
railroad	$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	railroad
rain		$(LDFLAGS_THREADS)	$(LOCAL_LIBS)	rain popup_msg
redraw		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	redraw popup_msg
savescreen	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	savescreen popup_msg
sp_tinfo	$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	sp_tinfo
tclock		$(LDFLAGS_CURSES_M)	$(LOCAL_LIBS)	tclock
test_add_wchstr	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_add_wchstr
test_addchstr	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_addchstr
test_addstr	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_addstr
test_addwstr	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_addwstr
test_arrays	$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	test_arrays
test_delwin	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_delwin
test_endwin	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_endwin
test_get_wstr	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_get_wstr popup_msg
test_getstr	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_getstr popup_msg
test_instr	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_instr
test_inwstr	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_inwstr
test_mouse	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_mouse
test_opaque	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_opaque
test_setupterm	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_setupterm
test_sgr	$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	test_sgr
test_termattrs	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_termattrs
test_tparm	$(LDFLAGS_TINFO)	$(LOCAL_LIBS)	test_tparm
test_unget_wch	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_unget_wch
test_vid_puts	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_vid_puts
test_vidputs	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	test_vidputs
testaddch	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	testaddch
testcurs	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	testcurs
testscanw	$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	testscanw
view		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	view popup_msg
worm		$(LDFLAGS_THREADS)	$(LOCAL_LIBS)	worm
xmas		$(LDFLAGS_CURSES)	$(LOCAL_LIBS)	xmas

# vile:makemode
