/* @(#)cg8var.h 1.14 of 8/22/90 SMI */

/*
 * Copyright 1988 by Sun Microsystems, Inc.
 */

#ifndef cg8var_DEFINED
#define cg8var_DEFINED

/* <sundev/p4reg.h> and <pixrect/memvar.h> included */
#include <pixrect/cg4var.h>
#ifndef SVR4
#include <sundev/cg8reg.h>
#include <sunwindow/cms.h>
#else
#include <sys/cms.h>
#endif /* SVR4 */

/* FBIOSATTR device specific array indices, copied from cg4var.h */
#define FB_ATTR_CG8_SETOWNER_CMD    0   /* 1 indicates PID is valid */
#define FB_ATTR_CG8_SETOWNER_PID    1   /* new owner of device */

#define CG8_NFBS    3

#define CG8_PRIMARY     0x01    /* Mark the PRIMARY Pixrect */
#define CG8_OVERLAY_CMAP    0x02    /* Overlay CMAP to be changed   */
#define CG8_24BIT_CMAP      0x04    /* 24 Bit CMAP to be changed    */
#define CG8_KERNEL_UPDATE   0x08    /* kernel vs. user ioctl    */
/* 0x10 & 0x20 are dbl buf in cg9 */
#define CG8_SLEEPING        0x40    /* Denote if wake_up is necessary */
#define CG8_COLOR_OVERLAY   0x80    /* view overlay & enable as 2 bits */
#define CG8_UPDATE_PENDING  0x100

struct cg8_data
{
    struct  mprp_data   mprp;       /* memory pixrect simulator */
    int         flags;      /* misc. flags */
    int         planes;     /* current group and mask */
    int         fd;     /* file descriptor */
    short           active;     /* active fb no. */
    struct  cg4fb       fb[CG8_NFBS];   /* frame buffer info */
    int         windowfd;   /* if 8-bit indexed pw */
    struct  colormapseg cms;        /* if 8-bit indexed pr */
    int         real_windowfd;  /* if 8-bit indexed pw */
};

#define cg8_d(pr)   ((struct cg8_data *)((pr)->pr_data))

#define CG8_PR_TO_MEM(src, mem)                     \
    if (src && src->pr_ops != &mem_ops)                 \
    {                                   \
        mem.pr_ops = &mem_ops;                      \
        mem.pr_size = src->pr_size;                 \
        mem.pr_depth = src->pr_depth;                   \
        mem.pr_data = (char *) &cg8_d(src)->mprp;           \
        src = &mem;                         \
    }

#define CG8_PR_TO_MEM32(pr, mem32_pr, mem32_pr_data)            \
    if (pr && pr->pr_ops != &mem_ops)                   \
    {                                   \
        mem32_pr.pr_ops = &mem32_ops;                   \
        mem32_pr.pr_size = pr->pr_size;                 \
        mem32_pr.pr_depth = pr->pr_depth;               \
        mem32_pr_data.mprp = cg8_d(pr)->mprp;               \
        mem32_pr_data.plane_group = cg8_d(pr)->fb[cg8_d(pr)->active].group;\
        mem32_pr_data.fd = cg8_d(pr)->fd;               \
        mem32_pr_data.windowfd = cg8_d(pr)->windowfd;           \
        mem32_pr_data.cms = cg8_d(pr)->cms;             \
        mem32_pr.pr_data = (char *) &mem32_pr_data;         \
        pr = &mem32_pr;                         \
    }

extern struct pixrectops cg8_ops;

int     cg8_putcolormap();
int     cg8_putattributes();
int     cg8_ioctl();

#ifndef KERNEL

Pixrect     *cg8_make();
int     cg8_destroy();
Pixrect     *cg8_region();
int     cg8_getcolormap();
int     cg8_getattributes();
int     cg8_vector();
int     cg8_get();
int     cg8_put();
int     cg8_rop();

#endif /*   !KERNEL */

#endif /* cg8var_DEFINED */
