p_new.c 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /****************************************************************************
  2. * Copyright (c) 1998-2005,2008 Free Software Foundation, Inc. *
  3. * *
  4. * Permission is hereby granted, free of charge, to any person obtaining a *
  5. * copy of this software and associated documentation files (the *
  6. * "Software"), to deal in the Software without restriction, including *
  7. * without limitation the rights to use, copy, modify, merge, publish, *
  8. * distribute, distribute with modifications, sublicense, and/or sell *
  9. * copies of the Software, and to permit persons to whom the Software is *
  10. * furnished to do so, subject to the following conditions: *
  11. * *
  12. * The above copyright notice and this permission notice shall be included *
  13. * in all copies or substantial portions of the Software. *
  14. * *
  15. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
  16. * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
  18. * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
  19. * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
  20. * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
  21. * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
  22. * *
  23. * Except as contained in this notice, the name(s) of the above copyright *
  24. * holders shall not be used in advertising or otherwise to promote the *
  25. * sale, use or other dealings in this Software without prior written *
  26. * authorization. *
  27. ****************************************************************************/
  28. /****************************************************************************
  29. * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1995 *
  30. * and: Eric S. Raymond <esr@snark.thyrsus.com> *
  31. * and: Juergen Pfeifer 1997-1999 *
  32. * and: Thomas E. Dickey 2000-on *
  33. ****************************************************************************/
  34. /* p_new.c
  35. * Creation of a new panel
  36. */
  37. #include "panel.priv.h"
  38. MODULE_ID("$Id: p_new.c,v 1.10 2008/08/04 18:25:48 tom Exp $")
  39. #ifdef TRACE
  40. static char *stdscr_id;
  41. static char *new_id;
  42. #endif
  43. /*+-------------------------------------------------------------------------
  44. Get root (i.e. stdscr's) panel.
  45. Establish the pseudo panel for stdscr if necessary.
  46. --------------------------------------------------------------------------*/
  47. static PANEL *
  48. root_panel(void)
  49. {
  50. if (_nc_stdscr_pseudo_panel == (PANEL *) 0)
  51. {
  52. assert(stdscr && !_nc_bottom_panel && !_nc_top_panel);
  53. #if NO_LEAKS
  54. _nc_panelhook()->destroy = del_panel;
  55. #endif
  56. _nc_stdscr_pseudo_panel = (PANEL *) malloc(sizeof(PANEL));
  57. if (_nc_stdscr_pseudo_panel != 0)
  58. {
  59. PANEL *pan = _nc_stdscr_pseudo_panel;
  60. WINDOW *win = stdscr;
  61. pan->win = win;
  62. pan->below = (PANEL *) 0;
  63. pan->above = (PANEL *) 0;
  64. #ifdef TRACE
  65. if (!stdscr_id)
  66. stdscr_id = strdup("stdscr");
  67. pan->user = stdscr_id;
  68. #else
  69. pan->user = (void *)0;
  70. #endif
  71. _nc_bottom_panel = _nc_top_panel = pan;
  72. }
  73. }
  74. return _nc_stdscr_pseudo_panel;
  75. }
  76. NCURSES_EXPORT(PANEL *)
  77. new_panel(WINDOW *win)
  78. {
  79. PANEL *pan = (PANEL *) 0;
  80. T((T_CALLED("new_panel(%p)"), win));
  81. if (!win)
  82. returnPanel(pan);
  83. if (!_nc_stdscr_pseudo_panel)
  84. (void)root_panel();
  85. assert(_nc_stdscr_pseudo_panel);
  86. if (!(win->_flags & _ISPAD) && (pan = (PANEL *) malloc(sizeof(PANEL))))
  87. {
  88. pan->win = win;
  89. pan->above = (PANEL *) 0;
  90. pan->below = (PANEL *) 0;
  91. #ifdef TRACE
  92. if (!new_id)
  93. new_id = strdup("new");
  94. pan->user = new_id;
  95. #else
  96. pan->user = (char *)0;
  97. #endif
  98. (void)show_panel(pan);
  99. }
  100. returnPanel(pan);
  101. }