1/*
2 * small test-driver for new dialog functionality
3 *
4 * Copyright (c) 1995, Jordan Hubbard
5 *
6 * All rights reserved.
7 *
8 * This source code may be used, modified, copied, distributed, and
9 * sold, in both source and binary form provided that the above
10 * copyright and these terms are retained, verbatim, as the first
11 * lines of this file.  Under no circumstances is the author
12 * responsible for the proper functioning of the software nor does
13 * the author assume any responsibility for damages incurred with
14 * its use.
15 */
16
17#include <sys/cdefs.h>
18__FBSDID("$FreeBSD$");
19
20#include <stdio.h>
21#include <stdlib.h>
22#include <string.h>
23#include <unistd.h>
24#include <sys/wait.h>
25#include <dialog.h>
26
27/* Hook functions */
28
29static int spending;
30
31static int
32check(dialogMenuItem *self)
33{
34    return ((int)(intptr_t)self->data == spending);
35}
36
37static int
38spend(dialogMenuItem *self)
39{
40    spending = (int)(intptr_t)self->data;
41    return DITEM_SUCCESS | DITEM_REDRAW;
42}
43
44static void
45ask(dialogMenuItem *self, int is_selected)
46{
47    if (is_selected) {
48	char *str;
49
50	if (!strcmp(self->prompt, "1000"))
51	    str = "You'd better ask both your parents first! ";
52	else if (!strcmp(self->prompt, "500"))
53	    str = "You'd better at least ask your Dad!       ";
54	else
55	    str = "Yes, being frugal is probably a good idea!";
56	DialogX = 15;
57	DialogY = 17;
58	dialog_msgbox("Free Advice", str, -1, -1, 0);
59    }
60}
61
62/*
63 * menu5 - Show a simple radiolist menu that inherits the radio appearance by default and appears at
64 * a different location, leaving room for a msg box below it.  This shows off the DialogX/DialogY extensions.
65 */
66
67/* prompt	title			checked		fire		sel	data */
68static dialogMenuItem menu5[] = {
69    { "1000",	"Spend $1,000",		check,		spend,		ask,	(void *)1000 },
70    { "500",	"Spend $500",		check,		spend,		ask,	(void *)500 },
71    { "100",	"Spend $100",		check,		spend, 		ask,	(void *)100 },
72};
73
74/* End of hook functions */
75
76/* Kick it off, James! */
77int
78main(int argc, char **argv)
79{
80    int retval;
81
82    init_dialog();
83
84
85    DialogX = 5;
86    DialogY = 1;
87    retval = dialog_radiolist("this is dialog_radiolist() in action, test #3",
88			      "This radio menu shows off the ability to put dialog menus and other\n"
89			      "controls at different locations, as well as the `selected' hook which\n"
90			      "lets you follow the traversal of the selection bar as well as what's\n"
91			      "selected.",
92			      -1, -1, 3, -3, menu5, NULL);
93    dialog_clear();
94    fprintf(stderr, "returned value for dialog_radiolist was %d (money set to %d)\n", retval, spending);
95
96    end_dialog();
97    return 0;
98}
99