libpayload: Rename PDCurses-3.4 to PDCurses
Change-Id: If881ec130833c7e7e62caa3d31e350a531f5bc8e Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Reviewed-on: http://review.coreboot.org/12398 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
233
payloads/libpayload/curses/PDCurses/demos/tuidemo.c
Normal file
233
payloads/libpayload/curses/PDCurses/demos/tuidemo.c
Normal file
@ -0,0 +1,233 @@
|
||||
/*
|
||||
* $Id: tuidemo.c,v 1.22 2008/07/14 12:35:23 wmcbrine Exp $
|
||||
*
|
||||
* Author : P.J. Kunst <kunst@prl.philips.nl>
|
||||
* Date : 25-02-93
|
||||
*
|
||||
* Purpose: This program demonstrates the use of the 'curses' library
|
||||
* for the creation of (simple) menu-operated programs.
|
||||
* In the PDCurses version, use is made of colors for the
|
||||
* highlighting of subwindows (title bar, status bar etc).
|
||||
*
|
||||
* Acknowledgement: some ideas were borrowed from Mark Hessling's
|
||||
* version of the 'testcurs' program.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <locale.h>
|
||||
#include "tui.h"
|
||||
|
||||
/* change this if source at other location */
|
||||
|
||||
#ifdef XCURSES
|
||||
# define FNAME "../demos/tui.c"
|
||||
#else
|
||||
# define FNAME "..\\demos\\tui.c"
|
||||
#endif
|
||||
|
||||
/**************************** strings entry box ***************************/
|
||||
|
||||
void address(void)
|
||||
{
|
||||
char *fieldname[6] =
|
||||
{
|
||||
"Name", "Street", "City", "State", "Country", (char *)0
|
||||
};
|
||||
|
||||
char *fieldbuf[5];
|
||||
WINDOW *wbody = bodywin();
|
||||
int i, field = 50;
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
fieldbuf[i] = calloc(1, field + 1);
|
||||
|
||||
if (getstrings(fieldname, fieldbuf, field) != KEY_ESC)
|
||||
{
|
||||
for (i = 0; fieldname[i]; i++)
|
||||
wprintw(wbody, "%10s : %s\n",
|
||||
fieldname[i], fieldbuf[i]);
|
||||
|
||||
wrefresh(wbody);
|
||||
}
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
free(fieldbuf[i]);
|
||||
}
|
||||
|
||||
/**************************** string entry box ****************************/
|
||||
|
||||
char *getfname(char *desc, char *fname, int field)
|
||||
{
|
||||
char *fieldname[2];
|
||||
char *fieldbuf[1];
|
||||
|
||||
fieldname[0] = desc;
|
||||
fieldname[1] = 0;
|
||||
fieldbuf[0] = fname;
|
||||
|
||||
return (getstrings(fieldname, fieldbuf, field) == KEY_ESC) ? NULL : fname;
|
||||
}
|
||||
|
||||
/**************************** a very simple file browser ******************/
|
||||
|
||||
void showfile(char *fname)
|
||||
{
|
||||
int i, bh = bodylen();
|
||||
FILE *fp;
|
||||
char buf[MAXSTRLEN];
|
||||
bool ateof = FALSE;
|
||||
|
||||
statusmsg("FileBrowser: Hit key to continue, Q to quit");
|
||||
|
||||
if ((fp = fopen(fname, "r")) != NULL) /* file available? */
|
||||
{
|
||||
while (!ateof)
|
||||
{
|
||||
clsbody();
|
||||
|
||||
for (i = 0; i < bh - 1 && !ateof; i++)
|
||||
{
|
||||
buf[0] = '\0';
|
||||
fgets(buf, MAXSTRLEN, fp);
|
||||
|
||||
if (strlen(buf))
|
||||
bodymsg(buf);
|
||||
else
|
||||
ateof = TRUE;
|
||||
}
|
||||
|
||||
switch (waitforkey())
|
||||
{
|
||||
case 'Q':
|
||||
case 'q':
|
||||
case 0x1b:
|
||||
ateof = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(buf, "ERROR: file '%s' not found", fname);
|
||||
errormsg(buf);
|
||||
}
|
||||
}
|
||||
|
||||
/***************************** forward declarations ***********************/
|
||||
|
||||
void sub0(void), sub1(void), sub2(void), sub3(void);
|
||||
void func1(void), func2(void);
|
||||
void subfunc1(void), subfunc2(void);
|
||||
void subsub(void);
|
||||
|
||||
/***************************** menus initialization ***********************/
|
||||
|
||||
menu MainMenu[] =
|
||||
{
|
||||
{ "Asub", sub0, "Go inside first submenu" },
|
||||
{ "Bsub", sub1, "Go inside second submenu" },
|
||||
{ "Csub", sub2, "Go inside third submenu" },
|
||||
{ "Dsub", sub3, "Go inside fourth submenu" },
|
||||
{ "", (FUNC)0, "" } /* always add this as the last item! */
|
||||
};
|
||||
|
||||
menu SubMenu0[] =
|
||||
{
|
||||
{ "Exit", DoExit, "Terminate program" },
|
||||
{ "", (FUNC)0, "" }
|
||||
};
|
||||
|
||||
menu SubMenu1[] =
|
||||
{
|
||||
{ "OneBeep", func1, "Sound one beep" },
|
||||
{ "TwoBeeps", func2, "Sound two beeps" },
|
||||
{ "", (FUNC)0, "" }
|
||||
};
|
||||
|
||||
menu SubMenu2[] =
|
||||
{
|
||||
{ "Browse", subfunc1, "Source file lister" },
|
||||
{ "Input", subfunc2, "Interactive file lister" },
|
||||
{ "Address", address, "Get address data" },
|
||||
{ "", (FUNC)0, "" }
|
||||
};
|
||||
|
||||
menu SubMenu3[] =
|
||||
{
|
||||
{ "SubSub", subsub, "Go inside sub-submenu" },
|
||||
{ "", (FUNC)0, "" }
|
||||
};
|
||||
|
||||
/***************************** main menu functions ************************/
|
||||
|
||||
void sub0(void)
|
||||
{
|
||||
domenu(SubMenu0);
|
||||
}
|
||||
|
||||
void sub1(void)
|
||||
{
|
||||
domenu(SubMenu1);
|
||||
}
|
||||
|
||||
void sub2(void)
|
||||
{
|
||||
domenu(SubMenu2);
|
||||
}
|
||||
|
||||
void sub3(void)
|
||||
{
|
||||
domenu(SubMenu3);
|
||||
}
|
||||
|
||||
/***************************** submenu1 functions *************************/
|
||||
|
||||
void func1(void)
|
||||
{
|
||||
beep();
|
||||
bodymsg("One beep! ");
|
||||
}
|
||||
|
||||
void func2(void)
|
||||
{
|
||||
beep();
|
||||
bodymsg("Two beeps! ");
|
||||
beep();
|
||||
}
|
||||
|
||||
/***************************** submenu2 functions *************************/
|
||||
|
||||
void subfunc1(void)
|
||||
{
|
||||
showfile(FNAME);
|
||||
}
|
||||
|
||||
void subfunc2(void)
|
||||
{
|
||||
char fname[MAXSTRLEN];
|
||||
|
||||
strcpy(fname, FNAME);
|
||||
if (getfname ("File to browse:", fname, 50))
|
||||
showfile(fname);
|
||||
}
|
||||
|
||||
/***************************** submenu3 functions *************************/
|
||||
|
||||
void subsub(void)
|
||||
{
|
||||
domenu(SubMenu2);
|
||||
}
|
||||
|
||||
/***************************** start main menu ***************************/
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
setlocale(LC_ALL, "");
|
||||
|
||||
startmenu(MainMenu, "TUI - 'textual user interface' demonstration program");
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user