/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos72Q src/bos/usr/include/cur05.h 1.12.1.1                            */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 1985,2019              */
/* All Rights Reserved                                                    */
/*                                                                        */
/* US Government Users Restricted Rights - Use, duplication or            */
/* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.      */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
/* @(#)60	1.12.1.1  src/bos/usr/include/cur05.h, libcurses, bos72Q, q2019_13A4 2/5/19 03:07:18 */
#ifndef _H_CUR05
#define _H_CUR05

#ifdef __cplusplus
extern "C" {
#endif

/*
 * COMPONENT_NAME: (LIBCUR) Extended Curses Library
 *
 * FUNCTIONS: cur05.h
 *
 * ORIGINS: 10, 27
 *
 * (C) COPYRIGHT International Business Machines Corp. 1985, 1988
 * All Rights Reserved
 * Licensed Material - Property of IBM
 *
 * US Government Users Restricted Rights - Use, duplication or
 * disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
 */

				/* see cur01.h for NLSCHAR      */
#define    NLSCHAR    wchar_t


#define PANEL	struct Panel
#define PANE	struct Pane
#define PANEPS	struct Paneps

#ifdef __cplusplus
struct Pane;
struct Paneps;
struct _win_st;
#ifndef WINDOW
typedef struct _win_st WINDOW;
#endif				/* WINDOW */
#endif				/* __cplusplus */

struct Panel {                  /* panel header structure for */

				/* description of glass area */
    short int   p_depth;	/* number of rows in panel   */
    short int   p_width;	/* number of columns in panel */

    short int   orow;		/* origin row (top left)     */
    short int   ocol;		/* origin column	     */

    char   *title;		/* title string pointer      */
    char    divty;		/* divide type code	     */
    char    bordr;		/* border flag byte	     */

    char    __FILL1;		/* filler                    */
    char    __FILL2;		/* filler                    */

				/* the following fields are  */
				/* -- used to relate multiple */
				/* -- panels on the display  */

    PANEL   *p_under;           /* next panel in chain       */
				/* -- 'under' this panel     */
    PANEL   *p_over;            /* previous panel in chain   */
				/* -- 'over' this panel      */

				/* fields used by ecurses    */
				/* -- others use with caution */

    PANE    *fpane;             /* first pane after divisions */
    PANE    *dpane;             /* first root pane for div   */
    PANE    *apane;             /* current active pane       */
    WINDOW  *p_win;              /* window struct for panel   */
    int     dfid;		/* external panel ident      */

    char    plobsc;		/* panel obscured flag       */
    char    plmodf;		/* panel modified flag       */

    char    PLfill[6];		/* Filler to ease expansion  */
};


struct Pane {			/* Structure for a pane defn. */
				/* define presentation space */
    short int   w_depth;	/* rows of data for pane     */
    short int   w_width;	/* columns of data for pane  */

				/* define glass area includes */
				/* -- space for borders      */
    short int   v_depth;	/* rows being shown of pane  */
    short int   v_width;	/* columns being shown of pn */
    short int   orow;		/* top row on panel of view  */
				/* -- for this pane         */
    short int   ocol;		/* first col on panel of view */
				/* -- for this pane         */
    PANE    *vscr;              /* pane to scroll vertically */
				/* -- with this pane        */
    PANE    *hscr;              /* pane to scroll horizon.   */
				/* -- with this pane        */
    PANE    *nxtpn;             /* next pane in chain        */
    PANE    *prvpn;             /* previous pane in chain    */
    PANE    *divs;              /* next pane that is part of */
				/* -- current division spec  */
    PANE    *divd;              /* start of division of this */
				/* -- pane into smaller parts */
    char    divty;		/* division type code	     */
				/* -- applies to divisions of */
				/* -- this pane may have     */
				/* -- values below          */

    char    __FILL1;		/* filler                    */

    short int   divsz;		/* division size spec.	     */
    char    divszu;		/* division size unit spec.  */
				/* -- code indicate form for */
				/* -- divsz value (absolute  */
				/* -- fraction or fill)      */
    char    bordr;		/* border flag for this pane */

    char    __FILL2;		/* filler                    */
    char    __FILL3;		/* filler                    */

    WINDOW  *w_win;             /* pointer to pspace window  */
    WINDOW  *v_win;             /* pointer to view window    */
    int     pnvsid;		/* external ident for this   */
				/* -- p-pspace and view      */
    PANEL   *hpanl;             /* pointer to panel which    */
				/* -- contains this pane     */
    PANEPS  *exps;              /* ptr to chain of extra     */
				/* -- p-spaces for this pane */
    char    alloc;		/* flag - allocation of      */
				/* - w_win for this panel    */
				/* - indicates if ecdfpl did */
				/* - the allocate and thus if */
				/* - ecrlpl should free it   */

    char    pnobsc;		/* pane obscured flag        */
    char    pnmodf;		/* pane modified flag        */

    char    PNfill[5];		/* Filler to ease expansion  */
};

				/* valid codes for divty     */
#define Pdivtyv '0'		/* divide vertical dimension */
				/* -- of this pane,         */
				/* -- divisions will appear  */
				/* -- above each other      */
#define Pdivtyh '1'		/* divide horizontal dim     */
				/* -- of this pane,         */
				/* -- divisions will appear  */
				/* -- alongside each other.  */

				/* valid codes for divszu    */
#define Pdivszc '1'		/* size is fixed constant    */
#define Pdivszp '2'		/* size is proportional value */
#define Pdivszf '0'		/* size is float, ignore val */
				/* fixed constant must be in */
				/* -- range 1 to dimension   */
				/* -- being divided.        */
				/* proportional value must be */
				/* -- in range 1 - 10,000 and */
				/* -- represents numerator of */
				/* -- fraction to be given   */
				/* -- pane with denominator  */
				/* -- equal to 10,000       */
				/* float indicates an equal  */
				/* -- share with other float */
				/* -- panes of space avail   */
#define Pbordry '1'		/* pane has border           */
#define Pbordrn '0'		/* pane has no border        */

#define Pallocy 'y'		/* ecdfpl allocated w_win for */
				/* - this panel              */
#define Pallocn 'n'		/* ecdfpl did not allocate   */
				/* - w_win for this pane     */

#define Pmodfy  'y'		/* pane/panel modified       */
#define Pmodfn  'n'		/* pane/panel not modified   */

#define Pobscy  'y'		/* pane/panel obscured       */
#define Pobscn  'n'		/* pane/panel not obscured   */

struct Paneps {                 /* link structure for pspace added
				   to a pane	     */
    WINDOW  *extps;             /* pointer to added p-space  */
    short int   expvsid;	/* assigned id for the pspace */
    PANEPS  *extnxt;            /* next such structure       */
    PANEPS  *extprv;            /* previous such structure   */
};


extern
	PANEL   *_toppl;        /* ptr to top panel for display  */

extern
	PANEL   *_botpl;        /* bottom panel for display      */


/*      The following four externs are set to represent the resolved    */
/*      location for the locator cursor when the select button is       */
/*      pressed.                                                        */

extern
	PANEL   *LC_PNL;        /* panel containing locator     */

extern
	PANE    *LC_PANE;       /* pane in LC_PNL containing loc */

extern
int     LC_ROW;			/* row in LC_PAN for locator    */

extern
int     LC_COL;			/* column in LC_PAN for locator */

/*      externs used for global switches and status flags               */

extern
int     ECRFCLR;		/* flag to ecrfpl, clear needed? */

extern
        NLSCHAR ECFILLC;	/* character used to fill the   */
				/* - display for a field when   */
				/* - a character is deleted     */

extern
char    ECINSMD;		/* Insert mode for field input  */

/*      function declarations for those functions which do not          */
/*      return an integer value                                         */

PANEL   *ecbpls();              /* build panel structure        */
PANE    *ecbpns();              /* build pane structure         */
WINDOW  *ecblks();              /* blank window structure       */

/*      codes for second parameter to ecrfpl                            */

#define PLRFCLR 0		/* clear display and refresh    */
				/* - with all panels from arg to */
				/* - top panel, use after change */
				/* - to set of panels presented */
#define PLRFNCL 1		/* do not clear display, do refr */
				/* - with all panels from art to */
				/* - top panel, use after change */
				/* - to a panel content but not */
				/* - the set of panels displayed */
#define PLRFSTD 2		/* move updated panel to stdscr */
				/* - do not update display.     */
				/* - move only argument panel.  */
				/* - special purpose function   */



/*********************************************************************/
/*                                                                   */
/*      The following defines provide pseudo functions which will    */
/*      update the p-space for a pane and also set the flag          */
/*      in the panel block indicating that the panel has been        */
/*      modified.                                                    */
/*                                                                   */
/*********************************************************************/

#define ecpnmodf(p)         (((p)->hpanl)->plmodf = Pmodfy )

#define paddch(p,c)         (ecpnmodf(p),waddch((p)->w_win,(c)))
#define mvpaddch(p,y,x,c)   (ecpnmodf(p),mvwaddch((p)->w_win,(y),(x),(c)))
#define paddstr(p,s)        (ecpnmodf(p),waddstr((p)->w_win,(s)))
#define mvpaddstr(p,y,x,s)  (ecpnmodf(p),mvwaddstr((p)->w_win,(y),(x),(s)))
#define pchgat(p,n,m)       (ecpnmodf(p),wchgat((p)->w_win,(n),(m)))
#define mvpcggat(p,y,x,n,m) (ecpnmodf(p),mvwchgat((p)->w_win,(y),(x),(n),(m)))
#define mvpchgat(p,y,x,n,m) (ecpnmodf(p),mvwchgat((p)->w_win,(y),(x),(n),(m)))
#define perase(p)           (ecpnmodf(p) ,werase((p)->w_win))

#ifdef __cplusplus
}
#endif

#endif				/* _H_CUR05 */