/* $XConsortium: rnd_basic.c,v 1.0 93/11/22 12:39:17 rws Exp $ */ /******************************************************************************/ /* */ /* (c) Copyright Hewlett-Packard Company, 1993, Fort Collins, Colorado */ /* */ /* All Rights Reserved */ /* */ /* Permission to use, copy, modify, and distribute this software and its */ /* documentation for any purpose and without fee is hereby granted, */ /* provided that the above copyright notices appear in all copies and that */ /* both the copyright notices and this permission notice appear in */ /* supporting documentation, and that the name of Hewlett-Packard not be */ /* used in advertising or publicity pertaining to distribution of the */ /* software without specific, written prior permission. */ /* */ /* HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD TO THIS */ /* SOFTWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ /* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Hewlett-Packard */ /* shall not be liable for errors contained herein or direct, indirect, */ /* special, incidental or consequential damages in connection with the */ /* furnishing, performance or use of this software. */ /* */ /******************************************************************************/ /* ****************************************************************************** ** Renderer resource basic functional test ****************************************************************************** */ #include #include #include #include #include #include #include #ifdef XSYSTEM #include #endif #include #include #include #include "rnd_utils.h" #ifdef XSYSTEM XSystemTestingControlStructure xtc; #endif typedef struct { int create_windows; int num_windows; int initialize_pex; int create_renderers; int num_renderers; int check_renderer_attributes; int bind_renderers; int unbind_renderers; int free_renderers; int destroy_windows; } test_script; static test_script scripts[]={ /* create # init create # check bind unbind free destroy windows PEX renderers attrs rnds rnds rnds windows */ { False, 0, False, False, 0, False, False, False, False, False }, { True, 1, True, False, 0, False, False, False, False, True }, { True, 1, True, True, 1, True, False, False, True, True }, { True, 1, True, True, 1, True, True, True, True, True }, { True, 2, True, True, 2, False, False, False, True, True }, { True, 2, True, True, 2, True, True, True, True, True }, }; #define NUM_SCRIPTS (sizeof(scripts)/sizeof(test_script)) #define MAX_MULTIPLICITY 2 static dump_script (int loop) { _hppex_stderr_print( "------------------------------\n"); _hppex_stderr_print( "script number = %d\n", loop); _hppex_stderr_print( "create windows = %d, num_windows = %d, destroy_windows = %d\n", scripts[loop].create_windows, scripts[loop].num_windows, scripts[loop].destroy_windows); _hppex_stderr_print( "initialize_pex = %d\n", scripts[loop].initialize_pex); _hppex_stderr_print( "create renderers = %d, num_renderers = %d, free_renderers = %d\n", scripts[loop].create_renderers, scripts[loop].num_renderers, scripts[loop].free_renderers); _hppex_stderr_print( "check_renderer_attributes = %d\n", scripts[loop].check_renderer_attributes); _hppex_stderr_print( "bind renderers = %d, unbind_renderers = %d\n", scripts[loop].bind_renderers, scripts[loop].unbind_renderers); _hppex_stderr_print( "\n"); } static Window windows[MAX_MULTIPLICITY]; static PEXRenderer renderers[MAX_MULTIPLICITY]; main(argc, argv) int argc; char **argv; { Display *display, *test_display; Window window; PEXRenderer renderer; PEXRendererAttributes default_renderer_attrs, active_renderer_attrs; XVisualInfo vis_info; XStandardColormap cmap_info; PEXColorApproxEntry capx_info; PEXElementRef current_path_elems; PEXExtensionInfo *ext_info; int i, loop; int multiplicity; char *display_string; int pexmode = 0; int image_depth = 0; #ifndef XSYSTEM /* Handle other arguments. */ if (parse_options (argc, argv, &pexmode, &image_depth)) exit (1); #endif #ifdef XSYSTEM openXSystemTesting(argc, argv, &xtc, 0, 0); test_display = xtc.display; display_string = DisplayString(test_display); #else display_string = getenv("DISPLAY"); #endif _hppex_set_stderr("rnd_basic.stderr", "rnd_basic"); describe_test("\n\n"); describe_test("This is a test of the fundamental operations of the PEXlib Renderer:\n"); describe_test("initializing PEXlib, creating and freeing Renderer resources,\n"); describe_test("and binding and unbinding Renderers to windows. It should be\n"); describe_test("the first test run in the Renderer test set.\n\n"); describe_test("This test generates no images. It succeeds if no messages\n"); describe_test("starting with ERROR are printed to stderr. Windows will \n"); describe_test("appear and disappear during its operation but their appearance\n"); describe_test("is not important.\n\n"); describe_test("The test interprets a progressive set of scripts that start\n"); describe_test("out by simply trying XOpenDisplay/XCloseDisplay, then creating \n"); describe_test("Windows, then creating Renderers, etc. The operations performed\n"); describe_test("by each script are printed to stderr and will become part of the\n"); describe_test("archive.\n\n"); #ifdef XSYSTEM if (xtc.interactiveFramePrompt) #else if (glob_verbose_mode && getenv("PAUSE")) #endif prompt_user ("Hit return to continue with the test", ""); #ifndef XSYSTEM if (glob_verbose_mode) fflush (stdout); #endif /* Set up structures describing expected Renderer attributes. */ init_default_renderer_attrs (&default_renderer_attrs); active_renderer_attrs = default_renderer_attrs; active_renderer_attrs.renderer_state = PEXRendering; active_renderer_attrs.current_path.count = 1; active_renderer_attrs.current_path.elements = ¤t_path_elems; active_renderer_attrs.current_path.elements[0].structure = None; active_renderer_attrs.current_path.elements[0].offset = 0; /* The following loop is executed several times, each time including more calls to Renderer functions, as controlled by the local scripts defined above. */ for (loop = 0; loop < NUM_SCRIPTS; loop++) { /* Always print out what's going on. */ dump_script (loop); if (NULL == (display = XOpenDisplay (display_string))) { _hppex_stderr_print( "PROCESS ERROR: XOpenDisplay failed on %s\n", display_string); continue; } if (scripts[loop].initialize_pex) { if (PEXInitialize (display, &ext_info, 0, NULL)) { _hppex_stderr_print( "PROCESS ERROR: PEXInitialize failed on %s\n", display_string); continue; } } if (scripts[loop].create_windows) { for (i = 0; i < scripts[loop].num_windows; i++) { windows[i] = create_and_setup_window (display, "PEXlib Renderer Basic Test", image_depth, 0, 0, 200, 200, &capx_info); if (None == windows[i]) { _hppex_stderr_print( "PROCESS ERROR: create_window failed on window %d\n", i); continue; } } } if (scripts[loop].create_renderers) { for (i = 0; i < scripts[loop].num_renderers; i++) { window = windows[i % scripts[loop].num_windows]; if (None == (renderers[i] = PEXCreateRenderer (display, window, 0, NULL))) { _hppex_stderr_print( "ERROR: PEXCreateRenderer failed on renderer %d using window %d\n", i, (i % scripts[loop].num_windows)); continue; } if (scripts[loop].check_renderer_attributes) if (check_renderer_attrs (display, renderers[i], &default_renderer_attrs, ALL_RENDERER_ATTRS_MASK)) { _hppex_stderr_print( "ERROR: attributes check after create failed on renderer %d\n", i); continue; } } multiplicity = MAX(scripts[loop].num_windows, scripts[loop].num_renderers); for (i = 0; i < multiplicity; i++) { window = windows[i % scripts[loop].num_windows]; renderer = renderers[i % scripts[loop].num_renderers]; if (scripts[loop].bind_renderers) { PEXBeginRendering(display, window, renderer); if (scripts[loop].check_renderer_attributes) if (check_renderer_attrs (display, renderers[i], &active_renderer_attrs, ALL_RENDERER_ATTRS_MASK)) { _hppex_stderr_print( "ERROR: attributes check after bind failed on renderer %d\n", i); continue; } } if (scripts[loop].unbind_renderers) { PEXEndRendering(display, renderer, True); if (scripts[loop].check_renderer_attributes) if (check_renderer_attrs (display, renderers[i], &default_renderer_attrs, ALL_RENDERER_ATTRS_MASK)) { _hppex_stderr_print( "ERROR: attributes check after unbind failed on renderer %d\n", i); continue; } } } if (scripts[loop].free_renderers) { for (i = 0; i < scripts[loop].num_renderers; i++) PEXFreeRenderer(display, renderers[i]); } } if (scripts[loop].destroy_windows) { for (i = 0; i < scripts[loop].num_windows; i++) XDestroyWindow(display, windows[i]); } XCloseDisplay (display); } _hppex_close_stderr(); #ifdef XSYSTEM closeXSystemTesting(&xtc); #else file_testproc("rnd_basic.stderr", "rnd_basic"); exit(0); #endif } /* basic renderer test */