From: Thomas Horsten Date: Fri, 31 Jul 2009 13:13:20 +0000 (+0100) Subject: Add James McKenzie's xblanker tool X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=853b12b569755906df5c06d806b18b6ecaa5f9ca;p=xenclient%2Fxen-pq.git Add James McKenzie's xblanker tool --- diff --git a/master/series b/master/series index d2dc79e..270e303 100644 --- a/master/series +++ b/master/series @@ -17,3 +17,4 @@ disable-abr default-iommu-inclusive-mapping cx-initialize-safe-state igd-cmd-reg-change-for-reboot +xblanker diff --git a/master/status b/master/status index e69de29..84a4bf3 100644 --- a/master/status +++ b/master/status @@ -0,0 +1,15 @@ +check-open-pv-log-file +fix_compilation +power-management-enhancement +smbios +acpi-slic +oem-features +thermal-management +pt-load-vga-bios +init-vgabios-and-set-size +mfn-validity-check-before-shadow-remove +remove-fixed-host-bridge-check +mtrr-changes +video-memory-workaround +tools-hvm-info +xblanker diff --git a/master/xblanker b/master/xblanker new file mode 100644 index 0000000..91c1e3d --- /dev/null +++ b/master/xblanker @@ -0,0 +1,881 @@ +Add James McKenzie's xblanker tool + +diff --git a/tools/misc/xblanker/AUTHORS b/tools/misc/xblanker/AUTHORS +new file mode 100644 +index 0000000..537e982 +--- /dev/null ++++ b/tools/misc/xblanker/AUTHORS +@@ -0,0 +1,16 @@ ++# ++# ++# AUTHORS: ++# ++# Copyright (c) 2009 James McKenzie <20@madingley.org>, ++# All rights reserved. ++# ++# $Id: AUTHORS,v 1.1 2009/07/31 11:58:28 jamesmck Exp $ ++# ++# $Log: AUTHORS,v $ ++# Revision 1.1 2009/07/31 11:58:28 jamesmck ++# *** empty log message *** ++# ++# ++# ++James McKenzie, <20@madingley.org> +diff --git a/tools/misc/xblanker/COPYING b/tools/misc/xblanker/COPYING +new file mode 100644 +index 0000000..985a419 +--- /dev/null ++++ b/tools/misc/xblanker/COPYING +@@ -0,0 +1,13 @@ ++# ++# COPYING: ++# ++# Copyright (c) 2009 James McKenzie <20@madingley.org>, ++# All rights reserved. ++# ++# $Id: COPYING,v 1.1 2009/07/31 11:58:28 jamesmck Exp $ ++# ++# $Log: COPYING,v $ ++# Revision 1.1 2009/07/31 11:58:28 jamesmck ++# *** empty log message *** ++# ++# +diff --git a/tools/misc/xblanker/ChangeLog b/tools/misc/xblanker/ChangeLog +new file mode 100644 +index 0000000..ba5b13d +--- /dev/null ++++ b/tools/misc/xblanker/ChangeLog +@@ -0,0 +1,15 @@ ++# ++# ++# ChangeLog: ++# ++# Copyright (c) 2009 James McKenzie <20@madingley.org>, ++# All rights reserved. ++# ++# $Id: ChangeLog,v 1.1 2009/07/31 11:58:28 jamesmck Exp $ ++# ++# $Log: ChangeLog,v $ ++# Revision 1.1 2009/07/31 11:58:28 jamesmck ++# *** empty log message *** ++# ++# ++# +diff --git a/tools/misc/xblanker/INSTALL b/tools/misc/xblanker/INSTALL +new file mode 100644 +index 0000000..23e5f25 +--- /dev/null ++++ b/tools/misc/xblanker/INSTALL +@@ -0,0 +1,236 @@ ++Installation Instructions ++************************* ++ ++Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free ++Software Foundation, Inc. ++ ++This file is free documentation; the Free Software Foundation gives ++unlimited permission to copy, distribute and modify it. ++ ++Basic Installation ++================== ++ ++These are generic installation instructions. ++ ++ The `configure' shell script attempts to guess correct values for ++various system-dependent variables used during compilation. It uses ++those values to create a `Makefile' in each directory of the package. ++It may also create one or more `.h' files containing system-dependent ++definitions. Finally, it creates a shell script `config.status' that ++you can run in the future to recreate the current configuration, and a ++file `config.log' containing compiler output (useful mainly for ++debugging `configure'). ++ ++ It can also use an optional file (typically called `config.cache' ++and enabled with `--cache-file=config.cache' or simply `-C') that saves ++the results of its tests to speed up reconfiguring. (Caching is ++disabled by default to prevent problems with accidental use of stale ++cache files.) ++ ++ If you need to do unusual things to compile the package, please try ++to figure out how `configure' could check whether to do them, and mail ++diffs or instructions to the address given in the `README' so they can ++be considered for the next release. If you are using the cache, and at ++some point `config.cache' contains results you don't want to keep, you ++may remove or edit it. ++ ++ The file `configure.ac' (or `configure.in') is used to create ++`configure' by a program called `autoconf'. You only need ++`configure.ac' if you want to change it or regenerate `configure' using ++a newer version of `autoconf'. ++ ++The simplest way to compile this package is: ++ ++ 1. `cd' to the directory containing the package's source code and type ++ `./configure' to configure the package for your system. If you're ++ using `csh' on an old version of System V, you might need to type ++ `sh ./configure' instead to prevent `csh' from trying to execute ++ `configure' itself. ++ ++ Running `configure' takes awhile. While running, it prints some ++ messages telling which features it is checking for. ++ ++ 2. Type `make' to compile the package. ++ ++ 3. Optionally, type `make check' to run any self-tests that come with ++ the package. ++ ++ 4. Type `make install' to install the programs and any data files and ++ documentation. ++ ++ 5. You can remove the program binaries and object files from the ++ source code directory by typing `make clean'. To also remove the ++ files that `configure' created (so you can compile the package for ++ a different kind of computer), type `make distclean'. There is ++ also a `make maintainer-clean' target, but that is intended mainly ++ for the package's developers. If you use it, you may have to get ++ all sorts of other programs in order to regenerate files that came ++ with the distribution. ++ ++Compilers and Options ++===================== ++ ++Some systems require unusual options for compilation or linking that the ++`configure' script does not know about. Run `./configure --help' for ++details on some of the pertinent environment variables. ++ ++ You can give `configure' initial values for configuration parameters ++by setting variables in the command line or in the environment. Here ++is an example: ++ ++ ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix ++ ++ *Note Defining Variables::, for more details. ++ ++Compiling For Multiple Architectures ++==================================== ++ ++You can compile the package for more than one kind of computer at the ++same time, by placing the object files for each architecture in their ++own directory. To do this, you must use a version of `make' that ++supports the `VPATH' variable, such as GNU `make'. `cd' to the ++directory where you want the object files and executables to go and run ++the `configure' script. `configure' automatically checks for the ++source code in the directory that `configure' is in and in `..'. ++ ++ If you have to use a `make' that does not support the `VPATH' ++variable, you have to compile the package for one architecture at a ++time in the source code directory. After you have installed the ++package for one architecture, use `make distclean' before reconfiguring ++for another architecture. ++ ++Installation Names ++================== ++ ++By default, `make install' installs the package's commands under ++`/usr/local/bin', include files under `/usr/local/include', etc. You ++can specify an installation prefix other than `/usr/local' by giving ++`configure' the option `--prefix=PREFIX'. ++ ++ You can specify separate installation prefixes for ++architecture-specific files and architecture-independent files. If you ++pass the option `--exec-prefix=PREFIX' to `configure', the package uses ++PREFIX as the prefix for installing programs and libraries. ++Documentation and other data files still use the regular prefix. ++ ++ In addition, if you use an unusual directory layout you can give ++options like `--bindir=DIR' to specify different values for particular ++kinds of files. Run `configure --help' for a list of the directories ++you can set and what kinds of files go in them. ++ ++ If the package supports it, you can cause programs to be installed ++with an extra prefix or suffix on their names by giving `configure' the ++option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. ++ ++Optional Features ++================= ++ ++Some packages pay attention to `--enable-FEATURE' options to ++`configure', where FEATURE indicates an optional part of the package. ++They may also pay attention to `--with-PACKAGE' options, where PACKAGE ++is something like `gnu-as' or `x' (for the X Window System). The ++`README' should mention any `--enable-' and `--with-' options that the ++package recognizes. ++ ++ For packages that use the X Window System, `configure' can usually ++find the X include and library files automatically, but if it doesn't, ++you can use the `configure' options `--x-includes=DIR' and ++`--x-libraries=DIR' to specify their locations. ++ ++Specifying the System Type ++========================== ++ ++There may be some features `configure' cannot figure out automatically, ++but needs to determine by the type of machine the package will run on. ++Usually, assuming the package is built to be run on the _same_ ++architectures, `configure' can figure that out, but if it prints a ++message saying it cannot guess the machine type, give it the ++`--build=TYPE' option. TYPE can either be a short name for the system ++type, such as `sun4', or a canonical name which has the form: ++ ++ CPU-COMPANY-SYSTEM ++ ++where SYSTEM can have one of these forms: ++ ++ OS KERNEL-OS ++ ++ See the file `config.sub' for the possible values of each field. If ++`config.sub' isn't included in this package, then this package doesn't ++need to know the machine type. ++ ++ If you are _building_ compiler tools for cross-compiling, you should ++use the option `--target=TYPE' to select the type of system they will ++produce code for. ++ ++ If you want to _use_ a cross compiler, that generates code for a ++platform different from the build platform, you should specify the ++"host" platform (i.e., that on which the generated programs will ++eventually be run) with `--host=TYPE'. ++ ++Sharing Defaults ++================ ++ ++If you want to set default values for `configure' scripts to share, you ++can create a site shell script called `config.site' that gives default ++values for variables like `CC', `cache_file', and `prefix'. ++`configure' looks for `PREFIX/share/config.site' if it exists, then ++`PREFIX/etc/config.site' if it exists. Or, you can set the ++`CONFIG_SITE' environment variable to the location of the site script. ++A warning: not all `configure' scripts look for a site script. ++ ++Defining Variables ++================== ++ ++Variables not defined in a site shell script can be set in the ++environment passed to `configure'. However, some packages may run ++configure again during the build, and the customized values of these ++variables may be lost. In order to avoid this problem, you should set ++them in the `configure' command line, using `VAR=value'. For example: ++ ++ ./configure CC=/usr/local2/bin/gcc ++ ++causes the specified `gcc' to be used as the C compiler (unless it is ++overridden in the site shell script). Here is a another example: ++ ++ /bin/bash ./configure CONFIG_SHELL=/bin/bash ++ ++Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent ++configuration-related scripts to be executed by `/bin/bash'. ++ ++`configure' Invocation ++====================== ++ ++`configure' recognizes the following options to control how it operates. ++ ++`--help' ++`-h' ++ Print a summary of the options to `configure', and exit. ++ ++`--version' ++`-V' ++ Print the version of Autoconf used to generate the `configure' ++ script, and exit. ++ ++`--cache-file=FILE' ++ Enable the cache: use and save the results of the tests in FILE, ++ traditionally `config.cache'. FILE defaults to `/dev/null' to ++ disable caching. ++ ++`--config-cache' ++`-C' ++ Alias for `--cache-file=config.cache'. ++ ++`--quiet' ++`--silent' ++`-q' ++ Do not print messages saying which checks are being made. To ++ suppress all normal output, redirect it to `/dev/null' (any error ++ messages will still be shown). ++ ++`--srcdir=DIR' ++ Look for the package's source code in directory DIR. Usually ++ `configure' can determine that directory automatically. ++ ++`configure' also accepts some other, not widely useful, options. Run ++`configure --help' for more details. ++ +diff --git a/tools/misc/xblanker/Makefile.am b/tools/misc/xblanker/Makefile.am +new file mode 100644 +index 0000000..dea5472 +--- /dev/null ++++ b/tools/misc/xblanker/Makefile.am +@@ -0,0 +1,16 @@ ++# ++# ++# Makefile.am: ++# ++# Copyright (c) 2009 James McKenzie <20@madingley.org>, ++# All rights reserved. ++# ++# $Id: Makefile.am,v 1.1 2009/07/31 11:58:28 jamesmck Exp $ ++# ++# $Log: Makefile.am,v $ ++# Revision 1.1 2009/07/31 11:58:28 jamesmck ++# *** empty log message *** ++# ++# ++# ++SUBDIRS=src +diff --git a/tools/misc/xblanker/NEWS b/tools/misc/xblanker/NEWS +new file mode 100644 +index 0000000..e4f6432 +--- /dev/null ++++ b/tools/misc/xblanker/NEWS +@@ -0,0 +1,15 @@ ++# ++# ++# NEWS: ++# ++# Copyright (c) 2009 James McKenzie <20@madingley.org>, ++# All rights reserved. ++# ++# $Id: NEWS,v 1.1 2009/07/31 11:58:28 jamesmck Exp $ ++# ++# $Log: NEWS,v $ ++# Revision 1.1 2009/07/31 11:58:28 jamesmck ++# *** empty log message *** ++# ++# ++# +diff --git a/tools/misc/xblanker/README b/tools/misc/xblanker/README +new file mode 100644 +index 0000000..6f5a50b +--- /dev/null ++++ b/tools/misc/xblanker/README +@@ -0,0 +1,15 @@ ++# ++# ++# README: ++# ++# Copyright (c) 2009 James McKenzie <20@madingley.org>, ++# All rights reserved. ++# ++# $Id: README,v 1.1 2009/07/31 11:58:28 jamesmck Exp $ ++# ++# $Log: README,v $ ++# Revision 1.1 2009/07/31 11:58:28 jamesmck ++# *** empty log message *** ++# ++# ++# +diff --git a/tools/misc/xblanker/autogen.sh b/tools/misc/xblanker/autogen.sh +new file mode 100755 +index 0000000..bcabd0d +--- /dev/null ++++ b/tools/misc/xblanker/autogen.sh +@@ -0,0 +1,17 @@ ++#!/bin/sh ++# ++# bstrap: ++# ++# Copyright (c) 2009 James McKenzie <20@madingley.org>, ++# All rights reserved. ++# ++# $Id: autogen.sh,v 1.1 2009/07/31 11:58:28 jamesmck Exp $ ++# ++# $Log: autogen.sh,v $ ++# Revision 1.1 2009/07/31 11:58:28 jamesmck ++# *** empty log message *** ++# ++# ++# ++# ++autoreconf -i --force +diff --git a/tools/misc/xblanker/configure.in b/tools/misc/xblanker/configure.in +new file mode 100644 +index 0000000..4a5f903 +--- /dev/null ++++ b/tools/misc/xblanker/configure.in +@@ -0,0 +1,68 @@ ++dnl ++dnl ++dnl configure.in.head: ++dnl ++dnl Copyright (c) 2009 James McKenzie <20@madingley.org>, ++dnl All rights reserved. ++dnl ++dnl $Id: configure.in,v 1.1 2009/07/31 11:58:28 jamesmck Exp $ ++dnl ++dnl $Log: configure.in,v $ ++dnl Revision 1.1 2009/07/31 11:58:28 jamesmck ++dnl *** empty log message *** ++dnl ++dnl ++dnl ++dnl ++AC_PREREQ(2.13) ++AC_INIT(src/xblanker.c) ++ ++AC_PROG_CC ++AC_PROG_CPP ++AC_PROG_INSTALL ++AC_PROG_LN_S ++AC_PROG_MAKE_SET ++AC_PROG_RANLIB ++AC_PROG_AWK ++AC_CHECK_PROG(MD5SUM,md5sum,md5sum) ++AC_CHECK_PROG(GREP,grep,grep) ++ ++AC_SYS_LARGEFILE ++ ++XBLANKER_MAJOR_VERSION=`cat $srcdir/version-major` ++XBLANKER_MINOR_VERSION=`cat $srcdir/version-minor` ++XBLANKER_MICRO_VERSION=`cat $srcdir/version-micro` ++ ++ ++XBLANKER_VERSION=$XBLANKER_MAJOR_VERSION.$XBLANKER_MINOR_VERSION.$XBLANKER_MICRO_VERSION ++ ++AC_SUBST(XBLANKER_MAJOR_VERSION) ++AC_SUBST(XBLANKER_MINOR_VERSION) ++AC_SUBST(XBLANKER_MICRO_VERSION) ++AC_SUBST(XBLANKER_VERSION) ++ ++ ++VERSION=$XBLANKER_VERSION ++PACKAGE=xblanker ++ ++AM_INIT_AUTOMAKE($PACKAGE,$VERSION) ++ ++PKG_CHECK_MODULES(X, x11) ++AC_SUBST(X_CFLAGS) ++AC_SUBST(X_LIBS) ++ ++AM_CONFIG_HEADER(src/config.h) ++ ++# Checks for header files. ++AC_CHECK_HEADERS([malloc.h]) ++AC_HEADER_STDC ++AC_FUNC_MALLOC ++ ++AC_C_INLINE ++AC_C_CONST ++ ++ ++AC_OUTPUT([Makefile ++ src/Makefile]) ++ ++ +diff --git a/tools/misc/xblanker/src/Makefile.am b/tools/misc/xblanker/src/Makefile.am +new file mode 100644 +index 0000000..8ec19f0 +--- /dev/null ++++ b/tools/misc/xblanker/src/Makefile.am +@@ -0,0 +1,63 @@ ++# ++# ++# Makefile.am: ++# ++# Copyright (c) 2009 James McKenzie <20@madingley.org>, ++# All rights reserved. ++# ++# $Id: Makefile.am,v 1.2 2009/07/31 12:59:40 jamesmck Exp $ ++# ++# $Log: Makefile.am,v $ ++# Revision 1.2 2009/07/31 12:59:40 jamesmck ++# *** empty log message *** ++# ++# Revision 1.1 2009/07/31 11:58:28 jamesmck ++# *** empty log message *** ++# ++# ++# ++# ++ ++CPROTO=cproto ++INCLUDES = ${X_CFLAGS} ++ ++noinst_HEADERS=project.h prototypes.h ++ ++bin_PROGRAMS = xblanker ++ ++SRCS=xblanker.c version.c ++xblanker_SOURCES = ${SRCS} ++xblanker_LDADD = ${X_LIBS} -lxenstore ++ ++AM_CFLAGS=-g ++ ++xblanker_LDFLAGS = ++ ++BUILT_SOURCES = version.h ++ ++ ++VFD=${srcdir}/.. ++VF=${shell cat ${VFD}/version-files} ++VFS=${VF:%=${VFD}/%} ++VCHK=${shell cat ${VFS} | @MD5SUM@ | @AWK@ '{print $$1 }' } ++VNUM=${shell @GREP@ ${VCHK} ${VFD}/version-md5sums | @AWK@ '{ print $$2 }' } ++VDEF=${shell echo `cat ${VFD}/version-major`.`cat ${VFD}/version-minor`.`cat ${VFD}/version-micro` } ++ ++protos: ++ echo > prototypes.h ++ ${CPROTO} -v ${INCLUDES} ${SRCS} > prototypes.tmp ++ mv -f prototypes.tmp prototypes.h ++ ++ ++ ++version.h: $(VFD)/version-files $(VFD)/version-major \ ++ $(VFD)/version-minor $(VFD)/version-micro \ ++ $(VFD)/version-md5sums ${VFS} Makefile ++ if [ .${VNUM} = . ]; then \ ++ echo "#define VERSION \"xblanker Version ${VDEF} + Edits\"" > version.h; \ ++ echo ${VDEF}-E > version-num; \ ++ else \ ++ echo "#define VERSION \"xblanker Version ${VNUM}\"" > version.h; \ ++ echo ${VNUM} > version-num; \ ++ fi ++ +diff --git a/tools/misc/xblanker/src/project.h b/tools/misc/xblanker/src/project.h +new file mode 100644 +index 0000000..2047a29 +--- /dev/null ++++ b/tools/misc/xblanker/src/project.h +@@ -0,0 +1,74 @@ ++/* ++ * project.h: ++ * ++ * Copyright (c) 2009 James McKenzie <20@madingley.org>, ++ * All rights reserved. ++ * ++ */ ++ ++/* ++ * $Id: project.h,v 1.2 2009/07/31 12:59:40 jamesmck Exp $ ++ */ ++ ++/* ++ * $Log: project.h,v $ ++ * Revision 1.2 2009/07/31 12:59:40 jamesmck ++ * *** empty log message *** ++ * ++ * Revision 1.1 2009/07/31 11:58:28 jamesmck ++ * *** empty log message *** ++ * ++ */ ++ ++#ifndef __PROJECT_H__ ++#define __PROJECT_H__ ++ ++ ++#include "config.h" ++ ++#ifdef TM_IN_SYS_TIME ++#include ++#ifdef TIME_WITH_SYS_TIME ++#include ++#endif ++#else ++#ifdef TIME_WITH_SYS_TIME ++#include ++#endif ++#include ++#endif ++ ++#include ++#include ++ ++#ifdef HAVE_MALLOC_H ++#include ++#endif ++ ++#ifdef HAVE_STRING_H ++#include ++#endif ++ ++#ifdef HAVE_STRINGS_H ++#include ++#endif ++ ++#ifdef HAVE_UNISTD_H ++#include ++#endif ++ ++#if defined(HAVE_STDINT_H) ++#include ++#elif defined(HAVE_SYS_INT_TYPES_H) ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "prototypes.h" ++ ++#endif /* __PROJECT_H__ */ +diff --git a/tools/misc/xblanker/src/prototypes.h b/tools/misc/xblanker/src/prototypes.h +new file mode 100644 +index 0000000..e69de29 +diff --git a/tools/misc/xblanker/src/version.c b/tools/misc/xblanker/src/version.c +new file mode 100644 +index 0000000..febb725 +--- /dev/null ++++ b/tools/misc/xblanker/src/version.c +@@ -0,0 +1,25 @@ ++/* ++ * version.c: ++ * ++ * Copyright (c) 2009 James McKenzie <20@madingley.org>, ++ * All rights reserved. ++ * ++ */ ++ ++static char rcsid[] = "$Id: version.c,v 1.1 2009/07/31 11:58:28 jamesmck Exp $"; ++ ++/* ++ * $Log: version.c,v $ ++ * Revision 1.1 2009/07/31 11:58:28 jamesmck ++ * *** empty log message *** ++ * ++ */ ++ ++ ++#include "version.h" ++ ++static char * ++get_version(void) ++{ ++ return VERSION; ++} +diff --git a/tools/misc/xblanker/src/xblanker.c b/tools/misc/xblanker/src/xblanker.c +new file mode 100644 +index 0000000..3588610 +--- /dev/null ++++ b/tools/misc/xblanker/src/xblanker.c +@@ -0,0 +1,192 @@ ++/* ++ * xblanker.c: ++ * ++ * Copyright (c) 2009 James McKenzie <20@madingley.org>, ++ * All rights reserved. ++ * ++ */ ++ ++static char rcsid[] = ++ "$Id: xblanker.c,v 1.2 2009/07/31 12:59:40 jamesmck Exp $"; ++ ++/* ++ * $Log: xblanker.c,v $ ++ * Revision 1.2 2009/07/31 12:59:40 jamesmck ++ * *** empty log message *** ++ * ++ * Revision 1.1 2009/07/31 11:58:28 jamesmck ++ * *** empty log message *** ++ * ++ */ ++ ++ ++ ++#include "project.h" ++ ++ ++ ++Display *dpy; ++int screen; ++long black; ++Window window; ++struct xs_handle *xsh; ++ ++#define XS_PATH "/local/domain/0/dom0_driver/blank" ++ ++int xenbus_read(void) ++{ ++unsigned int len=0; ++char cbuf[128]; ++char *buf= xs_read(xsh,XBT_NULL,XS_PATH,&len); ++ ++if (!buf) return -1; ++if (!len) return -1; ++ ++if (len>=sizeof(cbuf)) ++ len=sizeof(cbuf)-1; ++ ++memcpy(cbuf,buf,len); ++cbuf[len]=0; ++ ++return atoi(cbuf); ++} ++ ++void xenbus_write(int v) ++{ ++unsigned int len; ++char buf[128]; ++ ++len=sprintf(buf,"%d",v); ++ ++xs_write(xsh,XBT_NULL,XS_PATH,buf,len); ++} ++ ++ ++ ++ ++void ++blank (void) ++{ ++ XMapRaised (dpy, window); ++ XWarpPointer (dpy, None, RootWindow (dpy, screen), 0, 0, 0, 0, ++ DisplayWidth (dpy, screen), DisplayHeight (dpy, screen)); ++ XGrabServer (dpy); ++} ++ ++void ++unblank (void) ++{ ++ XUngrabServer (dpy); ++ XUnmapWindow (dpy, window); ++ XWarpPointer (dpy, None, RootWindow (dpy, screen), 0, 0, 0, 0, ++ DisplayWidth (dpy, screen) >> 1, DisplayHeight (dpy, ++ screen) >> 1); ++} ++ ++ ++int ++main (int argc, char *argv[]) ++{ ++ struct timeval tv = { 0 }; ++ fd_set rfds; ++ int fd; ++ ++int state=0,old_state=0; ++ ++ ++xsh=xs_domain_open(); ++//xsh=xs_daemon_open(); ++if (!xsh) return 1; ++ ++ dpy = XOpenDisplay (NULL); ++ ++ if (!dpy) ++ return 2; ++ ++ fd = ConnectionNumber (dpy); ++ ++ screen = DefaultScreen (dpy); ++ ++ black = BlackPixel (dpy, screen); ++ ++ ++ { ++ long mask; ++ XSetWindowAttributes attr; ++ ++ ++ ++ attr.background_pixel = black; ++ attr.border_pixel = black; ++ attr.event_mask = 0; ++ attr.override_redirect = True; ++ ++ mask = (CWBackPixel | CWBorderPixel | CWEventMask | CWOverrideRedirect); ++ ++ window = XCreateWindow (dpy, RootWindow (dpy, screen), 0, 0, ++ DisplayWidth (dpy, screen), DisplayHeight (dpy, ++ screen), ++ 0, 0, InputOutput, (Visual *) CopyFromParent, ++ mask, &attr); ++ } ++ ++ XUnmapWindow (dpy, window); ++ ++ XFlush (dpy); ++ ++ ++ ++ ++ FD_ZERO (&rfds); ++ ++ for (;;) ++ { ++ tv.tv_sec = 1; ++ tv.tv_usec = 0; ++ ++int k=xenbus_read(); ++switch(k) { ++case 0: ++case 1: ++ state=k; ++} ++ ++ ++ ++ ++ if (state!=old_state) { ++ if (state) ++ blank(); ++ else ++ unblank(); ++ ++ old_state=state; ++ XFlush (dpy); ++ XSync(dpy,False); ++ xenbus_write(2); ++ } ++ ++ while (tv.tv_sec || tv.tv_usec) ++ { ++ FD_SET (fd, &rfds); ++ ++ if (select (fd + 1, &rfds, NULL, NULL, &tv) == 1) ++ { ++ XEvent e; ++ XNextEvent (dpy, &e); ++ } ++ ++ } ++ ++ ++ ++ ++ ++ } ++ ++ ++ ++ ++ ++ return 0; ++} +diff --git a/tools/misc/xblanker/version-files b/tools/misc/xblanker/version-files +new file mode 100644 +index 0000000..dc3d959 +--- /dev/null ++++ b/tools/misc/xblanker/version-files +@@ -0,0 +1,3 @@ ++src/version.c ++src/project.h ++src/xblanker.c +diff --git a/tools/misc/xblanker/version-major b/tools/misc/xblanker/version-major +new file mode 100644 +index 0000000..d00491f +--- /dev/null ++++ b/tools/misc/xblanker/version-major +@@ -0,0 +1 @@ ++1 +diff --git a/tools/misc/xblanker/version-md5sums b/tools/misc/xblanker/version-md5sums +new file mode 100644 +index 0000000..e69de29 +diff --git a/tools/misc/xblanker/version-micro b/tools/misc/xblanker/version-micro +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tools/misc/xblanker/version-micro +@@ -0,0 +1 @@ ++0 +diff --git a/tools/misc/xblanker/version-minor b/tools/misc/xblanker/version-minor +new file mode 100644 +index 0000000..573541a +--- /dev/null ++++ b/tools/misc/xblanker/version-minor +@@ -0,0 +1 @@ ++0