freebsd-dev/gnu/lib/libdialog/TESTS/menu2.c
Jordan K. Hubbard 6562be49a5 More changes to attempt to make this whole new dialog scheme more
robust.  The new "fire" actions, while affording signficantly more
interactivity to libdialog, come at a cost - if the fire action trashes
the screen then you're not going to be in Kansas anymore when you
come back to the menu and there had better be considerable extra
smarts in place for coping with such a situation.  These changes are my
attempt to do just that.
1996-04-16 12:17:27 +00:00

120 lines
3.0 KiB
C

/*
* small test-driver for new dialog functionality
*
* Copyright (c) 1995, Jordan Hubbard
*
* All rights reserved.
*
* This source code may be used, modified, copied, distributed, and
* sold, in both source and binary form provided that the above
* copyright and these terms are retained, verbatim, as the first
* lines of this file. Under no circumstances is the author
* responsible for the proper functioning of the software nor does
* the author assume any responsibility for damages incurred with
* its use.
*
* $Id: menu2.c,v 1.2 1996/04/07 03:20:54 jkh Exp $
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <dialog.h>
/* Start of hook functions */
static enum { nowhere, berlin, rome, ny } where;
static int
_menu1_berlin_action(dialogMenuItem *self)
{
WINDOW *w;
int st = DITEM_FAILURE;
w = dupwin(newscr);
if (where == berlin) {
dialog_mesgbox("excuse me?", "But you're already *in* Berlin!", -1, -1);
}
else {
where = berlin;
dialog_mesgbox("whoosh!", "Welcome to Berlin! Have a beer!", -1, -1);
}
touchwin(w);
wrefresh(w);
delwin(w);
return st;
}
static int
_menu1_rome_action(dialogMenuItem *self)
{
WINDOW *w;
int st = DITEM_FAILURE;
w = dupwin(newscr);
if (where == rome) {
dialog_mesgbox("The wine must be getting to you..", "You're already in Rome!", -1, -1);
}
else {
where = rome;
dialog_mesgbox("whoosh!", "Welcome to Rome! Have a coffee!", -1, -1);
}
touchwin(w);
wrefresh(w);
delwin(w);
return st;
}
static int
_menu1_ny_action(dialogMenuItem *self)
{
WINDOW *w;
int st = DITEM_FAILURE;
w = dupwin(newscr);
if (where == ny) {
dialog_mesgbox("Say what?", "You're already there!", -1, -1);
}
else {
where = ny;
dialog_mesgbox("whoosh!", "Welcome to New York! Now go someplace else!", -1, -1);
}
touchwin(w);
wrefresh(w);
delwin(w);
return st;
}
/* menu1 - show off the "fire" action hook */
/* prompt title checked fire */
static dialogMenuItem menu1[] = {
{ "Berlin", "Go visit Germany's new capitol", NULL, _menu1_berlin_action },
{ "Rome", "Go visit the Roman ruins", NULL, _menu1_rome_action },
{ "New York", "Go visit the streets of New York", NULL, _menu1_ny_action },
};
/* End of hook functions */
/* Kick it off, James! */
int
main(int argc, unsigned char *argv[])
{
int retval;
init_dialog();
use_helpfile("menu2.c");
use_helpline("Type F1 to view the source for this demo");
retval = dialog_menu("this is dialog_menu() in action, test #2",
"this simple menu shows off some of the straight-forward features\n"
"of the new menu system's action dispatch hooks as well as a helpline\n"
"and a helpfile. Select Cancel to leave",
-1, -1, 3, -3, menu1, NULL, NULL, NULL);
dialog_clear();
fprintf(stderr, "returned value for dialog_menu was %d\n", retval);
end_dialog();
return 0;
}