/* xyz */

/*
 * Copyright (c) 1997 by Wayne C. Gramlich.
 * All rights reserved.
 *
 * Permission to use, copy, modify, distribute, and sell this software
 * for any purpose is hereby granted without fee provided that the above
 * copyright notice and this permission are retained.  The author makes
 * no representations about the suitability of this software for any purpose.
 * It is provided "as is" without express or implied warranty.
 */

/*
 * This file provide a bunch of interface routines for manipulating
 * an Xlib {XSetWindowAttributes} object.
 */

#ifndef XLIB_H
#include "xlib.h"
#endif

/* The initial object: */
Xlib_window_attributes_struct xlib_window_attributes___initial_object = {
    &xlib_screen___initial_object,	/* Screen object */
    0					/* mask */
};					/* Rest zeros */
Xlib_window_attributes xlib_window_attributes___initial = &xlib_window_attributes___initial_object;

/*
 * xlib_window_attributes___bogus(window_attributes)
 *	This routine will output an error message for {window_attributes}.
 */
static void
xlib_window_attributes___bogus(
    Xlib_window_attributes window_attributes)
{
    xlib_errors___add(window_attributes->screen->display->errors,
      "Bogus field value for window_attributes");
}

/*
 * xlib_window_attributes__address_get(window_attributes)
 *	This routine will return the address of {window_attributes}.
 */
unsigned
xlib_window_attributes__address_get(
    Xlib_window_attributes window_attributes)
{
    return (unsigned)window_attributes;
}

/*
 * xlib_window_attributes__create(screen)
 *	This routine will allocate and return an erased {window_attributes}
 *	object that is permanently associated with {screen}.
 */
Xlib_window_attributes
xlib_window_attributes__create(
    Xlib_screen screen)
{
    Xlib_display display;
    Xlib_window_attributes window_attributes;

    display = screen->display;
    if (display->closed) {
	xlib_display___closed(display);
    }
    window_attributes =
      (Xlib_window_attributes)malloc(sizeof(*window_attributes));
    (void)memset((void *)window_attributes, 0, sizeof(*window_attributes));
    window_attributes->mask = 0;
    window_attributes->screen = screen;
    xlib_window_attributes__erase(window_attributes);
    return window_attributes;
}

/*
 * xlib_window_attributes__erase(window_attributes)
 *	This routine will erase the contents of {window_attributes}.
 */
void
xlib_window_attributes__erase(
    Xlib_window_attributes window_attributes)
{
    Xlib_display display;

    display = window_attributes->screen->display;
    if (display->closed) {
	xlib_display___closed(display);
    } else {
	window_attributes->mask = 0;
    }
}

/*
 * xlib_window_attributes__external__initialize()
 *	This routine will "initialize" the {xlib_window_attributes} external
 *	code.
 */
void
xlib_window_attributes__external__initialize(void)
{
    /* Do nothing! */
}

/*
 * xlib_window_attributes__print(window_attributes, out_stream)
 *	This routine will print out the contents of {window_attributes}
 *	to {out_stream}.
 */
void
xlib_window_attributes__print(
    Xlib_window_attributes window_attributes,
    Out_stream out_stream)
{
     out_stream = out_stream;
}

