|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T
Length: 6985 (0x1b49)
Types: TextFile
Names: »TestInit.c«
└─⟦276d19d6e⟧ Bits:30007243 EUUGD5_I: X11R5
└─⟦af7d3f39a⟧ »./mit-2/mit-2.00«
└─⟦0abaffd9e⟧
└─⟦this⟧ »mit/demos/xcmstest/TestInit.c«
/* $XConsortium: TestInit.c,v 1.5 91/07/31 11:40:28 rws Exp $ */
/*
* (c) Copyright 1988, Tektronix Inc.
* 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 notice appear in all copies and that
* both that copyright notice and this permission notice appear in
* supporting documentation, and that the name of Tektronix not be used
* in advertising or publicity pertaining to distribution of the software
* without specific, written prior permission.
*
* Tektronix disclaims all warranties with regard to this software, including
* all implied warranties of merchantability and fitness, in no event shall
* Tektronix be liable for any special, indirect or consequential damages or
* any damages whatsoever resulting from loss of use, data or profits,
* whether in an action of contract, negligence or other tortious action,
* arising out of or in connection with the use or performance of this
* software.
*
* NAME
* testinit.c -- TekCMS LibTest Utilities
*
* DESCRIPTION
*/
/*
* EXTERNAL INCLUDES
* Include files that must be exported to any package or
* program using this package.
*/
#include "LibTest.h"
#include <X11/Xlib.h>
/*
* INTERNAL INCLUDES
* Include files that need NOT be exported to any package or
* program using this package.
*/
#include <stdio.h>
#include <sys/stat.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
#ifdef AUTOHEADER
# include "TekCMS_TCI.ah"
#else
# include "TekCMS_TCI.h"
#endif
/*
* EXTERNALS
* Declarations that are needed by calling modules.
* When using 'autohdr', these declaration will be placed
* in the resulting header file.
*/
#ifndef GLOBAL
# define GLOBAL
#endif
GLOBAL Display *pDpy;
GLOBAL GC gc;
/*
* INTERNALS
* Declarations that are local to this module.
* (ignored by 'autohdr').
*/
/*
* DEFINES
*/
#define W_WIDTH 260
#define W_HEIGHT 450
#define W_BORDERWIDTH 0
#define W_BORDER_COLOR "black"
#define W_BACKGROUND_COLOR "black"
#define GC_FOREGROUND_COLOR "white"
#define GC_BACKGROUND_COLOR "black"
#define EVENT_MASK (\
ExposureMask |\
StructureNotifyMask |\
ButtonPressMask )
/* xColor defines */
#define DOALL (DoRed | DoGreen | DoBlue)
#define PAD 0
/*
* EXTERNS
*/
extern int _XDefaultError();
extern int LtErrorHandler();
/* include one entry for every window, add more members if desired */
static
struct _winfo{
XPoint pt; /* window origin */
} winfo[] = {
0, 0
};
#define N_WINDOWS ( sizeof(winfo)/sizeof(XPoint) )
static Window w[N_WINDOWS];
static XImage *wImage[N_WINDOWS];
/*
* Include any special fonts that you will want to use, two examples given
* Access X font id as font[0..n]
*/
static
char * fontname[] = {
"vtbold",
"9x15"
};
#define N_FONTS ( sizeof(fontname)/sizeof(char *) )
static Font font[N_FONTS];
\f
/*
* NAME
* TestInit - Connect to X Server and init X globals
*
* SYNOPSIS
*/
void
TestInit()
/*
* DESCRIPTION
* Set the X Error Handler.
* Open the display using command line arguments.
*
* Init all x global variables which includes:
*
* cmap
* w[0..n]
* gc
* font[0..n]
*
* RETURNS
* void
*
*/
{
int i;
XSetWindowAttributes xswa;
XEvent event;
Visual visual;
Colormap cmap;
XColor xColor,xColorExact;
XGCValues xgcValues;
unsigned long xgcValueMask;
Status status;
struct stat statbuf;
char *idir = "./IDIR";
char *rdir = "./RDIR";
char *vdir = "./VDIR";
char *displayname = NULL;
/*
* Set up our special error handler
*/
XSetErrorHandler(LtErrorHandler);
for (i = 1; i < CommandArgc; i++) {
if ((strcmp(CommandArgv[i], "-display") == 0)
&& ((i+1) < CommandArgc) && (*CommandArgv[i+1] != '-')) {
displayname = CommandArgv[i+1];
break;
}
}
if (!(pDpy = XOpenDisplay(displayname))) {
perror("Cannot open display\n");
exit(0);
}
#ifdef XDEBUG
XSynchronize(pDpy,1);
#endif /* XDEBUG */
#ifdef NEED_COLORMAP
/*
* Color Map Initialization
*/
cmap = XDefaultColormap(pDpy,XDefaultScreen(pDpy));
#endif /* NEED_COLORMAP */
#ifdef NEED_WINDOW
/*
* Window Initialization
*/
status = XAllocNamedColor(pDpy,cmap,
W_BACKGROUND_COLOR,&xColor,&xColorExact);
if(!status){
printf("Error: XAllocNamedColor status: %d\n",status);
}
xswa.background_pixel = xColor.pixel;
status = XAllocNamedColor(pDpy,cmap,
W_BORDER_COLOR,&xColor,&xColorExact);
if(!status){
printf("Error: XAllocNamedColor status: %d\n",status);
}
xswa.border_pixel = xColor.pixel;
xswa.event_mask= EVENT_MASK;
xswa.override_redirect = True;
visual.visualid = CopyFromParent;
for(i=0; i<N_WINDOWS; i++){
/*
* Create and map the global windows to be used in all tests
*/
w[i] = XCreateWindow(pDpy, RootWindow(pDpy, 0),
winfo[i].pt.x, winfo[i].pt.y, W_WIDTH, W_HEIGHT, W_BORDERWIDTH,
DefaultDepth(pDpy, 0), InputOutput, &visual,
(CWEventMask | CWBackPixel | CWBorderPixel | CWOverrideRedirect),
&xswa);
XMapRaised(pDpy, w[i]);
}
#endif /* NEED_WINDOW */
#ifdef NEED_GC
/*
* Graphics Context Initialization
*/
status = XAllocNamedColor(pDpy,cmap,
GC_BACKGROUND_COLOR,&xColor,&xColorExact);
if(!status){
printf("Error: XAllocNamedColor status: %d\n",status);
}
xgcValues.background = xColor.pixel;
status = XAllocNamedColor(pDpy,cmap,
GC_FOREGROUND_COLOR,&xColor,&xColorExact);
if(!status){
printf("Error: XAllocNamedColor status: %d\n",status);
}
xgcValues.foreground = xColor.pixel;
xgcValueMask = (GCForeground | GCBackground);
gc = XCreateGC(pDpy, w[0], xgcValueMask, &xgcValues);
#endif /* NEED_GC */
#ifdef NEED_FONTS
/*
* Font Initialization
*/
for( i = 0; i < N_FONTS; i++) {
font[i] = XLoadFont(pDpy,fontname[i]);
}
#endif /* NEED_FONTS */
/* check for the IDIR, RDIR and VDIR directories */
if (stat(idir, &statbuf) == 0) {
if (statbuf.st_mode & S_IFDIR) {
strcpy(TekCMS_idir, idir);
}
}
if (stat(rdir, &statbuf) == 0) {
if (statbuf.st_mode & S_IFDIR) {
strcpy(TekCMS_rdir, rdir);
}
}
if (stat(vdir, &statbuf) == 0) {
if (statbuf.st_mode & S_IFDIR) {
strcpy(TekCMS_vdir, vdir);
}
}
}
\f
/*
* NAME
* TestCleanup - Clean up X resources
*
* SYNOPSIS
*/
void
TestCleanup()
/*
* DESCRIPTION
* Cleanup X resources
*
* RETURNS
* void
*
*/
{
int i;
/*
* Clean up X resources
*/
#ifdef NEED_GC
XFreeGC(pDpy,gc);
#endif /* NEED_GC */
#ifdef NEED_WINDOW
for( i = 0; i < N_WINDOWS; i++) {
XDestroyWindow(pDpy,w[i]);
}
#endif /* NEED_WINDOW */
#ifdef NEED_FONTS
for( i = 0; i < N_FONTS; i++) {
XUnloadFont(pDpy,font[i]);
}
#endif /* NEED_FONTS */
}