summaryrefslogtreecommitdiff
path: root/payloads/libpayload/curses/PDCurses-3.4/pdcurses/panel.c
diff options
context:
space:
mode:
authorStefan Reinauer <stefan.reinauer@coreboot.org>2015-11-10 09:00:41 -0800
committerStefan Reinauer <stefan.reinauer@coreboot.org>2015-11-11 21:38:48 +0100
commit4f85a1eb76d1e7109bcc60ba6f3262a5654ac61b (patch)
treee996818c6aa6b6f702a6c805c447c20724eff265 /payloads/libpayload/curses/PDCurses-3.4/pdcurses/panel.c
parent2ea24dabd658b8396e0abf79318a538ef0f3a5b8 (diff)
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>
Diffstat (limited to 'payloads/libpayload/curses/PDCurses-3.4/pdcurses/panel.c')
-rw-r--r--payloads/libpayload/curses/PDCurses-3.4/pdcurses/panel.c630
1 files changed, 0 insertions, 630 deletions
diff --git a/payloads/libpayload/curses/PDCurses-3.4/pdcurses/panel.c b/payloads/libpayload/curses/PDCurses-3.4/pdcurses/panel.c
deleted file mode 100644
index 87b987d4b4..0000000000
--- a/payloads/libpayload/curses/PDCurses-3.4/pdcurses/panel.c
+++ /dev/null
@@ -1,630 +0,0 @@
-/* Public Domain Curses */
-
-#include <curspriv.h>
-
-RCSID("$Id: panel.c,v 1.8 2008/07/14 12:35:23 wmcbrine Exp $")
-
-/*man-start**************************************************************
-
- Name: panel
-
- Synopsis:
- int bottom_panel(PANEL *pan);
- int del_panel(PANEL *pan);
- int hide_panel(PANEL *pan);
- int move_panel(PANEL *pan, int starty, int startx);
- PANEL *new_panel(WINDOW *win);
- PANEL *panel_above(const PANEL *pan);
- PANEL *panel_below(const PANEL *pan);
- int panel_hidden(const PANEL *pan);
- const void *panel_userptr(const PANEL *pan);
- WINDOW *panel_window(const PANEL *pan);
- int replace_panel(PANEL *pan, WINDOW *win);
- int set_panel_userptr(PANEL *pan, const void *uptr);
- int show_panel(PANEL *pan);
- int top_panel(PANEL *pan);
- void update_panels(void);
-
- Description:
- The panel library is built using the curses library, and any
- program using panels routines must call one of the curses
- initialization routines such as initscr(). A program using these
- routines must be linked with the panels and curses libraries.
- The header <panel.h> includes the header <curses.h>.
-
- The panels package gives the applications programmer a way to
- have depth relationships between curses windows; a curses window
- is associated with every panel. The panels routines allow curses
- windows to overlap without making visible the overlapped
- portions of underlying windows. The initial curses window,
- stdscr, lies beneath all panels. The set of currently visible
- panels is the 'deck' of panels.
-
- The panels package allows the applications programmer to create
- panels, fetch and set their associated windows, shuffle panels
- in the deck, and manipulate panels in other ways.
-
- bottom_panel() places pan at the bottom of the deck. The size,
- location and contents of the panel are unchanged.
-
- del_panel() deletes pan, but not its associated winwow.
-
- hide_panel() removes a panel from the deck and thus hides it
- from view.
-
- move_panel() moves the curses window associated with pan, so
- that its upper lefthand corner is at the supplied coordinates.
- (Do not use mvwin() on the window.)
-
- new_panel() creates a new panel associated with win and returns
- the panel pointer. The new panel is placed at the top of the
- deck.
-
- panel_above() returns a pointer to the panel in the deck above
- pan, or NULL if pan is the top panel. If the value of pan passed
- is NULL, this function returns a pointer to the bottom panel in
- the deck.
-
- panel_below() returns a pointer to the panel in the deck below
- pan, or NULL if pan is the bottom panel. If the value of pan
- passed is NULL, this function returns a pointer to the top panel
- in the deck.
-
- panel_hidden() returns OK if pan is hidden and ERR if it is not.
-
- panel_userptr() - Each panel has a user pointer available for
- maintaining relevant information. This function returns a
- pointer to that information previously set up by
- set_panel_userptr().
-
- panel_window() returns a pointer to the curses window associated
- with the panel.
-
- replace_panel() replaces the current window of pan with win.
-
- set_panel_userptr() - Each panel has a user pointer available
- for maintaining relevant information. This function sets the
- value of that information.
-
- show_panel() makes a previously hidden panel visible and places
- it back in the deck on top.
-
- top_panel() places pan on the top of the deck. The size,
- location and contents of the panel are unchanged.
-
- update_panels() refreshes the virtual screen to reflect the
- depth relationships between the panels in the deck. The user
- must use doupdate() to refresh the physical screen.
-
- Return Value:
- Each routine that returns a pointer to an object returns NULL if
- an error occurs. Each panel routine that returns an integer,
- returns OK if it executes successfully and ERR if it does not.
-
- Portability X/Open BSD SYS V
- bottom_panel - - Y
- del_panel - - Y
- hide_panel - - Y
- move_panel - - Y
- new_panel - - Y
- panel_above - - Y
- panel_below - - Y
- panel_hidden - - Y
- panel_userptr - - Y
- panel_window - - Y
- replace_panel - - Y
- set_panel_userptr - - Y
- show_panel - - Y
- top_panel - - Y
- update_panels - - Y
-
- Credits:
- Original Author - Warren Tucker <wht@n4hgf.mt-park.ga.us>
-
-**man-end****************************************************************/
-
-#include <panel.h>
-#include <stdlib.h>
-
-PANEL *_bottom_panel = (PANEL *)0;
-PANEL *_top_panel = (PANEL *)0;
-PANEL _stdscr_pseudo_panel = { (WINDOW *)0 };
-
-#ifdef PANEL_DEBUG
-
-static void dPanel(char *text, PANEL *pan)
-{
- PDC_LOG(("%s id=%s b=%s a=%s y=%d x=%d", text, pan->user,
- pan->below ? pan->below->user : "--",
- pan->above ? pan->above->user : "--",
- pan->wstarty, pan->wstartx));
-}
-
-static void dStack(char *fmt, int num, PANEL *pan)
-{
- char s80[80];
-
- sprintf(s80, fmt, num, pan);
- PDC_LOG(("%s b=%s t=%s", s80, _bottom_panel ? _bottom_panel->user : "--",
- _top_panel ? _top_panel->user : "--"));
-
- if (pan)
- PDC_LOG(("pan id=%s", pan->user));
-
- pan = _bottom_panel;
-
- while (pan)
- {
- dPanel("stk", pan);
- pan = pan->above;
- }
-}
-
-/* debugging hook for wnoutrefresh */
-
-static void Wnoutrefresh(PANEL *pan)
-{
- dPanel("wnoutrefresh", pan);
- wnoutrefresh(pan->win);
-}
-
-static void Touchpan(PANEL *pan)
-{
- dPanel("Touchpan", pan);
- touchwin(pan->win);
-}
-
-static void Touchline(PANEL *pan, int start, int count)
-{
- char s80[80];
-
- sprintf(s80, "Touchline s=%d c=%d", start, count);
- dPanel(s80, pan);
- touchline(pan->win, start, count);
-}
-
-#else /* PANEL_DEBUG */
-
-#define dPanel(text, pan)
-#define dStack(fmt, num, pan)
-#define Wnoutrefresh(pan) wnoutrefresh((pan)->win)
-#define Touchpan(pan) touchwin((pan)->win)
-#define Touchline(pan, start, count) touchline((pan)->win, start, count)
-
-#endif /* PANEL_DEBUG */
-
-static bool _panels_overlapped(PANEL *pan1, PANEL *pan2)
-{
- if (!pan1 || !pan2)
- return FALSE;
-
- return ((pan1->wstarty >= pan2->wstarty && pan1->wstarty < pan2->wendy)
- || (pan2->wstarty >= pan1->wstarty && pan2->wstarty < pan1->wendy))
- && ((pan1->wstartx >= pan2->wstartx && pan1->wstartx < pan2->wendx)
- || (pan2->wstartx >= pan1->wstartx && pan2->wstartx < pan1->wendx));
-}
-
-static void _free_obscure(PANEL *pan)
-{
- PANELOBS *tobs = pan->obscure; /* "this" one */
- PANELOBS *nobs; /* "next" one */
-
- while (tobs)
- {
- nobs = tobs->above;
- free((char *)tobs);
- tobs = nobs;
- }
- pan->obscure = (PANELOBS *)0;
-}
-
-static void _override(PANEL *pan, int show)
-{
- int y;
- PANEL *pan2;
- PANELOBS *tobs = pan->obscure; /* "this" one */
-
- if (show == 1)
- Touchpan(pan);
- else if (!show)
- {
- Touchpan(pan);
- Touchpan(&_stdscr_pseudo_panel);
- }
- else if (show == -1)
- while (tobs && (tobs->pan != pan))
- tobs = tobs->above;
-
- while (tobs)
- {
- if ((pan2 = tobs->pan) != pan)
- for (y = pan->wstarty; y < pan->wendy; y++)
- if ((y >= pan2->wstarty) && (y < pan2->wendy) &&
- ((is_linetouched(pan->win, y - pan->wstarty)) ||
- (is_linetouched(stdscr, y))))
- Touchline(pan2, y - pan2->wstarty, 1);
-
- tobs = tobs->above;
- }
-}
-
-static void _calculate_obscure(void)
-{
- PANEL *pan, *pan2;
- PANELOBS *tobs; /* "this" one */
- PANELOBS *lobs; /* last one */
-
- pan = _bottom_panel;
-
- while (pan)
- {
- if (pan->obscure)
- _free_obscure(pan);
-
- lobs = (PANELOBS *)0;
- pan2 = _bottom_panel;
-
- while (pan2)
- {
- if (_panels_overlapped(pan, pan2))
- {
- if ((tobs = malloc(sizeof(PANELOBS))) == NULL)
- return;
-
- tobs->pan = pan2;
- dPanel("obscured", pan2);
- tobs->above = (PANELOBS *)0;
-
- if (lobs)
- lobs->above = tobs;
- else
- pan->obscure = tobs;
-
- lobs = tobs;
- }
-
- pan2 = pan2->above;
- }
-
- _override(pan, 1);
- pan = pan->above;
- }
-}
-
-/* check to see if panel is in the stack */
-
-static bool _panel_is_linked(const PANEL *pan)
-{
- PANEL *pan2 = _bottom_panel;
-
- while (pan2)
- {
- if (pan2 == pan)
- return TRUE;
-
- pan2 = pan2->above;
- }
-
- return FALSE;
-}
-
-/* link panel into stack at top */
-
-static void _panel_link_top(PANEL *pan)
-{
-#ifdef PANEL_DEBUG
- dStack("<lt%d>", 1, pan);
- if (_panel_is_linked(pan))
- return;
-#endif
- pan->above = (PANEL *)0;
- pan->below = (PANEL *)0;
-
- if (_top_panel)
- {
- _top_panel->above = pan;
- pan->below = _top_panel;
- }
-
- _top_panel = pan;
-
- if (!_bottom_panel)
- _bottom_panel = pan;
-
- _calculate_obscure();
- dStack("<lt%d>", 9, pan);
-}
-
-/* link panel into stack at bottom */
-
-static void _panel_link_bottom(PANEL *pan)
-{
-#ifdef PANEL_DEBUG
- dStack("<lb%d>", 1, pan);
- if (_panel_is_linked(pan))
- return;
-#endif
- pan->above = (PANEL *)0;
- pan->below = (PANEL *)0;
-
- if (_bottom_panel)
- {
- _bottom_panel->below = pan;
- pan->above = _bottom_panel;
- }
-
- _bottom_panel = pan;
-
- if (!_top_panel)
- _top_panel = pan;
-
- _calculate_obscure();
- dStack("<lb%d>", 9, pan);
-}
-
-static void _panel_unlink(PANEL *pan)
-{
- PANEL *prev;
- PANEL *next;
-
-#ifdef PANEL_DEBUG
- dStack("<u%d>", 1, pan);
- if (!_panel_is_linked(pan))
- return;
-#endif
- _override(pan, 0);
- _free_obscure(pan);
-
- prev = pan->below;
- next = pan->above;
-
- /* if non-zero, we will not update the list head */
-
- if (prev)
- {
- prev->above = next;
- if(next)
- next->below = prev;
- }
- else if (next)
- next->below = prev;
-
- if (pan == _bottom_panel)
- _bottom_panel = next;
-
- if (pan == _top_panel)
- _top_panel = prev;
-
- _calculate_obscure();
-
- pan->above = (PANEL *)0;
- pan->below = (PANEL *)0;
- dStack("<u%d>", 9, pan);
-
-}
-
-/************************************************************************
- * The following are the public functions for the panels library. *
- ************************************************************************/
-
-int bottom_panel(PANEL *pan)
-{
- if (!pan)
- return ERR;
-
- if (pan == _bottom_panel)
- return OK;
-
- if (_panel_is_linked(pan))
- hide_panel(pan);
-
- _panel_link_bottom(pan);
-
- return OK;
-}
-
-int del_panel(PANEL *pan)
-{
- if (pan)
- {
- if (_panel_is_linked(pan))
- hide_panel(pan);
-
- free((char *)pan);
- return OK;
- }
-
- return ERR;
-}
-
-int hide_panel(PANEL *pan)
-{
- if (!pan)
- return ERR;
-
- if (!_panel_is_linked(pan))
- {
- pan->above = (PANEL *)0;
- pan->below = (PANEL *)0;
- return ERR;
- }
-
- _panel_unlink(pan);
-
- return OK;
-}
-
-int move_panel(PANEL *pan, int starty, int startx)
-{
- WINDOW *win;
- int maxy, maxx;
-
- if (!pan)
- return ERR;
-
- if (_panel_is_linked(pan))
- _override(pan, 0);
-
- win = pan->win;
-
- if (mvwin(win, starty, startx) == ERR)
- return ERR;
-
- getbegyx(win, pan->wstarty, pan->wstartx);
- getmaxyx(win, maxy, maxx);
- pan->wendy = pan->wstarty + maxy;
- pan->wendx = pan->wstartx + maxx;
-
- if (_panel_is_linked(pan))
- _calculate_obscure();
-
- return OK;
-}
-
-PANEL *new_panel(WINDOW *win)
-{
- PANEL *pan = malloc(sizeof(PANEL));
-
- if (!_stdscr_pseudo_panel.win)
- {
- _stdscr_pseudo_panel.win = stdscr;
- _stdscr_pseudo_panel.wstarty = 0;
- _stdscr_pseudo_panel.wstartx = 0;
- _stdscr_pseudo_panel.wendy = LINES;
- _stdscr_pseudo_panel.wendx = COLS;
- _stdscr_pseudo_panel.user = "stdscr";
- _stdscr_pseudo_panel.obscure = (PANELOBS *)0;
- }
-
- if (pan)
- {
- int maxy, maxx;
-
- pan->win = win;
- pan->above = (PANEL *)0;
- pan->below = (PANEL *)0;
- getbegyx(win, pan->wstarty, pan->wstartx);
- getmaxyx(win, maxy, maxx);
- pan->wendy = pan->wstarty + maxy;
- pan->wendx = pan->wstartx + maxx;
-#ifdef PANEL_DEBUG
- pan->user = "new";
-#else
- pan->user = (char *)0;
-#endif
- pan->obscure = (PANELOBS *)0;
- show_panel(pan);
- }
-
- return pan;
-}
-
-PANEL *panel_above(const PANEL *pan)
-{
- return pan ? pan->above : _bottom_panel;
-}
-
-PANEL *panel_below(const PANEL *pan)
-{
- return pan ? pan->below : _top_panel;
-}
-
-int panel_hidden(const PANEL *pan)
-{
- if (!pan)
- return ERR;
-
- return _panel_is_linked(pan) ? ERR : OK;
-}
-
-const void *panel_userptr(const PANEL *pan)
-{
- return pan ? pan->user : NULL;
-}
-
-WINDOW *panel_window(const PANEL *pan)
-{
- PDC_LOG(("panel_window() - called\n"));
-
- return pan->win;
-}
-
-int replace_panel(PANEL *pan, WINDOW *win)
-{
- int maxy, maxx;
-
- if (!pan)
- return ERR;
-
- if (_panel_is_linked(pan))
- _override(pan, 0);
-
- pan->win = win;
- getbegyx(win, pan->wstarty, pan->wstartx);
- getmaxyx(win, maxy, maxx);
- pan->wendy = pan->wstarty + maxy;
- pan->wendx = pan->wstartx + maxx;
-
- if (_panel_is_linked(pan))
- _calculate_obscure();
-
- return OK;
-}
-
-int set_panel_userptr(PANEL *pan, const void *uptr)
-{
- if (!pan)
- return ERR;
-
- pan->user = uptr;
- return OK;
-}
-
-int show_panel(PANEL *pan)
-{
- if (!pan)
- return ERR;
-
- if (pan == _top_panel)
- return OK;
-
- if (_panel_is_linked(pan))
- hide_panel(pan);
-
- _panel_link_top(pan);
-
- return OK;
-}
-
-int top_panel(PANEL *pan)
-{
- return show_panel(pan);
-}
-
-void update_panels(void)
-{
- PANEL *pan;
-
- PDC_LOG(("update_panels() - called\n"));
-
- pan = _bottom_panel;
-
- while (pan)
- {
- _override(pan, -1);
- pan = pan->above;
- }
-
- if (is_wintouched(stdscr))
- Wnoutrefresh(&_stdscr_pseudo_panel);
-
- pan = _bottom_panel;
-
- while (pan)
- {
- if (is_wintouched(pan->win) || !pan->above)
- Wnoutrefresh(pan);
-
- pan = pan->above;
- }
-}