re-importing E after cvs failure to comply with orders... thus it DIED!
SVN revision: 37
|
@ -0,0 +1,16 @@
|
|||
Makefile
|
||||
Makefile.in
|
||||
aclocal.m4
|
||||
config.status
|
||||
config.log
|
||||
config.cache
|
||||
configure
|
||||
econfig.h
|
||||
econfig.h.in
|
||||
stamp-h
|
||||
stamp-h.in
|
||||
confdefs.h
|
||||
config.sub
|
||||
ltconfig
|
||||
ltmain.sh
|
||||
config.guess
|
|
@ -0,0 +1,68 @@
|
|||
The Rasterman: <raster@rasterman.com> <raster@redhat.com>
|
||||
<raster@zip.com.au>
|
||||
<raster@enlightenment.org>
|
||||
aka. Carsten Haitzler
|
||||
|
||||
Mandrake: <mandrake@mandrake.net>
|
||||
<mandrake@enlightenment.org>
|
||||
<mandrake@lobotomy.com>
|
||||
aka. Geoff Harrison
|
||||
|
||||
-------------- CONTRIBUTORS: -----------------------------------------------
|
||||
|
||||
All code contributed by contributors remains copyright to them respectively
|
||||
if they wish to retain copyright. it is up to the authors of patches and
|
||||
contributions to clearly mark their contributions with their name, email and
|
||||
date in comments if they wish to retain copyright, otherwise it is assumed
|
||||
to be transferred to the main E source body.
|
||||
|
||||
A BIG thanks to all those who have submitted patches:
|
||||
|
||||
Troy Pesola: <pesoltr@network.com>
|
||||
|
||||
For contributing several patches, both to the current and
|
||||
previous revisions of E
|
||||
|
||||
Chutt: <ijr@po.cwru.edu>
|
||||
aka. Isaac Richards
|
||||
|
||||
Contributed a patch for use with esound that lowered
|
||||
the RSS by around 200k with the default theme.
|
||||
|
||||
Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
icccm widthdraw WM_STATE patch to fix some java endless loops
|
||||
|
||||
Sung-Hyun Nam <namsh@lgic.co.kr>
|
||||
|
||||
Fnlib OR X fonts used in text classes.
|
||||
|
||||
Kimball Thurston <kimball@sgrail.com>
|
||||
|
||||
Fixes for cross-platform support on IRIX
|
||||
|
||||
Michael Kellen <michael@agn.physics.montana.edu>
|
||||
|
||||
For sound patches..... :)
|
||||
|
||||
Stalyn <add mail here>
|
||||
For dock support.
|
||||
|
||||
Frederic Devernay <devernay@istar.fr>
|
||||
Patch for Session managemend IFDEF.
|
||||
|
||||
Felix Bellaby <felix@pooh.u-net.com>
|
||||
LOTs of useful Session Management related code.
|
||||
|
||||
Michael Jennings (KainX) <mej@eterm.org>
|
||||
lots of useful patches :)
|
||||
|
||||
Christian Kreibich <kreibich@informatik.tu-muenchen.de>
|
||||
several minor patches some of which were the dox customisable
|
||||
color patch, shading patch, and some more.. :)
|
||||
|
||||
Peter Kjellerstedt <peter.kjellerstedt@axis.com>
|
||||
for finding a bug in theme preparse loaded files.
|
||||
|
||||
And others whose names we probably forgot to add (email us and we'll put you
|
||||
in here)
|
|
@ -0,0 +1,18 @@
|
|||
Copyright (C) 1999 Carsten Haitzler and various contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to
|
||||
deal in the Software without restriction, including without limitation the
|
||||
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,182 @@
|
|||
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, a file
|
||||
`config.cache' that saves the results of its tests to speed up
|
||||
reconfiguring, and a file `config.log' containing compiler output
|
||||
(useful mainly for debugging `configure').
|
||||
|
||||
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 at some point `config.cache'
|
||||
contains results you don't want to keep, you may remove or edit it.
|
||||
|
||||
The file `configure.in' is used to create `configure' by a program
|
||||
called `autoconf'. You only need `configure.in' 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. You can give `configure'
|
||||
initial values for variables by setting them in the environment. Using
|
||||
a Bourne-compatible shell, you can do that on the command line like
|
||||
this:
|
||||
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
|
||||
|
||||
Or on systems that have the `env' program, you can do it like this:
|
||||
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
|
||||
|
||||
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 supports 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' will install the package's files in
|
||||
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
||||
installation prefix other than `/usr/local' by giving `configure' the
|
||||
option `--prefix=PATH'.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
give `configure' the option `--exec-prefix=PATH', the package will use
|
||||
PATH as the prefix for installing programs and libraries.
|
||||
Documentation and other data files will still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like `--bindir=PATH' 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' can not figure out
|
||||
automatically, but needs to determine by the type of host the package
|
||||
will run on. Usually `configure' can figure that out, but if it prints
|
||||
a message saying it can not guess the host type, give it the
|
||||
`--host=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name with three fields:
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
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 host type.
|
||||
|
||||
If you are building compiler tools for cross-compiling, you can also
|
||||
use the `--target=TYPE' option to select the type of system they will
|
||||
produce code for and the `--build=TYPE' option to select the type of
|
||||
system on which you are compiling the package.
|
||||
|
||||
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.
|
||||
|
||||
Operation Controls
|
||||
==================
|
||||
|
||||
`configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Use and save the results of the tests in FILE instead of
|
||||
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
|
||||
debugging `configure'.
|
||||
|
||||
`--help'
|
||||
Print a summary of the options to `configure', and exit.
|
||||
|
||||
`--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.
|
||||
|
||||
`--version'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options.
|
|
@ -0,0 +1,100 @@
|
|||
IPC checklist:
|
||||
( ) - not done
|
||||
(*) - done
|
||||
|
||||
--------------
|
||||
|
||||
help:
|
||||
(*) - basic command list
|
||||
(this could use some better formatting)
|
||||
(*) - extended command list
|
||||
(*) - individual command help
|
||||
--------------
|
||||
(*) version information
|
||||
--------------
|
||||
(*) Copyright information
|
||||
--------------
|
||||
(*) Autosave toggle
|
||||
--------------
|
||||
(*) Default Theme Selector
|
||||
--------------
|
||||
(*) theme lister
|
||||
--------------
|
||||
(*) restart command (also restart_wm, restart_theme)
|
||||
--------------
|
||||
(*) exit command
|
||||
--------------
|
||||
(*) Desktop/area changers
|
||||
--------------
|
||||
(*) Desktop/area number settings
|
||||
--------------
|
||||
(*) icons toggle
|
||||
--------------
|
||||
(*) focus mode selector
|
||||
--------------
|
||||
(*) focus advanced options settings
|
||||
--------------
|
||||
(*) window/client lister
|
||||
--------------
|
||||
(*) move mode selector
|
||||
--------------
|
||||
(*) resize mode selector
|
||||
--------------
|
||||
(*) audio toggle
|
||||
--------------
|
||||
( ) create / delete / modify imageclasses
|
||||
--------------
|
||||
( ) create / delete / modify actionclasses
|
||||
--------------
|
||||
( ) create / delete / modify "keybindings"
|
||||
--------------
|
||||
( ) create / delete / modify "mousebindings"
|
||||
--------------
|
||||
(*) create / delete / modify soundclasses
|
||||
--------------
|
||||
( ) create / delete / modify borderpart
|
||||
--------------
|
||||
( ) create / delete / modify border
|
||||
--------------
|
||||
( ) add / change / delete background
|
||||
--------------
|
||||
(*) toggle/set autoraise timeout
|
||||
--------------
|
||||
(*) toggle/set tooltip timeout
|
||||
--------------
|
||||
(*) toggle/set window placement mode
|
||||
--------------
|
||||
(*) toggle/set dragbar mode
|
||||
--------------
|
||||
(*) toggle/set sliding method / speed
|
||||
--------------
|
||||
(*) toggle/set window shading speed
|
||||
--------------
|
||||
(*) toggle/set edge resistance speed
|
||||
--------------
|
||||
(*) set/retreive focused window
|
||||
--------------
|
||||
(*) toggle menu animation
|
||||
--------------
|
||||
(*) toggle active pager
|
||||
--------------
|
||||
(*) toggle active network
|
||||
--------------
|
||||
window operations:
|
||||
(*) close
|
||||
(*) annihilate
|
||||
(*) iconify
|
||||
(*) shade
|
||||
(*) stick
|
||||
(*) width/height/size toggles
|
||||
(*) border selector
|
||||
(*) desk/area selector
|
||||
(*) raise/lower
|
||||
(*) move/resize
|
||||
(*) move/resize relative
|
||||
(*) focus
|
||||
--------------
|
||||
(*) Pop up a dialog box
|
||||
--------------
|
||||
( ) Pop up a more complicated input box and get results
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
SUBDIRS = \
|
||||
dox \
|
||||
eesh \
|
||||
epp \
|
||||
src
|
||||
|
||||
EXTRA_DIST = e.spec configure configure.in TODO econfig.h.in
|
|
@ -0,0 +1,15 @@
|
|||
Wed May 13 21:03:23 EDT 1998
|
||||
|
||||
Moved everything to autoconf/automake
|
||||
|
||||
Sat May 16 12:23:30 EDT 1998
|
||||
|
||||
Packaged up a snapshot
|
||||
|
||||
Sat May 16 20:42:22 EDT 1998
|
||||
|
||||
Packaged up a snapshot
|
||||
|
||||
Thu Jul 1 14:20:31 PDT 1999
|
||||
|
||||
Did stuff
|
|
@ -0,0 +1,16 @@
|
|||
-------------------------------------------------------------------------------
|
||||
E N L I G H T E N M E N T - CVS VERSION IN DEVELOPMENT.
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
this is a test.
|
||||
Welcome to Enlightenment 0.16.
|
||||
|
||||
This version is currently only available via CVS, and thus there isn't
|
||||
any help available. try asking for help online in #E on EFNet (irc)
|
||||
|
||||
the current CVSROOT is
|
||||
:pserver:anonymous@cvs.on.openprojects.net:/cvs/enlightenment
|
||||
|
||||
the password is blank (just hit return when prompted)
|
|
@ -0,0 +1,51 @@
|
|||
----------------
|
||||
FEATURES to ADD:
|
||||
----------------
|
||||
(*) extend IPC
|
||||
(*) focus switching options
|
||||
(*) icon revisiting
|
||||
(*) containers
|
||||
(*) button strips and joints
|
||||
(*) network file retreival via http and ftp
|
||||
(*) automatic-upgrade paths
|
||||
(*) upgrade notification
|
||||
|
||||
(*) snapable and then selectable multiple configs
|
||||
(*) filemanager in E (Xdnd)
|
||||
(*) iconbox (also transparent iconbox)
|
||||
(*) panel - like dock app containers (redo dock apps and an api for them)
|
||||
(*) widgets (slider, scrollbar, cyclebutton) - fix tables in tables
|
||||
fix rowspan for table.
|
||||
(*) optimse menu loading when it has icons.
|
||||
(*) FX api needs expanding with fx parameer structs and possible gui for them
|
||||
(*) sound on focus change
|
||||
(*) add support for icon miniature elements for window borders etc. (need to
|
||||
munge this out of eirhter the icon pixmap, or the KDE hint if there - also
|
||||
add hints for apps to be able to set 24bit image data to make it easier
|
||||
for scaling etc.)
|
||||
(*) add support for app defined border elements
|
||||
(*) settigns dialogs need to autoarrange not be centered
|
||||
|
||||
------------
|
||||
BUGS to FIX:
|
||||
------------
|
||||
|
||||
(*) autoarrange needs to better handle "no space left on display" rather than
|
||||
just putting window int he middle (and still needs to avoid panel etc.)
|
||||
(*) dragbar doesn't unpress when you release mouse button 2/3
|
||||
(*) focus code cleanup -- context_ewin vs focuswin vs realfocuswin
|
||||
(*) edge resistance while in click to focus - window from bottom will appear on
|
||||
the top when flipping.
|
||||
(*) wow, dox seems to chew up memory for no good reason.
|
||||
|
||||
7197 mandrake 0 0 15788 8096 496 S 0 0.0 12.8 0:03 dox
|
||||
287 mandrake 2 0 1868 1356 768 S 0 0.3 2.1 0:14 enlightenmen
|
||||
|
||||
it starts out at like 2.7 megs and somehow grows to 16. memory leak? naah
|
||||
:) gains about 300-500k every time I change pages, indefinitely. never
|
||||
frees the memory, still gains when I visit a page I've already been to.
|
||||
|
||||
------------
|
||||
FIXED BUGS:
|
||||
------------
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
#undef ENLIGHTENMENT_VERSION
|
||||
|
||||
#undef HAVE_STDARGS
|
||||
|
||||
#undef HAVE_LIBESD
|
||||
|
||||
#undef HAVE_SM
|
||||
|
||||
#undef ENLIGHTENMENT_MAJOR
|
||||
|
||||
#undef ENLIGHTENMENT_MINOR
|
||||
|
||||
#undef ENLIGHTENMENT_MICRO
|
||||
|
||||
#undef AUTOUPGRADE
|
||||
|
||||
#undef WITH_TARTY_WARP
|
||||
|
|
@ -0,0 +1,164 @@
|
|||
# Configure paths for ESD
|
||||
# Manish Singh 98-9-30
|
||||
# stolen back from Frank Belew
|
||||
# stolen from Manish Singh
|
||||
# Shamelessly stolen from Owen Taylor
|
||||
|
||||
dnl AM_PATH_ESD([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
|
||||
dnl Test for ESD, and define ESD_CFLAGS and ESD_LIBS
|
||||
dnl
|
||||
AC_DEFUN(AM_PATH_ESD,
|
||||
[dnl
|
||||
dnl Get the cflags and libraries from the esd-config script
|
||||
dnl
|
||||
AC_ARG_WITH(esd-prefix,[ --with-esd-prefix=PFX Prefix where ESD is installed (optional)],
|
||||
esd_prefix="$withval", esd_prefix="")
|
||||
AC_ARG_WITH(esd-exec-prefix,[ --with-esd-exec-prefix=PFX Exec prefix where ESD is installed (optional)],
|
||||
esd_exec_prefix="$withval", esd_exec_prefix="")
|
||||
AC_ARG_ENABLE(esdtest, [ --disable-esdtest Do not try to compile and run a test ESD program],
|
||||
, enable_esdtest=yes)
|
||||
|
||||
if test x$esd_exec_prefix != x ; then
|
||||
esd_args="$esd_args --exec-prefix=$esd_exec_prefix"
|
||||
if test x${ESD_CONFIG+set} != xset ; then
|
||||
ESD_CONFIG=$esd_exec_prefix/bin/esd-config
|
||||
fi
|
||||
fi
|
||||
if test x$esd_prefix != x ; then
|
||||
esd_args="$esd_args --prefix=$esd_prefix"
|
||||
if test x${ESD_CONFIG+set} != xset ; then
|
||||
ESD_CONFIG=$esd_prefix/bin/esd-config
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_PATH_PROG(ESD_CONFIG, esd-config, no)
|
||||
min_esd_version=ifelse([$1], ,0.2.7,$1)
|
||||
AC_MSG_CHECKING(for ESD - version >= $min_esd_version)
|
||||
no_esd=""
|
||||
if test "$ESD_CONFIG" = "no" ; then
|
||||
no_esd=yes
|
||||
else
|
||||
ESD_CFLAGS=`$ESD_CONFIG $esdconf_args --cflags`
|
||||
ESD_LIBS=`$ESD_CONFIG $esdconf_args --libs`
|
||||
|
||||
esd_major_version=`$ESD_CONFIG $esd_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
||||
esd_minor_version=`$ESD_CONFIG $esd_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
||||
esd_micro_version=`$ESD_CONFIG $esd_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
||||
if test "x$enable_esdtest" = "xyes" ; then
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
ac_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $ESD_CFLAGS"
|
||||
LIBS="$LIBS $ESD_LIBS"
|
||||
dnl
|
||||
dnl Now check if the installed ESD is sufficiently new. (Also sanity
|
||||
dnl checks the results of esd-config to some extent
|
||||
dnl
|
||||
rm -f conf.esdtest
|
||||
AC_TRY_RUN([
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <esd.h>
|
||||
|
||||
char*
|
||||
my_strdup (char *str)
|
||||
{
|
||||
char *new_str;
|
||||
|
||||
if (str)
|
||||
{
|
||||
new_str = malloc ((strlen (str) + 1) * sizeof(char));
|
||||
strcpy (new_str, str);
|
||||
}
|
||||
else
|
||||
new_str = NULL;
|
||||
|
||||
return new_str;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
int major, minor, micro;
|
||||
char *tmp_version;
|
||||
|
||||
system ("touch conf.esdtest");
|
||||
|
||||
/* HP/UX 9 (%@#!) writes to sscanf strings */
|
||||
tmp_version = my_strdup("$min_esd_version");
|
||||
if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) {
|
||||
printf("%s, bad version string\n", "$min_esd_version");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (($esd_major_version > major) ||
|
||||
(($esd_major_version == major) && ($esd_minor_version > minor)) ||
|
||||
(($esd_major_version == major) && ($esd_minor_version == minor) && ($esd_micro_version >= micro)))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\n*** 'esd-config --version' returned %d.%d.%d, but the minimum version\n", $esd_major_version, $esd_minor_version, $esd_micro_version);
|
||||
printf("*** of ESD required is %d.%d.%d. If esd-config is correct, then it is\n", major, minor, micro);
|
||||
printf("*** best to upgrade to the required version.\n");
|
||||
printf("*** If esd-config was wrong, set the environment variable ESD_CONFIG\n");
|
||||
printf("*** to point to the correct copy of esd-config, and remove the file\n");
|
||||
printf("*** config.cache before re-running configure\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
],, no_esd=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi
|
||||
fi
|
||||
if test "x$no_esd" = x ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
ifelse([$2], , :, [$2])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
if test "$ESD_CONFIG" = "no" ; then
|
||||
echo "*** The esd-config script installed by ESD could not be found"
|
||||
echo "*** If ESD was installed in PREFIX, make sure PREFIX/bin is in"
|
||||
echo "*** your path, or set the ESD_CONFIG environment variable to the"
|
||||
echo "*** full path to esd-config."
|
||||
else
|
||||
if test -f conf.esdtest ; then
|
||||
:
|
||||
else
|
||||
echo "*** Could not run ESD test program, checking why..."
|
||||
CFLAGS="$CFLAGS $ESD_CFLAGS"
|
||||
LIBS="$LIBS $ESD_LIBS"
|
||||
AC_TRY_LINK([
|
||||
#include <stdio.h>
|
||||
#include <esd.h>
|
||||
], [ return 0; ],
|
||||
[ echo "*** The test program compiled, but did not run. This usually means"
|
||||
echo "*** that the run-time linker is not finding ESD or finding the wrong"
|
||||
echo "*** version of ESD. If it is not finding ESD, you'll need to set your"
|
||||
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
|
||||
echo "*** to the installed location Also, make sure you have run ldconfig if that"
|
||||
echo "*** is required on your system"
|
||||
echo "***"
|
||||
echo "*** If you have an old version installed, it is best to remove it, although"
|
||||
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
|
||||
[ echo "*** The test program failed to compile or link. See the file config.log for the"
|
||||
echo "*** exact error that occured. This usually means ESD was incorrectly installed"
|
||||
echo "*** or that you have moved ESD since it was installed. In the latter case, you"
|
||||
echo "*** may want to edit the esd-config script: $ESD_CONFIG" ])
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi
|
||||
fi
|
||||
ESD_CFLAGS=""
|
||||
ESD_LIBS=""
|
||||
ifelse([$3], , :, [$3])
|
||||
fi
|
||||
AC_SUBST(ESD_CFLAGS)
|
||||
AC_SUBST(ESD_LIBS)
|
||||
rm -f conf.esdtest
|
||||
])
|
|
@ -0,0 +1,54 @@
|
|||
#!/bin/sh
|
||||
# Run this to generate all the initial makefiles, etc.
|
||||
|
||||
srcdir=`dirname $0`
|
||||
test -z "$srcdir" && srcdir=.
|
||||
|
||||
THEDIR="`pwd`"
|
||||
cd "$srcdir"
|
||||
DIE=0
|
||||
|
||||
(autoconf --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "You must have autoconf installed to compile Enlightenment."
|
||||
echo "Download the appropriate package for your distribution,"
|
||||
echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
|
||||
DIE=1
|
||||
}
|
||||
|
||||
(automake --version) < /dev/null > /dev/null 2>&1 || {
|
||||
echo
|
||||
echo "You must have automake installed to compile Enlightenment."
|
||||
echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
|
||||
echo "(or a newer version if it is available)"
|
||||
DIE=1
|
||||
}
|
||||
|
||||
if test "$DIE" -eq 1; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
(test -d src && test -d dox) || {
|
||||
echo "You must run this script in the top-level Enlightenment directory"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if test -z "$*"; then
|
||||
echo "I am going to run ./configure with no arguments - if you wish "
|
||||
echo "to pass any to it, please specify them on the $0 command line."
|
||||
fi
|
||||
|
||||
echo "Generating configuration files for Enlightenment, please wait...."
|
||||
|
||||
echo " aclocal $ACLOCAL_FLAGS"
|
||||
aclocal $ACLOCAL_FLAGS
|
||||
echo " autoheader"
|
||||
autoheader
|
||||
echo " automake --add-missing"
|
||||
automake --add-missing
|
||||
echo " autoconf"
|
||||
autoconf
|
||||
|
||||
cd "$THEDIR"
|
||||
|
||||
$srcdir/configure "$@" && echo && echo "Now type 'make' to compile Enlightenment."
|
|
@ -0,0 +1,68 @@
|
|||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
|
||||
/* Define if you need to in order for stat and other things to work. */
|
||||
#undef _POSIX_SOURCE
|
||||
|
||||
/* Define as the return type of signal handlers (int or void). */
|
||||
#undef RETSIGTYPE
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define if your processor stores words with the most significant
|
||||
byte first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||
#undef WORDS_BIGENDIAN
|
||||
|
||||
/* Define if the X Window System is missing or not being used. */
|
||||
#undef X_DISPLAY_MISSING
|
||||
|
||||
#undef ENLIGHTENMENT_VERSION
|
||||
|
||||
#undef HAVE_STDARGS
|
||||
|
||||
#undef HAVE_LIBESD
|
||||
|
||||
#undef HAVE_SM
|
||||
|
||||
#undef ENLIGHTENMENT_MAJOR
|
||||
|
||||
#undef ENLIGHTENMENT_MINOR
|
||||
|
||||
#undef ENLIGHTENMENT_MICRO
|
||||
|
||||
#undef AUTOUPGRADE
|
||||
|
||||
#undef WITH_TARTY_WARP
|
||||
|
||||
/* Define if you have the blumfrub function. */
|
||||
#undef HAVE_BLUMFRUB
|
||||
|
||||
/* Define if you have the buckets_of_erogenous_nym function. */
|
||||
#undef HAVE_BUCKETS_OF_EROGENOUS_NYM
|
||||
|
||||
/* Define if you have the buttox function. */
|
||||
#undef HAVE_BUTTOX
|
||||
|
||||
/* Define if you have the getcwd function. */
|
||||
#undef HAVE_GETCWD
|
||||
|
||||
/* Define if you have the mkdir function. */
|
||||
#undef HAVE_MKDIR
|
||||
|
||||
/* Define if you have the setenv function. */
|
||||
#undef HAVE_SETENV
|
||||
|
||||
/* Define if you have the snprintf function. */
|
||||
#undef HAVE_SNPRINTF
|
||||
|
||||
/* Define if you have the strcasecmp function. */
|
||||
#undef HAVE_STRCASECMP
|
||||
|
||||
/* Define if you have the <alloca.h> header file. */
|
||||
#undef HAVE_ALLOCA_H
|
||||
|
||||
/* Define if you have the Fridge library (-lFridge). */
|
||||
#undef HAVE_LIBFRIDGE
|
||||
|
||||
/* Define if you have the Xtst library (-lXtst). */
|
||||
#undef HAVE_LIBXTST
|
|
@ -0,0 +1,237 @@
|
|||
AC_INIT(e.spec)
|
||||
|
||||
ENLIGHTENMENT_MAJOR=0
|
||||
ENLIGHTENMENT_MINOR=16
|
||||
ENLIGHTENMENT_MICRO=devel.4
|
||||
ENLIGHTENMENT_VERSION=$ENLIGHTENMENT_MAJOR.$ENLIGHTENMENT_MINOR.$ENLIGHTENMENT_MICRO
|
||||
|
||||
VERSION=$ENLIGHTENMENT_VERSION
|
||||
PACKAGE=enlightenment
|
||||
|
||||
AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
|
||||
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
AM_CONDITIONAL(FSSTD, test x$enable_fsstd = xyes)
|
||||
AC_SUBST(USE_FSSTD)
|
||||
|
||||
dnl reasonable guesses for where stuff is installed
|
||||
if test "x$prefix" = "xNONE"; then
|
||||
prefix="/usr/local"
|
||||
else
|
||||
prefix=$prefix
|
||||
fi
|
||||
|
||||
#
|
||||
# ok enlightenment d00ds want to ignore civilization and install
|
||||
# everything in one place. The rest of use prefer sanity.
|
||||
#
|
||||
AC_ARG_ENABLE(fsstd, [ --enable-fsstd install files following FSSTD [default=no]], ,enable_fsstd=no)
|
||||
|
||||
if test "x$enable_fsstd" = "xyes"; then
|
||||
ENLIGHTENMENT_ROOT=${datadir}/enlightenment
|
||||
ENLIGHTENMENT_BIN=${bindir}
|
||||
USE_FSSTD=yes
|
||||
else
|
||||
ENLIGHTENMENT_ROOT=${prefix}/enlightenment
|
||||
ENLIGHTENMENT_BIN=${prefix}/enlightenment/bin
|
||||
USE_FSSTD=no
|
||||
fi
|
||||
|
||||
AM_CONFIG_HEADER(econfig.h)
|
||||
|
||||
AC_DEFINE_UNQUOTED(ENLIGHTENMENT_VERSION, "$ENLIGHTENMENT_VERSION")
|
||||
AC_SUBST(ENLIGHTENMENT_VERSION)
|
||||
AC_DEFINE_UNQUOTED(ENLIGHTENMENT_MAJOR, "$ENLIGHTENMENT_MAJOR")
|
||||
AC_SUBST(ENLIGHTENMENT_MAJOR)
|
||||
AC_DEFINE_UNQUOTED(ENLIGHTENMENT_MINOR, "$ENLIGHTENMENT_MINOR")
|
||||
AC_SUBST(ENLIGHTENMENT_MINOR)
|
||||
AC_DEFINE_UNQUOTED(ENLIGHTENMENT_MICRO, "$ENLIGHTENMENT_MICRO")
|
||||
AC_SUBST(ENLIGHTENMENT_MICRO)
|
||||
|
||||
AC_SUBST(ENLIGHTENMENT_ROOT)
|
||||
AC_SUBST(ENLIGHTENMENT_BIN)
|
||||
|
||||
AC_PROG_CC
|
||||
AC_PROG_MAKE_SET
|
||||
AC_ISC_POSIX
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_LN_S
|
||||
|
||||
AC_HEADER_STDC
|
||||
|
||||
AC_PATH_X
|
||||
AC_PATH_XTRA
|
||||
|
||||
AC_CHECK_HEADER(stdarg.h, AC_DEFINE(HAVE_STDARGS))
|
||||
AC_CHECK_HEADER(X11/SM/SMlib.h, AC_DEFINE(HAVE_SM))
|
||||
AC_CHECK_HEADERS(alloca.h)
|
||||
|
||||
AC_TYPE_SIGNAL
|
||||
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
AC_CHECK_FUNCS(getcwd)
|
||||
AC_CHECK_FUNCS(mkdir)
|
||||
AC_CHECK_FUNCS(snprintf)
|
||||
AC_CHECK_FUNCS(strcasecmp)
|
||||
AC_CHECK_FUNCS(setenv)
|
||||
|
||||
AC_CHECK_FUNCS(blumfrub)
|
||||
AC_CHECK_FUNCS(buckets_of_erogenous_nym)
|
||||
AC_CHECK_FUNCS(buttox)
|
||||
|
||||
AC_ARG_ENABLE(sound, [ --enable-sound compile with sound support
|
||||
[default=yes]], ,enable_sound=yes)
|
||||
|
||||
AC_ARG_ENABLE(upgrade, [ --enable-upgrade compile with auto-upgrade support
|
||||
[default=yes]], ,enable_upgrade=yes)
|
||||
|
||||
if test "x$enable_sound" = "xyes"; then
|
||||
AM_PATH_ESD(0.2.12,AC_DEFINE(HAVE_LIBESD),[
|
||||
echo "WARNING: Enlightenment needs a system with libesd.so (EsounD)"
|
||||
echo "0.2.12 or higher to use sound support."
|
||||
echo "Enlightenment can use EsounD (ESD) to be installed to compile."
|
||||
echo "Sound will be disabled in this binary. If you ever want sound"
|
||||
echo "You will need to get and install EsounD then recompile Enlightenment"
|
||||
echo "Please see the EsounD homepage below on how to obtain/install it."
|
||||
echo "http://pw1.netcom.com/~ericmit/EsounD.html"
|
||||
echo "You can also obtain it from:"
|
||||
echo "ftp://ftp.enlightenment.org/pub/enlightenment/"
|
||||
echo "ftp://www.rasterman.com/pub/enlightenment/"
|
||||
AC_MSG_WARN([Warning: no EsounD detected.])])
|
||||
else
|
||||
echo "Sound support has been turned off, per the --enable-sound=no"
|
||||
echo "passed to your configure line."
|
||||
fi
|
||||
|
||||
|
||||
AM_PATH_IMLIB(1.9.5, , [
|
||||
echo "ERROR: Enlightenment needs a system with Imlib 1.8.2 or higher"
|
||||
echo "You can obtain it from:"
|
||||
echo "ftp://ftp.enlightenment.org/pub/enlightenment/"
|
||||
echo "ftp://www.rasterman.com/pub/enlightenment/"
|
||||
echo "ftp://ftp.labs.redhat.com/pub/imlib/"
|
||||
AC_MSG_ERROR([Fatal Error: no Imlib detected.])])
|
||||
|
||||
LDFLAGS="$LDFLAGS -L$prefix/lib"
|
||||
LDFLAGS="$LDFLAGS `echo $IMLIB_LIBS | sed 's/\(.*\)-lImlib.*/\1/'`"
|
||||
LDFLAGS="$LDFLAGS `echo $IMLIB_LIBS | sed 's/.*-lImlib.*\(-L[[^ ]]*\).*$/\1/'`"
|
||||
XTST_LIBS=""
|
||||
|
||||
AC_CHECK_LIB(Fnlib, Fnlib_init, FNLIB_LIBS=-lFnlib , [
|
||||
echo "ERROR: Enlightenment needs a system with libFnlib.so (Fnlib)"
|
||||
echo "You can obtain it from:"
|
||||
echo "ftp://ftp.enlightenment.org/pub/enlightenment/"
|
||||
echo "ftp://www.rasterman.com/pub/enlightenment/"
|
||||
echo "ftp://ftp.labs.redhat.com/pub/fnlib/"
|
||||
AC_MSG_ERROR([Fatal Error: no Fnlib detected.])], $IMLIB_LIBS)
|
||||
AC_SUBST(FNLIB_LIBS)
|
||||
|
||||
if test "x$enable_upgrade" = "xyes"; then
|
||||
AC_CHECK_LIB(ghttp, ghttp_uri_validate, [AC_DEFINE(AUTOUPGRADE)
|
||||
GHTTP_LIBS=-lghttp] , [
|
||||
echo "Automatic Upgrades requires libghttp"
|
||||
AC_MSG_WARN([no libghttp detected.])
|
||||
],$IMLIB_LIBS)
|
||||
else
|
||||
echo "Automatic Upgrades have been turned off by request at compiletime"
|
||||
fi
|
||||
AC_SUBST(GHTTP_LIBS)
|
||||
|
||||
AC_CHECK_LIB(ttf, TT_Init_FreeType, TTF_LIBS=-lttf, [
|
||||
echo "ERROR: Enlightenment needs a system with libttf.so (TrueType Font Library)"
|
||||
echo "You can obtain it from:"
|
||||
echo "ftp://ftp.enlightenment.org/pub/enlightenment/"
|
||||
echo "ftp://www.rasterman.com/pub/enlightenment/"
|
||||
echo "You can also obtain it from:"
|
||||
echo "http://www.freetype.org/"
|
||||
echo "You can obtain some truetype fonts from:"
|
||||
echo "http://voyager.cns.ohiou.edu/~sadkins/web_library/fonts/font_archive/"
|
||||
AC_MSG_ERROR([Fatal Error: no FreeType detected.])], -lm)
|
||||
AC_SUBST(TTF_LIBS)
|
||||
|
||||
AC_CHECK_LIB(dl, dlopen, DL_LIBS=-ldl , [
|
||||
echo "Warning: Enlightenment requires the dl (dynamic loader) library"
|
||||
echo "to be supported on your platform for module support. Modules"
|
||||
echo "have been disabled (this will affect functionality)"
|
||||
AC_MSG_WARN([Module Support Disabled (no dynamic loader)])], -lm)
|
||||
AC_SUBST(DL_LIBS)
|
||||
|
||||
|
||||
|
||||
AC_CHECK_LIB(Xtst, XTestGrabControl, , , $X_LIBS)
|
||||
AC_CHECK_LIB(Xtst, XTestQueryExtension, XTST_LIBS=-lXtst, , $X_LIBS)
|
||||
AC_SUBST(XTST_LIBS)
|
||||
AC_CHECK_LIB(Xext, XkbQueryExtension, AC_DEFINE(WITH_TARTY_WARP), , $X_LIBS)
|
||||
AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension, AC_DEFINE(WITH_ZOOM), , $X_LIBS)
|
||||
AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension, XVM_LIBS=-lXxf86vm, , $X_LIBS)
|
||||
AC_SUBST(XVM_LIBS)
|
||||
AC_SUBST(XKB)
|
||||
|
||||
#pixdata=`ls -1 $srcdir/src/pix | egrep -v '(Makefile|CVS)'`
|
||||
#snddata=`ls -1 $srcdir/src/themes/DEFAULT/snd | egrep -v '(Makefile|CVS)'`
|
||||
#t17data=`ls -1 $srcdir/src/themes/DEFAULT/tin-e/17 | egrep -v '(Makefile|CVS)'`
|
||||
#ttfdata=`ls -1 $srcdir/src/themes/DEFAULT/ttfonts | egrep -v '(Makefile|CVS)'`
|
||||
|
||||
#pixdata=`echo $pixdata`
|
||||
#snddata=`echo $snddata`
|
||||
#t17data=`echo $t17data`
|
||||
#ttfdata=`echo $ttfdata`
|
||||
|
||||
#AC_SUBST(pixdata)
|
||||
#AC_SUBST(snddata)
|
||||
#AC_SUBST(t17data)
|
||||
#AC_SUBST(ttfdata)
|
||||
|
||||
#CONFIGEDIT=
|
||||
#AC_PATH_PROG(PERL, perl)
|
||||
#if test -z "$PERL"; then
|
||||
# AC_MSG_WARN([perl not found, ConfigEdit will not be installed])
|
||||
#else
|
||||
# CONFIGEDIT=configedit
|
||||
#fi
|
||||
#AC_SUBST(CONFIGEDIT)
|
||||
|
||||
AC_CHECK_LIB(Fridge,mass_quantities_of_bass_ale)
|
||||
AC_CHECK_LIB(Fridge,mass_quantities_of_any_ale, , [
|
||||
echo "Warning: No ales were found in your refrigerator."
|
||||
echo " We highly suggest that you rectify this situation immediately."
|
||||
])
|
||||
|
||||
edocdata=`ls -1 $srcdir/dox/E-docs | egrep -v '(Makefile|CVS|^e|^misc|\.sh$)'`
|
||||
edocexec=`ls -1 $srcdir/dox/E-docs | egrep '\.sh$'`
|
||||
#e17data=`ls -1 $srcdir/dox/E-docs/e/17 | egrep -v '(Makefile|CVS)'`
|
||||
#epixdata=`ls -1 $srcdir/dox/E-docs/epix | egrep -v '(Makefile|CVS)'`
|
||||
#miscdata=`ls -1 $srcdir/dox/E-docs/misc | egrep -v '(Makefile|CVS)'`
|
||||
|
||||
edocdata=`echo $edocdata`
|
||||
edocexec=`echo $edocexec`
|
||||
#e17data=`echo $e17data`
|
||||
#epixdata=`echo $epixdata`
|
||||
#miscdata=`echo $miscdata`
|
||||
|
||||
AC_SUBST(edocdata)
|
||||
AC_SUBST(edocexec)
|
||||
dnl#AC_SUBST(e17data)
|
||||
dnl#AC_SUBST(epixdata)
|
||||
dnl#AC_SUBST(miscdata)
|
||||
|
||||
|
||||
|
||||
#configedit/Makefile
|
||||
#configedit/configedit.rc
|
||||
#configedit/ConfigEdit
|
||||
#src/configs/user_main.cfg
|
||||
AC_OUTPUT([
|
||||
Makefile
|
||||
src/Makefile
|
||||
src/themes/Makefile
|
||||
src/themes/configs/Makefile
|
||||
src/themes/configs/pix/Makefile
|
||||
dox/Makefile
|
||||
dox/E-docs/Makefile
|
||||
eesh/Makefile
|
||||
epp/Makefile
|
||||
])
|
||||
#, [chmod +x configedit/ConfigEdit])
|
|
@ -0,0 +1,11 @@
|
|||
enlightenment for DEBIAN
|
||||
----------------------
|
||||
|
||||
The Enlightenment window manager package.
|
||||
It now complies with the FHS (Thanks DrMike & KainX!). You can
|
||||
now build your own .debs of CVS if you so choose, since the debian
|
||||
specific files are going to be commited to the source tree. Just run
|
||||
'debian/rules binary' and you'll be set. If you have questions, just
|
||||
email me.
|
||||
|
||||
Brian M. Almeida <bma@debian.org>, Wed, 30 Sep 1998 18:47:42 -0400
|
|
@ -0,0 +1,109 @@
|
|||
enlightenment-cvs (0.15-0.11) unstable; urgency=low
|
||||
|
||||
* Package names changed to reflect CVS version
|
||||
* CVS updates, more auto* fixes
|
||||
* Removed econfigedit stuff (dead program)
|
||||
* Made version number two digits again to make it
|
||||
recognized as a new version
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Sat, 19 Dec 1998 10:09:18 -0500
|
||||
|
||||
enlightenment (0.15-0.1) unstable; urgency=low
|
||||
|
||||
* Happy day! E now supports the FSSTD.
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Thu, 10 Dec 1998 17:31:00 -0500
|
||||
|
||||
enlightenment (0.15-0.08) unstable; urgency=low
|
||||
|
||||
* CVS upstream patches (Snapshot from 19981120)
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Fri, 20 Nov 1998 15:46:00 -0500
|
||||
|
||||
enlightenment (0.15-0.07) unstable; urgency=low
|
||||
|
||||
* CVS upstream patches (Snapshot from 19981115)
|
||||
* Raster made a commit RIGHT AFTER 0.06 built...grrr...
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Sat, 15 Nov 1998 23:21:00 -0500
|
||||
|
||||
enlightenment (0.15-0.06) unstable; urgency=low
|
||||
|
||||
* CVS upstream patches (Snapshot from 19981115)
|
||||
* Has a double click event that shades the window, yay!
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Sat, 15 Nov 1998 22:30:00 -0400
|
||||
|
||||
enlightenment (0.15-0.05) unstable; urgency=low
|
||||
|
||||
* CVS upstream patches (Snapshot from 19981110)
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Tue, 10 Nov 1998 16:19:00 -0400
|
||||
|
||||
enlightenment (0.15-0.04) unstable; urgency=low
|
||||
|
||||
* CVS upstream patches (Snapshot from 19981109)
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Tue, 10 Nov 1998 10:28:00 -0400
|
||||
|
||||
enlightenment (0.15-0.03) unstable; urgency=low
|
||||
|
||||
* CVS upstream patches (Snapshot from 19981107)
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Sat, 07 Nov 1998 22:24:00 -0400
|
||||
|
||||
enlightenment (0.15-0.02) unstable; urgency=low
|
||||
|
||||
* CVS upstream patches (Snapshot from 19981104) to satisfy the masses
|
||||
* Changed econfigedit dependeny to be libgtk-imlib-perl | libgnome-perl
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Fri, 06 Nov 1998 12:39:00 -0400
|
||||
|
||||
enlightenment (0.15-0.01) unstable; urgency=low
|
||||
|
||||
* CVS upstream release (Snapshot from 19981025) to satisfy the masses
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Mon, 26 Oct 1998 21:40:00 -0400
|
||||
|
||||
enlightenment (0.14-5) unstable; urgency=low
|
||||
|
||||
* Added Enlightenment to WindowManagers submenu using update-menus (#27927)
|
||||
* Changed dependency on libgtk-perl to libgtk-imlib-perl
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Wed, 14 Oct 1998 15:15:00 -0400
|
||||
|
||||
enlightenment (0.14-4) unstable; urgency=low
|
||||
|
||||
* user_main.cfg calls eeyes now, not ee (#27730)
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Tue, 13 Oct 1998 20:00:00 -0400
|
||||
|
||||
enlightenment (0.14-3) unstable; urgency=low
|
||||
|
||||
* New maintainer
|
||||
|
||||
-- Brian M. Almeida <bma@debian.org> Wed, 30 Sep 1998 18:25:18 -0400
|
||||
|
||||
enlightenment (0.14-2) unstable; urgency=low
|
||||
|
||||
* Fixed writing of dotfiles
|
||||
|
||||
-- Sean E. Perry <shaleh@debian.org> Tue, 21 Jul 1998 00:03:18 -0400
|
||||
|
||||
enlightenment (0.14-1) unstable; urgency=low
|
||||
|
||||
* Added the e-docs package
|
||||
* Official upstream release
|
||||
|
||||
-- Sean E. Perry <shaleh@debian.org> Sun, 19 Jul 1998 03:38:18 -0400
|
||||
|
||||
enlightenment (0.14-0) unstable; urgency=low
|
||||
|
||||
* Initial Release.
|
||||
|
||||
-- Sean E. Perry <shaleh@debian.org> Sun, 5 Jul 1998 20:07:42 -0400
|
||||
|
||||
Local variables:
|
||||
mode: debian-changelog
|
||||
add-log-mailing-address: "bma@debian.org"
|
||||
End:
|
|
@ -0,0 +1,53 @@
|
|||
Source: enlightenment-cvs
|
||||
Section: x11
|
||||
Priority: optional
|
||||
Maintainer: Brian M. Almeida <bma@debian.org>
|
||||
Standards-Version: 2.4.0.0
|
||||
|
||||
Package: enlightenment-cvs-docs
|
||||
Architecture: all
|
||||
Recommends: enlightenment-cvs (>= 0.15)
|
||||
Replaces: enlightenment-docs (<< 0.15-0.11)
|
||||
Conflicts: enlightenment-docs (<< 0.15-0.11)
|
||||
Provides: enlightenment-docs
|
||||
Description: All documentation for Enlightenment and its themes
|
||||
How to make a theme, how to customize E, FAQ, README, the works
|
||||
|
||||
Package: enlightenment-cvs
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, enlightenment-cvs-docs, enlightenment-cvs-theme
|
||||
Suggests: dox-cvs, esound-cvs
|
||||
Replaces: enlightenment (<< 0.15-0.11)
|
||||
Conflicts: enlightenment (<< 0.15-0.11)
|
||||
Provides: enlightenment
|
||||
Description: The Enlightenment Window Manager
|
||||
The Enlightnment Window Manager, whose motto is "Time to rethink everything".
|
||||
It allows complete user control of almost every possible setting. This is
|
||||
accomplished through its use of themes. However at this stage, Enlightenment
|
||||
is slightly more complex than wmx and many will find it lacking in features.
|
||||
There is no support for menus or iconization.
|
||||
|
||||
Package: enlightenment-cvs-theme
|
||||
Architecture: all
|
||||
Depends: enlightenment-cvs-docs
|
||||
Recommends: enlightenment-cvs(>= 0.15)
|
||||
Replaces: enlightenment-theme (<< 0.15-0.11)
|
||||
Conflicts: enlightenment-theme (<< 0.15-0.11)
|
||||
Provides: enlightenment-theme
|
||||
Description: Themes pictures and config files need by the Enlightenment WM
|
||||
This package contains the graphics, sounds, and font needed for a minimal
|
||||
install of Enlightenment. The user is allowed and even suggested to make
|
||||
their own.
|
||||
|
||||
Package: dox-cvs
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}
|
||||
Recommends: enlightenment-cvs
|
||||
Replaces: dox (<< 0.15-0.11)
|
||||
Conflicts: dox (<< 0.15-0.11)
|
||||
Provides: dox
|
||||
Description: Dox is the Enlightened help program
|
||||
Dox is Rasterman's little creation for Enlightenment and other Enlightened
|
||||
apps to use as a mini help viewer. It uses Rasterman's own markup type
|
||||
language.
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
This package was debianized by Sean E. Perry shaleh@debian.org on
|
||||
Sun, 5 Jul 1998 20:07:42 -0400.
|
||||
|
||||
It can be downloaded from www.rasterman.com or www.enlightenment.org
|
||||
|
||||
Copyright:
|
||||
|
||||
Enlightenment and Dox are released under the GPL.
|
|
@ -0,0 +1,3 @@
|
|||
usr/X11R6/bin/dox
|
||||
usr/share/enlightenment/E-docs
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
usr/doc/enlightenment-cvs-docs
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
usr/share/enlightenment/config
|
||||
usr/share/enlightenment/themes
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
usr/X11R6/bin/enlightenment
|
||||
usr/X11R6/bin/eesh
|
||||
usr/X11R6/bin/epp
|
|
@ -0,0 +1,2 @@
|
|||
?package(enlightenment):needs="wm" section="WindowManagers"\
|
||||
title="Enlightenment" command="/usr/X11R6/bin/enlightenment"
|
|
@ -0,0 +1 @@
|
|||
shlibs:Depends=freetype2, imlib1, libc6, libesd0, libfnlib0, libjpeg62, libpng2, libtiff3g, libungif3g (>= 3.0-2) | giflib3g (>= 3.0-5.2), xlib6g (>= 3.3-5), zlib1g (>= 1:1.1.3)
|
|
@ -0,0 +1,111 @@
|
|||
#!/usr/bin/make -f
|
||||
# Made with the iad of dh_make, by Craig Small
|
||||
|
||||
BUILD_DIR=`pwd`/debian/build
|
||||
INSTALL_DIR=`pwd`/debian/tmp
|
||||
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
configure: configure.in
|
||||
@echo "--- Making configure script and configuring"
|
||||
./autogen.sh
|
||||
|
||||
Makefile: configure
|
||||
@echo "--- Configuring"
|
||||
./configure --enable-fsstd=yes --prefix=/usr \
|
||||
--bindir=/usr/X11R6/bin
|
||||
|
||||
build: Makefile build-stamp
|
||||
build-stamp:
|
||||
@echo "--- Compiling"
|
||||
dh_testdir
|
||||
$(MAKE)
|
||||
touch build-stamp
|
||||
|
||||
clean:
|
||||
@echo "--- Cleaning"
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
rm -f build-stamp
|
||||
rm -rf debian/build
|
||||
rm -rf `find . -name '.deps'`
|
||||
|
||||
-$(MAKE) distclean
|
||||
dh_clean
|
||||
|
||||
install: build
|
||||
@echo "--- Installing"
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
$(MAKE) install DESTDIR=${INSTALL_DIR}
|
||||
mkdir -p ${INSTALL_DIR}/usr/doc/enlightenment-cvs-docs
|
||||
|
||||
binary-indep: build install \
|
||||
enlightenment-cvs-docs \
|
||||
enlightenment-cvs-theme \
|
||||
|
||||
binary-arch: build install \
|
||||
enlightenment-cvs \
|
||||
dox-cvs
|
||||
|
||||
enlightenment-cvs-docs: install
|
||||
@echo "--- Building: $@"
|
||||
dh_installdocs -p$@ -P$(BUILD_DIR)/$@ src/README AUTHORS FAQ
|
||||
dh_installchangelogs -p$@ -P$(BUILD_DIR)/$@ src/ChangeLog
|
||||
dh_movefiles -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_compress -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_fixperms -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_installdeb -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_gencontrol -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_md5sums -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_builddeb -p$@ -P$(BUILD_DIR)/$@
|
||||
|
||||
enlightenment-cvs-theme: install
|
||||
@echo "--- Building: $@"
|
||||
mkdir -p $(BUILD_DIR)/$@/usr/doc
|
||||
cd $(BUILD_DIR)/$@/usr/doc; ln -sf enlightenment-cvs-docs $@
|
||||
dh_movefiles -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_compress -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_fixperms -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_installdeb -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_gencontrol -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_md5sums -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_builddeb -p$@ -P$(BUILD_DIR)/$@
|
||||
|
||||
enlightenment-cvs: install
|
||||
@echo "--- Building: $@"
|
||||
mkdir -p $(BUILD_DIR)/$@/usr/doc
|
||||
cd $(BUILD_DIR)/$@/usr/doc; ln -sf enlightenment-cvs-docs $@
|
||||
dh_installmenu -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_movefiles -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_strip -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_compress -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_fixperms -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_installdeb -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_undocumented -p$@ -P$(BUILD_DIR)/$@ enlightenment.1x
|
||||
dh_shlibdeps -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_gencontrol -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_md5sums -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_builddeb -p$@ -P$(BUILD_DIR)/$@
|
||||
|
||||
dox-cvs: install
|
||||
@echo "--- Building: $@"
|
||||
dh_installdocs -p$@ -P$(BUILD_DIR)/$@ dox/README \
|
||||
debian/README.debian
|
||||
dh_installchangelogs -p$@ -P$(BUILD_DIR)/$@ dox/ChangeLog
|
||||
dh_movefiles -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_strip -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_compress -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_fixperms -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_installdeb -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_undocumented -p$@ -P$(BUILD_DIR)/$@ dox.1x
|
||||
dh_shlibdeps -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_gencontrol -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_md5sums -p$@ -P$(BUILD_DIR)/$@
|
||||
dh_builddeb -p$@ -P$(BUILD_DIR)/$@
|
||||
|
||||
source diff:
|
||||
@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
|
||||
|
||||
binary: binary-indep binary-arch
|
||||
.PHONY: build clean binary-indep binary-arch binary
|
|
@ -0,0 +1,4 @@
|
|||
Makefile
|
||||
Makefile.in
|
||||
.deps
|
||||
dox
|
|
@ -0,0 +1,340 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) 19yy <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) 19yy name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
|
@ -0,0 +1,50 @@
|
|||
|
||||
Thu Jun 25 16:26:27 EDT 1998
|
||||
(Raster)
|
||||
|
||||
added dox to cvs - guess what.. it actually works.. :)
|
||||
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Sun Aug 23 22:13:16 EDT 1998
|
||||
(Mandrake)
|
||||
|
||||
fixed imlib-config stuff
|
||||
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Sun Sep 6 18:54:17 EDT 1998
|
||||
(Mandrake)
|
||||
|
||||
incremented minor rev to 15.
|
||||
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Fri Sep 11 11:29:57 EDT 1998
|
||||
(Mandrake)
|
||||
|
||||
added -I$prefix/include to CPPFLAGS in configure.in
|
||||
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Aug 14/1998 (Hilarion, woo hoo!)
|
||||
|
||||
o Added in support for keybindings (PgUp/PgDn/Return/Home/End)
|
||||
o Can now select buttons with keys
|
||||
o Previous button/PageUp can now return from a button press
|
||||
to the original page
|
||||
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Tue Sep 29 18:11:10 PDT 1998
|
||||
(Yosh)
|
||||
|
||||
Redid the Makefiles to be less kludgy
|
||||
|
||||
-----------------------------------------------------------------
|
||||
|
||||
Sat Jul 10 16:45:42 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
added patch from Christian Kreibich <kreibich@informatik.tu-muenchen.de>
|
||||
to stop the memory leak in dox
|
|
@ -0,0 +1,2 @@
|
|||
Makefile
|
||||
Makefile.in
|
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 130 KiB |
|
@ -0,0 +1,530 @@
|
|||
<page columns=1 padding=16 name=front background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<img src=E_logo.png x=32 y=64>
|
||||
<font face=rothwell/25 color=#ffffff>
|
||||
<p align=50%>
|
||||
<br>
|
||||
Enlightenment<br>
|
||||
0.16 devel snap
|
||||
<br>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p align=50%>
|
||||
Topics:<br>
|
||||
<br>
|
||||
_About(about)<br>
|
||||
_Credits(credits)<br>
|
||||
_Website(web)<br>
|
||||
_IRC(irc)<br>
|
||||
_Email(email)<br>
|
||||
<br>
|
||||
_Tutorial(tut)<br>
|
||||
_Interactive_Hints(INPUT.interactive.sh)<br>
|
||||
<br>
|
||||
<font face=aircut3/10 color=#ffffff>
|
||||
Please read the tutorial if you are new to Enlightenment or just upgraded as
|
||||
there may be new features you may be missing out on.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=about background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p align=50%>
|
||||
Enlightenment is your Window Manager. The Window Manager controls the
|
||||
appearance of the borders of your windows, their behavior and
|
||||
all user interaction with positioning, killing, resizing, moving, iconifying,
|
||||
shading etc. your windows, virtual desktops, multiple desktops, menus attached
|
||||
to windows and some root window menus and can also control the background
|
||||
of your desktop(s).
|
||||
<p align=50%>
|
||||
It is a large and complex program and is by no means perfect, but it is being
|
||||
worked on and is as stable as possible. It has many advanced features as well
|
||||
as possibly missing some features. This version (0.15.5) is by no means the
|
||||
end of development and improvements, fixes and new exciting features are
|
||||
being worked on all the time. Please go and visit the _Web(web) site often,
|
||||
as new versions, fixes, patches and updates will be released.
|
||||
<p align=50%>
|
||||
It is hoped you enjoy using this software and that it is of benefit to you.
|
||||
It might not be for everyone, but if it has made your day any better than it
|
||||
was it has done more than enough already.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=2 padding=16 name=credits background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/10 color=#ffffff>
|
||||
<p>
|
||||
Enlightenment has been written by:<br>
|
||||
<br>
|
||||
The Rasterman (Carsten Haitzler)<br>
|
||||
Mandrake (Geoff Harrison)<br>
|
||||
Chutt (Isaac Richards)<br>
|
||||
Sung-Hyun Nam<br>
|
||||
Kimball Thurston<br>
|
||||
Michael Kellen<br>
|
||||
Frederic Devernay<br>
|
||||
Felix Bellaby<br>
|
||||
Michael Jennings (KainX)<br>
|
||||
Christian Kreibich<br>
|
||||
Peter Kjellerstedt<br>
|
||||
Troy Pesola<br>
|
||||
Owen Taylor<br>
|
||||
<br>
|
||||
And many others.
|
||||
<p>
|
||||
A big thanks to several companies that helped support Enlightenment.
|
||||
<p>
|
||||
2rad Networks (www.2rad.net) for providing servers and bandwidth to run the
|
||||
Enlightenment web site.
|
||||
<p>
|
||||
Red Hat Software (www.redhat.com) for allowing developers resources and time
|
||||
to work on Enlightenment.
|
||||
<p>
|
||||
VA Linux Systems (www.linux.com) for providing hardware, bandwidth and coke.
|
||||
<p>
|
||||
Xi Graphics (www.xig.com) for providing Xservers.
|
||||
<p>
|
||||
Not only should these people be thanked, but the whole E community - those on
|
||||
the E mailing list, on #E on IRC on EFnet and all E users who have provided
|
||||
feedback and debugging information, bug-fixes, patches and support. A big
|
||||
thanks goes out to all of you who make a project like this possible.
|
||||
<p>
|
||||
In addition people should be aware that E makes use of other projects - such
|
||||
as XFree86, Imlib, Esound, Freetype and many others, The people working on
|
||||
projects that provide infrastructure that E can use and build on should not
|
||||
be forgotten.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=web background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<p align=50%>
|
||||
For updated information on Enlightenment, development, bug-fixes, snapshots of
|
||||
development versions etc. please visit:
|
||||
<p align=50%>
|
||||
<font face=rothwell/30 color=#ccdddd>
|
||||
http://www.enlightenment.org/
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p align=50%>
|
||||
You may want to visit this site often as it changes
|
||||
regularly with fixes and development releases -- also visiting the
|
||||
daily-snapshots section
|
||||
on the FTP site is a good idea (see the snapshots section on the website for
|
||||
more information).
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=irc background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p>
|
||||
There is an Official Enlightenment IRC channel where you can go and "hang out"
|
||||
if you want - talk to other E users, developers, get some help, drool
|
||||
together, or whatever. #E will kill me for this but get onto any EFnet irc
|
||||
server (irc.efnet.org) then join #E. An example:
|
||||
<p>
|
||||
BitchX your_nick irc.efnet.org<br>
|
||||
<br>
|
||||
or<br>
|
||||
<br>
|
||||
irc your_nick irc.efnet.org<br>
|
||||
<br>
|
||||
or use your favorite graphical IRC client.
|
||||
<p>
|
||||
Please remember that it can get busy with 100's of people talking at once and
|
||||
not everyone is actually listening all the time or are in the middle of a
|
||||
conversation - be polite and patient, and have a sense of humor and you'll
|
||||
have fun.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=email background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p>
|
||||
There is a mailing-list for Enlightenment.If you wish to take part in general
|
||||
and development related discussions concerning Enlightenment you can join
|
||||
by mailing:
|
||||
<p>
|
||||
e-develop-request@rasterman.com
|
||||
<p>
|
||||
and put only one word in your body of the mail:
|
||||
<p>
|
||||
subscribe
|
||||
<p>
|
||||
This should subscribe you to the mailing list. If you are only interested in
|
||||
announcements, please mail your subscribe request as above to:
|
||||
<p>
|
||||
e-announce-request@rasterman.com
|
||||
<p>
|
||||
instead.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=tut background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
This small tutorial is intended to take you step by step through Enlightenment
|
||||
and its default setup, how to use it, modify settings, and put it to use for
|
||||
you. When you have finished reading each page please press the NEXT button on
|
||||
the top of this window to go to the next page.
|
||||
<p>
|
||||
If you are reading this right now you have managed to get Enlightenment itself
|
||||
installed correctly and are either running Enlightenment for the first time or
|
||||
have just upgraded to a new version. Congratulations. Now it's time to take
|
||||
you on a quick tour of the desktop you will have before you.
|
||||
<p>
|
||||
Please remember that if you use a theme other than the default (Brushed Metal)
|
||||
that is may look slightly or completely different to the contents of this
|
||||
tutorial. Some behavior may also vary.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=tut2 background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<img src=E_screen_start.png x=16 y=16>
|
||||
<p>
|
||||
Now that you have started Enlightenment, if you are using it for your desktop
|
||||
shell, your screen should look something like the image here on the left.
|
||||
<p>
|
||||
Across the whole top of the screen you will see a bar with arrows pointing
|
||||
up and down on the left and right ends. This is your desktop
|
||||
_Dragbar(dragbar) .
|
||||
<p>
|
||||
On the bottom-left you'll see 3 boxes. The top box with the scrollbar attached
|
||||
will be your _Iconbox(iconbox) .
|
||||
<p>
|
||||
The other 2 boxes below are _Pagers(pager) for desktops 0 and 1. Everything
|
||||
else is your desktop background.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=tut3 background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<img src=E_app_menu.png x=350 y=48>
|
||||
<p>
|
||||
When you click with your left mouse button on the desktop background you will
|
||||
see an "Applications" menu appear (example displayed on the right here).
|
||||
Applications you may have installed will appear in this menu. To launch one
|
||||
of them simply select it from the menu.
|
||||
<p>
|
||||
Note: Menus in Enlightenment work like most menu systems. You can either hold
|
||||
down the mouse button and navigate with the button down, releasing on the
|
||||
selection you want, or release elsewhere to not select anything, or you can
|
||||
quickly click and release then navigate just by moving the mouse, and clicking
|
||||
again on the item you wish to select, or eslewhere if you do not wish to
|
||||
select an entry.
|
||||
<p>
|
||||
If you wish to "stick" a menu up and leave it up so you can select items from
|
||||
it multiple times, clcik and hold down the mouse and release on the title of
|
||||
the menu (if it has a title) and it will remain up. You can move it and
|
||||
manipulate it like a normal window. Close the window to unstick the menu.
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=tut4 background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<img src=E_settings_menu.png x=285 y=275>
|
||||
<img src=E_enlightenment_menu.png x=4 y=30>
|
||||
<p>
|
||||
You will also find that instead of using the left mouse button, you click the
|
||||
right mouse button, a menu with the title "Settings" will appear. This is
|
||||
Enlightenment's settings menu. From it you can select what parts of your
|
||||
desktop that Enlightenment controls to customise and make more ameniable to
|
||||
your own needs.
|
||||
<p>
|
||||
When you select one of these _settings(settings) a dialog window will appear
|
||||
giving you options to configure that part of Enlightenment.
|
||||
<p>
|
||||
Clicking the middle button on the desktop background will display
|
||||
Enlightenment's main menu. You can access the other menus plus more options
|
||||
(including those to log out, restart and display Help information) from this
|
||||
menu.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=tut5 background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p>
|
||||
You will also find that holding down the ALT key whilst clicking the middle
|
||||
mouse button will bring up a menu with the titles of all currently active
|
||||
application windows. Selecting one of these will take you to that application.
|
||||
By using the CTRL key instead of ALT you will get a menu displaying all
|
||||
current desktops as submenus, with applicaitons on each desktop in the
|
||||
desktop submenu.
|
||||
<p>
|
||||
If your mouse does not have a middle button you should have enabled
|
||||
"Emulate 3 Buttons" in your X-Server - in which case pressing both left and
|
||||
right mouse buttons at once will be the equivalent of pressing a middle
|
||||
mouse button. If this does not work this may not be turned on. Please see
|
||||
your X Server documentation on how to configure this.
|
||||
<p>
|
||||
This may vary from system to system. OS and XServer may also vary the method
|
||||
in which you do this, if it is possible. Not having a middle mouse button in
|
||||
Enlightenment, or for that matter X is not a good thing as it is almost
|
||||
assumed to be there, and is used by many applications, as well as
|
||||
Enlightenment.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=tut6 background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<img src=E_mousewheel.png x=370 y=30>
|
||||
<img src=E_mouse.png x=410 y=330>
|
||||
<p>
|
||||
If you have a WheelMouse and X is configured to understand this Enlightenment
|
||||
comes equipped with wheel support out of the box.
|
||||
<p>
|
||||
Rolling your wheel up on the desktop background will take you back a
|
||||
_desktop(desktops) or by rolling your wheel downward, you will advance
|
||||
forward a desktop.
|
||||
<p>
|
||||
If this doesn't work, then it may be you haven't configured your XServer to
|
||||
understand a mouse with a wheel. If you use XFree86 you may need to edit your
|
||||
XF86Config to have a "Pointer" Section like:
|
||||
<font face=aircut3/12 color=#ccaacc>
|
||||
<p>
|
||||
Section "Pointer"<br>
|
||||
Protocol "MousemanPlusPS/2"<br>
|
||||
Device "/dev/mouse"<br>
|
||||
ZAxisMapping 4 5<br>
|
||||
Buttons 5<br>
|
||||
EndSection
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p>
|
||||
You may need to modify this for your mouse.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=tut7 background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p>
|
||||
When you start an application, unless it has special properties, it will come
|
||||
up on your screen with a border surrounding it that contains a titlebar and
|
||||
several control buttons.
|
||||
<p>
|
||||
This border is the primary interface to controlling an application window.
|
||||
The Default setup (shown on the next page) gives adequate control but still
|
||||
retains simplicity.
|
||||
<p>
|
||||
If you click left mouse button on the titlbar and keep the mouse button down
|
||||
the window will follow your mouse wherever it moves. Respectively if you click
|
||||
your left mouse button and drag on any of the resize handles, the window will
|
||||
be resized in that direction. Clicking right mouse button on the resize
|
||||
handles will raise thw windows to the top.
|
||||
<p>
|
||||
Clicking right mouse button on the titlebar or any button on the window
|
||||
operations menu button on the top-left will display a menu that has window
|
||||
manipulation options in it.
|
||||
<p>
|
||||
Double-Clicking (clicking the mouse twice in sucession really fast) will
|
||||
make the Window shade or unshade (depending if it was unshaded ro shaded to
|
||||
start with).
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=tut8 background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<img src=E_window_diagram.png x=16 y=48>
|
||||
<p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=tut9 background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p>
|
||||
Clicking left mouse button on the iconify button will iconify the window
|
||||
and send it off to the Iconbox. Hitting the Maximize button will maximize the
|
||||
size of the application fill your screen. Hitting it again will Unmaximize,
|
||||
bringing the window back to its normal size.
|
||||
<p>
|
||||
Clicking with the left mouse button on the close button will close the window.
|
||||
If the application that owns that window does not respond ot a nice request to
|
||||
exit, then pressing right mouse button on the close button to forcibly
|
||||
terminate that window. This should not be used unnless the application is
|
||||
visibly "hung".
|
||||
<p>
|
||||
In addition to these methods of manipulation a window there are additional
|
||||
ways of performing these.
|
||||
<p>
|
||||
If you hold down the ALT key and hold down left mouse button anywhere in the
|
||||
window (on the border OR in the application part) whilst dragging, you will
|
||||
move this window around. Doing the same but with the middle mouse button will
|
||||
resize the window in that direction. Clicking button 3 anywhere in the window
|
||||
whilst holding down the ALT key will brung up the window operations menu.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=tut10 background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<img src=E_keyboard.png x=312 y=0>
|
||||
<p>
|
||||
For people who want to use their keyboard to manipulate their personal desktop
|
||||
there are a number of key combinations bound by default. They are as follows:
|
||||
<font face=aircut3/12 color=#112222>
|
||||
<p>
|
||||
CTRL+ALT+Home - Reshuffle windows on screen to be Clean
|
||||
<br>
|
||||
CTRL+ALT+Del - Exit Enlightenment and Log Out
|
||||
<br>
|
||||
CTRL+ALT+Home - Restart Enlightenment
|
||||
<br>
|
||||
CTRL+ALT+Up-Arrow - Raise window to top
|
||||
<br>
|
||||
CTRL+ALT+Down-Arrow - Lower window to the bottom
|
||||
<br>
|
||||
CTRL+ALT+Left-Arrow - Go to the previous desktop
|
||||
<br>
|
||||
CTRL+ALT+Right-Arrow - Go to the next desktop
|
||||
<br>
|
||||
CTRL+ALT+X - Close the currently focused window
|
||||
<br>
|
||||
CTRL+ALT+K - Kill the currently focused window nastily
|
||||
<br>
|
||||
CTRL+ALT+R - Shade/Unshade the currently focused window
|
||||
<br>
|
||||
CTRL+ALT+I - Iconify the currently focused window
|
||||
<br>
|
||||
CTRL+ALT+Tab - Switch focus to the next window
|
||||
<br>
|
||||
CTRL+ALT+R - Shade/Unshade the currently focused window
|
||||
<br>
|
||||
CTRL+ALT+S - Stick/Unstick the currently focused window
|
||||
<br>
|
||||
CTRL+ALT+Enter - Zoom/Unzoom the currently focused window
|
||||
<br>
|
||||
CTRL+ALT+(F1 - F12) - Go directly to desktops 0 - 11
|
||||
<br>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
(more on next page ...)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=tut11 background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#112222>
|
||||
<p>
|
||||
SHIFT+ALT+Left-Arrow - Move to the virtual desktop on the left if there is one
|
||||
<br>
|
||||
SHIFT+ALT+Right-Arrow - Move to the virtual desktop on the right if there is
|
||||
one
|
||||
<br>
|
||||
SHIFT+ALT+Up-Arrow - Move to the virtual desktop above if there is one
|
||||
<br>
|
||||
SHIFT+ALT+Down-Arrow - Move to the virtual desktop below if there is one
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p>
|
||||
Note: Zooming in and out of windows will only work if you have an XFree86
|
||||
server or one that impliments the Xf86VidMode extension. You also need
|
||||
to define lots of screen modes for your display, so ensure your "Display"
|
||||
subsection of your XF86Config looks like:
|
||||
<font face=aircut3/12 color=#ccaacc>
|
||||
<p>
|
||||
SubSection "Display"<br>
|
||||
Depth 16<br>
|
||||
Modes "1600x1200" "1280x1024" "1152x864" "1024x768" "800x600" "640x480" "512x384" "400x300" "320x240"<br>
|
||||
EndSubSection
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p>
|
||||
Have a "Display" subsection per depth (this example is for 16 bit) and all
|
||||
the resolutions defined as above.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<page columns=1 padding=16 name=desktops background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=rothwell/25 color=#ffffff>
|
||||
<p>
|
||||
Multiple & Virtual Desktops
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
|
||||
<page columns=1 padding=16 name=dragbar background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=rothwell/25 color=#ffffff>
|
||||
<p>
|
||||
The Dragbar
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
|
||||
<page columns=1 padding=16 name=pager background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=rothwell/25 color=#ffffff>
|
||||
<p>
|
||||
The Pager
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
|
||||
<page columns=1 padding=16 name=iconbox background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=rothwell/25 color=#ffffff>
|
||||
<p>
|
||||
The Iconbox
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
|
||||
<page columns=1 padding=16 name=settings background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=rothwell/25 color=#ffffff>
|
||||
<p>
|
||||
Settings
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
if FSSTD
|
||||
edocdatadir = $(pkgdatadir)/E-docs
|
||||
else
|
||||
edocdatadir = $(prefix)/enlightenment/E-docs
|
||||
endif
|
||||
|
||||
edocdata_DATA = @edocdata@
|
||||
edocdata_PROGRAMS = @edocexec@
|
||||
|
||||
EXTRA_DIST = $(edocdata_DATA)
|
|
@ -0,0 +1,66 @@
|
|||
#!/bin/sh
|
||||
cat << __EOF__
|
||||
<page columns=1 padding=16 name=front background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<img src=E_logo.png x=32 y=64>
|
||||
<font face=rothwell/25 color=#ffffff>
|
||||
<p align=50%>
|
||||
Hints and tips
|
||||
<p align=50%>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p>
|
||||
__EOF__
|
||||
# checking OS & arch info
|
||||
UNAME=`uname -a`
|
||||
OS=`echo "$UNAME" | awk '{print $1;}'`
|
||||
OSVER=`echo "$UNAME" | awk '{print $3;}'`
|
||||
ARCH=`echo "$UNAME" | awk '{print $12;}'`
|
||||
|
||||
# checking memory stats
|
||||
MEM=`free`
|
||||
TOTAL=`echo "$MEM" | grep Mem: | awk '{print $2;}'`
|
||||
USED=`echo "$MEM" | grep buffers/cache | awk '{print $3;}'`
|
||||
SWAPPED=`echo "$MEM" | grep Swap: | awk '{print $3;}'`
|
||||
|
||||
# checking X Server
|
||||
XDPYINFO=`xdpyinfo`
|
||||
VENDOR=`echo "$XDPYINFO" | grep "vendor string:" | awk -F: '{print $2;}'`
|
||||
VERSION=`echo "$XDPYINFO" | grep "vendor release number:" | awk -F: '{print $2;}'`
|
||||
DEPTH=`echo "$XDPYINFO" | grep "depths (" | awk -F: '{print $2;}' | awk '{print $1;}'`
|
||||
DEPTHS=`echo "$XDPYINFO" | grep "depths (" | awk "-F(" '{print $2;}' | awk "-F)" '{print $1;}'`
|
||||
|
||||
echo "Your Operating System is:<br>"
|
||||
echo "<font face=aircut3/12 color=#ccaacc>"
|
||||
echo $OS"<br>"
|
||||
echo "<font face=aircut3/12 color=#ffffff>"
|
||||
echo "Your processor type is:<br><font face=aircut3/12 color=#ccaacc>"
|
||||
echo $ARCH"<br><font face=aircut3/12 color=#ffffff>"
|
||||
echo "Your system memory use is:<br><font face=aircut3/12 color=#ccaacc>"
|
||||
echo $USED" Kb /"$TOTAL" Kb<br>"
|
||||
echo $SWAPPED" Kb swapped out to disk<br><font face=aircut3/12 color=#ffffff>"
|
||||
|
||||
echo "Your X Server is:<br><font face=aircut3/12 color=#ccaacc>"
|
||||
echo $VENDOR"<br>"
|
||||
echo "<font face=aircut3/12 color=#ffffff>"
|
||||
echo "Version:<br><font face=aircut3/12 color=#ccaacc>"
|
||||
echo $VERSION"<br><font face=aircut3/12 color=#ffffff>"
|
||||
echo "<font face=aircut3/12 color=#ffffff>"
|
||||
echo "Running a color depth of:<br><font face=aircut3/12 color=#ccaacc>"
|
||||
echo $DEPTH" bits per pixel<br><font face=aircut3/12 color=#ffffff>"
|
||||
echo "Number of depths:<br><font face=aircut3/12 color=#ccaacc>"
|
||||
echo $DEPTHS"<br><font face=aircut3/12 color=#ffffff>"
|
||||
|
||||
cat << __EOF__
|
||||
<p>
|
||||
Hit Next for more...
|
||||
<page columns=1 padding=16 name=2 background=Edoc_bg.png linkcolor=#88dddd>
|
||||
<font face=aircut3/12 color=#ffffff>
|
||||
<p align=50%>
|
||||
<p>
|
||||
__EOF__
|
||||
if [ "$DEPTHS" -gt 1 ]; then
|
||||
echo "It seems you have more than one depth available on your display."
|
||||
echo "Enlightenment will run but several features may be disabled or not work"
|
||||
echo "correctly due to this."
|
||||
echo "<p>"
|
||||
echo "Please re-configure your X Server to only have one depth (eg 16, 24, 32)"
|
||||
fi
|
|
@ -0,0 +1,50 @@
|
|||
SUBDIRS=E-docs
|
||||
|
||||
EXTRA_DIST = ChangeLog README
|
||||
|
||||
if FSSTD
|
||||
bindir = @bindir@
|
||||
ENLIGHTENMENT_BIN=$(bindir)
|
||||
ENLIGHTENMENT_ROOT=$(pkgdatadir)
|
||||
else
|
||||
ENLIGHTENMENT_BIN=$(prefix)/enlightenment/bin
|
||||
ENLIGHTENMENT_ROOT=$(prefix)/enlightenment
|
||||
bindir=$(ENLIGHTENMENT_BIN)
|
||||
endif
|
||||
|
||||
bin_PROGRAMS = dox
|
||||
|
||||
dox_SOURCES = \
|
||||
format.c \
|
||||
file.c \
|
||||
ttfont.c \
|
||||
text.c \
|
||||
dox.c \
|
||||
title.xpm \
|
||||
prev1.xpm \
|
||||
prev2.xpm \
|
||||
next1.xpm \
|
||||
next2.xpm \
|
||||
exit1.xpm \
|
||||
exit2.xpm \
|
||||
dox.h
|
||||
|
||||
LDADD = $(TTF_LIBS) $(FNLIB_LIBS) $(IMLIB_LIBS) -lm
|
||||
|
||||
INCLUDES=-I$(top_srcdir) $(IMLIB_CFLAGS) -I$(includedir) -I..
|
||||
|
||||
DEFS=-DENLIGHTENMENT_ROOT=\"@ENLIGHTENMENT_ROOT@\"
|
||||
|
||||
#install-exec-local:
|
||||
# if [ x@USE_FSSTD@ = "xno" ]; then \
|
||||
# ../mkinstalldirs $(exec_prefix)/bin; \
|
||||
# for i in $(bin_PROGRAMS); do \
|
||||
# rm -f $(exec_prefix)/bin/$$i; \
|
||||
# $(LN_S) $(bindir)/$$i $(exec_prefix)/bin/$$i; \
|
||||
# done; \
|
||||
# fi
|
||||
|
||||
uninstall-local:
|
||||
for i in $(bin_PROGRAMS); do \
|
||||
rm -f $(exec_prefix)/bin/$$i; \
|
||||
done
|
|
@ -0,0 +1,4 @@
|
|||
This is DOX for Enlightenment - a very very very simple document viewer for
|
||||
Help docs for Enlightenment. This is part of the Enlightenment distribution.
|
||||
It is Copyright (C) 1998-1999 by The Rasterman (Carsten Haitzler). It is under
|
||||
the license described in e/LICENSE
|
|
@ -0,0 +1,515 @@
|
|||
/* DOX for Enlightenment - by The Rasterman (C) 1998 */
|
||||
|
||||
#include "econfig.h"
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/Xosdefs.h>
|
||||
#include <X11/Xproto.h>
|
||||
#include <X11/keysym.h>
|
||||
#include <X11/extensions/shape.h>
|
||||
#include <X11/extensions/XTest.h>
|
||||
#include <X11/extensions/XShm.h>
|
||||
#include <Imlib.h>
|
||||
#include <Fnlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "econfig.h"
|
||||
|
||||
#include "dox.h"
|
||||
|
||||
#ifdef __alpha__ /* gets rid of some misalignment in GCC */
|
||||
#pragma 2
|
||||
#endif
|
||||
|
||||
/* Motif window hints */
|
||||
#define MWM_HINTS_FUNCTIONS (1L << 0)
|
||||
#define MWM_HINTS_DECORATIONS (1L << 1)
|
||||
|
||||
/* bit definitions for MwmHints.functions */
|
||||
#define MWM_FUNC_ALL (1L << 0)
|
||||
#define MWM_FUNC_RESIZE (1L << 1)
|
||||
#define MWM_FUNC_MOVE (1L << 2)
|
||||
#define MWM_FUNC_MINIMIZE (1L << 3)
|
||||
#define MWM_FUNC_MAXIMIZE (1L << 4)
|
||||
#define MWM_FUNC_CLOSE (1L << 5)
|
||||
|
||||
/* bit definitions for MwmHints.decorations */
|
||||
#define MWM_DECOR_ALL (1L << 0)
|
||||
#define MWM_DECOR_BORDER (1L << 1)
|
||||
#define MWM_DECOR_RESIZEH (1L << 2)
|
||||
#define MWM_DECOR_TITLE (1L << 3)
|
||||
#define MWM_DECOR_MENU (1L << 4)
|
||||
#define MWM_DECOR_MINIMIZE (1L << 5)
|
||||
#define MWM_DECOR_MAXIMIZE (1L << 6)
|
||||
|
||||
#define PROP_MWM_HINTS_ELEMENTS 4
|
||||
|
||||
#define STARTPOS 4 /* to bypass next/prev/exit buttons for key binding positions */
|
||||
|
||||
typedef struct _mwmhints
|
||||
{
|
||||
CARD32 flags;
|
||||
CARD32 functions;
|
||||
CARD32 decorations;
|
||||
INT32 inputMode;
|
||||
}
|
||||
MWMHints;
|
||||
|
||||
#include "title.xpm"
|
||||
#include "prev1.xpm"
|
||||
#include "prev2.xpm"
|
||||
#include "next1.xpm"
|
||||
#include "next2.xpm"
|
||||
#include "exit1.xpm"
|
||||
#include "exit2.xpm"
|
||||
|
||||
Display *disp;
|
||||
ImlibData *id;
|
||||
FnlibData *fd;
|
||||
Window win_main, win_title, win_exit, win_next, win_prev, win_text,
|
||||
win_cover;
|
||||
int w, h, t;
|
||||
ImlibImage *im_text;
|
||||
ImlibImage *im_title;
|
||||
ImlibImage *im_prev1, *im_prev2;
|
||||
ImlibImage *im_next1, *im_next2;
|
||||
ImlibImage *im_exit1, *im_exit2;
|
||||
char *docdir;
|
||||
|
||||
Window CreateWindow(Window parent, int x, int y, int ww, int hh);
|
||||
int ReadHeader(FILE * f);
|
||||
int ReadPages(FILE * f);
|
||||
|
||||
Window
|
||||
CreateWindow(Window parent, int x, int y, int ww, int hh)
|
||||
{
|
||||
Window win;
|
||||
XSetWindowAttributes attr;
|
||||
MWMHints mwm;
|
||||
|
||||
/* Atom a; */
|
||||
XSizeHints hnt;
|
||||
|
||||
attr.backing_store = NotUseful;
|
||||
attr.override_redirect = False;
|
||||
attr.colormap = Imlib_get_colormap(id);
|
||||
attr.border_pixel = 0;
|
||||
attr.background_pixel = 0;
|
||||
attr.save_under = False;
|
||||
mwm.flags = MWM_HINTS_DECORATIONS;
|
||||
mwm.functions = 0;
|
||||
mwm.decorations = 0;
|
||||
mwm.inputMode = 0;
|
||||
/* a = XInternAtom(disp, "_MOTIF_WM_HINTS", False); */
|
||||
win = XCreateWindow(disp, parent, x, y, ww, hh, 0, id->x.depth,
|
||||
InputOutput, Imlib_get_visual(id),
|
||||
CWOverrideRedirect | CWSaveUnder | CWBackingStore |
|
||||
CWColormap | CWBackPixel | CWBorderPixel, &attr);
|
||||
XSetWindowBackground(disp, win, 0);
|
||||
/* XChangeProperty(disp, win, a, a, 32, PropModeReplace,
|
||||
* (unsigned char *)&mwm, sizeof(MWMHints) / 4); */
|
||||
XStoreName(disp, win, "DOX: Enlightenment Document Viewer");
|
||||
hnt.flags = USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize;
|
||||
hnt.x = x;
|
||||
hnt.y = y;
|
||||
hnt.width = ww;
|
||||
hnt.height = hh;
|
||||
hnt.min_width = ww;
|
||||
hnt.max_width = ww;
|
||||
hnt.min_height = hh;
|
||||
hnt.max_height = hh;
|
||||
XSetWMNormalHints(disp, win, &hnt);
|
||||
return win;
|
||||
}
|
||||
|
||||
#define FREE_LINKS \
|
||||
ll = l; \
|
||||
while (ll) \
|
||||
{ \
|
||||
l = ll; \
|
||||
ll = ll->next; \
|
||||
free(l->name); \
|
||||
free(l); \
|
||||
}
|
||||
|
||||
#define UPDATE_NOW \
|
||||
{ \
|
||||
XSetWindowBackgroundPixmap(disp, win_text, draw); \
|
||||
XClearWindow(disp, win_text); \
|
||||
}
|
||||
|
||||
#define UPDATE \
|
||||
{ \
|
||||
int up_i, up_j; \
|
||||
int up_lut[16] = { 0, 8, 4, 12, 2, 6, 10, 14, \
|
||||
3, 11, 1, 9, 7, 13, 5, 15}; \
|
||||
XSetWindowBackgroundPixmap(disp, win_text, draw); \
|
||||
for (up_j = 0; up_j < 16; up_j++) \
|
||||
{ \
|
||||
for (up_i = 0; up_i < h; up_i += 16) \
|
||||
{ \
|
||||
XClearArea(disp, win_text, 0, up_i + up_lut[up_j], w, 1, False); \
|
||||
} \
|
||||
XSync(disp, False); \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int pagenum;
|
||||
int x, y;
|
||||
int wx, wy;
|
||||
FILE *f;
|
||||
char *s;
|
||||
Pixmap draw = 0;
|
||||
Link *l = NULL, *ll = NULL;
|
||||
ImlibBorder ibd;
|
||||
ImlibInitParams params;
|
||||
int *page_hist = NULL;
|
||||
int page_hist_len = 1;
|
||||
int page_hist_pos = 0;
|
||||
|
||||
w = 512;
|
||||
h = 400;
|
||||
x = 0;
|
||||
y = 0;
|
||||
pagenum = 0;
|
||||
|
||||
disp = XOpenDisplay(NULL);
|
||||
params.flags = PARAMS_IMAGECACHESIZE | PARAMS_PIXMAPCACHESIZE;
|
||||
params.imagecachesize = (w * h * 3 * 2);
|
||||
params.pixmapcachesize = (w * h * 3 * 2 * 8);
|
||||
id = Imlib_init_with_params(disp, ¶ms);
|
||||
Imlib_set_render_type(id, RT_DITHER_TRUECOL);
|
||||
fd = Fnlib_init(id);
|
||||
|
||||
im_title = Imlib_create_image_from_xpm_data(id, title_xpm);
|
||||
ibd.left = 50;
|
||||
ibd.right = 2;
|
||||
ibd.top = 2;
|
||||
ibd.bottom = 2;
|
||||
Imlib_set_image_border(id, im_title, &ibd);
|
||||
im_prev1 = Imlib_create_image_from_xpm_data(id, prev1_xpm);
|
||||
im_prev2 = Imlib_create_image_from_xpm_data(id, prev2_xpm);
|
||||
im_next1 = Imlib_create_image_from_xpm_data(id, next1_xpm);
|
||||
im_next2 = Imlib_create_image_from_xpm_data(id, next2_xpm);
|
||||
im_exit1 = Imlib_create_image_from_xpm_data(id, exit1_xpm);
|
||||
im_exit2 = Imlib_create_image_from_xpm_data(id, exit2_xpm);
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
printf("usage:\n%s [-page num] Edoc_dir\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
if (!strcmp(argv[1], "-page"))
|
||||
{
|
||||
pagenum = atoi(argv[2]);
|
||||
docdir = strdup(argv[3]);
|
||||
}
|
||||
else
|
||||
docdir = strdup(argv[1]);
|
||||
s = malloc(strlen(docdir) + 1 + 5);
|
||||
strcpy(s, docdir);
|
||||
strcat(s, "/MAIN");
|
||||
f = fopen(s, "r");
|
||||
if (!f)
|
||||
{
|
||||
printf("Edoc_dir does not contain a MAIN file\n");
|
||||
exit(1);
|
||||
}
|
||||
t = 16;
|
||||
GetObjects(f);
|
||||
fclose(f);
|
||||
Fnlib_add_dir(fd, docdir);
|
||||
wx = (DisplayWidth(disp, DefaultScreen(disp)) - w) / 2;
|
||||
wy = (DisplayHeight(disp, DefaultScreen(disp)) - (h + t)) / 2;
|
||||
win_main = CreateWindow(id->x.root, wx, wy, w, h + t);
|
||||
win_title = CreateWindow(win_main, 0, 0, (w - 64 - 64 - t), t);
|
||||
win_prev = CreateWindow(win_main, (w - 64 - 64 - t), 0, 64, t);
|
||||
XSelectInput(disp, win_prev, ButtonPressMask | ButtonReleaseMask);
|
||||
win_next = CreateWindow(win_main, (w - 64 - 64 - t) + 64, 0, 64, t);
|
||||
XSelectInput(disp, win_next, ButtonPressMask | ButtonReleaseMask);
|
||||
win_exit = CreateWindow(win_main, (w - 64 - 64 - t) + 64 + 64, 0, t, t);
|
||||
XSelectInput(disp, win_exit, ButtonPressMask | ButtonReleaseMask);
|
||||
win_text = CreateWindow(win_main, 0, t, w, h);
|
||||
XSelectInput(disp, win_text, ButtonPressMask | ButtonReleaseMask |
|
||||
KeyPressMask | KeyReleaseMask | PointerMotionMask);
|
||||
draw = XCreatePixmap(disp, win_text, w, h, id->x.depth);
|
||||
XSetWindowBackgroundPixmap(disp, win_text, draw);
|
||||
Imlib_apply_image(id, im_title, win_title);
|
||||
Imlib_apply_image(id, im_exit1, win_exit);
|
||||
Imlib_apply_image(id, im_next1, win_next);
|
||||
Imlib_apply_image(id, im_prev1, win_prev);
|
||||
|
||||
l = RenderPage(draw, pagenum, w, h);
|
||||
|
||||
XMapWindow(disp, win_text);
|
||||
XMapWindow(disp, win_exit);
|
||||
XMapWindow(disp, win_next);
|
||||
XMapWindow(disp, win_prev);
|
||||
XMapWindow(disp, win_title);
|
||||
XMapWindow(disp, win_main);
|
||||
XSync(disp, False);
|
||||
page_hist = malloc(sizeof(int));
|
||||
page_hist[0] = 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
KeySym key;
|
||||
XEvent ev;
|
||||
|
||||
XNextEvent(disp, &ev);
|
||||
switch (ev.type)
|
||||
{
|
||||
case KeyPress:
|
||||
key = XLookupKeysym(&ev.xkey, 0);
|
||||
switch (key)
|
||||
{
|
||||
case XK_Escape:
|
||||
exit(0);
|
||||
break;
|
||||
case XK_Down:
|
||||
case XK_Right:
|
||||
break;
|
||||
case XK_Up:
|
||||
case XK_Left:
|
||||
break;
|
||||
case XK_Return:
|
||||
break;
|
||||
case XK_Home:
|
||||
FREE_LINKS;
|
||||
pagenum = 0;
|
||||
pagenum = FixPage(pagenum);
|
||||
l = RenderPage(draw, pagenum, w, h);
|
||||
UPDATE;
|
||||
break;
|
||||
case XK_End:
|
||||
FREE_LINKS;
|
||||
pagenum = 99999;
|
||||
pagenum = FixPage(pagenum);
|
||||
l = RenderPage(draw, pagenum, w, h);
|
||||
UPDATE;
|
||||
break;
|
||||
case XK_Prior:
|
||||
FREE_LINKS;
|
||||
pagenum--;
|
||||
pagenum = FixPage(pagenum);
|
||||
l = RenderPage(draw, pagenum, w, h);
|
||||
UPDATE;
|
||||
break;
|
||||
case XK_Next:
|
||||
FREE_LINKS;
|
||||
pagenum++;
|
||||
pagenum = FixPage(pagenum);
|
||||
l = RenderPage(draw, pagenum, w, h);
|
||||
UPDATE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ButtonPress:
|
||||
if (ev.xbutton.window == win_prev)
|
||||
Imlib_apply_image(id, im_prev2, win_prev);
|
||||
else if (ev.xbutton.window == win_next)
|
||||
Imlib_apply_image(id, im_next2, win_next);
|
||||
else if (ev.xbutton.window == win_exit)
|
||||
Imlib_apply_image(id, im_exit2, win_exit);
|
||||
else
|
||||
{
|
||||
int x, y;
|
||||
|
||||
x = ev.xbutton.x;
|
||||
y = ev.xbutton.y;
|
||||
ll = l;
|
||||
while (ll)
|
||||
{
|
||||
if ((x >= ll->x) && (y >= ll->y) &&
|
||||
(x < (ll->x + ll->w)) &&
|
||||
(y < (ll->y + ll->h)))
|
||||
{
|
||||
int pg;
|
||||
|
||||
if (!strncmp("EXEC.", ll->name, 5))
|
||||
{
|
||||
if (!fork())
|
||||
{
|
||||
char *exe;
|
||||
|
||||
exe = &(ll->name[5]);
|
||||
execl("/bin/sh", "/bin/sh", "-c", exe, NULL);
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
else if (!strncmp("INPUT.", ll->name, 6))
|
||||
{
|
||||
FILE *p;
|
||||
char *exe, tmp[1024];
|
||||
|
||||
exe = &(ll->name[6]);
|
||||
if (exe[0] != '/')
|
||||
{
|
||||
sprintf(tmp, "%s/%s", docdir, exe);
|
||||
exe = tmp;
|
||||
}
|
||||
p = popen(exe, "r");
|
||||
if (p)
|
||||
{
|
||||
int dirlen = 0;
|
||||
char *sp;
|
||||
|
||||
sp = exe;
|
||||
while ((*sp) && (*sp != ' '))
|
||||
sp++;
|
||||
while ((*sp != '/') && (sp != exe))
|
||||
sp--;
|
||||
dirlen = sp - exe;
|
||||
if (dirlen > 1)
|
||||
{
|
||||
free(docdir);
|
||||
docdir = malloc(dirlen + 1);
|
||||
memcpy(docdir, exe, dirlen);
|
||||
docdir[dirlen] = 0;
|
||||
}
|
||||
GetObjects(p);
|
||||
pclose(p);
|
||||
if (page_hist)
|
||||
free(page_hist);
|
||||
page_hist = malloc(sizeof(int));
|
||||
page_hist[0] = 0;
|
||||
page_hist_len = 1;
|
||||
pagenum = 0;
|
||||
page_hist_pos = 0;
|
||||
FREE_LINKS;
|
||||
l = RenderPage(draw, pagenum, w, h);
|
||||
UPDATE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pg = GetPage(ll->name);
|
||||
if (pg >= 0)
|
||||
{
|
||||
FREE_LINKS;
|
||||
pagenum = pg;
|
||||
if (page_hist_pos >= page_hist_len)
|
||||
{
|
||||
page_hist_len++;
|
||||
page_hist =
|
||||
realloc(page_hist,
|
||||
sizeof(int) * page_hist_len);
|
||||
}
|
||||
page_hist_pos++;
|
||||
page_hist[page_hist_pos] = pagenum;
|
||||
l = RenderPage(draw, pagenum, w, h);
|
||||
UPDATE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
ll = ll->next;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ButtonRelease:
|
||||
if (ev.xbutton.window == win_prev)
|
||||
{
|
||||
Imlib_apply_image(id, im_prev1, win_prev);
|
||||
FREE_LINKS;
|
||||
page_hist_pos--;
|
||||
if (page_hist_pos < 0)
|
||||
page_hist_pos = 0;
|
||||
pagenum = page_hist[page_hist_pos];
|
||||
l = RenderPage(draw, pagenum, w, h);
|
||||
UPDATE;
|
||||
}
|
||||
else if (ev.xbutton.window == win_next)
|
||||
{
|
||||
int prev_pagenum;
|
||||
Imlib_apply_image(id, im_next1, win_next);
|
||||
FREE_LINKS;
|
||||
prev_pagenum = pagenum;
|
||||
pagenum++;
|
||||
pagenum = FixPage(pagenum);
|
||||
if (pagenum != prev_pagenum)
|
||||
{
|
||||
if (page_hist_pos >= page_hist_len)
|
||||
{
|
||||
page_hist_len++;
|
||||
page_hist = realloc(page_hist,
|
||||
sizeof(int) * page_hist_len);
|
||||
page_hist[page_hist_len - 1] = pagenum;
|
||||
page_hist_pos = page_hist_len - 1;
|
||||
}
|
||||
else
|
||||
page_hist_pos++;
|
||||
l = RenderPage(draw, pagenum, w, h);
|
||||
UPDATE;
|
||||
}
|
||||
}
|
||||
else if (ev.xbutton.window == win_exit)
|
||||
{
|
||||
Imlib_apply_image(id, im_exit1, win_exit);
|
||||
exit(0);
|
||||
}
|
||||
break;
|
||||
case EnterNotify:
|
||||
break;
|
||||
case LeaveNotify:
|
||||
break;
|
||||
case MotionNotify:
|
||||
while (XCheckTypedEvent(disp, ev.type, &ev));
|
||||
{
|
||||
int x, y;
|
||||
static Link *pl = NULL;
|
||||
char found = 0;
|
||||
|
||||
x = ev.xmotion.x;
|
||||
y = ev.xmotion.y;
|
||||
ll = l;
|
||||
while (ll)
|
||||
{
|
||||
if ((x >= ll->x) && (y >= ll->y) &&
|
||||
(x < (ll->x + ll->w)) &&
|
||||
(y < (ll->y + ll->h)))
|
||||
{
|
||||
GC gc;
|
||||
XGCValues gcv;
|
||||
int r, g, b;
|
||||
|
||||
if (pl != ll)
|
||||
{
|
||||
if (pl)
|
||||
{
|
||||
UPDATE_NOW;
|
||||
}
|
||||
GetLinkColors(pagenum, &r, &g, &b);
|
||||
gc = XCreateGC(disp, win_text, 0, &gcv);
|
||||
XSetForeground(disp, gc,
|
||||
Imlib_best_color_match(id, &r, &g, &b));
|
||||
XDrawRectangle(disp, win_text, gc, ll->x, ll->y,
|
||||
ll->w, ll->h);
|
||||
XFreeGC(disp, gc);
|
||||
pl = ll;
|
||||
}
|
||||
found = 1;
|
||||
ll = NULL;
|
||||
}
|
||||
if (ll)
|
||||
ll = ll->next;
|
||||
}
|
||||
if (!found)
|
||||
{
|
||||
UPDATE_NOW;
|
||||
pl = NULL;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,225 @@
|
|||
/*****************************************************************************/
|
||||
/* Enlightenment - The Window Manager that dares to do what others don't */
|
||||
/*****************************************************************************/
|
||||
/* Copyright (C) 1997 - 1999 Carsten Haitzler (The Rasterman) */
|
||||
/* */
|
||||
/* This program and utilites is free software; you can redistribute it */
|
||||
/* and/or modify it under the terms of the GNU General Public License as */
|
||||
/* published by the Free Software Foundation; either version 2 of the */
|
||||
/* License, or (at your option) any later version. */
|
||||
/* */
|
||||
/* This software is distributed in the hope that it will be useful, */
|
||||
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */
|
||||
/* General Public License for more details. */
|
||||
/* */
|
||||
/* You should have received a copy of the GNU Library General Public */
|
||||
/* License along with this software; if not, write to the */
|
||||
/* Free Software Foundation, Inc., 59 Temple Place - Suite 330, */
|
||||
/* Boston, MA 02111-1307, USA. */
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "econfig.h"
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/Xproto.h>
|
||||
#include <X11/Xlocale.h>
|
||||
#include <X11/cursorfont.h>
|
||||
#include <X11/extensions/shape.h>
|
||||
#include <X11/extensions/XShm.h>
|
||||
#include <Imlib.h>
|
||||
#include <Fnlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <dirent.h>
|
||||
#include <signal.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <pwd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/resource.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <freetype.h>
|
||||
|
||||
#define FILEPATH_LEN_MAX 4096
|
||||
|
||||
#define DEFAULT_LINKCOLOR_R 30
|
||||
#define DEFAULT_LINKCOLOR_G 50
|
||||
#define DEFAULT_LINKCOLOR_B 160
|
||||
|
||||
#define TT_VALID( handle ) ( ( handle ).z != NULL )
|
||||
#ifndef MAX
|
||||
#define MAX(a,b) ((a)>(b)?(a):(b))
|
||||
#endif
|
||||
|
||||
typedef struct _efont
|
||||
{
|
||||
TT_Engine engine;
|
||||
TT_Face face;
|
||||
TT_Instance instance;
|
||||
TT_Face_Properties properties;
|
||||
int num_glyph;
|
||||
TT_Glyph *glyphs;
|
||||
TT_Raster_Map **glyphs_cached;
|
||||
int max_descent;
|
||||
int max_ascent;
|
||||
}
|
||||
Efont;
|
||||
|
||||
typedef struct _textstate
|
||||
{
|
||||
char *fontname;
|
||||
FnlibStyle style;
|
||||
FnlibFont *font;
|
||||
ImlibColor fg_col;
|
||||
ImlibColor bg_col;
|
||||
int effect;
|
||||
Efont *efont;
|
||||
XFontStruct *xfont;
|
||||
XFontSet xfontset;
|
||||
int xfontset_ascent;
|
||||
int height;
|
||||
}
|
||||
TextState;
|
||||
|
||||
typedef enum _type
|
||||
{
|
||||
IMG,
|
||||
BR,
|
||||
FONT,
|
||||
P,
|
||||
TEXT,
|
||||
PAGE
|
||||
}
|
||||
Type;
|
||||
|
||||
typedef struct _img
|
||||
{
|
||||
char *src;
|
||||
char *src2;
|
||||
char *src3;
|
||||
int x, y;
|
||||
char *link;
|
||||
int w, h;
|
||||
}
|
||||
Img_;
|
||||
|
||||
typedef struct _font
|
||||
{
|
||||
char *face;
|
||||
int r, g, b;
|
||||
}
|
||||
Font_;
|
||||
|
||||
typedef struct _p
|
||||
{
|
||||
float align;
|
||||
}
|
||||
P_;
|
||||
|
||||
typedef struct _object
|
||||
{
|
||||
Type type;
|
||||
void *object;
|
||||
}
|
||||
Object;
|
||||
|
||||
typedef struct _page
|
||||
{
|
||||
char *name;
|
||||
int count;
|
||||
Object *obj;
|
||||
int columns;
|
||||
int padding;
|
||||
int linkr, linkg, linkb;
|
||||
char *background;
|
||||
}
|
||||
Page;
|
||||
|
||||
typedef struct _link
|
||||
{
|
||||
char *name;
|
||||
int x, y, w, h;
|
||||
struct _link *next;
|
||||
}
|
||||
Link;
|
||||
|
||||
void Efont_extents(Efont * f, char *text,
|
||||
int *font_ascent_return,
|
||||
int *font_descent_return, int *width_return,
|
||||
int *max_ascent_return,
|
||||
int *max_descent_return,
|
||||
int *lbearing_return, int *rbearing_return);
|
||||
Efont *Efont_load(char *file, int size);
|
||||
void Efont_free(Efont * f);
|
||||
void EFont_draw_string(Display * disp, Drawable win, GC gc,
|
||||
int x, int y, char *text,
|
||||
Efont * font, Visual * vis, Colormap cm);
|
||||
|
||||
char **TextGetLines(char *text, int *count);
|
||||
void TextStateLoadFont(TextState * ts);
|
||||
void TextSize(TextState * ts, char *text,
|
||||
int *width, int *height, int fsize);
|
||||
void TextDraw(TextState * ts, Window win, char *text,
|
||||
int x, int y, int w, int h, int fsize,
|
||||
int justification);
|
||||
|
||||
char *FileExtension(char *file);
|
||||
void md(char *s);
|
||||
int exists(char *s);
|
||||
void mkdirs(char *s);
|
||||
int isfile(char *s);
|
||||
int isdir(char *s);
|
||||
char **ls(char *dir, int *num);
|
||||
void freestrlist(char **l, int num);
|
||||
void rm(char *s);
|
||||
void mv(char *s, char *ss);
|
||||
void cp(char *s, char *ss);
|
||||
time_t moddate(char *s);
|
||||
int filesize(char *s);
|
||||
int fileinode(char *s);
|
||||
int filedev(char *s);
|
||||
void cd(char *s);
|
||||
char *cwd(void);
|
||||
int permissions(char *s);
|
||||
int owner(char *s);
|
||||
int group(char *s);
|
||||
char *username(int uid);
|
||||
char *homedir(int uid);
|
||||
char *usershell(int uid);
|
||||
char *atword(char *s, int num);
|
||||
char *atchar(char *s, char c);
|
||||
char *getword(char *s, int num);
|
||||
void word(char *s, int num, char *wd);
|
||||
int canread(char *s);
|
||||
int canwrite(char *s);
|
||||
int canexec(char *s);
|
||||
char *fileof(char *s);
|
||||
char *fullfileof(char *s);
|
||||
char *pathtoexec(char *file);
|
||||
char *pathtofile(char *file);
|
||||
|
||||
void AddPage(Object * obj);
|
||||
void AddObject(Object * obj);
|
||||
void BuildObj(Object * obj, char *var, char *param);
|
||||
int GetNextTag(Object * obj);
|
||||
char *GetTextUntilTag(void);
|
||||
int GetObjects(FILE *f);
|
||||
int FixPage(int p);
|
||||
int GetPage(char *name);
|
||||
void GetLinkColors(int page_num, int *r, int *g, int *b);
|
||||
Link *RenderPage(Window win, int page_num, int w, int h);
|
||||
|
||||
extern Display *disp;
|
||||
extern ImlibData *id;
|
||||
extern FnlibData *fd;
|
||||
extern char *docdir;
|
|
@ -0,0 +1,201 @@
|
|||
/* XPM */
|
||||
static char * exit1_xpm[] = {
|
||||
"16 16 182 2",
|
||||
" c None",
|
||||
". c #CECECD",
|
||||
"+ c #D7D7D5",
|
||||
"@ c #CFCFCE",
|
||||
"# c #D0D0CE",
|
||||
"$ c #CFCECB",
|
||||
"% c #DCDAD8",
|
||||
"& c #EEEDEC",
|
||||
"* c #FAFAFA",
|
||||
"= c #FEFEFE",
|
||||
"- c #CECBC7",
|
||||
"; c #CFCDC9",
|
||||
"> c #C4C3C0",
|
||||
", c #D1D1CE",
|
||||
"' c #CDCDCB",
|
||||
") c #C6C4BF",
|
||||
"! c #E7E5E3",
|
||||
"~ c #FFFFFF",
|
||||
"{ c #EEEDEB",
|
||||
"] c #D7D5D1",
|
||||
"^ c #C8C6C0",
|
||||
"/ c #C3C0BA",
|
||||
"( c #AFADA9",
|
||||
"_ c #CACAC7",
|
||||
": c #CACAC9",
|
||||
"< c #CBCBCA",
|
||||
"[ c #D6D6D4",
|
||||
"} c #C4C2BD",
|
||||
"| c #DDDBD8",
|
||||
"1 c #ADA8A0",
|
||||
"2 c #ACA8A0",
|
||||
"3 c #ACA79F",
|
||||
"4 c #918C86",
|
||||
"5 c #969590",
|
||||
"6 c #CBCBC8",
|
||||
"7 c #D1D0CE",
|
||||
"8 c #CCCBC6",
|
||||
"9 c #D2D0CC",
|
||||
"0 c #494744",
|
||||
"a c #C8C5C0",
|
||||
"b c #B3AFA9",
|
||||
"c c #726F6B",
|
||||
"d c #9A9892",
|
||||
"e c #ADACAA",
|
||||
"f c #D0CFCD",
|
||||
"g c #E5E3E1",
|
||||
"h c #E8E7E5",
|
||||
"i c #B1ADA6",
|
||||
"j c #484643",
|
||||
"k c #B8B6B3",
|
||||
"l c #474643",
|
||||
"m c #4D4B48",
|
||||
"n c #CCC9C5",
|
||||
"o c #A9A59F",
|
||||
"p c #868581",
|
||||
"q c #CECECC",
|
||||
"r c #C9C7C2",
|
||||
"s c #F6F6F5",
|
||||
"t c #C3BFB9",
|
||||
"u c #A59F96",
|
||||
"v c #8B867E",
|
||||
"w c #43403D",
|
||||
"x c #42403C",
|
||||
"y c #44413D",
|
||||
"z c #CECBC6",
|
||||
"A c #B2ADA5",
|
||||
"B c #A49E95",
|
||||
"C c #696764",
|
||||
"D c #C6C5C2",
|
||||
"E c #BAB9B5",
|
||||
"F c #ADA8A1",
|
||||
"G c #A5A098",
|
||||
"H c #8A867F",
|
||||
"I c #43413D",
|
||||
"J c #454340",
|
||||
"K c #C4C1BC",
|
||||
"L c #A49F97",
|
||||
"M c #9D9991",
|
||||
"N c #5D5C58",
|
||||
"O c #BBB9B6",
|
||||
"P c #C3C2BF",
|
||||
"Q c #F6F5F5",
|
||||
"R c #A29D95",
|
||||
"S c #75716C",
|
||||
"T c #413F3C",
|
||||
"U c #C2BFBA",
|
||||
"V c #A19C94",
|
||||
"W c #88847E",
|
||||
"X c #676562",
|
||||
"Y c #C3C3BF",
|
||||
"Z c #C1C0BB",
|
||||
"` c #989389",
|
||||
" . c #67625B",
|
||||
".. c #393733",
|
||||
"+. c #413F3B",
|
||||
"@. c #BDBAB4",
|
||||
"#. c #393732",
|
||||
"$. c #B6B2AB",
|
||||
"%. c #625E57",
|
||||
"&. c #75736D",
|
||||
"*. c #C4C3BE",
|
||||
"=. c #C4C2BF",
|
||||
"-. c #C7C6C1",
|
||||
";. c #B0ACA5",
|
||||
">. c #726D65",
|
||||
",. c #373531",
|
||||
"'. c #3A3834",
|
||||
"). c #BAB7B1",
|
||||
"!. c #898378",
|
||||
"~. c #888277",
|
||||
"{. c #373530",
|
||||
"]. c #3C3A35",
|
||||
"^. c #A29F99",
|
||||
"/. c #514E4A",
|
||||
"(. c #95928D",
|
||||
"_. c #C5C3C0",
|
||||
":. c #C3C3C0",
|
||||
"<. c #C0BDB9",
|
||||
"[. c #787369",
|
||||
"}. c #9D9992",
|
||||
"|. c #A9A69F",
|
||||
"1. c #79746A",
|
||||
"2. c #777268",
|
||||
"3. c #8C887F",
|
||||
"4. c #8B8882",
|
||||
"5. c #62615D",
|
||||
"6. c #676560",
|
||||
"7. c #A9A7A2",
|
||||
"8. c #C1C1BE",
|
||||
"9. c #C2C2BF",
|
||||
"0. c #C1C1BF",
|
||||
"a. c #B5B4B1",
|
||||
"b. c #AEABA6",
|
||||
"c. c #807B71",
|
||||
"d. c #797368",
|
||||
"e. c #787368",
|
||||
"f. c #736E63",
|
||||
"g. c #656056",
|
||||
"h. c #534F48",
|
||||
"i. c #474540",
|
||||
"j. c #65625C",
|
||||
"k. c #A09D97",
|
||||
"l. c #B8B7B3",
|
||||
"m. c #C3C3C1",
|
||||
"n. c #D4D4D4",
|
||||
"o. c #D0D1D0",
|
||||
"p. c #C9C8C6",
|
||||
"q. c #B8B6B4",
|
||||
"r. c #B4B2AE",
|
||||
"s. c #9E9B94",
|
||||
"t. c #928E86",
|
||||
"u. c #4C4A45",
|
||||
"v. c #514F4A",
|
||||
"w. c #625F5A",
|
||||
"x. c #827F79",
|
||||
"y. c #AAA8A3",
|
||||
"z. c #C2C1BF",
|
||||
"A. c #D0D0CF",
|
||||
"B. c #D2D2D1",
|
||||
"C. c #E2E3E1",
|
||||
"D. c #E0E0DE",
|
||||
"E. c #DEDEDB",
|
||||
"F. c #DAD9D8",
|
||||
"G. c #D2D1D0",
|
||||
"H. c #C8C7C4",
|
||||
"I. c #BDBBB6",
|
||||
"J. c #BCBAB5",
|
||||
"K. c #C6C5C1",
|
||||
"L. c #D4D4D2",
|
||||
"M. c #DDDDDB",
|
||||
"N. c #DFDFDD",
|
||||
"O. c #DEDEDD",
|
||||
"P. c #DADADA",
|
||||
"Q. c #D9D9D9",
|
||||
"R. c #D7D7D7",
|
||||
"S. c #D8D8D7",
|
||||
"T. c #D5D5D4",
|
||||
"U. c #D4D4D3",
|
||||
"V. c #D6D6D5",
|
||||
"W. c #D6D6D6",
|
||||
"X. c #D5D5D5",
|
||||
"Y. c #D7D8D7",
|
||||
". . . . . . . . . . . . + + + + ",
|
||||
". . @ # $ % & * = - ; > , . + + ",
|
||||
"' ' ' ) ! ~ { ] ^ / / / ( _ : < ",
|
||||
"[ [ } | ~ - 1 1 2 3 4 4 3 5 6 @ ",
|
||||
"7 7 8 ~ 9 0 0 a b c 0 0 - d e f ",
|
||||
"6 6 g h i j j j k l l m n o p q ",
|
||||
"r r s t u v w w w x y z A B C D ",
|
||||
"E E ~ F G G H I I J K L L M N O ",
|
||||
"P P Q R R S x x x T T U V W X Y ",
|
||||
"Z Z | ` .....+.@.#.#.#.$.%.&.*.",
|
||||
"=.=.-.;.>.,.'.).!.~.{.].^./.(._.",
|
||||
":.:.: <.[.}.|.1.[.2.3.4.5.6.7.8.",
|
||||
"9.9.0.a.b.c.d.e.f.g.h.i.j.k.l.m.",
|
||||
"n.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.",
|
||||
"C.C.D.E.F.G.H.I.J.J.J.K.L.M.N.O.",
|
||||
"P.P.P.Q.Q.R.S.T.U.U.U.V.W.X.Y.U."};
|
|
@ -0,0 +1,203 @@
|
|||
/* XPM */
|
||||
static char * exit2_xpm[] = {
|
||||
"16 16 184 2",
|
||||
" c None",
|
||||
". c #CECECD",
|
||||
"+ c #D7D7D5",
|
||||
"@ c #CFCFCE",
|
||||
"# c #D0D0CE",
|
||||
"$ c #CFCECB",
|
||||
"% c #92908D",
|
||||
"& c #434241",
|
||||
"* c #111111",
|
||||
"= c #010101",
|
||||
"- c #CFCCC8",
|
||||
"; c #CFCDC9",
|
||||
"> c #D2D1CE",
|
||||
", c #D1D1CE",
|
||||
"' c #D4D3D2",
|
||||
") c #CDCDCB",
|
||||
"! c #C6C4BF",
|
||||
"~ c #4F4D4B",
|
||||
"{ c #000000",
|
||||
"] c #383735",
|
||||
"^ c #82807C",
|
||||
"/ c #B1AFA9",
|
||||
"( c #C4C1BB",
|
||||
"_ c #CDCBC7",
|
||||
": c #CACAC7",
|
||||
"< c #CACAC9",
|
||||
"[ c #CBCBCA",
|
||||
"} c #D6D6D4",
|
||||
"| c #C4C2BD",
|
||||
"1 c #454340",
|
||||
"2 c #65625E",
|
||||
"3 c #ABA69E",
|
||||
"4 c #ABA79F",
|
||||
"5 c #ADA8A0",
|
||||
"6 c #918D86",
|
||||
"7 c #CAC7C3",
|
||||
"8 c #CBCBC8",
|
||||
"9 c #D1D0CE",
|
||||
"0 c #83807C",
|
||||
"a c #696763",
|
||||
"b c #484644",
|
||||
"c c #C7C4BF",
|
||||
"d c #B2AEA8",
|
||||
"e c #73706C",
|
||||
"f c #494744",
|
||||
"g c #C3BFBA",
|
||||
"h c #D0CFCD",
|
||||
"i c #393836",
|
||||
"j c #32312F",
|
||||
"k c #AFABA4",
|
||||
"l c #474542",
|
||||
"m c #B7B5B2",
|
||||
"n c #484643",
|
||||
"o c #4D4B49",
|
||||
"p c #CDCAC6",
|
||||
"q c #B4B0A9",
|
||||
"r c #D7D6D2",
|
||||
"s c #CECECC",
|
||||
"t c #C9C7C2",
|
||||
"u c #0D0D0C",
|
||||
"v c #6E6A64",
|
||||
"w c #A39D94",
|
||||
"x c #89847C",
|
||||
"y c #42403C",
|
||||
"z c #43403D",
|
||||
"A c #44423E",
|
||||
"B c #CFCBC7",
|
||||
"C c #B3AEA6",
|
||||
"D c #A59F96",
|
||||
"E c #D7D5D2",
|
||||
"F c #C6C5C2",
|
||||
"G c #BAB9B5",
|
||||
"H c #959089",
|
||||
"I c #A39E96",
|
||||
"J c #88847D",
|
||||
"K c #42403D",
|
||||
"L c #464440",
|
||||
"M c #C5C2BD",
|
||||
"N c #A5A098",
|
||||
"O c #A8A49C",
|
||||
"P c #D5D4D0",
|
||||
"Q c #BBB9B6",
|
||||
"R c #C3C2BF",
|
||||
"S c #0D0C0C",
|
||||
"T c #A09B93",
|
||||
"U c #74706A",
|
||||
"V c #413F3B",
|
||||
"W c #413F3C",
|
||||
"X c #C3C0BB",
|
||||
"Y c #A29D95",
|
||||
"Z c #B0ACA5",
|
||||
"` c #D5D3D0",
|
||||
" . c #C3C3BF",
|
||||
".. c #C1C0BB",
|
||||
"+. c #312F2C",
|
||||
"@. c #807B71",
|
||||
"#. c #656159",
|
||||
"$. c #393632",
|
||||
"%. c #403E3A",
|
||||
"&. c #BDB9B3",
|
||||
"*. c #393732",
|
||||
"=. c #B6B2AB",
|
||||
"-. c #B8B4AD",
|
||||
";. c #C4C3BE",
|
||||
">. c #C4C2BF",
|
||||
",. c #7D7B77",
|
||||
"'. c #5B5750",
|
||||
"). c #716C63",
|
||||
"!. c #373430",
|
||||
"~. c #3A3733",
|
||||
"{. c #B9B6B0",
|
||||
"]. c #888277",
|
||||
"^. c #898378",
|
||||
"/. c #373530",
|
||||
"(. c #3D3A36",
|
||||
"_. c #C1BEB8",
|
||||
":. c #B8B5B0",
|
||||
"<. c #C5C3C0",
|
||||
"[. c #C3C3C0",
|
||||
"}. c #53524D",
|
||||
"|. c #767167",
|
||||
"1. c #9B9890",
|
||||
"2. c #A8A49E",
|
||||
"3. c #777268",
|
||||
"4. c #787369",
|
||||
"5. c #8D8880",
|
||||
"6. c #AFACA6",
|
||||
"7. c #C8C5C1",
|
||||
"8. c #AFADA8",
|
||||
"9. c #A9A7A2",
|
||||
"0. c #C1C1BE",
|
||||
"a. c #C2C2BF",
|
||||
"b. c #C1C1BF",
|
||||
"c. c #B5B4B1",
|
||||
"d. c #706D66",
|
||||
"e. c #7D796F",
|
||||
"f. c #777166",
|
||||
"g. c #767166",
|
||||
"h. c #7C766C",
|
||||
"i. c #8C877E",
|
||||
"j. c #A8A59E",
|
||||
"k. c #C0BDB8",
|
||||
"l. c #ADAAA4",
|
||||
"m. c #A09D97",
|
||||
"n. c #B8B7B3",
|
||||
"o. c #C3C3C1",
|
||||
"p. c #D4D4D4",
|
||||
"q. c #D0D1D0",
|
||||
"r. c #C9C8C6",
|
||||
"s. c #B8B6B4",
|
||||
"t. c #969490",
|
||||
"u. c #9D9A93",
|
||||
"v. c #908C84",
|
||||
"w. c #C3C0BD",
|
||||
"x. c #BFBCB8",
|
||||
"y. c #B3B0AA",
|
||||
"z. c #A5A29C",
|
||||
"A. c #AAA8A3",
|
||||
"B. c #C2C1BF",
|
||||
"C. c #D0D0CF",
|
||||
"D. c #D2D2D1",
|
||||
"E. c #E2E3E1",
|
||||
"F. c #E0E0DE",
|
||||
"G. c #DEDEDB",
|
||||
"H. c #DAD9D8",
|
||||
"I. c #D2D1D0",
|
||||
"J. c #C8C7C4",
|
||||
"K. c #BDBBB6",
|
||||
"L. c #BCBAB5",
|
||||
"M. c #C6C5C1",
|
||||
"N. c #D4D4D2",
|
||||
"O. c #DDDDDB",
|
||||
"P. c #DFDFDD",
|
||||
"Q. c #DEDEDD",
|
||||
"R. c #DADADA",
|
||||
"S. c #D9D9D9",
|
||||
"T. c #D7D7D7",
|
||||
"U. c #D8D8D7",
|
||||
"V. c #D5D5D4",
|
||||
"W. c #D4D4D3",
|
||||
"X. c #D6D6D5",
|
||||
"Y. c #D6D6D6",
|
||||
"Z. c #D5D5D5",
|
||||
"`. c #D7D8D7",
|
||||
". . . . . . . . . . . . + + + + ",
|
||||
". . @ # $ % & * = - ; > , ' + + ",
|
||||
") ) ) ! ~ { ] ^ / ( ( ( _ : < [ ",
|
||||
"} } | 1 { 2 3 3 4 5 6 6 5 7 8 @ ",
|
||||
"9 9 0 { a b b c d e f f - g h h ",
|
||||
"8 8 i j k l l l m n n o p q r s ",
|
||||
"t t u v w x y y y z A B C D E F ",
|
||||
"G G { H I I J K K L M N N O P Q ",
|
||||
"R R S T T U V V W y y X Y Z ` .",
|
||||
"....+.@.#.$.$.%.&.*.*.*.=.-.! ;.",
|
||||
">.>.,.'.).!.~.{.].^./.(._.t :.<.",
|
||||
"[.[.< }.|.1.2.3.3.4.5.6.7.8.9.0.",
|
||||
"a.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.",
|
||||
"p.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.",
|
||||
"E.E.F.G.H.I.J.K.L.L.L.M.N.O.P.Q.",
|
||||
"R.R.R.S.S.T.U.V.W.W.W.X.Y.Z.`.W."};
|
|
@ -0,0 +1,752 @@
|
|||
|
||||
#include "dox.h"
|
||||
|
||||
char *
|
||||
FileExtension(char *file)
|
||||
{
|
||||
char *p;
|
||||
|
||||
p = strrchr(file, '.');
|
||||
if (p != NULL)
|
||||
{
|
||||
return (p + 1);
|
||||
}
|
||||
return ("");
|
||||
}
|
||||
|
||||
void
|
||||
md(char *s)
|
||||
{
|
||||
if ((!s) || (!*s))
|
||||
return;
|
||||
mkdir(s, S_IRWXU);
|
||||
return;
|
||||
}
|
||||
|
||||
int
|
||||
exists(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
if (stat(s, &st) < 0)
|
||||
return (0);
|
||||
return (1);
|
||||
}
|
||||
|
||||
void
|
||||
mkdirs(char *s)
|
||||
{
|
||||
char ss[FILEPATH_LEN_MAX];
|
||||
int i, ii;
|
||||
|
||||
i = 0;
|
||||
ii = 0;
|
||||
while (s[i])
|
||||
{
|
||||
ss[ii++] = s[i];
|
||||
ss[ii] = 0;
|
||||
if (s[i] == '/')
|
||||
{
|
||||
if (!exists(ss))
|
||||
md(ss);
|
||||
else if (!isdir(ss))
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
isfile(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
if (stat(s, &st) < 0)
|
||||
return (0);
|
||||
if (S_ISREG(st.st_mode))
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
isdir(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
if (stat(s, &st) < 0)
|
||||
return (0);
|
||||
if (S_ISDIR(st.st_mode))
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
char **
|
||||
ls(char *dir, int *num)
|
||||
{
|
||||
int i, dirlen;
|
||||
int done = 0;
|
||||
DIR *dirp;
|
||||
char **names;
|
||||
struct dirent *dp;
|
||||
|
||||
if ((!dir) || (!*dir))
|
||||
return (0);
|
||||
dirp = opendir(dir);
|
||||
if (!dirp)
|
||||
{
|
||||
*num = 0;
|
||||
return (NULL);
|
||||
}
|
||||
/* count # of entries in dir (worst case) */
|
||||
for (dirlen = 0; (dp = readdir(dirp)) != NULL; dirlen++);
|
||||
if (!dirlen)
|
||||
{
|
||||
closedir(dirp);
|
||||
*num = dirlen;
|
||||
return (NULL);
|
||||
}
|
||||
names = (char **)malloc(dirlen * sizeof(char *));
|
||||
|
||||
if (!names)
|
||||
return (NULL);
|
||||
|
||||
rewinddir(dirp);
|
||||
for (i = 0; i < dirlen;)
|
||||
{
|
||||
dp = readdir(dirp);
|
||||
if (!dp)
|
||||
break;
|
||||
if ((strcmp(dp->d_name, ".")) && (strcmp(dp->d_name, "..")))
|
||||
{
|
||||
names[i] = strdup(dp->d_name);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < dirlen)
|
||||
dirlen = i; /* dir got shorter... */
|
||||
closedir(dirp);
|
||||
*num = dirlen;
|
||||
/* do a simple bubble sort here to alphanumberic it */
|
||||
while (!done)
|
||||
{
|
||||
done = 1;
|
||||
for (i = 0; i < dirlen - 1; i++)
|
||||
{
|
||||
if (strcmp(names[i], names[i + 1]) > 0)
|
||||
{
|
||||
char *tmp;
|
||||
|
||||
tmp = names[i];
|
||||
names[i] = names[i + 1];
|
||||
names[i + 1] = tmp;
|
||||
done = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return (names);
|
||||
}
|
||||
|
||||
void
|
||||
freestrlist(char **l, int num)
|
||||
{
|
||||
if (!l)
|
||||
return;
|
||||
while (num--)
|
||||
if (l[num])
|
||||
free(l[num]);
|
||||
free(l);
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
rm(char *s)
|
||||
{
|
||||
if ((!s) || (!*s))
|
||||
return;
|
||||
unlink(s);
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
mv(char *s, char *ss)
|
||||
{
|
||||
if ((!s) || (!ss) || (!*s) || (!*ss))
|
||||
return;
|
||||
rename(s, ss);
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
cp(char *s, char *ss)
|
||||
{
|
||||
int i;
|
||||
FILE *f, *ff;
|
||||
unsigned char buf[1];
|
||||
|
||||
if ((!s) || (!ss) || (!*s) || (!*ss))
|
||||
return;
|
||||
if (!exists(s))
|
||||
return;
|
||||
i = filesize(s);
|
||||
f = fopen(s, "r");
|
||||
if (!f)
|
||||
return;
|
||||
ff = fopen(ss, "w");
|
||||
if (!ff)
|
||||
{
|
||||
fclose(f);
|
||||
return;
|
||||
}
|
||||
while (fread(buf, 1, 1, f))
|
||||
fwrite(buf, 1, 1, ff);
|
||||
fclose(f);
|
||||
fclose(ff);
|
||||
return;
|
||||
}
|
||||
|
||||
time_t
|
||||
moddate(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
if (!stat(s, &st) < 0)
|
||||
return (0);
|
||||
if (st.st_mtime > st.st_ctime)
|
||||
{
|
||||
return (st.st_mtime);
|
||||
}
|
||||
else
|
||||
return (st.st_ctime);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
filesize(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
if (stat(s, &st) < 0)
|
||||
return (0);
|
||||
return ((int)st.st_size);
|
||||
}
|
||||
|
||||
int
|
||||
fileinode(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
if (stat(s, &st) < 0)
|
||||
return (0);
|
||||
return ((int)st.st_ino);
|
||||
}
|
||||
|
||||
int
|
||||
filedev(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
if (stat(s, &st) < 0)
|
||||
return (0);
|
||||
return ((int)st.st_dev);
|
||||
}
|
||||
|
||||
void
|
||||
cd(char *s)
|
||||
{
|
||||
if ((!s) || (!*s))
|
||||
return;
|
||||
chdir(s);
|
||||
return;
|
||||
}
|
||||
|
||||
char *
|
||||
cwd(void)
|
||||
{
|
||||
char *s;
|
||||
char ss[FILEPATH_LEN_MAX];
|
||||
|
||||
getcwd(ss, FILEPATH_LEN_MAX);
|
||||
s = strdup(ss);
|
||||
return (s);
|
||||
}
|
||||
|
||||
int
|
||||
permissions(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
if (!stat(s, &st) < 0)
|
||||
return (0);
|
||||
return (st.st_mode);
|
||||
}
|
||||
|
||||
int
|
||||
owner(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
if (!stat(s, &st) < 0)
|
||||
return (0);
|
||||
return (st.st_uid);
|
||||
}
|
||||
|
||||
int
|
||||
group(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
if (!stat(s, &st) < 0)
|
||||
return (0);
|
||||
return (st.st_gid);
|
||||
}
|
||||
|
||||
char *
|
||||
username(int uid)
|
||||
{
|
||||
static int usr_uid = -1;
|
||||
static char *usr_s = NULL;
|
||||
char *s;
|
||||
struct passwd *pwd;
|
||||
|
||||
if (usr_uid < 0)
|
||||
usr_uid = getuid();
|
||||
if ((uid == usr_uid) && (usr_s))
|
||||
return strdup(usr_s);
|
||||
pwd = getpwuid(uid);
|
||||
if (pwd)
|
||||
{
|
||||
s = strdup(pwd->pw_name);
|
||||
if (uid == usr_uid)
|
||||
usr_s = strdup(s);
|
||||
return (s);
|
||||
}
|
||||
return (strdup("unknown"));
|
||||
}
|
||||
|
||||
char *
|
||||
homedir(int uid)
|
||||
{
|
||||
static int usr_uid = -1;
|
||||
static char *usr_s = NULL;
|
||||
char *s;
|
||||
struct passwd *pwd;
|
||||
|
||||
if (usr_uid < 0)
|
||||
usr_uid = getuid();
|
||||
if ((uid == usr_uid) && (usr_s))
|
||||
return strdup(usr_s);
|
||||
pwd = getpwuid(uid);
|
||||
if (pwd)
|
||||
{
|
||||
s = strdup(pwd->pw_dir);
|
||||
if (uid == usr_uid)
|
||||
usr_s = strdup(s);
|
||||
return (s);
|
||||
}
|
||||
return (strdup("/tmp"));
|
||||
}
|
||||
|
||||
char *
|
||||
usershell(int uid)
|
||||
{
|
||||
static int usr_uid = -1;
|
||||
static char *usr_s = NULL;
|
||||
char *s;
|
||||
struct passwd *pwd;
|
||||
|
||||
if (usr_uid < 0)
|
||||
usr_uid = getuid();
|
||||
if ((uid == usr_uid) && (usr_s))
|
||||
return strdup(usr_s);
|
||||
pwd = getpwuid(uid);
|
||||
if (pwd)
|
||||
{
|
||||
s = strdup(pwd->pw_shell);
|
||||
if (uid == usr_uid)
|
||||
usr_s = strdup(s);
|
||||
return (s);
|
||||
}
|
||||
return (strdup("/bin/sh"));
|
||||
}
|
||||
|
||||
char *
|
||||
atword(char *s, int num)
|
||||
{
|
||||
int cnt, i;
|
||||
|
||||
if (!s)
|
||||
return (NULL);
|
||||
cnt = 0;
|
||||
i = 0;
|
||||
|
||||
while (s[i])
|
||||
{
|
||||
if ((s[i] != ' ') && (s[i] != '\t'))
|
||||
{
|
||||
if (i == 0)
|
||||
cnt++;
|
||||
else if ((s[i - 1] == ' ') || (s[i - 1] == '\t'))
|
||||
cnt++;
|
||||
if (cnt == num)
|
||||
return (&s[i]);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
char *
|
||||
atchar(char *s, char c)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!s)
|
||||
return (NULL);
|
||||
i = 0;
|
||||
while (s[i] != 0)
|
||||
{
|
||||
if (s[i] == c)
|
||||
return (&s[i]);
|
||||
i++;
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
char *
|
||||
getword(char *s, int num)
|
||||
{
|
||||
|
||||
/* *********FIXME**************
|
||||
* This function is broken but it isn't in use so I'll fix it later
|
||||
* (DO NOT USE UNTIL FIXED
|
||||
*/
|
||||
int cnt, i;
|
||||
char *start, *finish, *ss, *w;
|
||||
char *wd = NULL;
|
||||
|
||||
if (!s)
|
||||
return (NULL);
|
||||
if (!wd)
|
||||
return (NULL);
|
||||
if (num <= 0)
|
||||
{
|
||||
*wd = 0;
|
||||
return (NULL);
|
||||
}
|
||||
cnt = 0;
|
||||
i = 0;
|
||||
start = NULL;
|
||||
finish = NULL;
|
||||
ss = NULL;
|
||||
w = wd;
|
||||
|
||||
while (s[i])
|
||||
{
|
||||
if ((cnt == num) && ((s[i] == ' ') || (s[i] == '\t')))
|
||||
{
|
||||
finish = &s[i];
|
||||
break;
|
||||
}
|
||||
if ((s[i] != ' ') && (s[i] != '\t'))
|
||||
{
|
||||
if (i == 0)
|
||||
{
|
||||
cnt++;
|
||||
if (cnt == num)
|
||||
start = &s[i];
|
||||
}
|
||||
else if ((s[i - 1] == ' ') || (s[i - 1] == '\t'))
|
||||
{
|
||||
cnt++;
|
||||
if (cnt == num)
|
||||
start = &s[i];
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (cnt == num)
|
||||
{
|
||||
if ((start) && (finish))
|
||||
{
|
||||
for (ss = start; ss < finish; ss++)
|
||||
*wd++ = *ss;
|
||||
}
|
||||
else if (start)
|
||||
{
|
||||
for (ss = start; *ss != 0; ss++)
|
||||
*wd++ = *ss;
|
||||
}
|
||||
*wd = 0;
|
||||
}
|
||||
return (wd);
|
||||
}
|
||||
|
||||
void
|
||||
word(char *s, int num, char *wd)
|
||||
{
|
||||
int cnt, i;
|
||||
char *start, *finish, *ss, *w;
|
||||
|
||||
if (!s)
|
||||
return;
|
||||
if (!wd)
|
||||
return;
|
||||
if (num <= 0)
|
||||
{
|
||||
*wd = 0;
|
||||
return;
|
||||
}
|
||||
cnt = 0;
|
||||
i = 0;
|
||||
start = NULL;
|
||||
finish = NULL;
|
||||
ss = NULL;
|
||||
w = wd;
|
||||
|
||||
while (s[i])
|
||||
{
|
||||
if ((cnt == num) && ((s[i] == ' ') || (s[i] == '\t')))
|
||||
{
|
||||
finish = &s[i];
|
||||
break;
|
||||
}
|
||||
if ((s[i] != ' ') && (s[i] != '\t'))
|
||||
{
|
||||
if (i == 0)
|
||||
{
|
||||
cnt++;
|
||||
if (cnt == num)
|
||||
start = &s[i];
|
||||
}
|
||||
else if ((s[i - 1] == ' ') || (s[i - 1] == '\t'))
|
||||
{
|
||||
cnt++;
|
||||
if (cnt == num)
|
||||
start = &s[i];
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (cnt == num)
|
||||
{
|
||||
if ((start) && (finish))
|
||||
{
|
||||
for (ss = start; ss < finish; ss++)
|
||||
*wd++ = *ss;
|
||||
}
|
||||
else if (start)
|
||||
{
|
||||
for (ss = start; *ss != 0; ss++)
|
||||
*wd++ = *ss;
|
||||
}
|
||||
*wd = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
int
|
||||
canread(char *s)
|
||||
{
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
|
||||
if (!(permissions(s) & (S_IRUSR | S_IRGRP | S_IROTH)))
|
||||
return (0);
|
||||
|
||||
return (1 + access(s, R_OK));
|
||||
}
|
||||
|
||||
int
|
||||
canwrite(char *s)
|
||||
{
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
|
||||
if (!(permissions(s) & (S_IWUSR | S_IWGRP | S_IWOTH)))
|
||||
return (0);
|
||||
|
||||
return (1 + access(s, W_OK));
|
||||
}
|
||||
|
||||
int
|
||||
canexec(char *s)
|
||||
{
|
||||
if ((!s) || (!*s))
|
||||
return (0);
|
||||
|
||||
if (!(permissions(s) & (S_IXUSR | S_IXGRP | S_IXOTH)))
|
||||
return (0);
|
||||
|
||||
return (1 + access(s, X_OK));
|
||||
}
|
||||
|
||||
char *
|
||||
fileof(char *s)
|
||||
{
|
||||
char ss[1024];
|
||||
int i, p1, p2;
|
||||
|
||||
i = 0;
|
||||
p1 = -1;
|
||||
p2 = -1;
|
||||
for (i = strlen(s) - 1; i >= 0; i--)
|
||||
{
|
||||
if ((s[i] == '.') && (p2 < 0) && (p1 < 0))
|
||||
p2 = i;
|
||||
if ((s[i] == '/') && (p1 < 0))
|
||||
p1 = i;
|
||||
}
|
||||
if (p2 < 0)
|
||||
p2 = strlen(s);
|
||||
if (p1 < 0)
|
||||
p1 = 0;
|
||||
for (i = 0; i < (p2 - p1 - 1); i++)
|
||||
ss[i] = s[p1 + 1 + i];
|
||||
ss[i] = 0;
|
||||
return (strdup(ss));
|
||||
}
|
||||
|
||||
char *
|
||||
fullfileof(char *s)
|
||||
{
|
||||
char ss[1024];
|
||||
int i, p1, p2;
|
||||
|
||||
i = 0;
|
||||
p1 = -1;
|
||||
for (i = strlen(s) - 1; i >= 0; i--)
|
||||
{
|
||||
if ((s[i] == '/') && (p1 < 0))
|
||||
p1 = i;
|
||||
}
|
||||
p2 = strlen(s);
|
||||
for (i = 0; i < (p2 - p1 - 1); i++)
|
||||
ss[i] = s[p1 + 1 + i];
|
||||
ss[i] = 0;
|
||||
return (strdup(ss));
|
||||
}
|
||||
|
||||
char *
|
||||
pathtoexec(char *file)
|
||||
{
|
||||
char *p, *cp, *ep;
|
||||
char *s;
|
||||
int len, exelen;
|
||||
|
||||
if (file[0] == '/')
|
||||
{
|
||||
if (canexec(file))
|
||||
return (strdup(file));
|
||||
}
|
||||
p = getenv("PATH");
|
||||
if (!p)
|
||||
return (strdup(file));
|
||||
if (!file)
|
||||
return (NULL);
|
||||
cp = p;
|
||||
exelen = strlen(file);
|
||||
while ((ep = strchr(cp, ':')))
|
||||
{
|
||||
len = ep - cp;
|
||||
s = malloc(len + 1);
|
||||
if (s)
|
||||
{
|
||||
strncpy(s, cp, len);
|
||||
s[len] = 0;
|
||||
s = realloc(s, len + 2 + exelen);
|
||||
strcat(s, "/");
|
||||
strcat(s, file);
|
||||
if (canexec(s))
|
||||
return (s);
|
||||
free(s);
|
||||
}
|
||||
cp = ep + 1;
|
||||
}
|
||||
len = strlen(cp);
|
||||
s = malloc(len + 1);
|
||||
if (s)
|
||||
{
|
||||
strncpy(s, cp, len);
|
||||
s[len] = 0;
|
||||
s = realloc(s, len + 2 + exelen);
|
||||
strcat(s, "/");
|
||||
strcat(s, file);
|
||||
if (canexec(s))
|
||||
return (s);
|
||||
free(s);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
char *
|
||||
pathtofile(char *file)
|
||||
{
|
||||
char *p, *cp, *ep;
|
||||
char *s;
|
||||
int len, exelen;
|
||||
|
||||
if (file[0] == '/')
|
||||
{
|
||||
if (exists(file))
|
||||
return (strdup(file));
|
||||
}
|
||||
p = getenv("PATH");
|
||||
if (!p)
|
||||
return (strdup(file));
|
||||
if (!file)
|
||||
return (NULL);
|
||||
cp = p;
|
||||
exelen = strlen(file);
|
||||
while ((ep = strchr(cp, ':')))
|
||||
{
|
||||
len = ep - cp;
|
||||
s = malloc(len + 1);
|
||||
if (s)
|
||||
{
|
||||
strncpy(s, cp, len);
|
||||
s[len] = 0;
|
||||
s = realloc(s, len + 2 + exelen);
|
||||
strcat(s, "/");
|
||||
strcat(s, file);
|
||||
if (exists(s))
|
||||
return (s);
|
||||
free(s);
|
||||
}
|
||||
cp = ep + 1;
|
||||
}
|
||||
len = strlen(cp);
|
||||
s = malloc(len + 1);
|
||||
if (s)
|
||||
{
|
||||
strncpy(s, cp, len);
|
||||
s[len] = 0;
|
||||
s = realloc(s, len + 2 + exelen);
|
||||
strcat(s, "/");
|
||||
strcat(s, file);
|
||||
if (exists(s))
|
||||
return (s);
|
||||
free(s);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
|
@ -0,0 +1,896 @@
|
|||
#include "dox.h"
|
||||
|
||||
static int num_pages = 0;
|
||||
static Page *page = NULL;
|
||||
static char *fdat_ptr = NULL;
|
||||
static int fdat_size = 0;
|
||||
static char *fdat = NULL;
|
||||
|
||||
static int fdgetc(void);
|
||||
static void fdjump(int count);
|
||||
|
||||
static int
|
||||
fdgetc(void)
|
||||
{
|
||||
int val;
|
||||
|
||||
if (fdat_ptr >= (fdat + fdat_size))
|
||||
return EOF;
|
||||
val = (int)(*fdat_ptr);
|
||||
fdat_ptr++;
|
||||
return val;
|
||||
}
|
||||
|
||||
static void
|
||||
fdjump(int count)
|
||||
{
|
||||
fdat_ptr += count;
|
||||
if (fdat_ptr < fdat)
|
||||
fdat_ptr = fdat;
|
||||
if (fdat_ptr >= (fdat + fdat_size))
|
||||
fdat_ptr = (fdat + fdat_size) - 1;
|
||||
}
|
||||
|
||||
void
|
||||
AddPage(Object * obj)
|
||||
{
|
||||
num_pages++;
|
||||
page = realloc(page, sizeof(Page) * (num_pages));
|
||||
page[num_pages - 1].name = NULL;
|
||||
page[num_pages - 1].count = 0;
|
||||
page[num_pages - 1].obj = NULL;
|
||||
page[num_pages - 1].columns = 1;
|
||||
page[num_pages - 1].background = NULL;
|
||||
page[num_pages - 1].padding = 2;
|
||||
page[num_pages - 1].linkr = DEFAULT_LINKCOLOR_R;
|
||||
page[num_pages - 1].linkg = DEFAULT_LINKCOLOR_G;
|
||||
page[num_pages - 1].linkb = DEFAULT_LINKCOLOR_B;
|
||||
|
||||
if ((obj) && (obj->type == PAGE))
|
||||
{
|
||||
Page *pg;
|
||||
|
||||
pg = (Page *) (obj->object);
|
||||
if (pg->name)
|
||||
page[num_pages - 1].name = pg->name;
|
||||
page[num_pages - 1].columns = pg->columns;
|
||||
page[num_pages - 1].padding = pg->padding;
|
||||
page[num_pages - 1].linkr = pg->linkr;
|
||||
page[num_pages - 1].linkg = pg->linkg;
|
||||
page[num_pages - 1].linkb = pg->linkb;
|
||||
if (pg->background)
|
||||
page[num_pages - 1].background = pg->background;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AddObject(Object * obj)
|
||||
{
|
||||
page[num_pages - 1].count++;
|
||||
page[num_pages - 1].obj =
|
||||
realloc(page[num_pages - 1].obj,
|
||||
sizeof(Object) * (page[num_pages - 1].count));
|
||||
page[num_pages - 1].obj[page[num_pages - 1].count - 1].type =
|
||||
obj->type;
|
||||
page[num_pages - 1].obj[page[num_pages - 1].count - 1].object =
|
||||
obj->object;
|
||||
}
|
||||
|
||||
void
|
||||
BuildObj(Object * obj, char *var, char *param)
|
||||
{
|
||||
static Page *pg = NULL;
|
||||
static P_ *p = NULL;
|
||||
static Font_ *fn = NULL;
|
||||
static Img_ *img = NULL;
|
||||
|
||||
switch (obj->type)
|
||||
{
|
||||
case IMG:
|
||||
if (!obj->object)
|
||||
{
|
||||
img = obj->object = malloc(sizeof(Img_));
|
||||
img->src = NULL;
|
||||
img->src2 = NULL;
|
||||
img->src3 = NULL;
|
||||
img->x = 0;
|
||||
img->y = 0;
|
||||
img->link = NULL;
|
||||
img->w = 0;
|
||||
img->h = 0;
|
||||
}
|
||||
if (!strcmp(var, "x"))
|
||||
img->x = atoi(param);
|
||||
else if (!strcmp(var, "y"))
|
||||
img->y = atoi(param);
|
||||
else if (!strcmp(var, "src"))
|
||||
img->src = strdup(param);
|
||||
else if (!strcmp(var, "src2"))
|
||||
img->src2 = strdup(param);
|
||||
else if (!strcmp(var, "src3"))
|
||||
img->src3 = strdup(param);
|
||||
else if (!strcmp(var, "href"))
|
||||
img->link = strdup(param);
|
||||
break;
|
||||
case BR:
|
||||
break;
|
||||
case FONT:
|
||||
if (!obj->object)
|
||||
{
|
||||
fn = obj->object = malloc(sizeof(Font_));
|
||||
fn->face = NULL;
|
||||
fn->r = 0;
|
||||
fn->g = 0;
|
||||
fn->b = 0;
|
||||
}
|
||||
if (!strcmp(var, "face"))
|
||||
fn->face = strdup(param);
|
||||
else if (!strcmp(var, "color"))
|
||||
{
|
||||
char hex[3] = "00";
|
||||
|
||||
if (param[0] == '#')
|
||||
{
|
||||
hex[0] = param[1];
|
||||
hex[1] = param[2];
|
||||
sscanf(hex, "%x", &(fn->r));
|
||||
hex[0] = param[3];
|
||||
hex[1] = param[4];
|
||||
sscanf(hex, "%x", &(fn->g));
|
||||
hex[0] = param[5];
|
||||
hex[1] = param[6];
|
||||
sscanf(hex, "%x", &(fn->b));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case P:
|
||||
if (!obj->object)
|
||||
{
|
||||
p = obj->object = malloc(sizeof(P_));
|
||||
p->align = 0;
|
||||
}
|
||||
if (!strcmp(var, "align"))
|
||||
{
|
||||
if ((strlen(param) > 0) && (param[strlen(param) - 1] == '%'))
|
||||
param[strlen(param) - 1] = 0;
|
||||
p->align = atof(param);
|
||||
}
|
||||
break;
|
||||
case TEXT:
|
||||
break;
|
||||
case PAGE:
|
||||
if (!obj->object)
|
||||
{
|
||||
pg = obj->object = malloc(sizeof(Page));
|
||||
pg->columns = 1;
|
||||
pg->padding = 1;
|
||||
pg->name = NULL;
|
||||
pg->background = NULL;
|
||||
pg->linkr = DEFAULT_LINKCOLOR_R;
|
||||
pg->linkg = DEFAULT_LINKCOLOR_G;
|
||||
pg->linkb = DEFAULT_LINKCOLOR_B;
|
||||
}
|
||||
if (!strcmp(var, "columns"))
|
||||
pg->columns = atoi(param);
|
||||
else if (!strcmp(var, "padding"))
|
||||
pg->padding = atoi(param);
|
||||
else if (!strcmp(var, "name"))
|
||||
pg->name = strdup(param);
|
||||
else if (!strcmp(var, "background"))
|
||||
pg->background = strdup(param);
|
||||
else if (!strcmp(var, "linkcolor"))
|
||||
{
|
||||
char hex[3] = "00";
|
||||
|
||||
if (param[0] == '#')
|
||||
{
|
||||
hex[0] = param[1];
|
||||
hex[1] = param[2];
|
||||
sscanf(hex, "%x", &(pg->linkr));
|
||||
hex[0] = param[3];
|
||||
hex[1] = param[4];
|
||||
sscanf(hex, "%x", &(pg->linkg));
|
||||
hex[0] = param[5];
|
||||
hex[1] = param[6];
|
||||
sscanf(hex, "%x", &(pg->linkb));
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
GetNextTag(Object * obj)
|
||||
{
|
||||
char s[65536];
|
||||
int i = 0, wd = 0;
|
||||
int val;
|
||||
char intag = 0;
|
||||
char havobj = 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
val = fdgetc();
|
||||
if (val == EOF)
|
||||
return 0;
|
||||
if (intag)
|
||||
{
|
||||
if (val == '>')
|
||||
intag = 0;
|
||||
s[i++] = (char)val;
|
||||
if (s[i - 1] == '\n')
|
||||
s[i - 1] = ' ';
|
||||
if (s[i - 1] == '>')
|
||||
s[i - 1] = ' ';
|
||||
if (s[i - 1] == ' ')
|
||||
{
|
||||
if (i == 1)
|
||||
i = 0;
|
||||
else
|
||||
{
|
||||
s[i - 1] = 0;
|
||||
if (!havobj)
|
||||
{
|
||||
if (wd == 0)
|
||||
{
|
||||
if (!strcmp(s, "page"))
|
||||
obj->type = PAGE;
|
||||
else if (!strcmp(s, "img"))
|
||||
obj->type = IMG;
|
||||
else if (!strcmp(s, "br"))
|
||||
obj->type = BR;
|
||||
else if (!strcmp(s, "font"))
|
||||
obj->type = FONT;
|
||||
else if (!strcmp(s, "p"))
|
||||
obj->type = P;
|
||||
havobj = 1;
|
||||
}
|
||||
i = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
char w1[1024];
|
||||
char w2[1024];
|
||||
int j = 0;
|
||||
|
||||
w1[0] = 0;
|
||||
w2[0] = 0;
|
||||
while ((s[j]) && (s[j] != '='))
|
||||
{
|
||||
w1[j] = s[j];
|
||||
j++;
|
||||
}
|
||||
w1[j] = 0;
|
||||
if (j < (int)strlen(s))
|
||||
strcpy(w2, &(s[j + 1]));
|
||||
BuildObj(obj, w1, w2);
|
||||
i = 0;
|
||||
}
|
||||
wd++;
|
||||
}
|
||||
}
|
||||
if (!intag)
|
||||
return 1;
|
||||
}
|
||||
if (val == '<')
|
||||
intag = 1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
char *
|
||||
GetTextUntilTag(void)
|
||||
{
|
||||
char s[65536];
|
||||
int i = 0;
|
||||
int val;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
val = fdgetc();
|
||||
if (val == EOF)
|
||||
{
|
||||
s[i] = 0;
|
||||
if (strlen(s) < 1)
|
||||
return NULL;
|
||||
return strdup(s);
|
||||
}
|
||||
s[i++] = (char)val;
|
||||
if (s[i - 1] == '\n')
|
||||
s[i - 1] = ' ';
|
||||
if ((i == 1) && (s[0] == ' '))
|
||||
i--;
|
||||
else if (s[i - 1] == '<')
|
||||
{
|
||||
s[i - 1] = 0;
|
||||
fdjump(-1);
|
||||
if (strlen(s) < 1)
|
||||
return NULL;
|
||||
return strdup(s);
|
||||
}
|
||||
if ((i > 2) && (s[i - 2] == ' ') && (s[i - 1] == ' '))
|
||||
i--;
|
||||
if (i > 65530)
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
GetObjects(FILE * f)
|
||||
{
|
||||
static char have_font = 0;
|
||||
static char in_para = 0;
|
||||
Object obj;
|
||||
char *txt;
|
||||
char buf[4096];
|
||||
int count;
|
||||
|
||||
fdat = NULL;
|
||||
fdat_size = 0;
|
||||
while ((count = fread(buf, 1, 4096, f)) > 0)
|
||||
{
|
||||
if (!fdat)
|
||||
fdat = malloc(count);
|
||||
else
|
||||
fdat = realloc(fdat, (fdat_size + count));
|
||||
memcpy(fdat + fdat_size, buf, count);
|
||||
fdat_size += count;
|
||||
}
|
||||
fdat_ptr = fdat;
|
||||
|
||||
if (page)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num_pages; i++)
|
||||
{
|
||||
int j;
|
||||
|
||||
if (page[i].name)
|
||||
free(page[i].name);
|
||||
if (page[i].background)
|
||||
free(page[i].background);
|
||||
for (j = 0; j < page[i].count; j++)
|
||||
{
|
||||
switch (page[i].obj[j].type)
|
||||
{
|
||||
case IMG:
|
||||
if (((Img_ *)page[i].obj[j].object)->src)
|
||||
free(((Img_ *)page[i].obj[j].object)->src);
|
||||
if (((Img_ *)page[i].obj[j].object)->src2)
|
||||
free(((Img_ *)page[i].obj[j].object)->src2);
|
||||
if (((Img_ *)page[i].obj[j].object)->src3)
|
||||
free(((Img_ *)page[i].obj[j].object)->src3);
|
||||
if (((Img_ *)page[i].obj[j].object)->link)
|
||||
free(((Img_ *)page[i].obj[j].object)->link);
|
||||
break;
|
||||
case BR:
|
||||
break;
|
||||
case FONT:
|
||||
if (((Font_ *)page[i].obj[j].object)->face)
|
||||
free(((Font_ *)page[i].obj[j].object)->face);
|
||||
break;
|
||||
case P:
|
||||
break;
|
||||
case TEXT:
|
||||
break;
|
||||
case PAGE:
|
||||
break;
|
||||
}
|
||||
if (page[i].obj[j].object)
|
||||
free(page[i].obj[j].object);
|
||||
}
|
||||
if (page[i].obj)
|
||||
free(page[i].obj);
|
||||
}
|
||||
free(page);
|
||||
num_pages = 0;
|
||||
page = NULL;
|
||||
have_font = 0;
|
||||
in_para = 0;
|
||||
}
|
||||
|
||||
obj.object = NULL;
|
||||
for (;;)
|
||||
{
|
||||
if ((have_font) && (in_para))
|
||||
{
|
||||
txt = GetTextUntilTag();
|
||||
if (txt)
|
||||
{
|
||||
obj.type = TEXT;
|
||||
obj.object = (void *)txt;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!GetNextTag(&obj))
|
||||
{
|
||||
if (fdat)
|
||||
free(fdat);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!GetNextTag(&obj))
|
||||
{
|
||||
if (fdat)
|
||||
free(fdat);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (obj.type == PAGE)
|
||||
{
|
||||
in_para = 0;
|
||||
have_font = 0;
|
||||
AddPage(&obj);
|
||||
}
|
||||
else if (page)
|
||||
AddObject(&obj);
|
||||
if (obj.type == IMG)
|
||||
in_para = 0;
|
||||
if (obj.type == P)
|
||||
in_para = 1;
|
||||
if (obj.type == FONT)
|
||||
have_font = 1;
|
||||
obj.object = NULL;
|
||||
}
|
||||
free(fdat);
|
||||
}
|
||||
|
||||
int
|
||||
FixPage(int p)
|
||||
{
|
||||
if (p < 0)
|
||||
return 0;
|
||||
if (p >= num_pages)
|
||||
return num_pages - 1;
|
||||
return p;
|
||||
}
|
||||
|
||||
int
|
||||
GetPage(char *name)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num_pages; i++)
|
||||
{
|
||||
if ((page[i].name) && (!strcmp(name, page[i].name)))
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void
|
||||
GetLinkColors(int page_num, int *r, int *g, int *b)
|
||||
{
|
||||
if (page_num < 0)
|
||||
{
|
||||
*r = DEFAULT_LINKCOLOR_R;
|
||||
*g = DEFAULT_LINKCOLOR_G;
|
||||
*b = DEFAULT_LINKCOLOR_B;
|
||||
}
|
||||
else
|
||||
{
|
||||
*r = page[page_num].linkr;
|
||||
*g = page[page_num].linkg;
|
||||
*b = page[page_num].linkb;
|
||||
}
|
||||
}
|
||||
|
||||
Link *
|
||||
RenderPage(Window win, int page_num, int w, int h)
|
||||
{
|
||||
Link *ll = NULL;
|
||||
Page *pg;
|
||||
TextState ts;
|
||||
int i, col_w, col_h;
|
||||
int x, y;
|
||||
int justification = 0;
|
||||
int firstp = 1;
|
||||
ImlibImage *im;
|
||||
int wastext = 0;
|
||||
|
||||
ts.fontname = NULL;
|
||||
ts.style.orientation = FONT_TO_RIGHT;
|
||||
ts.style.mode = MODE_WRAP_WORD;
|
||||
ts.style.justification = 0;
|
||||
ts.style.spacing = 0;
|
||||
ts.font = NULL;
|
||||
ts.fg_col.r = 0;
|
||||
ts.fg_col.g = 0;
|
||||
ts.fg_col.b = 0;
|
||||
ts.bg_col.r = 0;
|
||||
ts.bg_col.g = 0;
|
||||
ts.bg_col.b = 0;
|
||||
ts.effect = 0;
|
||||
ts.efont = NULL;
|
||||
ts.xfont = NULL;
|
||||
ts.xfontset = 0;
|
||||
ts.xfontset_ascent = 0;
|
||||
ts.height = 0;
|
||||
pg = &(page[page_num]);
|
||||
x = pg->padding;
|
||||
y = pg->padding;
|
||||
col_w = ((w - (pg->padding * (pg->columns + 1))) / pg->columns);
|
||||
col_h = h - (pg->padding * 2);
|
||||
if (pg->background)
|
||||
{
|
||||
char tmp[4096];
|
||||
|
||||
sprintf(tmp, "%s/%s", docdir, pg->background);
|
||||
im = Imlib_load_image(id, tmp);
|
||||
if (im)
|
||||
{
|
||||
Imlib_paste_image(id, im, win, 0, 0, w, h);
|
||||
Imlib_destroy_image(id, im);
|
||||
}
|
||||
}
|
||||
for (i = 0; i < pg->count; i++)
|
||||
{
|
||||
char s[32768], ss[32768], wd[4096], *txt;
|
||||
Img_ *img;
|
||||
Font_ *fn;
|
||||
P_ *p;
|
||||
int wc, eol, eot;
|
||||
int link = -1, lx, lw;
|
||||
|
||||
switch (pg->obj[i].type)
|
||||
{
|
||||
case IMG:
|
||||
img = pg->obj[i].object;
|
||||
if (img->src)
|
||||
{
|
||||
char tmp[4096];
|
||||
|
||||
sprintf(tmp, "%s/%s", docdir, img->src);
|
||||
im = Imlib_load_image(id, tmp);
|
||||
if (im)
|
||||
{
|
||||
img->w = im->rgb_width;
|
||||
img->h = im->rgb_height;
|
||||
Imlib_paste_image(id, im, win, img->x, img->y,
|
||||
im->rgb_width, im->rgb_height);
|
||||
Imlib_destroy_image(id, im);
|
||||
}
|
||||
if (img->link)
|
||||
{
|
||||
Link *l;
|
||||
|
||||
l = malloc(sizeof(Link));
|
||||
l->name = strdup(img->link);
|
||||
l->x = img->x;
|
||||
l->y = img->y;
|
||||
l->w = img->w;
|
||||
l->h = img->h;
|
||||
l->next = ll;
|
||||
ll = l;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case BR:
|
||||
if (!wastext)
|
||||
y += ts.height;
|
||||
wastext = 0;
|
||||
break;
|
||||
case FONT:
|
||||
fn = pg->obj[i].object;
|
||||
ts.fontname = NULL;
|
||||
ts.style.orientation = FONT_TO_RIGHT;
|
||||
ts.style.mode = MODE_WRAP_WORD;
|
||||
ts.style.justification = 0;
|
||||
ts.style.spacing = 0;
|
||||
if (ts.font)
|
||||
Fnlib_free_font(fd, ts.font);
|
||||
ts.font = NULL;
|
||||
ts.fg_col.r = 0;
|
||||
ts.fg_col.g = 0;
|
||||
ts.fg_col.b = 0;
|
||||
ts.bg_col.r = 0;
|
||||
ts.bg_col.g = 0;
|
||||
ts.bg_col.b = 0;
|
||||
ts.effect = 0;
|
||||
if (ts.efont)
|
||||
Efont_free(ts.efont);
|
||||
ts.efont = NULL;
|
||||
if (ts.xfont)
|
||||
XFreeFont(disp, ts.xfont);
|
||||
ts.xfont = NULL;
|
||||
if (ts.xfontset)
|
||||
XFreeFontSet(disp, ts.xfontset);
|
||||
ts.xfontset = NULL;
|
||||
ts.xfontset_ascent = 0;
|
||||
ts.height = 0;
|
||||
ts.fontname = fn->face;
|
||||
ts.fg_col.r = fn->r;
|
||||
ts.fg_col.g = fn->g;
|
||||
ts.fg_col.b = fn->b;
|
||||
TextStateLoadFont(&ts);
|
||||
break;
|
||||
case P:
|
||||
p = pg->obj[i].object;
|
||||
if (p)
|
||||
justification = (int)((p->align / 100) * 1024);
|
||||
else
|
||||
justification = 0;
|
||||
if (!firstp)
|
||||
y += ts.height;
|
||||
else
|
||||
firstp = 0;
|
||||
break;
|
||||
case TEXT:
|
||||
txt = pg->obj[i].object;
|
||||
wc = 1;
|
||||
ss[0] = 0;
|
||||
s[0] = 0;
|
||||
eol = 0;
|
||||
eot = 0;
|
||||
for (;;)
|
||||
{
|
||||
char *txt_disp;
|
||||
int tw, th, xspace;
|
||||
int off, j;
|
||||
int sx, sy, ssx, ssy;
|
||||
char link_txt[1024];
|
||||
char link_link[1024];
|
||||
|
||||
wd[0] = 0;
|
||||
word(txt, wc, wd);
|
||||
if (!wd[0])
|
||||
eol = 1;
|
||||
else
|
||||
{
|
||||
if (wd[0] == '_')
|
||||
{
|
||||
link = strlen(s);
|
||||
for (j = 1; wd[j] != '('; j++)
|
||||
wd[j - 1] = wd[j];
|
||||
wd[j - 1] = 0;
|
||||
j++;
|
||||
strcpy(link_link, &(wd[j]));
|
||||
link_link[strlen(link_link) - 1] = 0;
|
||||
strcpy(link_txt, wd);
|
||||
TextSize(&ts, link_txt, &lw, &th, 17);
|
||||
TextSize(&ts, s, &lx, &th, 17);
|
||||
}
|
||||
}
|
||||
wc++;
|
||||
eot++;
|
||||
strcpy(ss, s);
|
||||
strcat(s, wd);
|
||||
if (!eol)
|
||||
strcat(s, " ");
|
||||
xspace = col_w;
|
||||
off = 0;
|
||||
sx = x + off;
|
||||
sy = y;
|
||||
ssx = sx + col_w - 1;
|
||||
ssy = sy + ts.height - 1;
|
||||
for (j = 0; j < pg->count; j++)
|
||||
{
|
||||
if (pg->obj[j].type == IMG)
|
||||
{
|
||||
img = pg->obj[j].object;
|
||||
if ((img->w > 0) && (img->h > 0))
|
||||
{
|
||||
int ix, iy, iix, iiy;
|
||||
|
||||
ix = img->x;
|
||||
iy = img->y;
|
||||
iix = img->x + img->w - 1;
|
||||
iiy = img->y + img->h - 1;
|
||||
|
||||
if ((iy <= ssy) && (iiy >= sy))
|
||||
{
|
||||
if ((ix >= sx) && (ix <= ssx))
|
||||
{
|
||||
if ((iix >= sx) && (iix <= ssx))
|
||||
{
|
||||
if (((ix + iix) / 2) > ((sx + ssx) / 2))
|
||||
ssx = ix - 1;
|
||||
else
|
||||
sx = iix + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ssx = ix - 1;
|
||||
}
|
||||
}
|
||||
else if ((iix >= sx) && (iix <= ssx))
|
||||
{
|
||||
sx = iix + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
off = sx - x;
|
||||
xspace = (ssx - sx) + 1;
|
||||
if (xspace < 0)
|
||||
xspace = 0;
|
||||
TextSize(&ts, s, &tw, &th, 17);
|
||||
txt_disp = ss;
|
||||
if (eot == 1)
|
||||
txt_disp = s;
|
||||
if (((tw > xspace) || (eol)) && (strlen(txt_disp) > 0))
|
||||
{
|
||||
txt_disp[strlen(txt_disp) - 1] = 0;
|
||||
if ((eot == 1) && (tw > xspace))
|
||||
{
|
||||
char p1[4096];
|
||||
int point = 0, cnt = 0;
|
||||
|
||||
while (txt_disp[(point + cnt)])
|
||||
{
|
||||
p1[cnt] = txt_disp[point + cnt];
|
||||
cnt++;
|
||||
p1[cnt] = 0;
|
||||
TextSize(&ts, p1, &tw, &th, 17);
|
||||
if ((tw > xspace) || (!txt_disp[(point + cnt)]))
|
||||
{
|
||||
if (txt_disp[(point + cnt)])
|
||||
{
|
||||
point = point + cnt - 1;
|
||||
p1[cnt - 1] = 0;
|
||||
cnt = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
point = point + cnt;
|
||||
p1[cnt] = 0;
|
||||
cnt = 0;
|
||||
}
|
||||
wastext = 1;
|
||||
TextDraw(&ts, win, p1, x + off, y,
|
||||
xspace, 99999, 17, justification);
|
||||
y += ts.height;
|
||||
if (y >= (h - (pg->padding + ts.height - (ts.height - ts.xfontset_ascent))))
|
||||
{
|
||||
y = pg->padding;
|
||||
x += col_w + pg->padding;
|
||||
}
|
||||
xspace = col_w;
|
||||
off = 0;
|
||||
sx = x + off;
|
||||
sy = y;
|
||||
ssx = sx + col_w - 1;
|
||||
ssy = sy + ts.height - 1;
|
||||
for (j = 0; j < pg->count; j++)
|
||||
{
|
||||
if (pg->obj[j].type == IMG)
|
||||
{
|
||||
img = pg->obj[j].object;
|
||||
if ((img->w > 0) && (img->h > 0))
|
||||
{
|
||||
int ix,
|
||||
iy,
|
||||
iix,
|
||||
iiy;
|
||||
|
||||
ix = img->x;
|
||||
iy = img->y;
|
||||
iix = img->x + img->w - 1;
|
||||
iiy = img->y + img->h - 1;
|
||||
|
||||
if ((iy <= ssy) && (iiy >= sy))
|
||||
{
|
||||
if ((ix >= sx) && (ix <= ssx))
|
||||
{
|
||||
if ((iix >= sx) && (iix <= ssx))
|
||||
{
|
||||
if (((ix + iix) / 2) > ((sx + ssx) / 2))
|
||||
ssx = ix - 1;
|
||||
else
|
||||
sx = iix + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ssx = ix - 1;
|
||||
}
|
||||
}
|
||||
else if ((iix >= sx) && (iix <= ssx))
|
||||
{
|
||||
sx = iix + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
off = sx - x;
|
||||
xspace = (ssx - sx) + 1;
|
||||
if (xspace < 0)
|
||||
xspace = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((tw > xspace) && (eot != 1))
|
||||
wc--;
|
||||
wastext = 1;
|
||||
TextDraw(&ts, win, txt_disp, x + off, y,
|
||||
xspace, 99999, 17, justification);
|
||||
if (link >= 0)
|
||||
{
|
||||
int rr, gg, bb;
|
||||
int r, g, b;
|
||||
int extra;
|
||||
GC gc;
|
||||
XGCValues gcv;
|
||||
|
||||
gc = XCreateGC(disp, win, 0, &gcv);
|
||||
rr = ts.fg_col.r;
|
||||
gg = ts.fg_col.g;
|
||||
bb = ts.fg_col.b;
|
||||
r = ts.fg_col.r = pg->linkr;
|
||||
g = ts.fg_col.g = pg->linkg;
|
||||
b = ts.fg_col.b = pg->linkb;
|
||||
XSetForeground(disp, gc,
|
||||
Imlib_best_color_match(id, &r, &g, &b));
|
||||
TextSize(&ts, txt_disp, &tw, &th, 17);
|
||||
extra = ((xspace - tw) * justification) >> 10;
|
||||
TextDraw(&ts, win, link_txt, x + off + lx + extra, y,
|
||||
99999, 99999, 17, 0);
|
||||
XDrawLine(disp, win, gc,
|
||||
x + off + lx + extra,
|
||||
y + ts.xfontset_ascent,
|
||||
x + off + lx + lw + extra,
|
||||
y + ts.xfontset_ascent);
|
||||
ts.fg_col.r = rr;
|
||||
ts.fg_col.g = gg;
|
||||
ts.fg_col.b = bb;
|
||||
link = -1;
|
||||
XFreeGC(disp, gc);
|
||||
{
|
||||
Link *l;
|
||||
|
||||
l = malloc(sizeof(Link));
|
||||
l->name = strdup(link_link);
|
||||
l->x = x + off + lx + extra;
|
||||
l->y = y;
|
||||
l->w = lw;
|
||||
l->h = ts.height;
|
||||
l->next = ll;
|
||||
ll = l;
|
||||
}
|
||||
}
|
||||
y += ts.height;
|
||||
if (y >= (h - (pg->padding + ts.height - (ts.height - ts.xfontset_ascent))))
|
||||
{
|
||||
y = pg->padding;
|
||||
x += col_w + pg->padding;
|
||||
}
|
||||
}
|
||||
eot = 0;
|
||||
s[0] = 0;
|
||||
}
|
||||
if (eol)
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (y >= (h - (pg->padding + ts.height - (ts.height - ts.xfontset_ascent))))
|
||||
{
|
||||
y = pg->padding;
|
||||
x += col_w + pg->padding;
|
||||
}
|
||||
}
|
||||
|
||||
if (ts.font)
|
||||
Fnlib_free_font(fd, ts.font);
|
||||
if (ts.efont)
|
||||
Efont_free(ts.efont);
|
||||
if (ts.xfont)
|
||||
XFreeFont(disp, ts.xfont);
|
||||
if (ts.xfontset)
|
||||
XFreeFontSet(disp, ts.xfontset);
|
||||
|
||||
return ll;
|
||||
}
|
|
@ -0,0 +1,280 @@
|
|||
/* XPM */
|
||||
static char * next1_xpm[] = {
|
||||
"64 16 261 2",
|
||||
" c None",
|
||||
". c #FEFEFE",
|
||||
"+ c #EBEEE5",
|
||||
"@ c #3B3C3A",
|
||||
"# c #DADCD3",
|
||||
"$ c #D1D3CB",
|
||||
"% c #D3D6CE",
|
||||
"& c #D0D2CA",
|
||||
"* c #CED1CA",
|
||||
"= c #D2D5CD",
|
||||
"- c #D5D7CF",
|
||||
"; c #D0D3CB",
|
||||
"> c #CCCEC7",
|
||||
", c #D6D8D0",
|
||||
"' c #D1D4CC",
|
||||
") c #D5D7D0",
|
||||
"! c #D3D6D0",
|
||||
"~ c #D6D9D1",
|
||||
"{ c #D4D6CE",
|
||||
"] c #D7DAD2",
|
||||
"^ c #D8DBD3",
|
||||
"/ c #DCDFD6",
|
||||
"( c #DEE0D8",
|
||||
"_ c #E1E4DB",
|
||||
": c #E3E4DD",
|
||||
"< c #E3E5DD",
|
||||
"[ c #DFE1DB",
|
||||
"} c #E1E4DC",
|
||||
"| c #DFE1D9",
|
||||
"1 c #DEE0D9",
|
||||
"2 c #E0E3DB",
|
||||
"3 c #DBDCD6",
|
||||
"4 c #DDE0D8",
|
||||
"5 c #E5E8E0",
|
||||
"6 c #E2E5DE",
|
||||
"7 c #939590",
|
||||
"8 c #0F0F0F",
|
||||
"9 c #E4E6DE",
|
||||
"0 c #D6D6D3",
|
||||
"a c #D7D7D4",
|
||||
"b c #D5D5D3",
|
||||
"c c #D6D6D4",
|
||||
"d c #D8D8D6",
|
||||
"e c #D5D5D2",
|
||||
"f c #D4D4D2",
|
||||
"g c #D2D3D0",
|
||||
"h c #D1D2CF",
|
||||
"i c #D4D4D1",
|
||||
"j c #D3D3D1",
|
||||
"k c #D9D9D7",
|
||||
"l c #666666",
|
||||
"m c #CDCCCB",
|
||||
"n c #9B9C97",
|
||||
"o c #535450",
|
||||
"p c #050504",
|
||||
"q c #CBCEC7",
|
||||
"r c #C8C9C6",
|
||||
"s c #C7C7C5",
|
||||
"t c #000000",
|
||||
"u c #C7C6C4",
|
||||
"v c #C9C9C7",
|
||||
"w c #C6C6C4",
|
||||
"x c #CACAC8",
|
||||
"y c #C9CAC7",
|
||||
"z c #CAC9C8",
|
||||
"A c #CDCDCB",
|
||||
"B c #CAC9C7",
|
||||
"C c #CCCCC9",
|
||||
"D c #CFCECC",
|
||||
"E c #D0CFCE",
|
||||
"F c #D3D2D1",
|
||||
"G c #D6D5D3",
|
||||
"H c #D7D7D5",
|
||||
"I c #D8D7D6",
|
||||
"J c #D9DAD7",
|
||||
"K c #D9DAD8",
|
||||
"L c #D7D6D4",
|
||||
"M c #D2D2D0",
|
||||
"N c #D2D1D0",
|
||||
"O c #CFCFCD",
|
||||
"P c #D0D0CD",
|
||||
"Q c #D6D6D5",
|
||||
"R c #D3D4D1",
|
||||
"S c #D4D4D3",
|
||||
"T c #979993",
|
||||
"U c #484946",
|
||||
"V c #020202",
|
||||
"W c #D2D4CC",
|
||||
"X c #C4C5C3",
|
||||
"Y c #C7C7C6",
|
||||
"Z c #C8C9C7",
|
||||
"` c #CBCBC8",
|
||||
" . c #CDCECC",
|
||||
".. c #CECFCD",
|
||||
"+. c #D0D0CE",
|
||||
"@. c #D1D1D0",
|
||||
"#. c #CCCCCA",
|
||||
"$. c #CDCDCC",
|
||||
"%. c #CECECC",
|
||||
"&. c #D1D1CF",
|
||||
"*. c #D3D4D2",
|
||||
"=. c #DADAD8",
|
||||
"-. c #D8D9D7",
|
||||
";. c #D7D7D6",
|
||||
">. c #D3D3D2",
|
||||
",. c #CACBC9",
|
||||
"'. c #9C9E98",
|
||||
"). c #474846",
|
||||
"!. c #E0E3DA",
|
||||
"~. c #CFCFCE",
|
||||
"{. c #CECECD",
|
||||
"]. c #D0D0CF",
|
||||
"^. c #D2D3D1",
|
||||
"/. c #D1D1CE",
|
||||
"(. c #C9CAC8",
|
||||
"_. c #C8C8C7",
|
||||
":. c #CACBC8",
|
||||
"<. c #C5C5C3",
|
||||
"[. c #9B9D97",
|
||||
"}. c #474745",
|
||||
"|. c #030303",
|
||||
"1. c #DFE0D9",
|
||||
"2. c #CECFCC",
|
||||
"3. c #CCCCCB",
|
||||
"4. c #CBCBCA",
|
||||
"5. c #CDCECB",
|
||||
"6. c #D2D2D1",
|
||||
"7. c #D8D8D7",
|
||||
"8. c #92948E",
|
||||
"9. c #434441",
|
||||
"0. c #EDEFE7",
|
||||
"a. c #D1D2D0",
|
||||
"b. c #FFFFFF",
|
||||
"c. c #444542",
|
||||
"d. c #E7EAE1",
|
||||
"e. c #DCDCDC",
|
||||
"f. c #DDDDDC",
|
||||
"g. c #DBDBDA",
|
||||
"h. c #DBDBDB",
|
||||
"i. c #D8D9D8",
|
||||
"j. c #D7D8D6",
|
||||
"k. c #CDCECD",
|
||||
"l. c #CBCBC9",
|
||||
"m. c #CBCBCB",
|
||||
"n. c #CACAC9",
|
||||
"o. c #CCCCCC",
|
||||
"p. c #CECFCE",
|
||||
"q. c #93958F",
|
||||
"r. c #E1E3DB",
|
||||
"s. c #DEDEDD",
|
||||
"t. c #DFDFDD",
|
||||
"u. c #E0E0DF",
|
||||
"v. c #DFDFDE",
|
||||
"w. c #E2E2E0",
|
||||
"x. c #DCDCDA",
|
||||
"y. c #DCDCDB",
|
||||
"z. c #D9D9D8",
|
||||
"A. c #949691",
|
||||
"B. c #E5E8E1",
|
||||
"C. c #DBDBD9",
|
||||
"D. c #434442",
|
||||
"E. c #FDFDFD",
|
||||
"F. c #B5B5B3",
|
||||
"G. c #B6B6B4",
|
||||
"H. c #B7B6B4",
|
||||
"I. c #B8B8B6",
|
||||
"J. c #B9B9B6",
|
||||
"K. c #BAB9B7",
|
||||
"L. c #B8B7B5",
|
||||
"M. c #B8B8B5",
|
||||
"N. c #B9B8B7",
|
||||
"O. c #B9B9B7",
|
||||
"P. c #B7B8B6",
|
||||
"Q. c #B7B7B4",
|
||||
"R. c #B6B7B4",
|
||||
"S. c #B7B8B5",
|
||||
"T. c #BBBAB8",
|
||||
"U. c #BABAB8",
|
||||
"V. c #BCBCBA",
|
||||
"W. c #BDBDBB",
|
||||
"X. c #BEBEBC",
|
||||
"Y. c #BCBCB9",
|
||||
"Z. c #BBBBB9",
|
||||
"`. c #B7B7B5",
|
||||
" + c #BFBFBE",
|
||||
".+ c #B1B2AF",
|
||||
"++ c #4E4F4D",
|
||||
"@+ c #DBDDDA",
|
||||
"#+ c #CCCDCA",
|
||||
"$+ c #CACAC7",
|
||||
"%+ c #C6C6C3",
|
||||
"&+ c #C8C7C4",
|
||||
"*+ c #C8C7C5",
|
||||
"=+ c #C9C8C6",
|
||||
"-+ c #C8C8C6",
|
||||
";+ c #C8C7C6",
|
||||
">+ c #C7C6C5",
|
||||
",+ c #CCCBC9",
|
||||
"'+ c #CBCAC9",
|
||||
")+ c #CECDCC",
|
||||
"!+ c #CDCDCA",
|
||||
"~+ c #CFCECD",
|
||||
"{+ c #919291",
|
||||
"]+ c #50504F",
|
||||
"^+ c #1A1A1A",
|
||||
"/+ c #C7C9C5",
|
||||
"(+ c #8C8D89",
|
||||
"_+ c #8B8C88",
|
||||
":+ c #898A86",
|
||||
"<+ c #8A8B87",
|
||||
"[+ c #888986",
|
||||
"}+ c #888985",
|
||||
"|+ c #8A8B88",
|
||||
"1+ c #898A87",
|
||||
"2+ c #8A8A88",
|
||||
"3+ c #898986",
|
||||
"4+ c #878884",
|
||||
"5+ c #858683",
|
||||
"6+ c #858682",
|
||||
"7+ c #868783",
|
||||
"8+ c #848481",
|
||||
"9+ c #81827E",
|
||||
"0+ c #82837F",
|
||||
"a+ c #81827F",
|
||||
"b+ c #80817D",
|
||||
"c+ c #7F807D",
|
||||
"d+ c #7F7F7C",
|
||||
"e+ c #7E7F7C",
|
||||
"f+ c #7D7E7B",
|
||||
"g+ c #7E7E7B",
|
||||
"h+ c #7E7F7B",
|
||||
"i+ c #7F807E",
|
||||
"j+ c #80817E",
|
||||
"k+ c #3F3F3E",
|
||||
"l+ c #131313",
|
||||
"m+ c #E0E2DB",
|
||||
"n+ c #7B7C78",
|
||||
"o+ c #4B4B49",
|
||||
"p+ c #484847",
|
||||
"q+ c #494A48",
|
||||
"r+ c #4E4E4C",
|
||||
"s+ c #4D4D4C",
|
||||
"t+ c #4D4E4C",
|
||||
"u+ c #4C4D4B",
|
||||
"v+ c #4C4C4B",
|
||||
"w+ c #4D4D4B",
|
||||
"x+ c #4B4C4A",
|
||||
"y+ c #4C4C4A",
|
||||
"z+ c #4B4B4A",
|
||||
"A+ c #4A4A48",
|
||||
"B+ c #4A4B49",
|
||||
"C+ c #494A49",
|
||||
"D+ c #4A4A49",
|
||||
"E+ c #3A3A38",
|
||||
"F+ c #414240",
|
||||
"G+ c #171717",
|
||||
"H+ c #151515",
|
||||
"I+ c #363736",
|
||||
"J+ c #181818",
|
||||
"K+ c #161616",
|
||||
"L+ c #141414",
|
||||
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ",
|
||||
". . # $ % & & $ & * = = - $ ; ; ; > & $ % , % $ = $ = = ' ) % ) ! ~ { ) ] ] ^ ^ ^ ~ ] / / ( _ : < _ [ } | 1 2 2 ( | 3 4 5 6 7 8 ",
|
||||
". 9 0 a a b b c a a a d 0 0 0 0 0 b b e f b g h i b a a b f j f j f f f j j j f f f f f b b d c k a a d d b l a f f c c m n o p ",
|
||||
". q r s t t t u v t t t w t x y t y t t t z A B C C D E F G H I I J I K L 0 f f j M N i f M O P N F F f f f l t Q R G S A T U V ",
|
||||
". W X Y t Z Z t ` t A ...t +.@.t ..#.t A $.%.&.f f *.*.S S S S j j S *.*.R Q =.=.-.Q c ;.c *.c c S S >.>.S l t t j f f ,.'.).V ",
|
||||
". !.~...t %.%.t {.t ].>.>.t ^.g t O ~.t %.%./.O ~.{.~.~.&.~.@.O O ~./.%.#.#.(.#.(.(._.C y :.y (.y (.l l l l l t t t <.w j [.}.|.",
|
||||
". 1...+.t 2.&.t @.t ].].].t 2.3.t 2.#.t 3.` #.#.4.5. . .O ~.~.h j S S ;.H S S S S >.f 6.6.S ;.c 7.7.l t t t t t t t t a &.8.9.|.",
|
||||
". 0.g ^.t +.+.t +.t $.+.+.t 2. .t 2.&.t @.@.S g g ^.&.g a.&.].].a.a.a.S ^.g a.S ^.g R S S S b S b S l t t t t t t t t t b.8.c.|.",
|
||||
". d.e.f.t e.g.t e.t t e.f.h.t t h.i.j.t S ^.^.@.@.^.@.@.k.l.3.+. . .m.l.n.n.n.n.l.3.o.$.+.+.+.+.p...l t t t t t t t t t b.q.c.|.",
|
||||
". r.s.t.t u.v.t u.t v.v.u.t w.u.t u.w.t v.v.t.s.s.x.y.x.x.=.g.K K K J K =.=.k a j.b b b R @.M *.0 R l t t t t t t t t b.z.A.c.V ",
|
||||
". B.` Z t #.x t 3.t 4. .].t +.P t h 2.t #.` l.:.:.l.l. .P O O P @.@.^.+.^.@.^.^.*.*.R M M *.^.].@.f S b.b.b. .t t t b.].C.7 D.|.",
|
||||
". E.F.F.t G.H.t H.t I.J.K.t L.M.t M.N.t I.I.M.J.O.N.I.I.O.P.O.M.M.Q.I.R.Q.S.I.O.T.T.U.V.W.X.W.V.Y.T.Z.Z.U.Z.l t t b.G.`. +.+++|.",
|
||||
". @+l.B t l.#+t x t t t $+t $+$+t %+&+t u *+=+x x x &+&+&+-+=+$+v &+;+>+>+u v ;+y x ,+C '+A )+)+)+D #.#+!+)+l t b.~+~+#.H {+]+^+",
|
||||
". /+(+_+(+_+:+_+(+<+<+<+[+}+<+|+1+2+1+:+3+4+5+6+5+7+5+8+8+9+0+a+0+9+9+a+a+a+0+0+9+0+b+c+c+d+c+d+e+f+f+e+g+h+c+b.c+d+i+j+9+7+k+l+",
|
||||
"m+n+o+p+q+p+o+r+r+++r+r+r+r+r+r+r+r+s+s+s+r+t+u+u+v+u+w+v+x+y+o+o+o+o+o+o+x+o+x+x+x+x+x+z+A+q+A+z+o+B+B+C+C+B+D+D+B+B+o+E+F+G+H+",
|
||||
"I+J+G+G+G+G+K+H+H+H+H+K+K+H+H+H+L+K+G+J+J+G+G+K+K+H+H+H+K+K+K+H+H+H+K+H+L+H+K+K+K+K+G+G+G+H+L+l+L+L+L+L+L+L+l+H+H+l+H+H+V l+l+l+"};
|
|
@ -0,0 +1,286 @@
|
|||
/* XPM */
|
||||
static char * next2_xpm[] = {
|
||||
"64 16 267 2",
|
||||
" c None",
|
||||
". c #131313",
|
||||
"+ c #020202",
|
||||
"@ c #151515",
|
||||
"# c #141414",
|
||||
"$ c #171717",
|
||||
"% c #161616",
|
||||
"& c #181818",
|
||||
"* c #363736",
|
||||
"= c #414240",
|
||||
"- c #3A3A38",
|
||||
"; c #4B4B49",
|
||||
"> c #4A4B49",
|
||||
", c #4A4A49",
|
||||
"' c #494A49",
|
||||
") c #4B4B4A",
|
||||
"! c #4A4A48",
|
||||
"~ c #494A48",
|
||||
"{ c #4B4C4A",
|
||||
"] c #4C4C4A",
|
||||
"^ c #4C4C4B",
|
||||
"/ c #4D4D4B",
|
||||
"( c #4C4D4B",
|
||||
"_ c #4D4E4C",
|
||||
": c #4E4E4C",
|
||||
"< c #4D4D4C",
|
||||
"[ c #4E4F4D",
|
||||
"} c #484847",
|
||||
"| c #7B7C78",
|
||||
"1 c #E0E2DB",
|
||||
"2 c #3F3F3E",
|
||||
"3 c #868783",
|
||||
"4 c #81827E",
|
||||
"5 c #80817E",
|
||||
"6 c #7F807E",
|
||||
"7 c #7F7F7C",
|
||||
"8 c #7F807D",
|
||||
"9 c #7E7F7B",
|
||||
"0 c #7E7E7B",
|
||||
"a c #7E7F7C",
|
||||
"b c #7D7E7B",
|
||||
"c c #80817D",
|
||||
"d c #82837F",
|
||||
"e c #81827F",
|
||||
"f c #848481",
|
||||
"g c #858683",
|
||||
"h c #858682",
|
||||
"i c #878884",
|
||||
"j c #898986",
|
||||
"k c #898A86",
|
||||
"l c #898A87",
|
||||
"m c #8A8A88",
|
||||
"n c #8A8B88",
|
||||
"o c #8A8B87",
|
||||
"p c #888985",
|
||||
"q c #888986",
|
||||
"r c #666666",
|
||||
"s c #8C8D89",
|
||||
"t c #8B8C88",
|
||||
"u c #C7C9C5",
|
||||
"v c #FEFEFE",
|
||||
"w c #1A1A1A",
|
||||
"x c #50504F",
|
||||
"y c #919291",
|
||||
"z c #D7D7D5",
|
||||
"A c #000000",
|
||||
"B c #CDCDCB",
|
||||
"C c #CCCDCA",
|
||||
"D c #CFCECC",
|
||||
"E c #CECDCC",
|
||||
"F c #CCCBC9",
|
||||
"G c #CACAC8",
|
||||
"H c #C9CAC7",
|
||||
"I c #C8C7C6",
|
||||
"J c #C9C9C7",
|
||||
"K c #C7C6C4",
|
||||
"L c #C7C6C5",
|
||||
"M c #C8C7C4",
|
||||
"N c #CACAC7",
|
||||
"O c #C9C8C6",
|
||||
"P c #C8C8C6",
|
||||
"Q c #C8C7C5",
|
||||
"R c #C7C7C4",
|
||||
"S c #C6C6C3",
|
||||
"T c #CBCAC8",
|
||||
"U c #CCCBC8",
|
||||
"V c #CBCBC9",
|
||||
"W c #CAC9C8",
|
||||
"X c #CAC9C7",
|
||||
"Y c #DBDDDA",
|
||||
"Z c #030303",
|
||||
"` c #B1B2AF",
|
||||
" . c #BFBFBE",
|
||||
".. c #B6B6B4",
|
||||
"+. c #B9B9B7",
|
||||
"@. c #BBBBB8",
|
||||
"#. c #BBBBB9",
|
||||
"$. c #BABAB8",
|
||||
"%. c #BBBAB8",
|
||||
"&. c #BCBCB9",
|
||||
"*. c #BDBDBB",
|
||||
"=. c #BEBEBC",
|
||||
"-. c #BCBCBA",
|
||||
";. c #B8B8B6",
|
||||
">. c #B7B8B5",
|
||||
",. c #B7B7B4",
|
||||
"'. c #B6B7B4",
|
||||
"). c #B8B8B5",
|
||||
"!. c #B7B8B6",
|
||||
"~. c #B9B8B7",
|
||||
"{. c #B9B9B6",
|
||||
"]. c #B6B7B5",
|
||||
"^. c #B8B7B5",
|
||||
"/. c #BAB9B7",
|
||||
"(. c #B7B6B4",
|
||||
"_. c #B6B5B3",
|
||||
":. c #B5B5B3",
|
||||
"<. c #FDFDFD",
|
||||
"[. c #434442",
|
||||
"}. c #939590",
|
||||
"|. c #DBDBD9",
|
||||
"1. c #CFCFCD",
|
||||
"2. c #CECFCC",
|
||||
"3. c #D0D0CD",
|
||||
"4. c #D1D1D0",
|
||||
"5. c #D2D3D1",
|
||||
"6. c #D4D4D2",
|
||||
"7. c #D3D4D2",
|
||||
"8. c #D2D2D0",
|
||||
"9. c #D3D4D1",
|
||||
"0. c #D0D0CE",
|
||||
"a. c #CDCECC",
|
||||
"b. c #CACBC8",
|
||||
"c. c #CBCBC8",
|
||||
"d. c #CCCCCA",
|
||||
"e. c #D1D2CF",
|
||||
"f. c #D1D1CF",
|
||||
"g. c #C8C9C7",
|
||||
"h. c #E5E8E1",
|
||||
"i. c #444542",
|
||||
"j. c #949691",
|
||||
"k. c #D9D9D8",
|
||||
"l. c #CFCFCE",
|
||||
"m. c #D3D3D1",
|
||||
"n. c #D5D5D3",
|
||||
"o. c #D6D6D3",
|
||||
"p. c #D7D8D6",
|
||||
"q. c #D7D7D4",
|
||||
"r. c #D9D9D7",
|
||||
"s. c #DADAD8",
|
||||
"t. c #D9DAD8",
|
||||
"u. c #D9DAD7",
|
||||
"v. c #DBDBDA",
|
||||
"w. c #DCDCDA",
|
||||
"x. c #DCDCDB",
|
||||
"y. c #DEDEDD",
|
||||
"z. c #DFDFDD",
|
||||
"A. c #DFDFDE",
|
||||
"B. c #E0E0DE",
|
||||
"C. c #E2E2E0",
|
||||
"D. c #E0E0DF",
|
||||
"E. c #E1E3DB",
|
||||
"F. c #93958F",
|
||||
"G. c #CECECD",
|
||||
"H. c #CCCCCB",
|
||||
"I. c #CCCCCC",
|
||||
"J. c #CECFCD",
|
||||
"K. c #CECFCE",
|
||||
"L. c #CDCDCC",
|
||||
"M. c #CACAC9",
|
||||
"N. c #CBCBCB",
|
||||
"O. c #CDCECD",
|
||||
"P. c #D4D4D3",
|
||||
"Q. c #D8D9D8",
|
||||
"R. c #DBDBDB",
|
||||
"S. c #DADADA",
|
||||
"T. c #FFFFFF",
|
||||
"U. c #DCDCDC",
|
||||
"V. c #E7EAE1",
|
||||
"W. c #92948E",
|
||||
"X. c #D3D3D2",
|
||||
"Y. c #D2D3D0",
|
||||
"Z. c #D1D2D0",
|
||||
"`. c #D0D0CF",
|
||||
" + c #EDEFE7",
|
||||
".+ c #434441",
|
||||
"++ c #D6D6D4",
|
||||
"@+ c #D8D8D7",
|
||||
"#+ c #D7D7D6",
|
||||
"$+ c #D2D2D1",
|
||||
"%+ c #CDCECB",
|
||||
"&+ c #CBCBCA",
|
||||
"*+ c #DFE0D9",
|
||||
"=+ c #474745",
|
||||
"-+ c #9B9D97",
|
||||
";+ c #C5C5C3",
|
||||
">+ c #C7C7C5",
|
||||
",+ c #C9CAC8",
|
||||
"'+ c #CCCCC9",
|
||||
")+ c #C8C8C7",
|
||||
"!+ c #CECECC",
|
||||
"~+ c #D1D1CE",
|
||||
"{+ c #CCCDCB",
|
||||
"]+ c #E0E3DA",
|
||||
"^+ c #474846",
|
||||
"/+ c #9C9E98",
|
||||
"(+ c #CACBC9",
|
||||
"_+ c #D6D6D5",
|
||||
":+ c #D8D9D7",
|
||||
"<+ c #C7C7C6",
|
||||
"[+ c #C4C5C3",
|
||||
"}+ c #D2D4CC",
|
||||
"|+ c #484946",
|
||||
"1+ c #979993",
|
||||
"2+ c #D6D5D3",
|
||||
"3+ c #D3D2D1",
|
||||
"4+ c #D2D1D0",
|
||||
"5+ c #D4D4D1",
|
||||
"6+ c #D7D6D4",
|
||||
"7+ c #D8D7D6",
|
||||
"8+ c #D0CFCE",
|
||||
"9+ c #C9C8C7",
|
||||
"0+ c #C6C6C4",
|
||||
"a+ c #C6C5C4",
|
||||
"b+ c #C8C9C6",
|
||||
"c+ c #CBCEC7",
|
||||
"d+ c #050504",
|
||||
"e+ c #535450",
|
||||
"f+ c #9B9C97",
|
||||
"g+ c #CDCCCB",
|
||||
"h+ c #D8D8D6",
|
||||
"i+ c #D5D5D2",
|
||||
"j+ c #E4E6DE",
|
||||
"k+ c #0F0F0F",
|
||||
"l+ c #E2E5DE",
|
||||
"m+ c #E5E8E0",
|
||||
"n+ c #DDE0D8",
|
||||
"o+ c #DBDCD6",
|
||||
"p+ c #DFE1D9",
|
||||
"q+ c #DEE0D8",
|
||||
"r+ c #E0E3DB",
|
||||
"s+ c #DEE0D9",
|
||||
"t+ c #E1E4DC",
|
||||
"u+ c #DFE1DB",
|
||||
"v+ c #E1E4DB",
|
||||
"w+ c #E3E5DD",
|
||||
"x+ c #E3E4DD",
|
||||
"y+ c #DCDFD6",
|
||||
"z+ c #D7DAD2",
|
||||
"A+ c #D6D9D1",
|
||||
"B+ c #D8DBD3",
|
||||
"C+ c #D5D7D0",
|
||||
"D+ c #D4D6CE",
|
||||
"E+ c #D3D6D0",
|
||||
"F+ c #D3D6CE",
|
||||
"G+ c #D1D4CC",
|
||||
"H+ c #D2D5CD",
|
||||
"I+ c #D1D3CB",
|
||||
"J+ c #D6D8D0",
|
||||
"K+ c #D0D2CA",
|
||||
"L+ c #CCCEC7",
|
||||
"M+ c #D0D3CB",
|
||||
"N+ c #D5D7CF",
|
||||
"O+ c #CED1CA",
|
||||
"P+ c #DADCD3",
|
||||
"Q+ c #3B3C3A",
|
||||
"R+ c #EBEEE5",
|
||||
". . . + @ @ . @ @ . # # # # # # . # @ $ $ $ % % % % @ # @ % @ @ @ % % % @ @ @ % % $ $ & & $ % # @ @ @ % % @ @ @ @ % $ $ $ $ & * ",
|
||||
"@ $ = - ; > > , , > ' ' > > ; ) ! ~ ! ) { { { { { ; { ; ; ; ; ; ; ] { ^ / ( ^ ( ( _ : < < < : : : : : : : : [ : : ; } ~ } ; | 1 ",
|
||||
". 2 3 4 5 6 7 8 8 8 9 0 a b b a 7 8 7 8 8 c d 4 d d e e e 4 4 d e d 4 f f g 3 g h g i j k l m l n o p q o o r s t k t s t s u v ",
|
||||
"w x y z A A A B B A A A C A D E A E A A A F G H I J K L L I M J N O P M M M G G G O Q K R M S P N N N N T U r A V C V W X V Y v ",
|
||||
"Z [ ` .A ..+.A @.A #.$.#.A %.&.A *.=.A -.$.%.%.+.;.>.,.'.;.,.).).+.!.+.;.;.~.+.{.).;.;.+.~.).].).^.;./.{.;.r A A (..._.:.:.<.v ",
|
||||
"Z [.}.|.A 1.1.A 2.A 3.4.5.A 6.4.A 5.7.A 8.9.7.7.5.5.4.5.0.5.4.4.3.1.1.3.a.V V b.b.V c.d.2.2.e.f.3.0.r r r r r A A A d.H g.c.h.v ",
|
||||
"+ i.j.k.A l.f.A m.A n.6.7.A 9.o.A 8.4.A n.n.n.p.q.r.s.s.t.u.t.t.t.v.s.w.w.x.w.y.y.z.A.A.B.C.D.D.D.C.r A A A A A A A A z.z.y.E.v ",
|
||||
"Z i.F.G.A H.I.A J.A 0.0.K.A J.K.A 0.0.A L.I.H.V M.M.M.M.V N.a.a.0.H.V O.4.4.5.4.4.5.5.P.n.p.Q.R.S.v.r A A A A A A A A A T.U.V.v ",
|
||||
"Z i.W.X.A X.P.A f.A A Y.P.Y.A A P.n.P.A P.9.Y.5.P.Z.Y.5.P.Z.Z.Z.`.`.f.Z.Y.f.5.Y.Y.P.4.4.4.f.2.J.a.2.r A A A A A A A A A T.Y. +v ",
|
||||
"Z .+W.f.A X.n.A p.A z q.++A @+@+A #+P.A $+6.X.P.P.P.P.z #+P.P.m.e.l.l.1.a.a.%+&+d.d.c.H.&+d.2.2.H.2.r A A A A A A A A T.0.J.*+v ",
|
||||
"Z =+-+m.A ;+;+A >+A c.,+,+A ,+H A H b.A '+)+,+,+d.,+d.d.!+~+l.1.1.4.l.f.l.l.G.l.1.~+!+!+C l.1.l.Y.5.Z.T.T.T.G.A A A T.{+J.l.]+v ",
|
||||
"+ ^+/+(+A 6.m.A X.A P.X.X.A P.++A 7.++A ++_+:+s.s._+9.7.7.P.m.m.P.P.P.P.7.7.6.6.f.!+L.B L.d.J.J.4.0.0.J.a.B r A A T.g.<+<+[+}+v ",
|
||||
"+ |+1+B A 2+9.A 2+A A A 6.A 3+4+A 1.8.A 5+4+8.m.6.6.o.6+t.7+u.7+7+z 2+3+8+D '+'+X B W W 9+9+H H H G M 0+0+;+r A T.a+L >+>+b+c+v ",
|
||||
"d+e+f+g+++++6.6.q.q.n.h+h+q.q.r.++h+n.n.6.6.6.6.6.m.m.m.6.6.6.m.6.m.6.n.q.q.n.5+e.Y.n.6.i+n.n.o.o.o.o.o.h+q.q.T.++n.n.q.q.o.j+v ",
|
||||
"k+}.l+m+n+o+p+q+r+r+s+p+t+u+v+w+x+v+q+y+y+z+A+B+B+B+z+z+C+D+A+E+C+F+C+G+H+H+I+H+I+F+J+F+I+K+L+M+M+M+I+N+H+H+O+K+I+K+K+F+I+P+v v ",
|
||||
"Q+R+v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v "};
|
|
@ -0,0 +1,279 @@
|
|||
/* XPM */
|
||||
static char * prev1_xpm[] = {
|
||||
"64 16 260 2",
|
||||
" c None",
|
||||
". c #FEFEFE",
|
||||
"+ c #EBEEE5",
|
||||
"@ c #3B3C3A",
|
||||
"# c #DADCD3",
|
||||
"$ c #D1D3CB",
|
||||
"% c #D3D6CE",
|
||||
"& c #D0D2CA",
|
||||
"* c #CED1CA",
|
||||
"= c #D2D5CD",
|
||||
"- c #D5D7CF",
|
||||
"; c #D0D3CB",
|
||||
"> c #CCCEC7",
|
||||
", c #D6D8D0",
|
||||
"' c #D1D4CC",
|
||||
") c #D5D7D0",
|
||||
"! c #D3D6D0",
|
||||
"~ c #D6D9D1",
|
||||
"{ c #D4D6CE",
|
||||
"] c #D7DAD2",
|
||||
"^ c #D8DBD3",
|
||||
"/ c #DCDFD6",
|
||||
"( c #DEE0D8",
|
||||
"_ c #E1E4DB",
|
||||
": c #E3E4DD",
|
||||
"< c #E3E5DD",
|
||||
"[ c #DFE1DB",
|
||||
"} c #E1E4DC",
|
||||
"| c #DFE1D9",
|
||||
"1 c #DEE0D9",
|
||||
"2 c #E0E3DB",
|
||||
"3 c #DBDCD6",
|
||||
"4 c #DDE0D8",
|
||||
"5 c #E5E8E0",
|
||||
"6 c #E2E5DE",
|
||||
"7 c #939590",
|
||||
"8 c #0F0F0F",
|
||||
"9 c #E4E6DE",
|
||||
"0 c #D6D6D3",
|
||||
"a c #D7D7D4",
|
||||
"b c #D5D5D3",
|
||||
"c c #D6D6D4",
|
||||
"d c #666666",
|
||||
"e c #D8D8D6",
|
||||
"f c #D5D5D2",
|
||||
"g c #D4D4D2",
|
||||
"h c #D2D3D0",
|
||||
"i c #D1D2CF",
|
||||
"j c #D4D4D1",
|
||||
"k c #D3D3D1",
|
||||
"l c #D9D9D7",
|
||||
"m c #CDCCCB",
|
||||
"n c #9B9C97",
|
||||
"o c #535450",
|
||||
"p c #050504",
|
||||
"q c #CBCEC7",
|
||||
"r c #C8C9C6",
|
||||
"s c #C7C7C5",
|
||||
"t c #C7C6C5",
|
||||
"u c #C6C5C4",
|
||||
"v c #000000",
|
||||
"w c #FFFFFF",
|
||||
"x c #C5C5C3",
|
||||
"y c #C6C6C4",
|
||||
"z c #C8C7C4",
|
||||
"A c #CACAC8",
|
||||
"B c #C9CAC7",
|
||||
"C c #CAC9C8",
|
||||
"D c #CCCCC9",
|
||||
"E c #CFCECC",
|
||||
"F c #D7D7D5",
|
||||
"G c #D8D7D6",
|
||||
"H c #D9DAD7",
|
||||
"I c #D9DAD8",
|
||||
"J c #D2D2D0",
|
||||
"K c #D2D1D0",
|
||||
"L c #D0D0CD",
|
||||
"M c #D3D4D1",
|
||||
"N c #D6D5D3",
|
||||
"O c #D6D6D5",
|
||||
"P c #D4D4D3",
|
||||
"Q c #CDCDCB",
|
||||
"R c #979993",
|
||||
"S c #484946",
|
||||
"T c #020202",
|
||||
"U c #D2D4CC",
|
||||
"V c #C4C5C3",
|
||||
"W c #C7C7C6",
|
||||
"X c #C8C9C7",
|
||||
"Y c #CDCECC",
|
||||
"Z c #CECFCD",
|
||||
"` c #D0D0CE",
|
||||
" . c #D1D1D0",
|
||||
".. c #CCCCCA",
|
||||
"+. c #CDCDCC",
|
||||
"@. c #D1D1CF",
|
||||
"#. c #D3D4D2",
|
||||
"$. c #DADAD8",
|
||||
"%. c #D7D7D6",
|
||||
"&. c #D3D3D2",
|
||||
"*. c #CACBC9",
|
||||
"=. c #9C9E98",
|
||||
"-. c #474846",
|
||||
";. c #E0E3DA",
|
||||
">. c #CFCFCE",
|
||||
",. c #CCCDCB",
|
||||
"'. c #CECECD",
|
||||
"). c #D1D2D0",
|
||||
"!. c #D2D3D1",
|
||||
"~. c #CCCDCA",
|
||||
"{. c #CECECC",
|
||||
"]. c #CFCFCD",
|
||||
"^. c #C9CAC8",
|
||||
"/. c #C8C8C7",
|
||||
"(. c #CACBC8",
|
||||
"_. c #CBCBC9",
|
||||
":. c #CBCBC8",
|
||||
"<. c #9B9D97",
|
||||
"[. c #474745",
|
||||
"}. c #030303",
|
||||
"|. c #DFE0D9",
|
||||
"1. c #CECFCC",
|
||||
"2. c #CCCCCB",
|
||||
"3. c #CBCBCA",
|
||||
"4. c #D2D2D1",
|
||||
"5. c #D8D8D7",
|
||||
"6. c #D7D8D6",
|
||||
"7. c #92948E",
|
||||
"8. c #434441",
|
||||
"9. c #EDEFE7",
|
||||
"0. c #D0D0CF",
|
||||
"a. c #444542",
|
||||
"b. c #E7EAE1",
|
||||
"c. c #DCDCDC",
|
||||
"d. c #DDDDDC",
|
||||
"e. c #DBDBDA",
|
||||
"f. c #DADADA",
|
||||
"g. c #DBDBDB",
|
||||
"h. c #CACAC9",
|
||||
"i. c #CCCCCC",
|
||||
"j. c #CECFCE",
|
||||
"k. c #93958F",
|
||||
"l. c #E1E3DB",
|
||||
"m. c #DEDEDD",
|
||||
"n. c #DFDFDD",
|
||||
"o. c #E2E2E0",
|
||||
"p. c #E0E0DF",
|
||||
"q. c #E0E0DE",
|
||||
"r. c #DFDFDE",
|
||||
"s. c #DCDCDA",
|
||||
"t. c #DCDCDB",
|
||||
"u. c #D9D9D8",
|
||||
"v. c #949691",
|
||||
"w. c #E5E8E1",
|
||||
"x. c #DBDBD9",
|
||||
"y. c #434442",
|
||||
"z. c #FDFDFD",
|
||||
"A. c #B5B5B3",
|
||||
"B. c #B6B5B3",
|
||||
"C. c #B6B6B4",
|
||||
"D. c #B7B6B4",
|
||||
"E. c #B8B8B6",
|
||||
"F. c #B9B9B6",
|
||||
"G. c #BAB9B7",
|
||||
"H. c #B8B7B5",
|
||||
"I. c #B8B8B5",
|
||||
"J. c #B6B7B5",
|
||||
"K. c #B9B8B7",
|
||||
"L. c #B9B9B7",
|
||||
"M. c #B7B8B6",
|
||||
"N. c #B7B7B4",
|
||||
"O. c #B6B7B4",
|
||||
"P. c #B7B8B5",
|
||||
"Q. c #BBBAB8",
|
||||
"R. c #BABAB8",
|
||||
"S. c #BDBDBB",
|
||||
"T. c #BEBEBC",
|
||||
"U. c #BCBCBA",
|
||||
"V. c #BCBCB9",
|
||||
"W. c #BBBBB9",
|
||||
"X. c #BBBBB8",
|
||||
"Y. c #B7B7B5",
|
||||
"Z. c #BFBFBE",
|
||||
"`. c #B1B2AF",
|
||||
" + c #4E4F4D",
|
||||
".+ c #DBDDDA",
|
||||
"++ c #CAC9C7",
|
||||
"@+ c #CCCBC8",
|
||||
"#+ c #CBCAC8",
|
||||
"$+ c #CACAC7",
|
||||
"%+ c #C8C8C6",
|
||||
"&+ c #C7C7C4",
|
||||
"*+ c #C7C6C4",
|
||||
"=+ c #C8C7C5",
|
||||
"-+ c #C9C8C6",
|
||||
";+ c #C9C9C7",
|
||||
">+ c #C8C7C6",
|
||||
",+ c #CCCBC9",
|
||||
"'+ c #CECDCC",
|
||||
")+ c #CDCDCA",
|
||||
"!+ c #CFCECD",
|
||||
"~+ c #919291",
|
||||
"{+ c #50504F",
|
||||
"]+ c #1A1A1A",
|
||||
"^+ c #C7C9C5",
|
||||
"/+ c #8C8D89",
|
||||
"(+ c #8B8C88",
|
||||
"_+ c #898A86",
|
||||
":+ c #8A8B87",
|
||||
"<+ c #888986",
|
||||
"[+ c #888985",
|
||||
"}+ c #8A8B88",
|
||||
"|+ c #898A87",
|
||||
"1+ c #8A8A88",
|
||||
"2+ c #898986",
|
||||
"3+ c #878884",
|
||||
"4+ c #858683",
|
||||
"5+ c #858682",
|
||||
"6+ c #868783",
|
||||
"7+ c #848481",
|
||||
"8+ c #81827E",
|
||||
"9+ c #82837F",
|
||||
"0+ c #81827F",
|
||||
"a+ c #80817D",
|
||||
"b+ c #7F807D",
|
||||
"c+ c #7F7F7C",
|
||||
"d+ c #7E7F7C",
|
||||
"e+ c #7D7E7B",
|
||||
"f+ c #7E7E7B",
|
||||
"g+ c #7E7F7B",
|
||||
"h+ c #7F807E",
|
||||
"i+ c #80817E",
|
||||
"j+ c #3F3F3E",
|
||||
"k+ c #131313",
|
||||
"l+ c #E0E2DB",
|
||||
"m+ c #7B7C78",
|
||||
"n+ c #4B4B49",
|
||||
"o+ c #484847",
|
||||
"p+ c #494A48",
|
||||
"q+ c #4E4E4C",
|
||||
"r+ c #4D4D4C",
|
||||
"s+ c #4D4E4C",
|
||||
"t+ c #4C4D4B",
|
||||
"u+ c #4C4C4B",
|
||||
"v+ c #4D4D4B",
|
||||
"w+ c #4B4C4A",
|
||||
"x+ c #4C4C4A",
|
||||
"y+ c #4B4B4A",
|
||||
"z+ c #4A4A48",
|
||||
"A+ c #4A4B49",
|
||||
"B+ c #494A49",
|
||||
"C+ c #4A4A49",
|
||||
"D+ c #3A3A38",
|
||||
"E+ c #414240",
|
||||
"F+ c #171717",
|
||||
"G+ c #151515",
|
||||
"H+ c #363736",
|
||||
"I+ c #181818",
|
||||
"J+ c #161616",
|
||||
"K+ c #141414",
|
||||
". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ ",
|
||||
". . # $ % & & $ & * = = - $ ; ; ; > & $ % , % $ = $ = = ' ) % ) ! ~ { ) ] ] ^ ^ ^ ~ ] / / ( _ : < _ [ } | 1 2 2 ( | 3 4 5 6 7 8 ",
|
||||
". 9 0 a a b b c d a a e 0 0 0 0 0 b b f g b h i j b a a b g k g k g g g k k k g g g g g b b e c l a a e e b a a g g c c m n o p ",
|
||||
". q r s s t u d v w x y y z A B B v v v C C v v v D E v v v F v G H v I v 0 g v v J K v g J v L K v v g g g M N O M N P Q R S T ",
|
||||
". U V W W X d v v w Q Y Z ` ` .Z v ..+.v +.v @.g v #.v P P P v k k v #.v M v $.$.v O v %.c v c v P P &.&.P &.&.&.k g g *.=.-.T ",
|
||||
". ;.>.Z ,.d v v v '.d d d ).!.h >.v >.~.v {.v ].>.v >.v @.>. .v ].>.v {.v ..v ..^.v /.v B (.v ^.v ^._.^.^.:.W s y x x y k <.[.}.",
|
||||
". |.Z ` d v v v v v v v v w 1.2.1.v ..3.v :.v ..3.v Y v ].>.>.v k P v %.v P v P P v g v 4.P v c v 5.%.c a F 6.6.5.b &.a @.7.8.}.",
|
||||
". 9.h d v v v v v v v v v w 1.Y Z v @. .v .v h h v @.v ).@.0.v ).).v P v h v P !.v M v P P v P b v h P h k ).@.g P &.P &.7.a.}.",
|
||||
". b.c.d.v v v v v v v v v w e.f.g.v v v P !.v v v !. .v v _.2.` v Y v _.v h.v h._.v i.v ` ` v ` j.Z v j.` ` 0.Z i.i.2.>.'.k.a.}.",
|
||||
". l.m.n.n.v v v v v v v v w o.p.p.v o.q.r.r.v m.v s.t.v s.$.e.I v I v I v $.v a 6.v b v M .v #.0 M v #.g b P k ).@.>.@.u.v.a.T ",
|
||||
". w.:.X B ..v v v w w w w w ` L @.v 1.1...:.v (.v _._.v L ].].L v .v ` v .v !.#.v M v J #.v 0. .g v !. .L Y 1.L ].].0.x.7 y.}.",
|
||||
". z.A.A.B.C.D.v v w E.F.G.E.H.I.J.v K.L.E.E.v F.L.v E.v L.M.L.I.v N.v O.v P.v L.Q.v R.v S.T.v U.V.Q.v W.R.W.R.X.G.L.C.Y.Z.`. +}.",
|
||||
". .+_.++C _.~._.v w @+#+$+$+$+$+%+v z &+*+=+v A A v z v v v -+$+;+v >+t v *+;+v v A ,+D v v '+'+v v ..~.)+'+!+Q Q !+!+..F ~+{+]+",
|
||||
". ^+/+(+/+(+_+(+w w :+:+<+[+:+}+|+1+|+_+2+3+4+5+4+6+4+7+7+8+9+0+9+8+8+0+0+0+9+9+8+9+a+b+b+c+b+c+d+e+e+d+f+g+b+b+b+c+h+i+8+6+j+k+",
|
||||
"l+m+n+o+p+o+n+q+q+ +q+q+q+q+q+q+q+q+r+r+r+q+s+t+t+u+t+v+u+w+x+n+n+n+n+n+n+w+n+w+w+w+w+w+y+z+p+z+y+n+A+A+B+B+A+C+C+A+A+n+D+E+F+G+",
|
||||
"H+I+F+F+F+F+J+G+G+G+G+J+J+G+G+G+K+J+F+I+I+F+F+J+J+G+G+G+J+J+J+G+G+G+J+G+K+G+J+J+J+J+F+F+F+G+K+k+K+K+K+K+K+K+k+G+G+k+G+G+T k+k+k+"};
|
|
@ -0,0 +1,283 @@
|
|||
/* XPM */
|
||||
static char * prev2_xpm[] = {
|
||||
"64 16 264 2",
|
||||
" c None",
|
||||
". c #131313",
|
||||
"+ c #020202",
|
||||
"@ c #151515",
|
||||
"# c #141414",
|
||||
"$ c #171717",
|
||||
"% c #161616",
|
||||
"& c #181818",
|
||||
"* c #363736",
|
||||
"= c #414240",
|
||||
"- c #3A3A38",
|
||||
"; c #4B4B49",
|
||||
"> c #4A4B49",
|
||||
", c #4A4A49",
|
||||
"' c #494A49",
|
||||
") c #4B4B4A",
|
||||
"! c #4A4A48",
|
||||
"~ c #494A48",
|
||||
"{ c #4B4C4A",
|
||||
"] c #4C4C4A",
|
||||
"^ c #4C4C4B",
|
||||
"/ c #4D4D4B",
|
||||
"( c #4C4D4B",
|
||||
"_ c #4D4E4C",
|
||||
": c #4E4E4C",
|
||||
"< c #4D4D4C",
|
||||
"[ c #4E4F4D",
|
||||
"} c #484847",
|
||||
"| c #7B7C78",
|
||||
"1 c #E0E2DB",
|
||||
"2 c #3F3F3E",
|
||||
"3 c #868783",
|
||||
"4 c #81827E",
|
||||
"5 c #80817E",
|
||||
"6 c #7F807E",
|
||||
"7 c #7F7F7C",
|
||||
"8 c #7F807D",
|
||||
"9 c #666666",
|
||||
"0 c #7E7F7B",
|
||||
"a c #7E7E7B",
|
||||
"b c #7E7F7C",
|
||||
"c c #7D7E7B",
|
||||
"d c #80817D",
|
||||
"e c #82837F",
|
||||
"f c #81827F",
|
||||
"g c #848481",
|
||||
"h c #858683",
|
||||
"i c #858682",
|
||||
"j c #878884",
|
||||
"k c #898986",
|
||||
"l c #898A86",
|
||||
"m c #898A87",
|
||||
"n c #8A8A88",
|
||||
"o c #8A8B88",
|
||||
"p c #8A8B87",
|
||||
"q c #888985",
|
||||
"r c #888986",
|
||||
"s c #8C8D89",
|
||||
"t c #8B8C88",
|
||||
"u c #C7C9C5",
|
||||
"v c #FEFEFE",
|
||||
"w c #1A1A1A",
|
||||
"x c #50504F",
|
||||
"y c #919291",
|
||||
"z c #D7D7D5",
|
||||
"A c #CCCCCA",
|
||||
"B c #CFCECD",
|
||||
"C c #000000",
|
||||
"D c #FFFFFF",
|
||||
"E c #CECDCC",
|
||||
"F c #CDCDCA",
|
||||
"G c #CCCDCA",
|
||||
"H c #CFCECC",
|
||||
"I c #CCCCC9",
|
||||
"J c #CCCBC9",
|
||||
"K c #C9C9C7",
|
||||
"L c #C7C6C4",
|
||||
"M c #C8C7C4",
|
||||
"N c #CACAC7",
|
||||
"O c #C9C8C6",
|
||||
"P c #CACAC8",
|
||||
"Q c #C8C7C5",
|
||||
"R c #C7C7C4",
|
||||
"S c #C8C8C6",
|
||||
"T c #CBCAC8",
|
||||
"U c #CCCBC8",
|
||||
"V c #CBCBC9",
|
||||
"W c #CAC9C8",
|
||||
"X c #CAC9C7",
|
||||
"Y c #DBDDDA",
|
||||
"Z c #030303",
|
||||
"` c #B1B2AF",
|
||||
" . c #BFBFBE",
|
||||
".. c #B7B7B5",
|
||||
"+. c #B6B6B4",
|
||||
"@. c #BBBBB9",
|
||||
"#. c #BABAB8",
|
||||
"$. c #BBBAB8",
|
||||
"%. c #BCBCB9",
|
||||
"&. c #BCBCBA",
|
||||
"*. c #BEBEBC",
|
||||
"=. c #BDBDBB",
|
||||
"-. c #B9B9B7",
|
||||
";. c #B7B8B5",
|
||||
">. c #B6B7B4",
|
||||
",. c #B8B8B6",
|
||||
"'. c #B7B7B4",
|
||||
"). c #B8B8B5",
|
||||
"!. c #B9B9B6",
|
||||
"~. c #B9B8B7",
|
||||
"{. c #B6B7B5",
|
||||
"]. c #B8B7B5",
|
||||
"^. c #BAB9B7",
|
||||
"/. c #B7B6B4",
|
||||
"(. c #B6B5B4",
|
||||
"_. c #B6B5B3",
|
||||
":. c #B5B5B3",
|
||||
"<. c #FDFDFD",
|
||||
"[. c #434442",
|
||||
"}. c #939590",
|
||||
"|. c #DBDBD9",
|
||||
"1. c #D0D0CF",
|
||||
"2. c #CDCECC",
|
||||
"3. c #D4D4D3",
|
||||
"4. c #D4D4D2",
|
||||
"5. c #D1D1D0",
|
||||
"6. c #D3D4D2",
|
||||
"7. c #D2D2D0",
|
||||
"8. c #D3D4D1",
|
||||
"9. c #D2D3D1",
|
||||
"0. c #D0D0CE",
|
||||
"a. c #D0D0CD",
|
||||
"b. c #CFCFCD",
|
||||
"c. c #CACBC8",
|
||||
"d. c #CBCBC8",
|
||||
"e. c #CECFCC",
|
||||
"f. c #D1D1CF",
|
||||
"g. c #CBCBCA",
|
||||
"h. c #CCCCCB",
|
||||
"i. c #C9CAC7",
|
||||
"j. c #C8C9C7",
|
||||
"k. c #E5E8E1",
|
||||
"l. c #444542",
|
||||
"m. c #949691",
|
||||
"n. c #D9D9D8",
|
||||
"o. c #D6D6D3",
|
||||
"p. c #D5D5D3",
|
||||
"q. c #D7D8D6",
|
||||
"r. c #D7D7D4",
|
||||
"s. c #DADAD8",
|
||||
"t. c #D9DAD8",
|
||||
"u. c #D9DAD7",
|
||||
"v. c #DBDBDA",
|
||||
"w. c #DCDCDA",
|
||||
"x. c #DCDCDB",
|
||||
"y. c #DEDEDD",
|
||||
"z. c #DFDFDE",
|
||||
"A. c #E0E0DE",
|
||||
"B. c #E2E2E0",
|
||||
"C. c #E0E0DF",
|
||||
"D. c #E1E1DF",
|
||||
"E. c #DFDFDD",
|
||||
"F. c #E1E3DB",
|
||||
"G. c #93958F",
|
||||
"H. c #CECFCD",
|
||||
"I. c #CECFCE",
|
||||
"J. c #CCCCCC",
|
||||
"K. c #CACAC9",
|
||||
"L. c #CBCBCB",
|
||||
"M. c #CDCECD",
|
||||
"N. c #DBDBDB",
|
||||
"O. c #DADADA",
|
||||
"P. c #DDDDDC",
|
||||
"Q. c #DCDCDC",
|
||||
"R. c #DDDDDD",
|
||||
"S. c #E7EAE1",
|
||||
"T. c #92948E",
|
||||
"U. c #D3D3D2",
|
||||
"V. c #D1D2D0",
|
||||
"W. c #D2D3D0",
|
||||
"X. c #CDCDCC",
|
||||
"Y. c #D1D1CE",
|
||||
"Z. c #EDEFE7",
|
||||
"`. c #434441",
|
||||
" + c #D8D8D7",
|
||||
".+ c #D6D6D4",
|
||||
"++ c #D2D2D1",
|
||||
"@+ c #D7D7D6",
|
||||
"#+ c #D3D3D1",
|
||||
"$+ c #CFCFCE",
|
||||
"%+ c #DFE0D9",
|
||||
"&+ c #474745",
|
||||
"*+ c #9B9D97",
|
||||
"=+ c #C6C6C4",
|
||||
"-+ c #C5C5C3",
|
||||
";+ c #C9CAC8",
|
||||
">+ c #C8C8C7",
|
||||
",+ c #CECECC",
|
||||
"'+ c #CECECD",
|
||||
")+ c #CCCDCB",
|
||||
"!+ c #E0E3DA",
|
||||
"~+ c #474846",
|
||||
"{+ c #9C9E98",
|
||||
"]+ c #CACBC9",
|
||||
"^+ c #D6D6D5",
|
||||
"/+ c #CDCDCB",
|
||||
"(+ c #C7C7C6",
|
||||
"_+ c #C4C5C3",
|
||||
":+ c #D2D4CC",
|
||||
"<+ c #484946",
|
||||
"[+ c #979993",
|
||||
"}+ c #D6D5D3",
|
||||
"|+ c #D3D2D1",
|
||||
"1+ c #D2D1D0",
|
||||
"2+ c #D4D4D1",
|
||||
"3+ c #D8D7D6",
|
||||
"4+ c #C6C5C4",
|
||||
"5+ c #C7C6C5",
|
||||
"6+ c #C7C7C5",
|
||||
"7+ c #C8C9C6",
|
||||
"8+ c #CBCEC7",
|
||||
"9+ c #050504",
|
||||
"0+ c #535450",
|
||||
"a+ c #9B9C97",
|
||||
"b+ c #CDCCCB",
|
||||
"c+ c #D8D8D6",
|
||||
"d+ c #D9D9D7",
|
||||
"e+ c #D1D2CF",
|
||||
"f+ c #D5D5D2",
|
||||
"g+ c #E4E6DE",
|
||||
"h+ c #0F0F0F",
|
||||
"i+ c #E2E5DE",
|
||||
"j+ c #E5E8E0",
|
||||
"k+ c #DDE0D8",
|
||||
"l+ c #DBDCD6",
|
||||
"m+ c #DFE1D9",
|
||||
"n+ c #DEE0D8",
|
||||
"o+ c #E0E3DB",
|
||||
"p+ c #DEE0D9",
|
||||
"q+ c #E1E4DC",
|
||||
"r+ c #DFE1DB",
|
||||
"s+ c #E1E4DB",
|
||||
"t+ c #E3E5DD",
|
||||
"u+ c #E3E4DD",
|
||||
"v+ c #DCDFD6",
|
||||
"w+ c #D7DAD2",
|
||||
"x+ c #D6D9D1",
|
||||
"y+ c #D8DBD3",
|
||||
"z+ c #D5D7D0",
|
||||
"A+ c #D4D6CE",
|
||||
"B+ c #D3D6D0",
|
||||
"C+ c #D3D6CE",
|
||||
"D+ c #D1D4CC",
|
||||
"E+ c #D2D5CD",
|
||||
"F+ c #D1D3CB",
|
||||
"G+ c #D6D8D0",
|
||||
"H+ c #D0D2CA",
|
||||
"I+ c #CCCEC7",
|
||||
"J+ c #D0D3CB",
|
||||
"K+ c #D5D7CF",
|
||||
"L+ c #CED1CA",
|
||||
"M+ c #DADCD3",
|
||||
"N+ c #3B3C3A",
|
||||
"O+ c #EBEEE5",
|
||||
". . . + @ @ . @ @ . # # # # # # . # @ $ $ $ % % % % @ # @ % @ @ @ % % % @ @ @ % % $ $ & & $ % # @ @ @ % % @ @ @ @ % $ $ $ $ & * ",
|
||||
"@ $ = - ; > > , , > ' ' > > ; ) ! ~ ! ) { { { { { ; { ; ; ; ; ; ; ] { ^ / ( ^ ( ( _ : < < < : : : : : : : : [ : : ; } ~ } ; | 1 ",
|
||||
". 2 3 4 5 6 7 8 9 8 0 a b c c b 7 8 7 8 8 d e 4 e e f f f 4 4 e f e 4 g g h 3 h i h j k l m n m o p q r p p p s t l t s t s u v ",
|
||||
"w x y z A B B 9 C D E F G A H E E C C C I J C C C K L C C C M C N O C M C M P C C O Q C R M C S N C C N T U J P V G V W X V Y v ",
|
||||
"Z [ ` ...+.9 C C D @.#.@.@.$.%.&.C *.=.C #.C $.-.C ;.C >.,.'.C ).-.C -.C ,.C -.!.C ,.C -.~.C {.C ].,.^.!.,././.(./.+._.:.:.<.v ",
|
||||
"Z [.}.|.1.9 C C C 2.9 9 9 3.4.5.1.C 6.7.C 8.C 6.9.C 5.C 0.9.5.C a.b.C a.C V C c.c.C d.C e.e.C f.C 0.0.1.2.g.h.h.d.P A i.j.d.k.v ",
|
||||
"+ l.m.n.9 C C C C C C C C D 8.o.6.C 5.8.C p.C q.r.C s.C t.u.t.C t.v.C w.C x.C y.y.C z.C A.B.C C.C B.D.C.z.z.C.C.A.z.C.E.E.y.F.v ",
|
||||
"Z l.G.9 C C C C C C C C C D H.I.0.C 0.0.C J.C V K.C K.C V L.2.C 0.h.C M.C 5.C 5.5.C 9.C p.q.C N.O.C N.P.Q.Q.Q.Q.R.v.Q.N.P.Q.S.v ",
|
||||
"Z l.T.U.C C C C C C C C C D 3.p.3.C C C 3.8.C C C V.W.C C V.V.V.C 1.C V.C f.C W.W.C 5.C 5.f.C H.2.e.C 0.0.X.Y.0.b.0.0.9.9.W.Z.v ",
|
||||
"Z `.T.f.r.C C C C C C C C D + +.+C 3.++++4.C 3.C 3.3.C @+3.3.#+C $+C b.C 2.C g.A C d.C g.A C e.h.e.C 1.1.1.7.5.5.f.e.b.0.H.%+v ",
|
||||
"Z &+*+#+=+-+C C C D D D D D ;+i.;+C c.i.I >+C ;+C ;+A C ,+Y.$+b.C 5.C f.C $+C $+b.C ,+C G $+C $+W.9.C U.U.1.'+'+)+,+,+)+H.$+!+v ",
|
||||
"+ ~+{+]+4.4.#+C C D 3.U.U.3.3..+.+C .+@+.+^+C s.s.C 8.C 6.3.#+#+C 3.C 3.C 6.C 4.f.C X.C X.A C H.5.0.C H.2./+d.d.S j.j.(+(+_+:+v ",
|
||||
"+ <+[+/+3.}+8.^+C D 4.4.4.|+|+1+a.C 7.4.2+1+C #+4.C o.C C C u.3+3+C }+|+C H I C C /+W W C C i.i.C C M =+=+-+Q K L 4+5+6+6+7+8+v ",
|
||||
"9+0+a+b+.+.+4.4.D D p.c+c+r.r.d+.+c+p.p.4.4.4.4.4.#+#+#+4.4.4.#+4.#+4.p.r.r.p.2+e+W.p.4.f+p.p.o.o.o.o.o.c+r.r.r..+p.p.r.r.o.g+v ",
|
||||
"h+}.i+j+k+l+m+n+o+o+p+m+q+r+s+t+u+s+n+v+v+w+x+y+y+y+w+w+z+A+x+B+z+C+z+D+E+E+F+E+F+C+G+C+F+H+I+J+J+J+F+K+E+E+L+H+F+H+H+C+F+M+v v ",
|
||||
"N+O+v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v "};
|
|
@ -0,0 +1,420 @@
|
|||
#include "dox.h"
|
||||
|
||||
char **
|
||||
TextGetLines(char *text, int *count)
|
||||
{
|
||||
int i, j, k;
|
||||
char **list = NULL;
|
||||
|
||||
*count = 0;
|
||||
i = 0;
|
||||
k = 0;
|
||||
if (!text)
|
||||
return NULL;
|
||||
*count = 1;
|
||||
while (text[i])
|
||||
{
|
||||
j = i;
|
||||
while ((text[j]) && (text[j] != '\n'))
|
||||
j++;
|
||||
k++;
|
||||
list = realloc(list, sizeof(char *) * k);
|
||||
list[k - 1] = malloc(sizeof(char) * (j - i + 1));
|
||||
|
||||
strncpy(list[k - 1], &(text[i]), (j - i));
|
||||
list[k - 1][j - i] = 0;
|
||||
i = j;
|
||||
if (text[i] == '\n')
|
||||
i++;
|
||||
}
|
||||
*count = k;
|
||||
return list;
|
||||
}
|
||||
|
||||
void
|
||||
TextStateLoadFont(TextState * ts)
|
||||
{
|
||||
if ((ts->font) || (ts->efont) || (ts->xfont) || (ts->xfontset))
|
||||
return;
|
||||
if (!ts->fontname)
|
||||
return;
|
||||
if ((!ts->font) && (!ts->efont))
|
||||
ts->font = Fnlib_load_font(fd, ts->fontname);
|
||||
if ((!ts->font) && (!ts->efont))
|
||||
{
|
||||
char s[4096], w[4046], *dup, *ss;
|
||||
|
||||
dup = NULL;
|
||||
dup = strdup(ts->fontname);
|
||||
ss = strchr(dup, '/');
|
||||
if (ss)
|
||||
{
|
||||
*ss = ' ';
|
||||
word(dup, 1, w);
|
||||
sprintf(s, "%s/%s.ttf", docdir, w);
|
||||
word(dup, 2, w);
|
||||
ts->efont = Efont_load(s, atoi(w));
|
||||
if (ts->efont)
|
||||
{
|
||||
int as, ds;
|
||||
|
||||
Efont_extents(ts->efont, " ", &as, &ds, NULL, NULL, NULL, NULL, NULL);
|
||||
ts->xfontset_ascent = as;
|
||||
ts->height = as + ds;
|
||||
}
|
||||
}
|
||||
if (dup)
|
||||
free(dup);
|
||||
}
|
||||
if ((!ts->font) && (!ts->efont))
|
||||
{
|
||||
if ((!ts->xfont) && (strchr(ts->fontname, ',') == NULL))
|
||||
{
|
||||
ts->xfont = XLoadQueryFont(disp, ts->fontname);
|
||||
if (ts->xfont)
|
||||
{
|
||||
ts->xfontset_ascent = ts->xfont->ascent;
|
||||
ts->height = ts->xfont->ascent + ts->xfont->descent;
|
||||
}
|
||||
}
|
||||
else if (!ts->xfontset)
|
||||
{
|
||||
int i, missing_cnt, font_cnt;
|
||||
int descent;
|
||||
char **missing_list, *def_str, **fn;
|
||||
XFontStruct **fs;
|
||||
|
||||
ts->xfontset = XCreateFontSet(disp, ts->fontname, &missing_list,
|
||||
&missing_cnt, &def_str);
|
||||
if (missing_cnt)
|
||||
{
|
||||
XFreeStringList(missing_list);
|
||||
return;
|
||||
}
|
||||
if (!ts->xfontset)
|
||||
return;
|
||||
font_cnt = XFontsOfFontSet(ts->xfontset, &fs, &fn);
|
||||
ts->xfontset_ascent = 0;
|
||||
for (i = 0; i < font_cnt; i++)
|
||||
ts->xfontset_ascent = MAX(fs[i]->ascent, ts->xfontset_ascent);
|
||||
descent = 0;
|
||||
for (i = 0; i < font_cnt; i++)
|
||||
descent = MAX(fs[i]->descent, descent);
|
||||
ts->height = ts->xfontset_ascent + descent;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
TextSize(TextState * ts, char *text,
|
||||
int *width, int *height, int fsize)
|
||||
{
|
||||
char **lines;
|
||||
int i, num_lines;
|
||||
|
||||
*width = 0;
|
||||
*height = 0;
|
||||
lines = TextGetLines(text, &num_lines);
|
||||
if (!lines)
|
||||
return;
|
||||
if (!ts)
|
||||
return;
|
||||
TextStateLoadFont(ts);
|
||||
if (ts->font)
|
||||
{
|
||||
for (i = 0; i < num_lines; i++)
|
||||
{
|
||||
int high, wid, dummy;
|
||||
|
||||
Fnlib_measure(fd, ts->font, 0, 0, 999999, 999999,
|
||||
0, 0, fsize, &ts->style, (unsigned char *)lines[i],
|
||||
0, 0, &dummy, &dummy, &wid, &high, &dummy,
|
||||
&dummy, &dummy, &dummy);
|
||||
*height += high;
|
||||
if (wid > *width)
|
||||
*width = wid;
|
||||
}
|
||||
}
|
||||
else if (ts->efont)
|
||||
{
|
||||
for (i = 0; i < num_lines; i++)
|
||||
{
|
||||
int ascent, descent, wid;
|
||||
|
||||
Efont_extents(ts->efont, lines[i], &ascent, &descent, &wid,
|
||||
NULL, NULL, NULL, NULL);
|
||||
*height += ascent + descent;
|
||||
if (wid > *width)
|
||||
*width = wid;
|
||||
}
|
||||
}
|
||||
else if (ts->xfontset)
|
||||
{
|
||||
for (i = 0; i < num_lines; i++)
|
||||
{
|
||||
XRectangle ret1, ret2;
|
||||
|
||||
XmbTextExtents(ts->xfontset, lines[i], strlen(lines[i]), &ret1, &ret2);
|
||||
*height += ret2.height;
|
||||
if (ret2.width > *width)
|
||||
*width = ret2.width;
|
||||
}
|
||||
}
|
||||
else if ((ts->xfont) && (ts->xfont->min_byte1 == 0) &&
|
||||
(ts->xfont->max_byte1 == 0))
|
||||
{
|
||||
for (i = 0; i < num_lines; i++)
|
||||
{
|
||||
int wid;
|
||||
|
||||
wid = XTextWidth(ts->xfont, lines[i], strlen(lines[i]));
|
||||
*height += ts->xfont->ascent + ts->xfont->descent;
|
||||
if (wid > *width)
|
||||
*width = wid;
|
||||
}
|
||||
}
|
||||
else if ((ts->xfont))
|
||||
{
|
||||
for (i = 0; i < num_lines; i++)
|
||||
{
|
||||
int wid;
|
||||
|
||||
wid = XTextWidth16(ts->xfont, (XChar2b *) lines[i],
|
||||
strlen(lines[i]) / 2);
|
||||
*height += ts->xfont->ascent + ts->xfont->descent;
|
||||
if (wid > *width)
|
||||
*width = wid;
|
||||
}
|
||||
}
|
||||
freestrlist(lines, num_lines);
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
TextDraw(TextState * ts, Window win, char *text,
|
||||
int x, int y, int w, int h, int fsize,
|
||||
int justification)
|
||||
{
|
||||
char **lines;
|
||||
int i, num_lines;
|
||||
int xx, yy;
|
||||
XGCValues gcv;
|
||||
static GC gc = 0;
|
||||
int r, g, b;
|
||||
|
||||
lines = TextGetLines(text, &num_lines);
|
||||
if (!lines)
|
||||
return;
|
||||
if (!ts)
|
||||
return;
|
||||
TextStateLoadFont(ts);
|
||||
xx = x;
|
||||
yy = y;
|
||||
if (!gc)
|
||||
gc = XCreateGC(disp, win, 0, &gcv);
|
||||
if (ts->font)
|
||||
{
|
||||
for (i = 0; i < num_lines; i++)
|
||||
{
|
||||
int high, wid, dummy;
|
||||
|
||||
Fnlib_measure(fd, ts->font, 0, 0, 999999, 999999,
|
||||
0, 0, fsize, &ts->style, (unsigned char *)lines[i],
|
||||
0, 0, &dummy, &dummy, &wid, &high, &dummy,
|
||||
&dummy, &dummy, &dummy);
|
||||
if ((ts->style.orientation == FONT_TO_UP) ||
|
||||
(ts->style.orientation == FONT_TO_DOWN))
|
||||
fsize = w;
|
||||
xx = x + (((w - wid) * justification) >> 10);
|
||||
Fnlib_draw(fd, ts->font, win, 0, xx, yy, w, h,
|
||||
0, 0, fsize, &ts->style, (unsigned char *)lines[i]);
|
||||
yy += high;
|
||||
}
|
||||
}
|
||||
else if (ts->efont)
|
||||
{
|
||||
for (i = 0; i < num_lines; i++)
|
||||
{
|
||||
int ascent, descent, wid;
|
||||
|
||||
Efont_extents(ts->efont, lines[i], &ascent, &descent, &wid,
|
||||
NULL, NULL, NULL, NULL);
|
||||
if (i == 0)
|
||||
yy += ascent;
|
||||
xx = x + (((w - wid) * justification) >> 10);
|
||||
if (ts->effect == 1)
|
||||
{
|
||||
r = ts->bg_col.r;
|
||||
g = ts->bg_col.g;
|
||||
b = ts->bg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
EFont_draw_string(disp, win, gc, xx + 1, yy + 1,
|
||||
lines[i], ts->efont, Imlib_get_visual(id),
|
||||
Imlib_get_colormap(id));
|
||||
}
|
||||
else if (ts->effect == 2)
|
||||
{
|
||||
r = ts->bg_col.r;
|
||||
g = ts->bg_col.g;
|
||||
b = ts->bg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
EFont_draw_string(disp, win, gc, xx - 1, yy,
|
||||
lines[i], ts->efont, Imlib_get_visual(id),
|
||||
Imlib_get_colormap(id));
|
||||
EFont_draw_string(disp, win, gc, xx + 1, yy,
|
||||
lines[i], ts->efont, Imlib_get_visual(id),
|
||||
Imlib_get_colormap(id));
|
||||
EFont_draw_string(disp, win, gc, xx, yy - 1,
|
||||
lines[i], ts->efont, Imlib_get_visual(id),
|
||||
Imlib_get_colormap(id));
|
||||
EFont_draw_string(disp, win, gc, xx, yy + 1,
|
||||
lines[i], ts->efont, Imlib_get_visual(id),
|
||||
Imlib_get_colormap(id));
|
||||
}
|
||||
r = ts->fg_col.r;
|
||||
g = ts->fg_col.g;
|
||||
b = ts->fg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
EFont_draw_string(disp, win, gc, xx, yy,
|
||||
lines[i], ts->efont, Imlib_get_visual(id),
|
||||
Imlib_get_colormap(id));
|
||||
yy += ascent + descent;
|
||||
}
|
||||
}
|
||||
else if (ts->xfontset)
|
||||
{
|
||||
for (i = 0; i < num_lines; i++)
|
||||
{
|
||||
XRectangle ret1, ret2;
|
||||
|
||||
XmbTextExtents(ts->xfontset, lines[i], strlen(lines[i]), &ret1, &ret2);
|
||||
if (i == 0)
|
||||
yy += ts->xfontset_ascent;
|
||||
xx = x + (((w - ret2.width) * justification) >> 10);
|
||||
if (ts->effect == 1)
|
||||
{
|
||||
r = ts->bg_col.r;
|
||||
g = ts->bg_col.g;
|
||||
b = ts->bg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
XmbDrawString(disp, win, ts->xfontset, gc, xx + 1, yy + 1,
|
||||
lines[i], strlen(lines[i]));
|
||||
}
|
||||
else if (ts->effect == 2)
|
||||
{
|
||||
r = ts->bg_col.r;
|
||||
g = ts->bg_col.g;
|
||||
b = ts->bg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
XmbDrawString(disp, win, ts->xfontset, gc, xx - 1, yy,
|
||||
lines[i], strlen(lines[i]));
|
||||
XmbDrawString(disp, win, ts->xfontset, gc, xx + 1, yy,
|
||||
lines[i], strlen(lines[i]));
|
||||
XmbDrawString(disp, win, ts->xfontset, gc, xx, yy - 1,
|
||||
lines[i], strlen(lines[i]));
|
||||
XmbDrawString(disp, win, ts->xfontset, gc, xx, yy + 1,
|
||||
lines[i], strlen(lines[i]));
|
||||
}
|
||||
r = ts->fg_col.r;
|
||||
g = ts->fg_col.g;
|
||||
b = ts->fg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
XmbDrawString(disp, win, ts->xfontset, gc, xx, yy,
|
||||
lines[i], strlen(lines[i]));
|
||||
yy += ret2.height;
|
||||
}
|
||||
}
|
||||
else if ((ts->xfont) && (ts->xfont->min_byte1 == 0) &&
|
||||
(ts->xfont->max_byte1 == 0))
|
||||
{
|
||||
XSetFont(disp, gc, ts->xfont->fid);
|
||||
for (i = 0; i < num_lines; i++)
|
||||
{
|
||||
int wid;
|
||||
|
||||
wid = XTextWidth(ts->xfont, lines[i], strlen(lines[i]));
|
||||
if (i == 0)
|
||||
yy += ts->xfont->ascent;
|
||||
xx = x + (((w - wid) * justification) >> 10);
|
||||
if (ts->effect == 1)
|
||||
{
|
||||
r = ts->bg_col.r;
|
||||
g = ts->bg_col.g;
|
||||
b = ts->bg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
XDrawString(disp, win, gc, xx + 1, yy + 1,
|
||||
lines[i], strlen(lines[i]));
|
||||
}
|
||||
else if (ts->effect == 2)
|
||||
{
|
||||
r = ts->bg_col.r;
|
||||
g = ts->bg_col.g;
|
||||
b = ts->bg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
XDrawString(disp, win, gc, xx - 1, yy,
|
||||
lines[i], strlen(lines[i]));
|
||||
XDrawString(disp, win, gc, xx + 1, yy,
|
||||
lines[i], strlen(lines[i]));
|
||||
XDrawString(disp, win, gc, xx, yy - 1,
|
||||
lines[i], strlen(lines[i]));
|
||||
XDrawString(disp, win, gc, xx, yy + 1,
|
||||
lines[i], strlen(lines[i]));
|
||||
}
|
||||
r = ts->fg_col.r;
|
||||
g = ts->fg_col.g;
|
||||
b = ts->fg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
XDrawString(disp, win, gc, xx, yy,
|
||||
lines[i], strlen(lines[i]));
|
||||
yy += ts->xfont->ascent + ts->xfont->descent;
|
||||
}
|
||||
}
|
||||
else if ((ts->xfont))
|
||||
{
|
||||
XSetFont(disp, gc, ts->xfont->fid);
|
||||
for (i = 0; i < num_lines; i++)
|
||||
{
|
||||
int wid;
|
||||
|
||||
wid = XTextWidth16(ts->xfont, (XChar2b *) lines[i],
|
||||
strlen(lines[i]) / 2);
|
||||
if (i == 0)
|
||||
yy += ts->xfont->ascent;
|
||||
xx = x + (((w - wid) * justification) >> 10);
|
||||
if (ts->effect == 1)
|
||||
{
|
||||
r = ts->bg_col.r;
|
||||
g = ts->bg_col.g;
|
||||
b = ts->bg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
XDrawString16(disp, win, gc, xx + 1, yy + 1,
|
||||
(XChar2b *) lines[i], strlen(lines[i]) / 2);
|
||||
}
|
||||
else if (ts->effect == 2)
|
||||
{
|
||||
r = ts->bg_col.r;
|
||||
g = ts->bg_col.g;
|
||||
b = ts->bg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
XDrawString16(disp, win, gc, xx - 1, yy,
|
||||
(XChar2b *) lines[i], strlen(lines[i]) / 2);
|
||||
XDrawString16(disp, win, gc, xx + 1, yy,
|
||||
(XChar2b *) lines[i], strlen(lines[i]) / 2);
|
||||
XDrawString16(disp, win, gc, xx, yy - 1,
|
||||
(XChar2b *) lines[i], strlen(lines[i]) / 2);
|
||||
XDrawString16(disp, win, gc, xx, yy + 1,
|
||||
(XChar2b *) lines[i], strlen(lines[i]) / 2);
|
||||
}
|
||||
r = ts->fg_col.r;
|
||||
g = ts->fg_col.g;
|
||||
b = ts->fg_col.b;
|
||||
XSetForeground(disp, gc, Imlib_best_color_match(id, &r, &g, &b));
|
||||
XDrawString16(disp, win, gc, xx, yy,
|
||||
(XChar2b *) lines[i], strlen(lines[i]) / 2);
|
||||
yy += ts->xfont->ascent + ts->xfont->descent;
|
||||
}
|
||||
}
|
||||
freestrlist(lines, num_lines);
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,259 @@
|
|||
/* XPM */
|
||||
static char * title_xpm[] = {
|
||||
"368 16 240 2",
|
||||
" c None",
|
||||
". c #D2D2D0",
|
||||
"+ c #D0D0CE",
|
||||
"@ c #D1D1CF",
|
||||
"# c #CFCFCD",
|
||||
"$ c #CFCFCC",
|
||||
"% c #CECECC",
|
||||
"& c #CECECB",
|
||||
"* c #CDCDCB",
|
||||
"= c #CCCCCA",
|
||||
"- c #CBCBC9",
|
||||
"; c #CBCBC8",
|
||||
"> c #CCCCC9",
|
||||
", c #CCCBC9",
|
||||
"' c #CDCDCA",
|
||||
") c #CBCBC7",
|
||||
"! c #C8C8C5",
|
||||
"~ c #C9C9C6",
|
||||
"{ c #C9C9C7",
|
||||
"] c #CECDCA",
|
||||
"^ c #CDCCC9",
|
||||
"/ c #D0D0CD",
|
||||
"( c #D2D2CF",
|
||||
"_ c #D3D3D0",
|
||||
": c #D3D3D1",
|
||||
"< c #D4D4D1",
|
||||
"[ c #D6D6D3",
|
||||
"} c #D4D4D2",
|
||||
"| c #D6D6D4",
|
||||
"1 c #D7D7D5",
|
||||
"2 c #D8D8D6",
|
||||
"3 c #D9D9D7",
|
||||
"4 c #D6D6D5",
|
||||
"5 c #DCDCDA",
|
||||
"6 c #DEDEDC",
|
||||
"7 c #DDDDDB",
|
||||
"8 c #DEDDDB",
|
||||
"9 c #DADAD8",
|
||||
"0 c #DBDBD9",
|
||||
"a c #DCDCD9",
|
||||
"b c #DDDCDA",
|
||||
"c c #DDDDDA",
|
||||
"d c #DAD9D7",
|
||||
"e c #D9D9D6",
|
||||
"f c #D8D7D5",
|
||||
"g c #D7D7D4",
|
||||
"h c #D7D6D4",
|
||||
"i c #D5D4D2",
|
||||
"j c #D5D4D1",
|
||||
"k c #D3D2D0",
|
||||
"l c #D4D3CF",
|
||||
"m c #D6D6D2",
|
||||
"n c #D8D8D5",
|
||||
"o c #DBDAD8",
|
||||
"p c #D9D8D6",
|
||||
"q c #D6D5D3",
|
||||
"r c #D5D5D2",
|
||||
"s c #D5D5D3",
|
||||
"t c #D4D3D1",
|
||||
"u c #D1D0CE",
|
||||
"v c #CACAC7",
|
||||
"w c #CCCCC8",
|
||||
"x c #D7D6D3",
|
||||
"y c #DADAD7",
|
||||
"z c #D6D5D4",
|
||||
"A c #D5D4D3",
|
||||
"B c #979795",
|
||||
"C c #979695",
|
||||
"D c #959493",
|
||||
"E c #D2D1CF",
|
||||
"F c #D3D2D1",
|
||||
"G c #949492",
|
||||
"H c #D4D3D2",
|
||||
"I c #D8D7D6",
|
||||
"J c #989796",
|
||||
"K c #D7D6D5",
|
||||
"L c #999897",
|
||||
"M c #D9D8D7",
|
||||
"N c #989896",
|
||||
"O c #D2D1D0",
|
||||
"P c #D4D3D0",
|
||||
"Q c #D1D1CE",
|
||||
"R c #D2D1CE",
|
||||
"S c #D1D0CF",
|
||||
"T c #CFCECD",
|
||||
"U c #D0CFCD",
|
||||
"V c #CFCECC",
|
||||
"W c #D0CFCC",
|
||||
"X c #D1D0CD",
|
||||
"Y c #CECDCC",
|
||||
"Z c #CECDCB",
|
||||
"` c #CFCECB",
|
||||
" . c #CDCCCA",
|
||||
".. c #9C9C99",
|
||||
"+. c #000000",
|
||||
"@. c #999997",
|
||||
"#. c #969693",
|
||||
"$. c #949491",
|
||||
"%. c #D7D7D3",
|
||||
"&. c #DCDCDB",
|
||||
"*. c #DFDFDD",
|
||||
"=. c #DEDEDB",
|
||||
"-. c #DFDFDC",
|
||||
";. c #E1E1DF",
|
||||
">. c #E0E0DD",
|
||||
",. c #E1E1E0",
|
||||
"'. c #E0E0DE",
|
||||
"). c #DBDBD8",
|
||||
"!. c #939290",
|
||||
"~. c #FFFFFF",
|
||||
"{. c #949391",
|
||||
"]. c #C0C0C0",
|
||||
"^. c #91918F",
|
||||
"/. c #949392",
|
||||
"(. c #989795",
|
||||
"_. c #D7D7D6",
|
||||
":. c #D0CFCE",
|
||||
"<. c #CCCBCA",
|
||||
"[. c #DBDAD7",
|
||||
"}. c #DCDBD9",
|
||||
"|. c #DCDBDA",
|
||||
"1. c #DBDAD9",
|
||||
"2. c #DAD9D8",
|
||||
"3. c #9E9E9C",
|
||||
"4. c #9F9F9D",
|
||||
"5. c #9D9D9B",
|
||||
"6. c #9D9D9A",
|
||||
"7. c #9C9C9A",
|
||||
"8. c #9B9B99",
|
||||
"9. c #9E9E9B",
|
||||
"0. c #DBDBDA",
|
||||
"a. c #DDDDDC",
|
||||
"b. c #E0E0DF",
|
||||
"c. c #939391",
|
||||
"d. c #939291",
|
||||
"e. c #969593",
|
||||
"f. c #9F9E9C",
|
||||
"g. c #DFDEDD",
|
||||
"h. c #A1A19F",
|
||||
"i. c #DEDDDC",
|
||||
"j. c #9D9C9B",
|
||||
"k. c #9D9C9A",
|
||||
"l. c #9A9A98",
|
||||
"m. c #DDDCDB",
|
||||
"n. c #D4D4D3",
|
||||
"o. c #D5D5D4",
|
||||
"p. c #D3D2CF",
|
||||
"q. c #CAC9C8",
|
||||
"r. c #CAC9C7",
|
||||
"s. c #CDCCCB",
|
||||
"t. c #CFCFCE",
|
||||
"u. c #929291",
|
||||
"v. c #999998",
|
||||
"w. c #979796",
|
||||
"x. c #9C9C9B",
|
||||
"y. c #9D9D9C",
|
||||
"z. c #A0A09F",
|
||||
"A. c #9E9E9D",
|
||||
"B. c #DADAD9",
|
||||
"C. c #D9D9D8",
|
||||
"D. c #DFDFDE",
|
||||
"E. c #E1E1E1",
|
||||
"F. c #DEDEDD",
|
||||
"G. c #D3D3D2",
|
||||
"H. c #D8D8D7",
|
||||
"I. c #D2D2D1",
|
||||
"J. c #D1D1D0",
|
||||
"K. c #E0E0E0",
|
||||
"L. c #D0D0CF",
|
||||
"M. c #989897",
|
||||
"N. c #E0DFDE",
|
||||
"O. c #9A9A99",
|
||||
"P. c #DFDFDF",
|
||||
"Q. c #A2A2A1",
|
||||
"R. c #A2A2A2",
|
||||
"S. c #949493",
|
||||
"T. c #D3D3D3",
|
||||
"U. c #969694",
|
||||
"V. c #D7D7D7",
|
||||
"W. c #D6D6D6",
|
||||
"X. c #D5D5D5",
|
||||
"Y. c #DADADA",
|
||||
"Z. c #D9D9D9",
|
||||
"`. c #DDDDDD",
|
||||
" + c #DCDCDC",
|
||||
".+ c #DEDEDE",
|
||||
"++ c #DBDBDB",
|
||||
"@+ c #E2E2E1",
|
||||
"#+ c #E2E2E2",
|
||||
"$+ c #E4E4E2",
|
||||
"%+ c #E3E3E2",
|
||||
"&+ c #E3E3E1",
|
||||
"*+ c #E5E5E3",
|
||||
"=+ c #E5E5E2",
|
||||
"-+ c #E6E7E5",
|
||||
";+ c #E2E2E0",
|
||||
">+ c #E4E4E3",
|
||||
",+ c #E4E4E1",
|
||||
"'+ c #E5E5E4",
|
||||
")+ c #E4E5E3",
|
||||
"!+ c #CECECD",
|
||||
"~+ c #CCCCCB",
|
||||
"{+ c #CDCDCC",
|
||||
"]+ c #D2D2D2",
|
||||
"^+ c #D4D4D4",
|
||||
"/+ c #D6D5D5",
|
||||
"(+ c #D1D1D1",
|
||||
"_+ c #D0D0D0",
|
||||
":+ c #DCDBDB",
|
||||
"<+ c #E6E6E4",
|
||||
"[+ c #E7E8E6",
|
||||
"}+ c #D8D8D8",
|
||||
"|+ c #CCCDCA",
|
||||
"1+ c #CACAC8",
|
||||
"2+ c #CCCBC8",
|
||||
"3+ c #CBCAC8",
|
||||
"4+ c #C8C8C6",
|
||||
"5+ c #C6C6C3",
|
||||
"6+ c #C8C7C4",
|
||||
"7+ c #C7C7C4",
|
||||
"8+ c #C7C6C4",
|
||||
"9+ c #C8C7C5",
|
||||
"0+ c #C9C8C6",
|
||||
"a+ c #C8C7C6",
|
||||
"b+ c #C7C6C5",
|
||||
"c+ c #C9CAC7",
|
||||
"d+ c #CBCAC9",
|
||||
"e+ c #CDCECB",
|
||||
"f+ c #D8D9D7",
|
||||
"g+ c #DDDCDC",
|
||||
"h+ c #C5C5C2",
|
||||
"i+ c #C5C6C3",
|
||||
"j+ c #C4C4C2",
|
||||
"k+ c #C3C3C1",
|
||||
"l+ c #C2C1C0",
|
||||
"m+ c #C4C3C1",
|
||||
"n+ c #C2C1BF",
|
||||
"o+ c #C3C2C0",
|
||||
"p+ c #D2D3D0",
|
||||
"q+ c #D1D2CF",
|
||||
". + . . @ # $ # # % % & * = - ; > > = ; ; - - > > , ' > & ' ' ' = > ) ) ! ! ! ! ~ ! ! ! ~ { ) ' ] ^ & / / / $ / ( _ : @ ( . _ _ @ < [ [ [ < } | 1 2 1 3 2 1 | 4 2 2 5 5 6 6 7 8 8 9 3 0 5 0 a 7 b b 6 5 c 0 9 d 3 2 2 e | | f g [ h i f f [ i j k l [ [ [ m n o o o o f [ f n n h h e d p f e g f q i r r i r i s t . u & & $ $ & / & * ' ' % ' ; v ; ; v { v ; ; - ; w ' ' % = & $ / / / # $ + / / + # % % $ + : . i g 1 x 1 1 n n 2 3 3 1 3 9 y y 9 3 3 2 1 g 2 3 2 n 2 9 3 1 1 1 2 e n 2 f 1 r < z [ r < . : . @ @ @ @ @ . : : @ @ : _ < : : : . . + . . @ # $ # # % % & * = - ; > > = ; ; - - > > , ' > & ' ' ' = > ) ) ! ! ! ! ~ ! ! ! ~ { ) ' ] ^ & / / / $ / ( _ : @ ( . _ _ @ < [ [ [ < } | 1 2 1 3 2 1 | 4 2 2 5 5 6 6 7 8 8 9 3 0 5 0 a 7 b b 6 5 c 0 ",
|
||||
"A B C D ( E k F : G H H i i q I 1 J [ z K L z A : t k t } < A } A h g M 2 2 I 2 M p f g z N K } h p d p p h z z s k O q < P k E Q u R E F z K h M h q f z q i k k k E O _ } } A z | K K | I 1 1 p p 1 3 n h g q K K g q r q | | z } < : < < . i [ [ [ < } | 1 2 1 3 2 1 | 4 2 2 5 0 7 7 5 b 5 3 2 3 9 3 e 3 f p 3 M 9 3 2 p 1 z K i t t H F F @ @ + u R R t t H t t q K I I p h I h q q H } q K s A | | h q s A z q K z 1 2 z I h 2 f | K p p f f K z s O k R u u S S S S t k H t S S T U V U U W % U U X u U U T U ] Y V V U Z ` U U Y .V u O k F A | z H ( E k F : : H H i i q I 1 K [ z K I z A : t k t } < A } A h g M 2 2 I 2 M p f g z 1 K } h p d p p h z z s k O q < P k E Q u R E F z K h M h q f z q i k k k E O _ } } A z | K K | I 1 1 p p 1 3 n h ",
|
||||
"0 ..+.+.+.3 3 2 2 @.+.| s [ r < r #.+.: } $.+.< < : : @ @ . . : s s } } . s r s s s < s s $.+.[ : . _ } _ _ @ ( @ < : : : s : < : g g g %.r } } } [ s r r | | s : } : Q + / + . . Q Q . . @ < _ _ : _ < r | [ [ g 1 1 q | 1 | i H q } < : k ( E R E F z K h M h q f z q i k k k E k < s s z K 1 I I 2 3 3 3 o 0 0 5 &.7 6 6 7 c 7 5 5 5 a a c a a 5 a 0 0 5 a 5 9 y c a a 7 7 7 5 6 *.*.7 7 7 5 a 6 =.*.*.6 *.-.-.*.;.>.,.;.*.6 *.7 6 6 =.6 7 6 6 *.'.*.*.*.*.6 6 7 c 6 *.7 7 7 6 7 *.7 5 0 0 9 0 9 3 ).).).0 9 9 0 9 3 9 5 7 6 7 5 7 7 7 a a 0 0 5 0 ).).0 e 3 3 2 2 2 e | s [ r < r r [ : } _ < < < : : @ @ . . : s s } } . s r s s s < s s _ : [ : . _ } _ _ @ ( @ < : : : s : < : g g g %.r } } } [ s r r | | s : } : Q + / + . . Q Q . . @ < _ _ : _ < r | ",
|
||||
": !.+.~.~.~.. F k {.+.].( k @ U u ^.+.~.!./.+.~.E u E . E t F E O S S S F S ( k : s : [ B (.+.~.q | [ | K z A K K H : F H [ K K g 1 M 4 4 1 3 d M e K 1 I p p 2 1 I K 1 f 1 [ h 2 _.I I I z I K K I I d 1 K z | I K 4 [ } r } r } } } | } i : g g g %.r } } } [ s r r | | s : } : ( @ Q @ : : . . : : F < i q | r q A A < t i } A q : O :.:.u Q :.Q / + + u / + U U # Z % * <.- .= ; , <.= = .] Z U W V $ / + u @ : H _ H H H A r 2 z z | 1 x q q z z 1 1 h A H z z q h K 1 f [.o }.|.1.1.o 2.f | | i s q 1 s H k k : t } r q t q i i H H i F k _ : E O : } : . F k k E ( ( k @ U u + :.S E F H } E u E . E t F E O S S S F S ( k : s : [ | h h g q | [ | K z A K K H : F H [ K K g 1 M 4 4 1 3 d M e K 1 I p p 2 1 I K 1 f 1 [ h 2 _.I I I z I K K I I d 1 K ",
|
||||
"5 3.+.~.5 3.3.7 7 4.+.~.+.5 5.5.5 6.+.~.9 +.+.+.3.7 5 7.8.0 9 7.6.a ..).0 a 5.a 5 6.9.c 6 +.+.+.=.6 6 c 7 7 a a 7 7 5 7 0 6 6 7 6 a 7 5 7 7 0 0 &.7 5 7 5 0 0.0 7 a.a.&.&.0 0.9 3 3 3 3 3 | r | 1 n y n n n f 1 | s | s A K K q s A s g 1 1 g 1 M 4 4 1 3 d M e K 1 I p p 2 1 I K 1 f 1 [ h 1 4 K K K q q s s A s s } . @ @ @ @ @ + / Q + @ _ } : : : _ < : } : } s s r } 1 2 2 9 0 7 7 7 7 5 5 0 5 6 6 7 *.6 *.*.*.'.;.b.'.'.*.'.*.;.6 7 7 6 6 7 7 c 7 7 *.*.6 -.*.c c 6 c c 7 7 5 =.0 a 5 c 5 0 0 3 2 2 2 2 3 3 2 e e 2 3 2 9 9 0 5 5 7 6 6 6 7 7 5 7 7 5 5 7 7 7 7 6 5 5 5 5 5 5 5 a 0 5 9 3 ).5 7 7 5 0 9 0 9 0 a a ).).0 a 5 a 5 a c c 6 =.*.=.=.6 6 c 7 7 a a 7 7 5 7 0 6 6 7 6 a 7 5 7 7 0 0 &.7 5 7 5 0 0.0 7 a.a.&.&.0 0.9 3 3 3 3 3 | r | 1 n y n n n ",
|
||||
"< c.+.+.S !.+.+.S d.+.].A ].r +.+.D +.+.1 e.+.].~.+.|.f.+.+.g.h.+.+.i.+.5 j.1.+.9 k.+.+.M l.+.~.~.|.|.|.0 m.a.0 m.&.&.i.5 5 7 7 7 m.}.&.|.9 I K K z F F O O F O n.A K F H } n.o.A s 4 I K _.4 z I s H A K 9 d M M p p 3 p p 2.9 9 0 9 7 6 7 6 a 7 5 7 7 0 0 &.7 5 7 5 0 0.0 7 a.a.&.&.0 0.9 9 9 9 2.2.1 [ 1 h 1 2 p I K f 2.9 2 p 9 3 3 1.1.|.1.1.1.2.2.3 1.1.b o |.|.1.3 3 2 M p K q s h z s h z h K 2 1.1.1.2.2.1 K H k k k k p.k E u S k E U :.+ U U U U k O @ u :.+ :.T Y & Z Z Z % V T U u V W V T Z , q.q.r.<.s.Z V s.V V U u u u F t t O } } < . . O S E i k S O O t A } r } H H A A 1 i | | p 2.|.8 6 g.g.'.g.b.i.7 5 |.1.9 9 }.|.0 M 3 o }.}.|.|.|.0 m.a.0 m.&.&.i.5 5 7 7 7 m.}.&.|.9 I K K z F F O O F O n.A K F H } n.o.A s 4 I K _.4 z I s H A K 9 ",
|
||||
"t.u.+.~.~.u.+.].+.C +.].+.v.+.w.+.].+.].+.v.+.].+.x.+.y.+.].+.8.+.].+.7.+.h.+.z.+.A.+.].+.A.+.~.&.0.0.0.B.0.0.0 5 5 0.C.&.7 D.b.,.E.;.*.F.0 &.&.&.0 9 9 5 5 &.0 &.&.0.0.B.0.5 B.B.0.B.B.B.0.0.&.7 7 5 5 5 0.0.B.1.0 B.2.B.C.1.1.0.m.0 5 7 7 7 m.}.&.|.9 I K K z F F O O F O n.A K F H : G.n.H : n.s n.o.o.} s : F A h 2 _.e 2.H.3 3 H.H.H.2 4 | | _.o.s s s H G.. I.F O . . I.n.} G.n.< F } : _ + / Q O . G.: : : : o.| o.4 1 1 4 o.o.4 1 3 3 3 0.a.a.a.D.F.D.*.*.b.6 6 &.&.0 5 a.7 a.&.&.5 6 7 c B.2 H.2 _.1 _._._._.1 o.o.| 1 n.. : I.I.I.@ @ @ t.t.J.J.. . J.: : s z 4 _._.H.4 4 s o.s o.| H.5 5 0.0.&.&.&.&.9 9 &.B.0.0 a.'.'.D.a.a.F.a.0.a.a.&.&.0.0.0.B.0.0.0 5 5 0.C.&.7 D.b.,.E.;.*.F.0 &.&.&.0 9 9 5 5 &.0 &.&.0.0.B.0.5 B.B.0.B.B.B.0.0.&.7 7 5 5 5 0.",
|
||||
"_.w.+.~.g w.+.].+.].+.].+.].+.].+.].+.].+.].+.].+.].+.].+.].+.].+.].+.].+.].+.].+.].+.].+.].+.~.n.: I.: @ @ + # # + J.@ I.: n.1 o.n.I.G.I.} } I.I.I.: n.G.n.G.s | | 4 | 4 } : J.G.I.: : G.r | _._.H.0 0 0 0 a 0 B.C.H.3 C.3 B.0 0 C.0.5 F.D.b.K.'.*.F.0 &.&.&.0 9 9 5 5 &.0 &.&.0.0.B.0.5 B.B.B.B.C.B.0.B.0.0 0.0 0.0 0 0 y 4 4 4 | 1 _.| s s n.: . I.G.G.} _ . J.: . t.+ + + J.@ L.@ G.I.. I.I.: I.G.I.: . I.I.I.L.+ J.} } : I.I.I.: G.n.. I.n.: I.I.. : . J.J.I.n.n.s : @ . . L.. : s } s } n.: n.s n.: } . } I.. . I.I.: } n.o.} n.| _.s _.4 1 _._.4 o.| g 4 1 4 H.0.0.B.B.9 _.n _.| g g 3 2 _.1 3 3 C._.C.1 1 _.2 | n.n.: n.I.: I.r : : _ : : : n.: I.: @ @ + # # + J.@ I.: n.1 o.n.I.G.I.} } I.I.I.: n.G.n.G.s | | 4 | 4 } : J.G.I.: : G.r | _._.H.0 0 0 0 ",
|
||||
"4 M.+.~.2 v.+.].+.].+.].+.].+.].+.].+.].+.].+.].+.+.+.].+.].+.].+.].+.].+.].+.+.+.].+.].+.].+.~.F.a.6 F.D.D.D.7 5 6 a.F.6 a.F.*.*.'.D.6 D.6 7 a.5 5 0.0.2 2 4 4 1 2 2 9 2 9 B.2.3 H.C.0 9 H.3 B.0 0 C.H.C.0 0.9 B.3 H.1 | } : I.G.: G.} o.1 o.o.G.} G.} } I.I.I.: n.G.n.G.s | | 4 | 4 } : I.G.G.t } n.r | _.2 3 9 9 9 2 3 2 C.d B.B.9 1.0 C.3 3 2.C.C.0 a.0.C.0 0 0.&.&.&.&.&.B.0.5 F.6 *.6 D.D.b.D.b.b.;.,.b.6 7 '.N.,.6 7 m.1.0 B.C.B.0 9 C.C.B.B.C.B.5 B.B.B._.4 1 1 _.C.C.H.H.C.2 H.H.C.C.B.3 3 _.| 1 C.H._._._.C.2 3 _.B.9 0 C.9 9 C.9 B.H._.1 4 _.1 | 2 H.H.3 _._._.| | n.| | i n.o.} i i } s o.o.1 _._.3 9 0 0.F.6 &.&.&.&.0.5 B.B.&.F.a.D.D.F.a.6 F.D.D.D.7 5 6 a.F.6 a.F.*.*.'.D.6 D.6 7 a.5 5 0.0.2 2 4 4 1 2 2 9 2 9 B.2.3 H.C.0 9 H.3 B.0 0 C.H.C.0 ",
|
||||
"3 O.+.~._.w.+.].+.].+.].+.].+.].+.].+.].+.].+.].+.~.~.].+.].+.].+.].+.].+.].+.~.~.].+.].+.].+.~.9 0.9 9 C.H.0 0.B.0.B.0 H.C.9 H.2 _.H.C.C.3 9 B.0 &.0 0 0 B.B.3 0 0 H.2 3 B.B.C.1 4 | } s n.1 o.n.} o._.4 _._._.H.C.B.0 0.0 0 7 &.a.7 a.6 F.*.*.D.6 D.6 7 a.5 5 0.0.2 2 4 4 1 2 2 9 H.0 0.1.9 B.0.5 0 B.9 B.0.5 0 &.&.5 7 B.0.5 5 5 0.0.0 0 5 0 0 ).0 &.&.7 &.5 7 &.0.0.5 0 0 B.B.3 3 3 0.0.&.0.0.&.&.0.B.B.C.C.3 3 C.5 &.0.0.&.a.a.0.0.0.6 &.7 a.&.9 9 9 B.0 &.a.F.a.6 D.7 F.'.'.D.*.*.0.a.F.F.0.&.a.a.F.&.7 '.b.*.7 F.F.&.0.C.&.C.3 2 H.3 3 0 B.B.3 C.C._._.4 _.2 o._._.1 | o.4 | 3 C.9 B.0.9 9 B.y 9 C.2 _._.C.H.H.B.C.3 H.B.C.3 0 0.0.0.5 0.5 0.9 0.9 9 C.H.0 0.B.0.B.0 H.C.9 H.2 _.H.C.C.3 9 B.0 &.0 0 0 B.B.3 0 0 H.2 3 B.B.C.1 4 | } s n.1 o.n.} o._.4 _.",
|
||||
"P.Q.+.].D.R.+.].+.].+.].+.~.+.].+.].+.].+.].+.~.+.].o.S.+.].+.].+.].+.].+.~.+.].T.U.+.].+.].+.~.V.W._._.V.4 o.o.n.W.4 4 X.H._.C.H.Y.Z.0.0.0.a.&.a.`.0.0.0.0. +F..+D..+D..+`.`.D.`.`.&.&.0.&.0.0.0.0.&.7 6 F.&.0.0 0 0.C.0.5 0.0.0 0 C.C.9 H.2 _.H.C.C.3 9 B.0 &.0 0 0 B.B.3 0 0 H.2 3 B.B.C.1 4 1 o.| 4 2 _._.2 H.C.0.0 &. +a.a.D.D..+D.F..+6 F.a.5 5 Y.0.5 7 5 0.B.9 2 C.B.Y.++++++&. +Y. + + +&.0.0.B.0. +F.F.a.a.&.++5 5 5 ++&.5 7 ++ +&. +F.`.*.D.F.F.F.`.*.F.*.*.*.D.F.6 a.a.`.D.D.D.D.K.E.E.@+@+E.E.E.@+@+@+,.E.E.E.E.@+#+#+$+%+%+#+,.P.P..+P.P.,.P.K.D.E.P.P.K.K.b.P.b..+K.`.&.B.C.3 3 H.2 3 2 2 o.G.n.1 o.s G.: I.I.I.I.I.G.T.s 1 1 _._.W.4 V.W._._.V.4 o.o.n.W.4 4 X.H._.C.H.Y.Z.0.0.0.a.&.a.`.0.0.0.0. +F..+D..+D..+`.`.D.`.`.&.&.0.&.0.0.0.0.&.7 6 F.",
|
||||
"@+&++.+.+.$++.~.+.~.+.~.+.~.$++.+.~.+.~.+.~.+.~.,.+.+.*.+.~.+.~.+.~.+.~.+.~.a.+.+.o +.~.+.~.+.~.B.B.0 }.0.9 C.H._.H.H.9 H.C.C.9 H.H.0 B.0.7 5 &.a.F.D.D.D.b.,.b.;.b.,.@+@+*+=+=+*+-+-+*+%+*+*+%+%+&+@+&+E.;+@+,.*.a.`.5 1.B.C.Z.3 H.V.C.H.B.C.Y.Z.0.0.0.a.&.a.`.0.0.0.0. +F..+D..+D..+`.`.D.F..+F.F.6 D.*.F.D.'.;.;.;+@+@+;+K.&+$+@+@+@+E.E.E.@+E.@+%+E.E.E.E.E.E.@+,.,.,.,.&+&+%+%+@+@+,.,.,.,.,.b.,.,.E.;.D.,.b.D.D.F.6 6 a.D.D.D.*.D.a.a.&.B.B.0.0.0.B.9 C.H.C.C.3 3 B.C.C.H.3 2 0 0.3 3 C.0.3 5 5 6 F.F.D.,.b.,.@+E.E.,.b.E.E.@+%+@+%+%+%+$+$+&+@+&+%+$+%+$+$+$+%+%+$+$+*+$+$+$+*+$+%+%+&+@+@+;.,.;.;.*.D.F.F.F.6 F.*.*.6 5 a.o 1.o 9 H.3 B.5 9 B.B.0 }.0.9 C.H._.H.H.9 H.C.C.9 H.H.0 B.0.7 5 &.a.F.D.D.D.b.,.b.;.b.,.@+@+*+=+=+*+-+-+*+%+*+*+%+%+&+@+&+E.;+",
|
||||
": J.: ~.~.~.n.~.G.~._.~._.].@.2 +.~.} ~.G.~.: ~.G.o.~.~.4 ~.H.~.C.~.H.~.H.~.C.C.~.~.2 ~.H.~.2 ~.B.C.H.1 o.| 1 4 | _._.4 4 s | | _.9 3 9 9 9 1 _.4 _.1 | o.| n.1 _.2 2 2 2 2 H.3 4 o.} s G.: : : o.1 4 n.| | o.4 s | | 4 | | o.o.| 1 4 _.H.3 _._.9 B.0.7 5 &.a.F.D.D.D.b.;.b.;.b.,.@+@+>+$+,+$+'+)+%+@+&+@+;.,.D.,.;.,.D.;.;+E.b.,.,.D.*.*.*.6 a.&.0.B.5 B.B.3 2 2 H.1 1 o.} I.J.@ I.I.. } J.t.+ + + t.!+% !+% ~+* ~+~+{+% % % # # # t.+ + % + !+t.t.+ @ J.. . L.J.L.J.. G.I.. @ L.@ + @ : n.s 1 _.H._.1 H._.s 1 4 s G.} . . . . @ . I.} } s } : } : : J.: } . : n.n.G.o._._._.1 2 2 | | } : G.: : G.G.o.1 | 4 1 H.H.C._.H.2 H.H.C.C.3 2 2 C.H.1 2 9 B.C.H.1 o.| 1 4 | _._.4 4 s | | _.9 3 9 9 9 1 _.4 _.1 | o.| n.1 _.2 2 2 2 2 H.3 4 o.} s G.: : : o.1 4 n.| | ",
|
||||
"++++++Y.C.C.B.B.B.0.0.B.B.C.+.+.1 ~.G.G.G.I.J.J.J.]+G.n.4 4 4 4 4 4 H._._._._.W.4 n.^+n.]+I.n.: G.n.o.G.n.n.n.T.} ^+4 X._.W.H._._.H.4 4 4 /+o.n.T.o.n.n.n.G.(+J.J._+J.t.L.I.I.n.G.I.^+G.G.I.]+(++ S L.@ J.I.I.G.H n.n.o.4 4 1 H.H._._.| 1 1 H.9 3 9 9 9 1 _.4 _.1 | o.| n.1 _.2 2 2 2 2 H.C._.4 s 1 X.4 _._.H.0.&.&. +a.0.a.`.&.F.P.D.P..+b.,.,.E.,.D.P.b.P.P.P.F.F.F.F..+D.a.Y.&.a.a.`.D.,.K.P.b.P.`.`.D..+a.&.C.H.Y.Y.C.B.0.B.Y.B.B.B.C.2.2.C.++Y.C.Y.B.B.&.&.&.&.B.++D.D.F.`.&.0.B.B.C.B.B.0.a.7 &. +`. +`.0.B.B.0.:+5 &.++0.&.&.5 1.B.|.&. +a.a.++++++Y.C.C.B.B.B.0.0.B.B.C.H._.1 z G.G.G.I.J.J.J.]+G.n.4 4 4 4 4 4 H._._._._.W.4 n.^+n.]+I.n.: G.n.o.G.n.n.n.T.} ^+4 X._.W.H._._.H.4 4 4 /+o.n.T.o.n.n.n.G.(+J.J._+J.t.L.I.I.n.G.I.^+G.G.I.]+(++ S L.@ J.I.",
|
||||
"5 5 5 &.&.F.F.F.b.'.D.'.;.,.@+~.~.E.$+*+<+-+-+<+<+<+-+-+[+-+-+*+=+*+*+*+=+$+&+@+%+%+$+%+%+%+$+@+@+@+,.,.,.'.*.;.,.E.E.b.b.;.b.F.F.D.F.F.F.b.'.6 F.F.a.F.F.b.,.,.b.&.F.&.&.7 0.0.B.0.&.F.F.F.F.F.b.b.a.b.D.F.a.9 B.B.B.C.B.}+2 V.H.H.C.H.C.H.H.H._.4 4 /+o.n.T.o.n.n.n.G.(+I.I.(+I.L.J.n.n.4 o.o._._.V._.}+}+H.C.C.0 0.7 &.a.7 a.*.F.D.6 *.6 a.F.F.D.F.6 6 a.a.F.F.'.6 '.'.F.6 F.D.*.D.F.*.b.b.D.F.*.*.D.D.F.*.*.'.D.,.D.F.a.a.a.7 6 6 a.6 *.6 *.D.b.;.b.b.b.;.b.E.*.*.b.'.b.,.b.*.*.F.6 7 a.5 0 B.3 9 5 5 5 B.0 0 5 7 a.a.a.*.*.*.b.b.b.*.*.F.6 7 &.5 5 5 &.&.F.F.F.b.'.D.'.;.,.@+@+E.E.$+*+<+-+-+<+<+<+-+-+[+-+-+*+=+*+*+*+=+$+&+@+%+%+$+%+%+%+$+@+@+@+,.,.,.'.*.;.,.E.E.b.b.;.b.F.F.D.F.F.F.b.'.6 F.F.a.F.F.b.,.,.b.&.F.&.&.7 0.0.B.0.&.F.F.F.F.F.b.b.a.b.D.F.",
|
||||
"- r.q.- |+- 1+, 2+3+v v v v 4+5+6+7+8+9+0+1+1+1+6+6+6+4+0+v { 6+a+b+b+8+{ a+c+1+, > d+* Y Y Y V = |+' Y T * * T T = d+d+= |+* Y % % U ~+~+e+S S :.+ * e+% U :.U !+U T T T T |+* # # U U U % U T T u u G.F F t o._.I f+3 3 5 5 +g+a.a.*.F.m.a.F.a.F.F.b.'.6 F.F.a.F.F.b.,.,.b.&.i.&.0.5 B.B.H.C.C.B.C.H.4 1 2 1 } } @ # e+' ] > . .c+{ 8+8+6+4+8+4+7+7+7+a+7+9+6+6+7+h+i+j+k+l+m+k+n+o+k+k+k+m+h+h+6+6+8+7+0+c+v ; * % > % % % U % p+U U / @ u U U U :.@ @ u T * U U U X S @ E q q h K q q q A O / u Y T T q+# * d+> |+, = & T <.T * ' <.<.' d+3+- - r.q.- |+- 1+, 2+3+v v v v 4+5+6+7+8+9+0+1+1+1+6+6+6+4+0+v { 6+a+b+b+8+{ a+c+1+, > d+* Y Y Y V = |+' Y T * * T T = d+d+= |+* Y % % U ~+~+e+S S :.+ * e+% U :.U !+U T T T T |+* # # U U U % U T T u u G.F F "};
|
|
@ -0,0 +1,889 @@
|
|||
|
||||
#include "dox.h"
|
||||
|
||||
typedef struct _efont_color_tab EfontColorTable;
|
||||
|
||||
struct _efont_color_tab
|
||||
{
|
||||
Colormap cmap;
|
||||
|
||||
XColor list[256];
|
||||
unsigned char match[8][8][8];
|
||||
};
|
||||
|
||||
/*static EfontColorTable *color_tab = NULL; */
|
||||
static unsigned char alpha_lut[5] =
|
||||
{0, 64, 128, 192, 255};
|
||||
static unsigned char bounded_palette[9] =
|
||||
{0, 1, 2, 3, 4, 4, 4, 4, 4};
|
||||
|
||||
static TT_Raster_Map *
|
||||
create_font_raster(int width, int height)
|
||||
{
|
||||
TT_Raster_Map *rmap;
|
||||
|
||||
rmap = malloc(sizeof(TT_Raster_Map));
|
||||
rmap->width = (width + 3) & -4;
|
||||
rmap->rows = height;
|
||||
rmap->flow = TT_Flow_Down;
|
||||
rmap->cols = rmap->width;
|
||||
rmap->size = rmap->rows * rmap->width;
|
||||
rmap->bitmap = malloc(rmap->size);
|
||||
memset(rmap->bitmap, 0, rmap->size);
|
||||
return rmap;
|
||||
}
|
||||
|
||||
static TT_Raster_Map *
|
||||
duplicate_raster(TT_Raster_Map * rmap)
|
||||
{
|
||||
TT_Raster_Map *new_rmap;
|
||||
|
||||
new_rmap = malloc(sizeof(TT_Raster_Map));
|
||||
*new_rmap = *rmap;
|
||||
new_rmap->bitmap = malloc(new_rmap->size);
|
||||
memcpy(new_rmap->bitmap, rmap->bitmap, new_rmap->size);
|
||||
return new_rmap;
|
||||
}
|
||||
|
||||
static void
|
||||
clear_raster(TT_Raster_Map * rmap)
|
||||
{
|
||||
memset(rmap->bitmap, 0, rmap->size);
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_font_raster(TT_Raster_Map * rmap)
|
||||
{
|
||||
free(rmap->bitmap);
|
||||
free(rmap);
|
||||
}
|
||||
|
||||
static TT_Raster_Map *
|
||||
calc_size(Efont * f, int *width, int *height, char *text)
|
||||
{
|
||||
int i, upm, ascent, descent, pw, ph;
|
||||
TT_Instance_Metrics imetrics;
|
||||
TT_Glyph_Metrics gmetrics;
|
||||
TT_Raster_Map *rtmp;
|
||||
|
||||
TT_Get_Instance_Metrics(f->instance, &imetrics);
|
||||
upm = f->properties.header->Units_Per_EM;
|
||||
ascent = (f->properties.horizontal->Ascender * imetrics.y_ppem) / upm;
|
||||
descent = (f->properties.horizontal->Descender * imetrics.y_ppem) / upm;
|
||||
if (descent < 0)
|
||||
descent = -descent;
|
||||
pw = 0;
|
||||
ph = ((f->max_ascent) - f->max_descent) / 64;
|
||||
|
||||
for (i = 0; text[i]; i++)
|
||||
{
|
||||
unsigned char j = text[i];
|
||||
|
||||
if (!TT_VALID(f->glyphs[j]))
|
||||
continue;
|
||||
TT_Get_Glyph_Metrics(f->glyphs[j], &gmetrics);
|
||||
if (i == 0)
|
||||
{
|
||||
pw += ((-gmetrics.bearingX) / 64);
|
||||
}
|
||||
if (text[i + 1] == 0)
|
||||
{
|
||||
pw += (gmetrics.bbox.xMax / 64);
|
||||
}
|
||||
else
|
||||
pw += gmetrics.advance / 64;
|
||||
}
|
||||
*width = pw;
|
||||
*height = ph;
|
||||
|
||||
rtmp = create_font_raster(imetrics.x_ppem + 32, imetrics.y_ppem + 32);
|
||||
rtmp->flow = TT_Flow_Up;
|
||||
return rtmp;
|
||||
}
|
||||
|
||||
static void
|
||||
render_text(TT_Raster_Map * rmap, TT_Raster_Map * rchr, Efont * f, char *text,
|
||||
int *xor, int *yor)
|
||||
{
|
||||
TT_Glyph_Metrics metrics;
|
||||
TT_Instance_Metrics imetrics;
|
||||
TT_F26Dot6 x, y, xmin, ymin, xmax, ymax;
|
||||
int i, ioff, iread;
|
||||
char *off, *read, *_off, *_read;
|
||||
int x_offset, y_offset;
|
||||
unsigned char j;
|
||||
TT_Raster_Map *rtmp;
|
||||
|
||||
TT_Get_Instance_Metrics(f->instance, &imetrics);
|
||||
|
||||
j = text[0];
|
||||
TT_Get_Glyph_Metrics(f->glyphs[j], &metrics);
|
||||
x_offset = (-metrics.bearingX) / 64;
|
||||
|
||||
y_offset = -(f->max_descent / 64);
|
||||
|
||||
*xor = x_offset;
|
||||
*yor = rmap->rows - y_offset;
|
||||
|
||||
rtmp = NULL;
|
||||
for (i = 0; text[i]; i++)
|
||||
{
|
||||
j = text[i];
|
||||
|
||||
if (!TT_VALID(f->glyphs[j]))
|
||||
continue;
|
||||
|
||||
TT_Get_Glyph_Metrics(f->glyphs[j], &metrics);
|
||||
|
||||
xmin = metrics.bbox.xMin & -64;
|
||||
ymin = metrics.bbox.yMin & -64;
|
||||
xmax = (metrics.bbox.xMax + 63) & -64;
|
||||
ymax = (metrics.bbox.yMax + 63) & -64;
|
||||
|
||||
if (f->glyphs_cached[j])
|
||||
rtmp = f->glyphs_cached[j];
|
||||
else
|
||||
{
|
||||
rtmp = rchr;
|
||||
clear_raster(rtmp);
|
||||
TT_Get_Glyph_Pixmap(f->glyphs[j], rtmp, -xmin, -ymin);
|
||||
f->glyphs_cached[j] = duplicate_raster(rtmp);
|
||||
}
|
||||
/* Blit-or the resulting small pixmap into the biggest one */
|
||||
/* We do that by hand, and provide also clipping. */
|
||||
|
||||
xmin = (xmin >> 6) + x_offset;
|
||||
ymin = (ymin >> 6) + y_offset;
|
||||
xmax = (xmax >> 6) + x_offset;
|
||||
ymax = (ymax >> 6) + y_offset;
|
||||
|
||||
/* Take care of comparing xmin and ymin with signed values! */
|
||||
/* This was the cause of strange misplacements when Bit.rows */
|
||||
/* was unsigned. */
|
||||
|
||||
if (xmin >= (int)rmap->width ||
|
||||
ymin >= (int)rmap->rows ||
|
||||
xmax < 0 ||
|
||||
ymax < 0)
|
||||
continue;
|
||||
|
||||
/* Note that the clipping check is performed _after_ rendering */
|
||||
/* the glyph in the small bitmap to let this function return */
|
||||
/* potential error codes for all glyphs, even hidden ones. */
|
||||
|
||||
/* In exotic glyphs, the bounding box may be larger than the */
|
||||
/* size of the small pixmap. Take care of that here. */
|
||||
|
||||
if (xmax - xmin + 1 > rtmp->width)
|
||||
xmax = xmin + rtmp->width - 1;
|
||||
|
||||
if (ymax - ymin + 1 > rtmp->rows)
|
||||
ymax = ymin + rtmp->rows - 1;
|
||||
|
||||
/* set up clipping and cursors */
|
||||
|
||||
iread = 0;
|
||||
if (ymin < 0)
|
||||
{
|
||||
iread -= ymin * rtmp->cols;
|
||||
ioff = 0;
|
||||
ymin = 0;
|
||||
}
|
||||
else
|
||||
ioff = (rmap->rows - ymin - 1) * rmap->cols;
|
||||
|
||||
if (ymax >= rmap->rows)
|
||||
ymax = rmap->rows - 1;
|
||||
|
||||
if (xmin < 0)
|
||||
{
|
||||
iread -= xmin;
|
||||
xmin = 0;
|
||||
}
|
||||
else
|
||||
ioff += xmin;
|
||||
|
||||
if (xmax >= rmap->width)
|
||||
xmax = rmap->width - 1;
|
||||
|
||||
_read = (char *)rtmp->bitmap + iread;
|
||||
_off = (char *)rmap->bitmap + ioff;
|
||||
|
||||
for (y = ymin; y <= ymax; y++)
|
||||
{
|
||||
read = _read;
|
||||
off = _off;
|
||||
|
||||
for (x = xmin; x <= xmax; x++)
|
||||
{
|
||||
*off = bounded_palette[*off | *read];
|
||||
off++;
|
||||
read++;
|
||||
}
|
||||
_read += rtmp->cols;
|
||||
_off -= rmap->cols;
|
||||
}
|
||||
x_offset += metrics.advance / 64;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
merge_text_16(XImage * xim, TT_Raster_Map * rmap, int offset_x, int offset_y,
|
||||
unsigned long col)
|
||||
{
|
||||
int x, y, tmp;
|
||||
unsigned char *ptr;
|
||||
unsigned char cr, cg, cb, a, r, g, b, nr, ng, nb;
|
||||
unsigned long pixel;
|
||||
|
||||
cr = (col >> 8) & 0xf8;
|
||||
cg = (col >> 3) & 0xfc;
|
||||
cb = (col << 3) & 0xf8;
|
||||
for (y = 0; y < xim->height; y++)
|
||||
{
|
||||
ptr = (unsigned char *)rmap->bitmap + offset_x + ((y + offset_y) * rmap->cols);
|
||||
for (x = 0; x < xim->width; x++)
|
||||
{
|
||||
if ((a = alpha_lut[*ptr]) > 0)
|
||||
{
|
||||
if (a < 255)
|
||||
{
|
||||
pixel = XGetPixel(xim, x, y);
|
||||
r = (pixel >> 8) & 0xf8;
|
||||
g = (pixel >> 3) & 0xfc;
|
||||
b = (pixel << 3) & 0xf8;
|
||||
|
||||
tmp = (cr - r) * a;
|
||||
nr = r + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
tmp = (cg - g) * a;
|
||||
ng = g + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
tmp = (cb - b) * a;
|
||||
nb = b + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
pixel = ((nr & 0xf8) << 8) | ((ng & 0xfc) << 3) | ((nb & 0xf8) >> 3);
|
||||
XPutPixel(xim, x, y, pixel);
|
||||
}
|
||||
else
|
||||
XPutPixel(xim, x, y, col);
|
||||
}
|
||||
ptr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
merge_text_15(XImage * xim, TT_Raster_Map * rmap, int offset_x, int offset_y,
|
||||
unsigned long col)
|
||||
{
|
||||
int x, y, tmp;
|
||||
unsigned char *ptr;
|
||||
unsigned char cr, cg, cb, a, r, g, b, nr, ng, nb;
|
||||
unsigned long pixel;
|
||||
|
||||
cr = (col >> 7) & 0xf8;
|
||||
cg = (col >> 2) & 0xf8;
|
||||
cb = (col << 3) & 0xf8;
|
||||
for (y = 0; y < xim->height; y++)
|
||||
{
|
||||
ptr = (unsigned char *)rmap->bitmap + offset_x + ((y + offset_y) * rmap->cols);
|
||||
for (x = 0; x < xim->width; x++)
|
||||
{
|
||||
if ((a = alpha_lut[*ptr]) > 0)
|
||||
{
|
||||
if (a < 255)
|
||||
{
|
||||
pixel = XGetPixel(xim, x, y);
|
||||
r = (pixel >> 7) & 0xf8;
|
||||
g = (pixel >> 2) & 0xf8;
|
||||
b = (pixel << 3) & 0xf8;
|
||||
|
||||
tmp = (cr - r) * a;
|
||||
nr = r + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
tmp = (cg - g) * a;
|
||||
ng = g + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
tmp = (cb - b) * a;
|
||||
nb = b + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
pixel = ((nr & 0xf8) << 7) | ((ng & 0xf8) << 2) | ((nb & 0xf8) >> 3);
|
||||
XPutPixel(xim, x, y, pixel);
|
||||
}
|
||||
else
|
||||
XPutPixel(xim, x, y, col);
|
||||
}
|
||||
ptr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
merge_text_24(XImage * xim, TT_Raster_Map * rmap, int offset_x, int offset_y,
|
||||
unsigned long col)
|
||||
{
|
||||
int x, y, tmp;
|
||||
unsigned char *ptr;
|
||||
unsigned char cr, cg, cb, a, r, g, b, nr, ng, nb;
|
||||
unsigned long pixel;
|
||||
|
||||
cr = (col >> 16) & 0xff;
|
||||
cg = (col >> 8) & 0xff;
|
||||
cb = col & 0xff;
|
||||
for (y = 0; y < xim->height; y++)
|
||||
{
|
||||
ptr = (unsigned char *)rmap->bitmap + offset_x + ((y + offset_y) * rmap->cols);
|
||||
for (x = 0; x < xim->width; x++)
|
||||
{
|
||||
if ((a = alpha_lut[*ptr]) > 0)
|
||||
{
|
||||
if (a < 255)
|
||||
{
|
||||
pixel = XGetPixel(xim, x, y);
|
||||
r = (pixel >> 16) & 0xff;
|
||||
g = (pixel >> 8) & 0xff;
|
||||
b = pixel & 0xff;
|
||||
|
||||
tmp = (cr - r) * a;
|
||||
nr = r + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
tmp = (cg - g) * a;
|
||||
ng = g + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
tmp = (cb - b) * a;
|
||||
nb = b + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
pixel = ((nr << 16) | (ng << 8) | (nb));
|
||||
XPutPixel(xim, x, y, pixel);
|
||||
}
|
||||
else
|
||||
XPutPixel(xim, x, y, col);
|
||||
}
|
||||
ptr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* static void
|
||||
* merge_text_8(XImage * xim, TT_Raster_Map * rmap, int offset_x, int offset_y,
|
||||
* unsigned long col, Colormap cm)
|
||||
* {
|
||||
* int x, y, tmp;
|
||||
* unsigned char *ptr;
|
||||
* unsigned char a, r, g, b, nr, ng, nb;
|
||||
* unsigned long pixel;
|
||||
*
|
||||
* for (y = 0; y < xim->height; y++)
|
||||
* {
|
||||
* ptr = (unsigned char *)rmap->bitmap + offset_x + ((y + offset_y) * rmap->cols);
|
||||
* for (x = 0; x < xim->width; x++)
|
||||
* {
|
||||
* if ((a = alpha_lut[*ptr]) > 0)
|
||||
* {
|
||||
* pixel = XGetPixel(xim, x, y);
|
||||
* r = (pixel >> 8) & 0xf8;
|
||||
* g = (pixel >> 3) & 0xfc;
|
||||
* b = (pixel << 3) & 0xf8;
|
||||
*
|
||||
* tmp = (255 - r) * a;
|
||||
* nr = r + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
* tmp = (255 - g) * a;
|
||||
* ng = g + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
* tmp = (255 - b) * a;
|
||||
* nb = b + ((tmp + (tmp >> 8) + 0x80) >> 8);
|
||||
* pixel = ((nr & 0xf8) << 8) | ((ng & 0xfc) << 3) | ((nb & 0xf8) >> 3);
|
||||
* XPutPixel(xim, x, y, pixel);
|
||||
* }
|
||||
* ptr++;
|
||||
* }
|
||||
* }
|
||||
* col = 0;
|
||||
* cm = 0;
|
||||
* }
|
||||
*/
|
||||
|
||||
static void
|
||||
merge_text_1(XImage * xim, TT_Raster_Map * rmap, int offset_x, int offset_y,
|
||||
unsigned long col)
|
||||
{
|
||||
int x, y;
|
||||
unsigned char *ptr;
|
||||
|
||||
for (y = 0; y < xim->height; y++)
|
||||
{
|
||||
ptr = (unsigned char *)rmap->bitmap + offset_x + ((y + offset_y) * rmap->cols);
|
||||
for (x = 0; x < xim->width; x++)
|
||||
{
|
||||
if (alpha_lut[*ptr] > 2)
|
||||
XPutPixel(xim, x, y, col);
|
||||
ptr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static char x_error = 0;
|
||||
|
||||
static void
|
||||
handle_x_error(Display * d, XErrorEvent * ev)
|
||||
{
|
||||
d = NULL;
|
||||
ev = NULL;
|
||||
x_error = 1;
|
||||
}
|
||||
|
||||
void
|
||||
EFont_draw_string(Display * disp, Drawable win, GC gc, int x, int y, char *text,
|
||||
Efont * font, Visual * vis, Colormap cm)
|
||||
{
|
||||
XImage *xim;
|
||||
XShmSegmentInfo shminfo;
|
||||
int width, height, w, h, inx, iny, clipx, clipy, rx, ry;
|
||||
XWindowAttributes xatt, ratt;
|
||||
TT_Raster_Map *rmap, *rtmp;
|
||||
unsigned long col;
|
||||
XGCValues gcv;
|
||||
static char shm_checked = 0, shm = 1;
|
||||
XErrorHandler erh = NULL;
|
||||
Window chld;
|
||||
char is_pixmap = 0;
|
||||
|
||||
inx = 0;
|
||||
iny = 0;
|
||||
rtmp = calc_size(font, &w, &h, text);
|
||||
rmap = create_font_raster(w, h);
|
||||
|
||||
render_text(rmap, rtmp, font, text, &inx, &iny);
|
||||
|
||||
XGrabServer(disp);
|
||||
erh = XSetErrorHandler((XErrorHandler) handle_x_error);
|
||||
x_error = 0;
|
||||
XGetWindowAttributes(disp, win, &xatt);
|
||||
XFlush(disp);
|
||||
if (x_error)
|
||||
{
|
||||
x_error = 0;
|
||||
is_pixmap = 1;
|
||||
XGetGeometry(disp, win, &chld, &rx, &rx,
|
||||
(unsigned int *)&xatt.width, (unsigned int *)&xatt.height,
|
||||
(unsigned int *)&rx, (unsigned int *)&xatt.depth);
|
||||
XFlush(disp);
|
||||
if (x_error)
|
||||
{
|
||||
destroy_font_raster(rmap);
|
||||
destroy_font_raster(rtmp);
|
||||
XUngrabServer(disp);
|
||||
XFlush(disp);
|
||||
XSetErrorHandler((XErrorHandler) erh);
|
||||
return;
|
||||
}
|
||||
}
|
||||
XSetErrorHandler((XErrorHandler) erh);
|
||||
if (!is_pixmap)
|
||||
{
|
||||
XGetWindowAttributes(disp, xatt.root, &ratt);
|
||||
XTranslateCoordinates(disp, win, xatt.root, 0, 0, &rx, &ry, &chld);
|
||||
if ((xatt.map_state != IsViewable) &&
|
||||
(xatt.backing_store == NotUseful))
|
||||
{
|
||||
destroy_font_raster(rmap);
|
||||
destroy_font_raster(rtmp);
|
||||
XUngrabServer(disp);
|
||||
XFlush(disp);
|
||||
return;
|
||||
}
|
||||
}
|
||||
XGetGCValues(disp, gc, GCForeground, &gcv);
|
||||
col = gcv.foreground;
|
||||
|
||||
clipx = 0;
|
||||
clipy = 0;
|
||||
|
||||
x = x - inx;
|
||||
y = y - iny;
|
||||
|
||||
width = xatt.width - x;
|
||||
height = xatt.height - y;
|
||||
if (width > w)
|
||||
width = w;
|
||||
if (height > h)
|
||||
height = h;
|
||||
|
||||
if (!is_pixmap)
|
||||
{
|
||||
if ((rx + x + width) > ratt.width)
|
||||
width = ratt.width - (rx + x);
|
||||
if ((ry + y + height) > ratt.height)
|
||||
height = ratt.height - (ry + y);
|
||||
}
|
||||
if (x < 0)
|
||||
{
|
||||
clipx = -x;
|
||||
width += x;
|
||||
x = 0;
|
||||
}
|
||||
if (y < 0)
|
||||
{
|
||||
clipy = -y;
|
||||
height += y;
|
||||
y = 0;
|
||||
}
|
||||
if (!is_pixmap)
|
||||
{
|
||||
if ((rx + x) < 0)
|
||||
{
|
||||
clipx -= (rx + x);
|
||||
width += (rx + x);
|
||||
x = -rx;
|
||||
}
|
||||
if ((ry + y) < 0)
|
||||
{
|
||||
clipy -= (ry + y);
|
||||
height += (ry + y);
|
||||
y = -ry;
|
||||
}
|
||||
}
|
||||
if ((width <= 0) || (height <= 0))
|
||||
{
|
||||
destroy_font_raster(rmap);
|
||||
destroy_font_raster(rtmp);
|
||||
XUngrabServer(disp);
|
||||
XFlush(disp);
|
||||
return;
|
||||
}
|
||||
if (shm)
|
||||
{
|
||||
if (!shm_checked)
|
||||
{
|
||||
erh = XSetErrorHandler((XErrorHandler) handle_x_error);
|
||||
}
|
||||
xim = XShmCreateImage(disp, vis, xatt.depth, ZPixmap, NULL,
|
||||
&shminfo, width, height);
|
||||
if (!shm_checked)
|
||||
{
|
||||
XSync(disp, False);
|
||||
if (x_error)
|
||||
{
|
||||
shm = 0;
|
||||
XDestroyImage(xim);
|
||||
xim = XGetImage(disp, win, x, y, width, height, 0xffffffff, ZPixmap);
|
||||
XSetErrorHandler((XErrorHandler) erh);
|
||||
shm_checked = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
shminfo.shmid = shmget(IPC_PRIVATE, xim->bytes_per_line *
|
||||
xim->height, IPC_CREAT | 0666);
|
||||
if (shminfo.shmid < 0)
|
||||
{
|
||||
shm = 0;
|
||||
XDestroyImage(xim);
|
||||
xim = XGetImage(disp, win, x, y, width, height, 0xffffffff, ZPixmap);
|
||||
XSetErrorHandler((XErrorHandler) erh);
|
||||
shm_checked = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
shminfo.shmaddr = xim->data = shmat(shminfo.shmid, 0, 0);
|
||||
shminfo.readOnly = False;
|
||||
XShmAttach(disp, &shminfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
shminfo.shmid = shmget(IPC_PRIVATE, xim->bytes_per_line *
|
||||
xim->height, IPC_CREAT | 0666);
|
||||
if (shminfo.shmid < 0)
|
||||
{
|
||||
shm = 0;
|
||||
XDestroyImage(xim);
|
||||
xim = XGetImage(disp, win, x, y, width, height, 0xffffffff, ZPixmap);
|
||||
XSetErrorHandler((XErrorHandler) erh);
|
||||
shm_checked = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
shminfo.shmaddr = xim->data = shmat(shminfo.shmid, 0, 0);
|
||||
shminfo.readOnly = False;
|
||||
XShmAttach(disp, &shminfo);
|
||||
}
|
||||
}
|
||||
if (!shm_checked)
|
||||
{
|
||||
XSync(disp, False);
|
||||
if (x_error)
|
||||
{
|
||||
shm = 0;
|
||||
XDestroyImage(xim);
|
||||
xim = XGetImage(disp, win, x, y, width, height, 0xffffffff, ZPixmap);
|
||||
shm_checked = 1;
|
||||
}
|
||||
XSetErrorHandler((XErrorHandler) erh);
|
||||
shm_checked = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
xim = XGetImage(disp, win, x, y, width, height, 0xffffffff, ZPixmap);
|
||||
if (shm)
|
||||
XShmGetImage(disp, win, xim, x, y, 0xffffffff);
|
||||
XUngrabServer(disp);
|
||||
XFlush(disp);
|
||||
|
||||
if (xatt.depth == 16)
|
||||
{
|
||||
XVisualInfo xvi, *xvir;
|
||||
int num;
|
||||
|
||||
xvi.visualid = XVisualIDFromVisual(vis);;
|
||||
xvir = XGetVisualInfo(disp, VisualIDMask, &xvi, &num);
|
||||
if (xvir)
|
||||
{
|
||||
if (xvir->red_mask != 0xf800)
|
||||
xatt.depth = 15;
|
||||
XFree(xvir);
|
||||
}
|
||||
}
|
||||
if (xatt.depth == 16)
|
||||
merge_text_16(xim, rmap, clipx, clipy, col);
|
||||
else if ((xatt.depth == 24) || (xatt.depth == 32))
|
||||
merge_text_24(xim, rmap, clipx, clipy, col);
|
||||
/* else if (xatt.depth == 8)
|
||||
* merge_text_8(xim, rmap, clipx, clipy, cm, col); */
|
||||
else if (xatt.depth == 15)
|
||||
merge_text_15(xim, rmap, clipx, clipy, col);
|
||||
else if (xatt.depth <= 8)
|
||||
merge_text_1(xim, rmap, clipx, clipy, col);
|
||||
|
||||
if (shm)
|
||||
XShmPutImage(disp, win, gc, xim, 0, 0, x, y,
|
||||
width, height, False);
|
||||
else
|
||||
XPutImage(disp, win, gc, xim, 0, 0, x, y, width, height);
|
||||
destroy_font_raster(rmap);
|
||||
destroy_font_raster(rtmp);
|
||||
if (shm)
|
||||
{
|
||||
XSync(disp, False);
|
||||
XShmDetach(disp, &shminfo);
|
||||
shmdt(shminfo.shmaddr);
|
||||
shmctl(shminfo.shmid, IPC_RMID, 0);
|
||||
}
|
||||
XDestroyImage(xim);
|
||||
cm = 0;
|
||||
}
|
||||
|
||||
void
|
||||
Efont_free(Efont * f)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!f)
|
||||
return;
|
||||
TT_Done_Instance(f->instance);
|
||||
TT_Close_Face(f->face);
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
if (f->glyphs_cached[i])
|
||||
destroy_font_raster(f->glyphs_cached[i]);
|
||||
if (!TT_VALID(f->glyphs[i]))
|
||||
TT_Done_Glyph(f->glyphs[i]);
|
||||
}
|
||||
free(f->glyphs);
|
||||
free(f->glyphs_cached);
|
||||
free(f);
|
||||
}
|
||||
|
||||
Efont *
|
||||
Efont_load(char *file, int size)
|
||||
{
|
||||
TT_Error error;
|
||||
TT_CharMap char_map;
|
||||
TT_Glyph_Metrics metrics;
|
||||
static TT_Engine engine;
|
||||
static char have_engine = 0;
|
||||
int dpi = 96;
|
||||
Efont *f;
|
||||
unsigned short i, n, code, load_flags;
|
||||
unsigned short num_glyphs = 0, no_cmap = 0;
|
||||
unsigned short platform, encoding;
|
||||
|
||||
if (!have_engine)
|
||||
{
|
||||
error = TT_Init_FreeType(&engine);
|
||||
if (error)
|
||||
return NULL;
|
||||
have_engine = 1;
|
||||
}
|
||||
f = malloc(sizeof(Efont));
|
||||
f->engine = engine;
|
||||
error = TT_Open_Face(f->engine, file, &f->face);
|
||||
if (error)
|
||||
{
|
||||
free(f);
|
||||
/* fprintf(stderr, "Unable to open font\n"); */
|
||||
return NULL;
|
||||
}
|
||||
error = TT_Get_Face_Properties(f->face, &f->properties);
|
||||
if (error)
|
||||
{
|
||||
TT_Close_Face(f->face);
|
||||
free(f);
|
||||
/* fprintf(stderr, "Unable to get face properties\n"); */
|
||||
return NULL;
|
||||
}
|
||||
error = TT_New_Instance(f->face, &f->instance);
|
||||
if (error)
|
||||
{
|
||||
TT_Close_Face(f->face);
|
||||
free(f);
|
||||
/* fprintf(stderr, "Unable to create instance\n"); */
|
||||
return NULL;
|
||||
}
|
||||
TT_Set_Instance_Resolutions(f->instance, dpi, dpi);
|
||||
TT_Set_Instance_CharSize(f->instance, size * 64);
|
||||
|
||||
n = f->properties.num_CharMaps;
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
TT_Get_CharMap_ID(f->face, i, &platform, &encoding);
|
||||
if ((platform == 3 && encoding == 1) ||
|
||||
(platform == 0 && encoding == 0))
|
||||
{
|
||||
TT_Get_CharMap(f->face, i, &char_map);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == n)
|
||||
{
|
||||
no_cmap = 1;
|
||||
num_glyphs = f->properties.num_Glyphs;
|
||||
TT_Done_Instance(f->instance);
|
||||
TT_Close_Face(f->face);
|
||||
free(f);
|
||||
/* fprintf(stderr, "Sorry, but this font doesn't contain any Unicode mapping table\n"); */
|
||||
return NULL;
|
||||
}
|
||||
f->num_glyph = 256;
|
||||
f->glyphs = (TT_Glyph *) malloc(256 * sizeof(TT_Glyph));
|
||||
memset(f->glyphs, 0, 256 * sizeof(TT_Glyph));
|
||||
f->glyphs_cached = (TT_Raster_Map **) malloc(256 * sizeof(TT_Raster_Map *));
|
||||
memset(f->glyphs_cached, 0, 256 * sizeof(TT_Raster_Map *));
|
||||
|
||||
load_flags = TTLOAD_SCALE_GLYPH | TTLOAD_HINT_GLYPH;
|
||||
|
||||
f->max_descent = 0;
|
||||
f->max_ascent = 0;
|
||||
|
||||
for (i = 0; i < 256; ++i)
|
||||
{
|
||||
if (TT_VALID(f->glyphs[i]))
|
||||
continue;
|
||||
|
||||
if (no_cmap)
|
||||
{
|
||||
code = (i - ' ' + 1) < 0 ? 0 : (i - ' ' + 1);
|
||||
if (code >= num_glyphs)
|
||||
code = 0;
|
||||
}
|
||||
else
|
||||
code = TT_Char_Index(char_map, i);
|
||||
|
||||
TT_New_Glyph(f->face, &f->glyphs[i]);
|
||||
TT_Load_Glyph(f->instance, f->glyphs[i], code, load_flags);
|
||||
TT_Get_Glyph_Metrics(f->glyphs[i], &metrics);
|
||||
|
||||
if ((metrics.bbox.yMin & -64) < f->max_descent)
|
||||
f->max_descent = (metrics.bbox.yMin & -64);
|
||||
if (((metrics.bbox.yMax + 63) & -64) > f->max_ascent)
|
||||
f->max_ascent = ((metrics.bbox.yMax + 63) & -64);
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
void
|
||||
Efont_extents(Efont * f, char *text, int *font_ascent_return,
|
||||
int *font_descent_return, int *width_return,
|
||||
int *max_ascent_return, int *max_descent_return,
|
||||
int *lbearing_return, int *rbearing_return)
|
||||
{
|
||||
int i, upm, ascent, descent, pw;
|
||||
TT_Instance_Metrics imetrics;
|
||||
TT_Glyph_Metrics gmetrics;
|
||||
|
||||
if (!f)
|
||||
return;
|
||||
|
||||
TT_Get_Instance_Metrics(f->instance, &imetrics);
|
||||
upm = f->properties.header->Units_Per_EM;
|
||||
ascent = (f->properties.horizontal->Ascender * imetrics.y_ppem) / upm;
|
||||
descent = (f->properties.horizontal->Descender * imetrics.y_ppem) / upm;
|
||||
if (ascent < 0)
|
||||
ascent = -ascent;
|
||||
if (descent < 0)
|
||||
descent = -descent;
|
||||
pw = 0;
|
||||
|
||||
for (i = 0; text[i]; i++)
|
||||
{
|
||||
unsigned char j = text[i];
|
||||
|
||||
if (!TT_VALID(f->glyphs[j]))
|
||||
continue;
|
||||
TT_Get_Glyph_Metrics(f->glyphs[j], &gmetrics);
|
||||
if (i == 0)
|
||||
{
|
||||
if (lbearing_return)
|
||||
*lbearing_return = ((-gmetrics.bearingX) / 64);
|
||||
}
|
||||
if (text[i + 1] == 0)
|
||||
{
|
||||
if (rbearing_return)
|
||||
*rbearing_return = ((gmetrics.bbox.xMax - gmetrics.advance) / 64);
|
||||
}
|
||||
pw += gmetrics.advance / 64;
|
||||
}
|
||||
if (font_ascent_return)
|
||||
*font_ascent_return = ascent;
|
||||
if (font_descent_return)
|
||||
*font_descent_return = descent;
|
||||
if (width_return)
|
||||
*width_return = pw;
|
||||
if (max_ascent_return)
|
||||
*max_ascent_return = f->max_ascent;
|
||||
if (max_descent_return)
|
||||
*max_descent_return = f->max_descent;
|
||||
}
|
||||
|
||||
/*
|
||||
* int
|
||||
* main( int argc, char **argv)
|
||||
* {
|
||||
* Display *disp;
|
||||
* Efont *f;
|
||||
* GC gc;
|
||||
* XGCValues gcv;
|
||||
* Window win;
|
||||
* int i;
|
||||
*
|
||||
* disp=XOpenDisplay(NULL);
|
||||
* XSync(disp, False);
|
||||
* srand(time(NULL));
|
||||
* win = XCreateSimpleWindow(disp, DefaultRootWindow(disp), 0, 0, 640, 480, 0,
|
||||
* 0, 0);
|
||||
* XMapWindow(disp, win);
|
||||
* XSync(disp, False);
|
||||
*
|
||||
* gcv.subwindow_mode = IncludeInferiors;
|
||||
* gc = XCreateGC(disp, win, GCSubwindowMode, &gcv);
|
||||
* for (;;)
|
||||
* {
|
||||
* for (i = 3; i < argc; i++)
|
||||
* {
|
||||
* XSetForeground(disp, gc, rand()<<16 | rand());
|
||||
* f = Efont_load(argv[i], atoi(argv[1]));
|
||||
* if (f)
|
||||
* EFont_draw_string(disp, win, gc, 20, (atoi(argv[1])/10) * (i-2), argv[2],
|
||||
* f,
|
||||
* DefaultVisual(disp, DefaultScreen(disp)),
|
||||
* DefaultColormap(disp, DefaultScreen(disp)));
|
||||
* Efont_free(f);
|
||||
* f = NULL;
|
||||
* }
|
||||
* }
|
||||
* return 0;
|
||||
* }
|
||||
*/
|
|
@ -0,0 +1,88 @@
|
|||
# Note that this is NOT a relocatable package
|
||||
%define ver 0.16.devel.3
|
||||
%define rel 1
|
||||
%define prefix /usr
|
||||
|
||||
Summary: The Enlightenment window manager.
|
||||
Name: enlightenment
|
||||
Version: %ver
|
||||
Release: %rel
|
||||
Copyright: GPL
|
||||
Group: User Interface/Desktops
|
||||
Source: ftp://www.rasterman.com/pub/enlightenment/enlightenment-%{ver}.tar.gz
|
||||
BuildRoot: /tmp/e-%{ver}-root
|
||||
Packager: The Rasterman <raster@redhat.com>
|
||||
URL: http://www.rasterman.com/
|
||||
Requires: imlib >= 1.9
|
||||
Requires: fnlib >= 0.4
|
||||
Requires: freetype >= 1.1
|
||||
Requires: esound >= 0.2.7
|
||||
|
||||
Docdir: %{prefix}/doc
|
||||
|
||||
%description
|
||||
Enlightenment is a window manager for the X Window System that
|
||||
is designed to be powerful, extensible, configurable and
|
||||
pretty darned good looking! It is one of the more graphically
|
||||
intense window managers.
|
||||
|
||||
Enlightenment goes beyond managing windows by providing a useful
|
||||
and appealing graphical shell from which to work. It is open
|
||||
in design and instead of dictating a policy, allows the user to
|
||||
define their own policy, down to every last detail.
|
||||
|
||||
This package will install the Enlightenment window manager.
|
||||
|
||||
%changelog
|
||||
|
||||
%prep
|
||||
%setup
|
||||
|
||||
%build
|
||||
# Optimize that damned code all the way
|
||||
if [ ! -z "`echo -n ${RPM_OPT_FLAGS} | grep pentium`" ]; then
|
||||
if [ ! -z "`which egcs`" ]; then
|
||||
CC="egcs"
|
||||
else
|
||||
if [ ! -z "`which pgcc`" ]; then
|
||||
CC="pgcc"
|
||||
fi
|
||||
fi
|
||||
CFLAGS="${RPM_OPT_FLAGS}"
|
||||
else
|
||||
CFLAGS="${RPM_OPT_FLAGS}"
|
||||
fi
|
||||
if [ ! -f configure ]; then
|
||||
CFLAGS="$RPM_OPT_FLAGS" ./autogen.sh --prefix=%prefix --enable-fsstd
|
||||
else
|
||||
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%prefix --enable-fsstd
|
||||
fi
|
||||
make
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
make prefix=$RPM_BUILD_ROOT%{prefix} install
|
||||
|
||||
cd $RPM_BUILD_ROOT%{prefix}/
|
||||
chown -R 0.0 *
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%post
|
||||
|
||||
%postun
|
||||
|
||||
%files
|
||||
%defattr(-, root, root)
|
||||
|
||||
%{prefix}/share/enlightenment/*
|
||||
%{prefix}/bin/*
|
||||
|
||||
%doc AUTHORS
|
||||
%doc COPYING
|
||||
%doc INSTALL
|
||||
%doc README
|
||||
%doc FAQ
|
||||
%doc TODO
|
|
@ -0,0 +1,5 @@
|
|||
Makefile
|
||||
Makefile.in
|
||||
eesh
|
||||
.deps
|
||||
*.da
|
|
@ -0,0 +1,256 @@
|
|||
/*****************************************************************************/
|
||||
/* Enlightenment - The Window Manager that dares to do what others don't */
|
||||
/*****************************************************************************/
|
||||
/* Copyright (C) 1997 - 1999 Carsten Haitzler (The Rasterman) */
|
||||
/* */
|
||||
/* This program and utilites is free software; you can redistribute it */
|
||||
/* and/or modify it under the terms of the License shown in COPYING */
|
||||
/* */
|
||||
/* This software is distributed in the hope that it will be useful, */
|
||||
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "econfig.h"
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/Xproto.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <dirent.h>
|
||||
#include <signal.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <pwd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/resource.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
|
||||
#include "econfig.h"
|
||||
|
||||
#ifndef ENLIGHTENMENT_ROOT
|
||||
#define ENLIGHTENMENT_ROOT "/usr/local/enlightenment"
|
||||
#endif
|
||||
#define ENLIGHTENMENT_SYSTEM_CONFIG ENLIGHTENMENT_ROOT"/system_config"
|
||||
#define ENLIGHTENMENT_SYSTEM_THEMES ENLIGHTENMENT_ROOT"/themes"
|
||||
#define ENLIGHTENMENT_SYSTEM_BGS ENLIGHTENMENT_ROOT"/backgrounds"
|
||||
|
||||
#define LIST_FINDBY_NAME 0
|
||||
#define LIST_FINDBY_ID 1
|
||||
#define LIST_FINDBY_BOTH 2
|
||||
#define LIST_FINDBY_NONE 3
|
||||
|
||||
#define LIST_TYPE_COUNT 18
|
||||
#define LIST_TYPE_ANY 0
|
||||
#define LIST_TYPE_CLIENT 1
|
||||
|
||||
typedef struct _list
|
||||
{
|
||||
int type;
|
||||
char *name;
|
||||
int id;
|
||||
void *item;
|
||||
|
||||
struct _list *next;
|
||||
}
|
||||
List;
|
||||
|
||||
typedef struct _client
|
||||
{
|
||||
char *name;
|
||||
Window win;
|
||||
char *msg;
|
||||
char *clientname;
|
||||
char *version;
|
||||
char *author;
|
||||
char *email;
|
||||
char *web;
|
||||
char *address;
|
||||
char *info;
|
||||
Pixmap pmap;
|
||||
}
|
||||
Client;
|
||||
|
||||
typedef struct _root
|
||||
{
|
||||
Window win;
|
||||
Visual *vis;
|
||||
int depth;
|
||||
Colormap cmap;
|
||||
int scr;
|
||||
int w, h;
|
||||
Window focuswin;
|
||||
}
|
||||
Root;
|
||||
|
||||
int EExit(void *code);
|
||||
void *Emalloc(int size);
|
||||
void *Erealloc(void *ptr, int size);
|
||||
void Efree(void *ptr);
|
||||
|
||||
void *FindItem(char *name, int id, int find_by, int type);
|
||||
void AddItem(void *item, char *name, int id, int type);
|
||||
void *RemoveItem(char *name, int id, int find_by, int type);
|
||||
void **ListItemType(int *num, int type);
|
||||
char **ListItems(int *num, int type);
|
||||
void **ListItemTypeID(int *num, int type, int id);
|
||||
|
||||
void SetupX(void);
|
||||
|
||||
void CommsSetup(void);
|
||||
void CommsFindCommsWindow(void);
|
||||
void CommsSend(Client * c, char *s);
|
||||
char *CommsGet(Client ** c, XEvent * ev);
|
||||
Client *MakeClient(Window win);
|
||||
void ListFreeClient(void *ptr);
|
||||
void DeleteClient(Client * c);
|
||||
void HandleComms(XEvent * ev);
|
||||
|
||||
#if defined(__FILE__) && defined(__LINE__)
|
||||
#define Efree(x) \
|
||||
{ \
|
||||
if (x) \
|
||||
__Efree(x); \
|
||||
else \
|
||||
Alert("%s:%d: Attempt to free a NULL pointer\n", __FILE__, __LINE__); \
|
||||
}
|
||||
#define Emalloc(x) \
|
||||
__Emalloc(x)
|
||||
#define Erealloc(x, y) \
|
||||
__Erealloc(x, y)
|
||||
#else
|
||||
#define Efree(x) \
|
||||
{ \
|
||||
if (x) \
|
||||
__Efree(x); \
|
||||
else \
|
||||
Alert("??:??: Attempt to free a NULL pointer\n"); \
|
||||
}
|
||||
#define Emalloc(x) \
|
||||
__Emalloc(x)
|
||||
#define Erealloc(x, y) \
|
||||
__Erealloc(x, y)
|
||||
#endif
|
||||
|
||||
void *__Emalloc(int size);
|
||||
void *__Erealloc(void *ptr, int size);
|
||||
void __Efree(void *ptr);
|
||||
char *duplicate(char *s);
|
||||
|
||||
#define FILEPATH_LEN_MAX 4096
|
||||
/* This turns on E's internal stack tracking system for coarse debugging */
|
||||
/* and being able to trace E for profiling/optimisation purposes (which */
|
||||
/* believe it or not I'm actually doing) */
|
||||
|
||||
/* #define DEBUG 1 */
|
||||
|
||||
#ifdef DEBUG
|
||||
extern int call_level;
|
||||
extern int debug_level;
|
||||
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
#define EDBUG(l,x) \
|
||||
{ \
|
||||
int i_call_level; \
|
||||
if (l<debug_level) \
|
||||
{ \
|
||||
for(i_call_level=0;i_call_level<call_level;i_call_level++) \
|
||||
putchar('-'); \
|
||||
printf(" %8x %s\n",(unsigned int)time(NULL),x); \
|
||||
fflush(stdout); \
|
||||
} \
|
||||
call_level++; \
|
||||
}
|
||||
#else
|
||||
#define EDBUG(l,x) \
|
||||
;
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define EDBUG_RETURN(x) \
|
||||
{ \
|
||||
/* int i_call_level; */\
|
||||
call_level--; \
|
||||
/* for(i_call_level=0;i_call_level<call_level;i_call_level++) */\
|
||||
/* putchar('-'); */\
|
||||
/* putchar('\n'); */\
|
||||
return (x); \
|
||||
}
|
||||
#define EDBUG_RETURN_ \
|
||||
{ \
|
||||
/* int i_call_level; */\
|
||||
call_level--; \
|
||||
/* for(i_call_level=0;i_call_level<call_level;i_call_level++) */\
|
||||
/* putchar('-'); */\
|
||||
/* putchar('\n'); */\
|
||||
return; \
|
||||
}
|
||||
#else
|
||||
#define EDBUG_RETURN(x) \
|
||||
{ \
|
||||
return (x); \
|
||||
}
|
||||
#define EDBUG_RETURN_ \
|
||||
{ \
|
||||
return; \
|
||||
}
|
||||
#endif
|
||||
|
||||
void Alert(char *fmt,...);
|
||||
void InitStringList(void);
|
||||
void AssignIgnoreFunction(int (*FunctionToAssign) (void *), void *params);
|
||||
void AssignRestartFunction(int (*FunctionToAssign) (void *), void *params);
|
||||
void AssignExitFunction(int (*FunctionToAssign) (void *), void *params);
|
||||
void AssignTitleText(char *text);
|
||||
void AssignIgnoreText(char *text);
|
||||
void AssignRestartText(char *text);
|
||||
void AssignExitText(char *text);
|
||||
|
||||
void md(char *s);
|
||||
int exists(char *s);
|
||||
void mkdirs(char *s);
|
||||
int isfile(char *s);
|
||||
int isdir(char *s);
|
||||
char **ls(char *dir, int *num);
|
||||
void freestrlist(char **l, int num);
|
||||
void rm(char *s);
|
||||
void mv(char *s, char *ss);
|
||||
void cp(char *s, char *ss);
|
||||
time_t moddate(char *s);
|
||||
int filesize(char *s);
|
||||
void cd(char *s);
|
||||
char *cwd(void);
|
||||
int permissions(char *s);
|
||||
int owner(char *s);
|
||||
int group(char *s);
|
||||
char *username(int uid);
|
||||
char *homedir(int uid);
|
||||
char *usershell(int uid);
|
||||
char *atword(char *s, int num);
|
||||
char *atchar(char *s, char c);
|
||||
void word(char *s, int num, char *wd);
|
||||
int canread(char *s);
|
||||
int canwrite(char *s);
|
||||
int canexec(char *s);
|
||||
char *fileof(char *s);
|
||||
char *fullfileof(char *s);
|
||||
char *pathtoexec(char *file);
|
||||
char *pathtofile(char *file);
|
||||
|
||||
void EDisplayMemUse(void);
|
||||
|
||||
extern Display *disp;
|
||||
extern List lists;
|
||||
extern Window comms_win;
|
||||
extern Window my_win;
|
||||
extern Root root;
|
|
@ -0,0 +1,40 @@
|
|||
if FSSTD
|
||||
bindir = @bindir@
|
||||
ENLIGHTENMENT_ROOT=$(pkglibdir)
|
||||
else
|
||||
bindir=$(prefix)/enlightenment/bin
|
||||
ENLIGHTENMENT_ROOT=$(prefix)/enlightenment
|
||||
endif
|
||||
|
||||
bin_PROGRAMS = eesh
|
||||
|
||||
eesh_SOURCES = \
|
||||
E.h \
|
||||
comms.c \
|
||||
globals.c \
|
||||
lists.c \
|
||||
main.c \
|
||||
setup.c \
|
||||
memory.c \
|
||||
file.c \
|
||||
alert.c
|
||||
|
||||
LDADD = $(X_PRE_LIBS) $(X_LIBS) -lX11 $(X_EXTRA_LIBS) -lm
|
||||
|
||||
INCLUDES=-I$(top_srcdir) $(IMLIB_CFLAGS) -I$(includedir) -I..
|
||||
|
||||
DEFS=-DENLIGHTENMENT_ROOT=\"@ENLIGHTENMENT_ROOT@\"
|
||||
|
||||
#install-exec-local:
|
||||
# if [ x@USE_FSSTD@ = "xno" ]; then \
|
||||
# ../mkinstalldirs $(exec_prefix)/bin; \
|
||||
# for i in $(bin_PROGRAMS); do \
|
||||
# rm -f $(exec_prefix)/bin/$$i; \
|
||||
# $(LN_S) $(bindir)/$$i $(exec_prefix)/bin/$$i; \
|
||||
# done; \
|
||||
# fi
|
||||
|
||||
uninstall-local:
|
||||
for i in $(bin_PROGRAMS); do \
|
||||
rm -f $(exec_prefix)/bin/$$i; \
|
||||
done
|
|
@ -0,0 +1,116 @@
|
|||
#include "E.h"
|
||||
|
||||
static void ShowAlert(char *text);
|
||||
|
||||
static int (*IgnoreFunction) (void *) = NULL;
|
||||
static void *IgnoreParams = NULL;
|
||||
static char *IgnoreText = NULL;
|
||||
static int (*RestartFunction) (void *) = NULL;
|
||||
static void *RestartParams = NULL;
|
||||
static char *RestartText = NULL;
|
||||
static int (*ExitFunction) (void *) = NULL;
|
||||
static void *ExitParams = NULL;
|
||||
static char *ExitText = NULL;
|
||||
|
||||
static char *TitleText = NULL;
|
||||
|
||||
int call_level;
|
||||
int debug_level;
|
||||
|
||||
void
|
||||
Alert(char *fmt,...)
|
||||
{
|
||||
char text[10240];
|
||||
va_list ap;
|
||||
|
||||
EDBUG(7, "Alert");
|
||||
va_start(ap, fmt);
|
||||
#ifdef __USE_GNU
|
||||
vsnprintf(text, 10240, fmt, ap);
|
||||
#else
|
||||
vsprintf(text, fmt, ap);
|
||||
#endif
|
||||
va_end(ap);
|
||||
ShowAlert(text);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
void
|
||||
InitStringList(void)
|
||||
{
|
||||
char *debug_str;
|
||||
|
||||
call_level = 0;
|
||||
debug_level = 0;
|
||||
debug_str = getenv("EDBUG");
|
||||
if (debug_str)
|
||||
debug_level = atoi(debug_str);
|
||||
}
|
||||
|
||||
void
|
||||
AssignTitleText(char *text)
|
||||
{
|
||||
if (TitleText)
|
||||
Efree(TitleText);
|
||||
TitleText = NULL;
|
||||
TitleText = duplicate(text);
|
||||
}
|
||||
|
||||
void
|
||||
AssignIgnoreText(char *text)
|
||||
{
|
||||
if (IgnoreText)
|
||||
Efree(IgnoreText);
|
||||
IgnoreText = NULL;
|
||||
IgnoreText = duplicate(text);
|
||||
}
|
||||
|
||||
void
|
||||
AssignRestartText(char *text)
|
||||
{
|
||||
if (RestartText)
|
||||
Efree(RestartText);
|
||||
RestartText = NULL;
|
||||
RestartText = duplicate(text);
|
||||
}
|
||||
|
||||
void
|
||||
AssignExitText(char *text)
|
||||
{
|
||||
if (ExitText)
|
||||
Efree(ExitText);
|
||||
ExitText = NULL;
|
||||
ExitText = duplicate(text);
|
||||
}
|
||||
|
||||
void
|
||||
AssignIgnoreFunction(int (*FunctionToAssign) (void *), void *params)
|
||||
{
|
||||
IgnoreFunction = FunctionToAssign;
|
||||
IgnoreParams = params;
|
||||
}
|
||||
|
||||
void
|
||||
AssignRestartFunction(int (*FunctionToAssign) (void *), void *params)
|
||||
{
|
||||
RestartFunction = FunctionToAssign;
|
||||
RestartParams = params;
|
||||
}
|
||||
|
||||
void
|
||||
AssignExitFunction(int (*FunctionToAssign) (void *), void *params)
|
||||
{
|
||||
ExitFunction = FunctionToAssign;
|
||||
ExitParams = params;
|
||||
}
|
||||
|
||||
static void
|
||||
ShowAlert(char *text)
|
||||
{
|
||||
EDBUG(8, "ShowAlert");
|
||||
if (!text)
|
||||
EDBUG_RETURN_;
|
||||
fprintf(stderr, text);
|
||||
fflush(stderr);
|
||||
EDBUG_RETURN_;
|
||||
}
|
|
@ -0,0 +1,237 @@
|
|||
#include "E.h"
|
||||
|
||||
char waitonly;
|
||||
|
||||
void
|
||||
CommsSetup()
|
||||
{
|
||||
EDBUG(5, "CommsSetup");
|
||||
my_win = XCreateSimpleWindow(disp, root.win, -100, -100, 5, 5, 0, 0, 0);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
void
|
||||
CommsFindCommsWindow()
|
||||
{
|
||||
unsigned char *s;
|
||||
Atom a, ar;
|
||||
unsigned long num, after;
|
||||
int format;
|
||||
Window rt;
|
||||
int dint;
|
||||
unsigned int duint;
|
||||
|
||||
EDBUG(6, "CommsFindCommsWindow");
|
||||
a = XInternAtom(disp, "ENLIGHTENMENT_COMMS", True);
|
||||
if (a != None)
|
||||
{
|
||||
s = NULL;
|
||||
XGetWindowProperty(disp, root.win, a, 0, 14, False, AnyPropertyType, &ar,
|
||||
&format, &num, &after, &s);
|
||||
if (s)
|
||||
{
|
||||
sscanf((char *)s, "%*s %x", (unsigned int *)&comms_win);
|
||||
XFree(s);
|
||||
}
|
||||
else
|
||||
(comms_win = 0);
|
||||
if (comms_win)
|
||||
{
|
||||
if (!XGetGeometry(disp, comms_win, &rt, &dint, &dint,
|
||||
&duint, &duint, &duint, &duint))
|
||||
comms_win = 0;
|
||||
s = NULL;
|
||||
if (comms_win)
|
||||
{
|
||||
XGetWindowProperty(disp, comms_win, a, 0, 14, False,
|
||||
AnyPropertyType, &ar, &format, &num, &after,
|
||||
&s);
|
||||
if (s)
|
||||
XFree(s);
|
||||
else
|
||||
comms_win = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (comms_win)
|
||||
XSelectInput(disp, comms_win,
|
||||
StructureNotifyMask | SubstructureNotifyMask);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
void
|
||||
CommsSend(Client * c, char *s)
|
||||
{
|
||||
char ss[21];
|
||||
int i, j, k, len;
|
||||
XEvent ev;
|
||||
Atom a;
|
||||
|
||||
EDBUG(5, "CommsSend");
|
||||
if ((!s) || (!c))
|
||||
EDBUG_RETURN_;
|
||||
len = strlen(s);
|
||||
a = XInternAtom(disp, "ENL_MSG", True);
|
||||
ev.xclient.type = ClientMessage;
|
||||
ev.xclient.serial = 0;
|
||||
ev.xclient.send_event = True;
|
||||
ev.xclient.window = c->win;
|
||||
ev.xclient.message_type = a;
|
||||
ev.xclient.format = 8;
|
||||
|
||||
for (i = 0; i < len + 1; i += 12)
|
||||
{
|
||||
sprintf(ss, "%8x", (int)my_win);
|
||||
for (j = 0; j < 12; j++)
|
||||
{
|
||||
ss[8 + j] = s[i + j];
|
||||
if (!s[i + j])
|
||||
j = 12;
|
||||
}
|
||||
ss[20] = 0;
|
||||
for (k = 0; k < 20; k++)
|
||||
ev.xclient.data.b[k] = ss[k];
|
||||
XSendEvent(disp, c->win, False, 0, (XEvent *) & ev);
|
||||
}
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
char *
|
||||
CommsGet(Client ** c, XEvent * ev)
|
||||
{
|
||||
char s[13], s2[9], *msg, st[32];
|
||||
int i;
|
||||
Window win;
|
||||
Client *cl;
|
||||
|
||||
EDBUG(5, "CommsGet");
|
||||
if ((!ev) || (!c))
|
||||
EDBUG_RETURN(NULL);
|
||||
if (ev->type != ClientMessage)
|
||||
EDBUG_RETURN(NULL);
|
||||
s[12] = 0;
|
||||
s2[8] = 0;
|
||||
msg = NULL;
|
||||
for (i = 0; i < 8; i++)
|
||||
s2[i] = ev->xclient.data.b[i];
|
||||
for (i = 0; i < 12; i++)
|
||||
s[i] = ev->xclient.data.b[i + 8];
|
||||
sscanf(s2, "%x", (int *)&win);
|
||||
cl = (Client *) FindItem(NULL, win, LIST_FINDBY_ID, LIST_TYPE_CLIENT);
|
||||
if (!cl)
|
||||
{
|
||||
cl = MakeClient(win);
|
||||
if (!cl)
|
||||
EDBUG_RETURN(NULL);
|
||||
sprintf(st, "%8x", (int)win);
|
||||
cl->name = duplicate(st);
|
||||
AddItem((void *)cl, st, cl->win, LIST_TYPE_CLIENT);
|
||||
XSelectInput(disp, win, StructureNotifyMask | SubstructureNotifyMask);
|
||||
}
|
||||
if (cl->msg)
|
||||
{
|
||||
/* append text to end of msg */
|
||||
cl->msg = Erealloc(cl->msg, strlen(cl->msg) + strlen(s) + 1);
|
||||
if (!cl->msg)
|
||||
EDBUG_RETURN(NULL);
|
||||
strcat(cl->msg, s);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* new msg */
|
||||
cl->msg = Emalloc(strlen(s) + 1);
|
||||
if (!cl->msg)
|
||||
EDBUG_RETURN(NULL);
|
||||
strcpy(cl->msg, s);
|
||||
}
|
||||
if (strlen(s) < 12)
|
||||
{
|
||||
msg = cl->msg;
|
||||
cl->msg = NULL;
|
||||
*c = cl;
|
||||
}
|
||||
EDBUG_RETURN(msg);
|
||||
}
|
||||
|
||||
Client *
|
||||
MakeClient(Window win)
|
||||
{
|
||||
Client *c;
|
||||
|
||||
EDBUG(6, "MakeClient");
|
||||
c = Emalloc(sizeof(Client));
|
||||
if (!c)
|
||||
EDBUG_RETURN(NULL);
|
||||
c->name = NULL;
|
||||
c->win = win;
|
||||
c->msg = NULL;
|
||||
c->clientname = NULL;
|
||||
c->version = NULL;
|
||||
c->author = NULL;
|
||||
c->email = NULL;
|
||||
c->web = NULL;
|
||||
c->address = NULL;
|
||||
c->info = NULL;
|
||||
c->pmap = 0;
|
||||
EDBUG_RETURN(c);
|
||||
}
|
||||
|
||||
void
|
||||
ListFreeClient(void *ptr)
|
||||
{
|
||||
Client *c;
|
||||
|
||||
EDBUG(6, "ListFreeClient");
|
||||
c = (Client *) ptr;
|
||||
if (!c)
|
||||
EDBUG_RETURN_;
|
||||
if (c->name)
|
||||
Efree(c->name);
|
||||
if (c->msg)
|
||||
Efree(c->msg);
|
||||
if (c->clientname)
|
||||
Efree(c->clientname);
|
||||
if (c->version)
|
||||
Efree(c->version);
|
||||
if (c->author)
|
||||
Efree(c->author);
|
||||
if (c->email)
|
||||
Efree(c->email);
|
||||
if (c->web)
|
||||
Efree(c->web);
|
||||
if (c->address)
|
||||
Efree(c->address);
|
||||
if (c->info)
|
||||
Efree(c->info);
|
||||
Efree(c);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
void
|
||||
DeleteClient(Client * c)
|
||||
{
|
||||
Client *cc;
|
||||
|
||||
EDBUG(6, "DeleteClient");
|
||||
cc = RemoveItem(NULL, c->win, LIST_FINDBY_ID, LIST_TYPE_CLIENT);
|
||||
ListFreeClient(cc);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
void
|
||||
HandleComms(XEvent * ev)
|
||||
{
|
||||
Client *c;
|
||||
char *s;
|
||||
|
||||
EDBUG(4, "HandleComms");
|
||||
s = CommsGet(&c, ev);
|
||||
if (!s)
|
||||
EDBUG_RETURN_;
|
||||
printf("%s\n", s);
|
||||
fflush(stdout);
|
||||
if (waitonly)
|
||||
exit(0);
|
||||
Efree(s);
|
||||
EDBUG_RETURN_;
|
||||
}
|
|
@ -0,0 +1,642 @@
|
|||
#include "E.h"
|
||||
|
||||
void
|
||||
md(char *s)
|
||||
{
|
||||
EDBUG(9, "md");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN_;
|
||||
mkdir(s, S_IRWXU);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
int
|
||||
exists(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
EDBUG(9, "exists");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN(0);
|
||||
if (stat(s, &st) < 0)
|
||||
EDBUG_RETURN(0);
|
||||
EDBUG_RETURN(1);
|
||||
}
|
||||
|
||||
void
|
||||
mkdirs(char *s)
|
||||
{
|
||||
char ss[FILEPATH_LEN_MAX];
|
||||
int i, ii;
|
||||
|
||||
i = 0;
|
||||
ii = 0;
|
||||
while (s[i])
|
||||
{
|
||||
ss[ii++] = s[i];
|
||||
ss[ii] = 0;
|
||||
if (s[i] == '/')
|
||||
{
|
||||
if (!exists(ss))
|
||||
md(ss);
|
||||
else if (!isdir(ss))
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
isfile(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
EDBUG(9, "isfile");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN(0);
|
||||
if (stat(s, &st) < 0)
|
||||
EDBUG_RETURN(0);
|
||||
if (S_ISREG(st.st_mode))
|
||||
EDBUG_RETURN(1);
|
||||
EDBUG_RETURN(0);
|
||||
}
|
||||
|
||||
int
|
||||
isdir(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
EDBUG(9, "isdir");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN(0);
|
||||
if (stat(s, &st) < 0)
|
||||
EDBUG_RETURN(0);
|
||||
if (S_ISDIR(st.st_mode))
|
||||
EDBUG_RETURN(1);
|
||||
EDBUG_RETURN(0);
|
||||
}
|
||||
|
||||
char **
|
||||
ls(char *dir, int *num)
|
||||
{
|
||||
int i, dirlen;
|
||||
int done = 0;
|
||||
DIR *dirp;
|
||||
char **names;
|
||||
struct dirent *dp;
|
||||
|
||||
EDBUG(9, "ls");
|
||||
if ((!dir) || (!*dir))
|
||||
EDBUG_RETURN(0);
|
||||
dirp = opendir(dir);
|
||||
if (!dirp)
|
||||
{
|
||||
*num = 0;
|
||||
EDBUG_RETURN(NULL);
|
||||
}
|
||||
/* count # of entries in dir (worst case) */
|
||||
for (dirlen = 0; (dp = readdir(dirp)) != NULL; dirlen++);
|
||||
if (!dirlen)
|
||||
{
|
||||
closedir(dirp);
|
||||
*num = dirlen;
|
||||
EDBUG_RETURN(NULL);
|
||||
}
|
||||
/* load up the entries, now that we know how many to make */
|
||||
names = (char **)Emalloc(dirlen * sizeof(char *));
|
||||
|
||||
if (!names)
|
||||
EDBUG_RETURN(NULL);
|
||||
|
||||
rewinddir(dirp);
|
||||
for (i = 0; i < dirlen;)
|
||||
{
|
||||
dp = readdir(dirp);
|
||||
if (!dp)
|
||||
break;
|
||||
names[i] = (char *)Emalloc(strlen(dp->d_name) + 1);
|
||||
if (!names)
|
||||
EDBUG_RETURN(NULL);
|
||||
strcpy(names[i], dp->d_name);
|
||||
i++;
|
||||
}
|
||||
|
||||
if (i < dirlen)
|
||||
dirlen = i; /* dir got shorter... */
|
||||
closedir(dirp);
|
||||
*num = dirlen;
|
||||
/* do a simple bubble sort here to alphanumberic it */
|
||||
while (!done)
|
||||
{
|
||||
done = 1;
|
||||
for (i = 0; i < dirlen - 2; i++)
|
||||
{
|
||||
if (strcmp(names[i], names[i + 1]) < 0)
|
||||
{
|
||||
char *temp;
|
||||
|
||||
temp = names[i];
|
||||
names[i] = names[i + 1];
|
||||
names[i + 1] = temp;
|
||||
done = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
EDBUG_RETURN(names);
|
||||
}
|
||||
|
||||
void
|
||||
freestrlist(char **l, int num)
|
||||
{
|
||||
EDBUG(9, "freestrlist");
|
||||
if (!l)
|
||||
EDBUG_RETURN_;
|
||||
while (num--)
|
||||
if (l[num])
|
||||
Efree(l[num]);
|
||||
Efree(l);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
void
|
||||
rm(char *s)
|
||||
{
|
||||
EDBUG(9, "rm");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN_;
|
||||
unlink(s);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
void
|
||||
mv(char *s, char *ss)
|
||||
{
|
||||
EDBUG(9, "mv");
|
||||
if ((!s) || (!ss) || (!*s) || (!*ss))
|
||||
EDBUG_RETURN_;
|
||||
rename(s, ss);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
void
|
||||
cp(char *s, char *ss)
|
||||
{
|
||||
int i;
|
||||
FILE *f, *ff;
|
||||
unsigned char buf[1];
|
||||
|
||||
EDBUG(9, "cp");
|
||||
if ((!s) || (!ss) || (!*s) || (!*ss))
|
||||
EDBUG_RETURN_;
|
||||
if (!exists(s))
|
||||
EDBUG_RETURN_;
|
||||
i = filesize(s);
|
||||
f = fopen(s, "r");
|
||||
if (!f)
|
||||
EDBUG_RETURN_;
|
||||
ff = fopen(ss, "w");
|
||||
if (!ff)
|
||||
{
|
||||
fclose(f);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
while (fread(buf, 1, 1, f))
|
||||
fwrite(buf, 1, 1, ff);
|
||||
fclose(f);
|
||||
fclose(ff);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
time_t
|
||||
moddate(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
EDBUG(9, "moddate");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN(0);
|
||||
if (!stat(s, &st) < 0)
|
||||
EDBUG_RETURN(0);
|
||||
if (st.st_mtime > st.st_ctime)
|
||||
{
|
||||
EDBUG_RETURN(st.st_mtime);
|
||||
}
|
||||
else
|
||||
EDBUG_RETURN(st.st_ctime);
|
||||
EDBUG_RETURN(0);
|
||||
}
|
||||
|
||||
int
|
||||
filesize(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
EDBUG(9, "filesize");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN(0);
|
||||
if (stat(s, &st) < 0)
|
||||
EDBUG_RETURN(0);
|
||||
EDBUG_RETURN((int)st.st_size);
|
||||
}
|
||||
|
||||
void
|
||||
cd(char *s)
|
||||
{
|
||||
EDBUG(9, "cd");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN_;
|
||||
chdir(s);
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
char *
|
||||
cwd(void)
|
||||
{
|
||||
char *s;
|
||||
char ss[FILEPATH_LEN_MAX];
|
||||
|
||||
EDBUG(9, "cwd");
|
||||
getcwd(ss, FILEPATH_LEN_MAX);
|
||||
s = duplicate(ss);
|
||||
EDBUG_RETURN(s);
|
||||
}
|
||||
|
||||
int
|
||||
permissions(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
EDBUG(9, "permissions");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN(0);
|
||||
if (!stat(s, &st) < 0)
|
||||
EDBUG_RETURN(0);
|
||||
EDBUG_RETURN(st.st_mode);
|
||||
}
|
||||
|
||||
int
|
||||
owner(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
EDBUG(9, "owner");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN(0);
|
||||
if (!stat(s, &st) < 0)
|
||||
EDBUG_RETURN(0);
|
||||
EDBUG_RETURN(st.st_uid);
|
||||
}
|
||||
|
||||
int
|
||||
group(char *s)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
EDBUG(9, "group");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN(0);
|
||||
if (!stat(s, &st) < 0)
|
||||
EDBUG_RETURN(0);
|
||||
EDBUG_RETURN(st.st_gid);
|
||||
}
|
||||
|
||||
char *
|
||||
username(int uid)
|
||||
{
|
||||
char *s;
|
||||
struct passwd *pwd;
|
||||
|
||||
EDBUG(9, "username");
|
||||
pwd = getpwuid(uid);
|
||||
if (pwd)
|
||||
{
|
||||
s = duplicate(pwd->pw_name);
|
||||
/* Efree(pwd); */
|
||||
EDBUG_RETURN(s);
|
||||
}
|
||||
EDBUG_RETURN(duplicate("unknown"));
|
||||
}
|
||||
|
||||
char *
|
||||
homedir(int uid)
|
||||
{
|
||||
char *s;
|
||||
struct passwd *pwd;
|
||||
|
||||
EDBUG(9, "homedir");
|
||||
pwd = getpwuid(uid);
|
||||
if (pwd)
|
||||
{
|
||||
s = duplicate(pwd->pw_dir);
|
||||
/* Efree(pwd); */
|
||||
EDBUG_RETURN(s);
|
||||
}
|
||||
EDBUG_RETURN(duplicate("/tmp"));
|
||||
}
|
||||
|
||||
char *
|
||||
usershell(int uid)
|
||||
{
|
||||
char *s;
|
||||
struct passwd *pwd;
|
||||
|
||||
EDBUG(9, "usershell");
|
||||
pwd = getpwuid(uid);
|
||||
if (pwd)
|
||||
{
|
||||
s = duplicate(pwd->pw_shell);
|
||||
/* Efree(pwd); */
|
||||
EDBUG_RETURN(s);
|
||||
}
|
||||
EDBUG_RETURN(duplicate("/bin/sh"));
|
||||
}
|
||||
|
||||
char *
|
||||
atword(char *s, int num)
|
||||
{
|
||||
int cnt, i;
|
||||
|
||||
EDBUG(9, "atword");
|
||||
if (!s)
|
||||
EDBUG_RETURN(NULL);
|
||||
cnt = 0;
|
||||
i = 0;
|
||||
|
||||
while (s[i])
|
||||
{
|
||||
if ((s[i] != ' ') && (s[i] != '\t'))
|
||||
{
|
||||
if (i == 0)
|
||||
cnt++;
|
||||
else if ((s[i - 1] == ' ') || (s[i - 1] == '\t'))
|
||||
cnt++;
|
||||
if (cnt == num)
|
||||
EDBUG_RETURN(&s[i]);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
EDBUG_RETURN(NULL);
|
||||
}
|
||||
|
||||
char *
|
||||
atchar(char *s, char c)
|
||||
{
|
||||
int i;
|
||||
|
||||
EDBUG(9, "atchar");
|
||||
if (!s)
|
||||
EDBUG_RETURN(NULL);
|
||||
i = 0;
|
||||
while (s[i] != 0)
|
||||
{
|
||||
if (s[i] == c)
|
||||
EDBUG_RETURN(&s[i]);
|
||||
i++;
|
||||
}
|
||||
EDBUG_RETURN(NULL);
|
||||
}
|
||||
|
||||
void
|
||||
word(char *s, int num, char *wd)
|
||||
{
|
||||
int cnt, i;
|
||||
char *start, *finish, *ss, *w;
|
||||
|
||||
EDBUG(9, "word");
|
||||
if (!s)
|
||||
EDBUG_RETURN_;
|
||||
if (!wd)
|
||||
EDBUG_RETURN_;
|
||||
if (num <= 0)
|
||||
{
|
||||
*wd = 0;
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
cnt = 0;
|
||||
i = 0;
|
||||
start = NULL;
|
||||
finish = NULL;
|
||||
ss = NULL;
|
||||
w = wd;
|
||||
|
||||
while (s[i])
|
||||
{
|
||||
if ((cnt == num) && ((s[i] == ' ') || (s[i] == '\t')))
|
||||
{
|
||||
finish = &s[i];
|
||||
break;
|
||||
}
|
||||
if ((s[i] != ' ') && (s[i] != '\t'))
|
||||
{
|
||||
if (i == 0)
|
||||
{
|
||||
cnt++;
|
||||
if (cnt == num)
|
||||
start = &s[i];
|
||||
}
|
||||
else if ((s[i - 1] == ' ') || (s[i - 1] == '\t'))
|
||||
{
|
||||
cnt++;
|
||||
if (cnt == num)
|
||||
start = &s[i];
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (cnt == num)
|
||||
{
|
||||
if ((start) && (finish))
|
||||
{
|
||||
for (ss = start; ss < finish; ss++)
|
||||
*wd++ = *ss;
|
||||
}
|
||||
else if (start)
|
||||
{
|
||||
for (ss = start; *ss != 0; ss++)
|
||||
*wd++ = *ss;
|
||||
}
|
||||
*wd = 0;
|
||||
}
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
int
|
||||
canread(char *s)
|
||||
{
|
||||
EDBUG(9, "canread");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN(0);
|
||||
EDBUG_RETURN(1 + access(s, R_OK));
|
||||
}
|
||||
|
||||
int
|
||||
canwrite(char *s)
|
||||
{
|
||||
EDBUG(9, "canwrite");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN(0);
|
||||
EDBUG_RETURN(1 + access(s, W_OK));
|
||||
}
|
||||
|
||||
int
|
||||
canexec(char *s)
|
||||
{
|
||||
EDBUG(9, "canexec");
|
||||
if ((!s) || (!*s))
|
||||
EDBUG_RETURN(0);
|
||||
EDBUG_RETURN(1 + access(s, X_OK));
|
||||
}
|
||||
|
||||
char *
|
||||
fileof(char *s)
|
||||
{
|
||||
char ss[1024];
|
||||
int i, p1, p2;
|
||||
|
||||
EDBUG(9, "fileof");
|
||||
i = 0;
|
||||
p1 = -1;
|
||||
p2 = -1;
|
||||
for (i = strlen(s) - 1; i >= 0; i--)
|
||||
{
|
||||
if ((s[i] == '.') && (p2 < 0) && (p1 < 0))
|
||||
p2 = i;
|
||||
if ((s[i] == '/') && (p1 < 0))
|
||||
p1 = i;
|
||||
}
|
||||
if (p2 < 0)
|
||||
p2 = strlen(s);
|
||||
if (p1 < 0)
|
||||
p1 = 0;
|
||||
for (i = 0; i < (p2 - p1 - 1); i++)
|
||||
ss[i] = s[p1 + 1 + i];
|
||||
ss[i] = 0;
|
||||
EDBUG_RETURN(duplicate(ss));
|
||||
}
|
||||
|
||||
char *
|
||||
fullfileof(char *s)
|
||||
{
|
||||
char ss[1024];
|
||||
int i, p1, p2;
|
||||
|
||||
EDBUG(9, "fullfileof");
|
||||
i = 0;
|
||||
p1 = -1;
|
||||
for (i = strlen(s) - 1; i >= 0; i--)
|
||||
{
|
||||
if ((s[i] == '/') && (p1 < 0))
|
||||
p1 = i;
|
||||
}
|
||||
p2 = strlen(s);
|
||||
for (i = 0; i < (p2 - p1 - 1); i++)
|
||||
ss[i] = s[p1 + 1 + i];
|
||||
ss[i] = 0;
|
||||
EDBUG_RETURN(duplicate(ss));
|
||||
}
|
||||
|
||||
char *
|
||||
pathtoexec(char *file)
|
||||
{
|
||||
char *p, *cp, *ep;
|
||||
char *s;
|
||||
int len, exelen;
|
||||
|
||||
EDBUG(9, "pathtoexec");
|
||||
if (file[0] == '/')
|
||||
{
|
||||
if (canexec(file))
|
||||
EDBUG_RETURN(duplicate(file));
|
||||
}
|
||||
p = getenv("PATH");
|
||||
if (!p)
|
||||
EDBUG_RETURN(duplicate(file));
|
||||
if (!file)
|
||||
EDBUG_RETURN(NULL);
|
||||
cp = p;
|
||||
exelen = strlen(file);
|
||||
while ((ep = strchr(cp, ':')))
|
||||
{
|
||||
len = ep - cp;
|
||||
s = Emalloc(len + 1);
|
||||
if (s)
|
||||
{
|
||||
strncpy(s, cp, len);
|
||||
s[len] = 0;
|
||||
s = Erealloc(s, len + 2 + exelen);
|
||||
strcat(s, "/");
|
||||
strcat(s, file);
|
||||
if (canexec(s))
|
||||
EDBUG_RETURN(s);
|
||||
Efree(s);
|
||||
}
|
||||
cp = ep + 1;
|
||||
}
|
||||
len = strlen(cp);
|
||||
s = Emalloc(len + 1);
|
||||
if (s)
|
||||
{
|
||||
strncpy(s, cp, len);
|
||||
s[len] = 0;
|
||||
s = Erealloc(s, len + 2 + exelen);
|
||||
strcat(s, "/");
|
||||
strcat(s, file);
|
||||
if (canexec(s))
|
||||
EDBUG_RETURN(s);
|
||||
Efree(s);
|
||||
}
|
||||
EDBUG_RETURN(NULL);
|
||||
}
|
||||
|
||||
char *
|
||||
pathtofile(char *file)
|
||||
{
|
||||
char *p, *cp, *ep;
|
||||
char *s;
|
||||
int len, exelen;
|
||||
|
||||
EDBUG(9, "pathtofile");
|
||||
if (file[0] == '/')
|
||||
{
|
||||
if (exists(file))
|
||||
EDBUG_RETURN(duplicate(file));
|
||||
}
|
||||
p = getenv("PATH");
|
||||
if (!p)
|
||||
EDBUG_RETURN(duplicate(file));
|
||||
if (!file)
|
||||
EDBUG_RETURN(NULL);
|
||||
cp = p;
|
||||
exelen = strlen(file);
|
||||
while ((ep = strchr(cp, ':')))
|
||||
{
|
||||
len = ep - cp;
|
||||
s = Emalloc(len + 1);
|
||||
if (s)
|
||||
{
|
||||
strncpy(s, cp, len);
|
||||
s[len] = 0;
|
||||
s = Erealloc(s, len + 2 + exelen);
|
||||
strcat(s, "/");
|
||||
strcat(s, file);
|
||||
if (exists(s))
|
||||
EDBUG_RETURN(s);
|
||||
Efree(s);
|
||||
}
|
||||
cp = ep + 1;
|
||||
}
|
||||
len = strlen(cp);
|
||||
s = Emalloc(len + 1);
|
||||
if (s)
|
||||
{
|
||||
strncpy(s, cp, len);
|
||||
s[len] = 0;
|
||||
s = Erealloc(s, len + 2 + exelen);
|
||||
strcat(s, "/");
|
||||
strcat(s, file);
|
||||
if (exists(s))
|
||||
EDBUG_RETURN(s);
|
||||
Efree(s);
|
||||
}
|
||||
EDBUG_RETURN(NULL);
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
#include "E.h"
|
||||
|
||||
Display *disp;
|
||||
List lists;
|
||||
Window comms_win;
|
||||
Window my_win;
|
||||
Root root;
|
|
@ -0,0 +1,290 @@
|
|||
|
||||
#include "E.h"
|
||||
|
||||
void *
|
||||
FindItem(char *name, int id, int find_by, int type)
|
||||
{
|
||||
List *ptr;
|
||||
|
||||
EDBUG(6, "FindItem");
|
||||
ptr = lists.next;
|
||||
if (find_by == LIST_FINDBY_NAME)
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
if ((ptr->type == type) && (!strcmp(name, ptr->name)))
|
||||
EDBUG_RETURN(ptr->item);
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
else if (find_by == LIST_FINDBY_ID)
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
if ((ptr->type == type) && (ptr->id == id))
|
||||
EDBUG_RETURN(ptr->item);
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
else if (find_by == LIST_FINDBY_BOTH)
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
if ((ptr->type == type) && (!strcmp(name, ptr->name)) && (ptr->id == id))
|
||||
EDBUG_RETURN(ptr->item);
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
else if (find_by == LIST_FINDBY_NONE)
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
if ((ptr->type == type))
|
||||
EDBUG_RETURN(ptr->item);
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
EDBUG_RETURN(NULL);
|
||||
}
|
||||
|
||||
void
|
||||
AddItem(void *item, char *name, int id, int type)
|
||||
{
|
||||
List *ptr;
|
||||
|
||||
EDBUG(6, "AddItem");
|
||||
ptr = Emalloc(sizeof(List));
|
||||
if (!ptr)
|
||||
EDBUG_RETURN_;
|
||||
ptr->item = item;
|
||||
ptr->name = duplicate(name);
|
||||
ptr->id = id;
|
||||
ptr->type = type;
|
||||
ptr->next = lists.next;
|
||||
lists.next = ptr;
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
void *
|
||||
RemoveItem(char *name, int id, int find_by, int type)
|
||||
{
|
||||
List *ptr, *pptr;
|
||||
void *p;
|
||||
|
||||
EDBUG(6, "RemoveItem");
|
||||
pptr = NULL;
|
||||
ptr = lists.next;
|
||||
if (find_by == LIST_FINDBY_NAME)
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
if ((ptr->type == type) && (!strcmp(name, ptr->name)))
|
||||
{
|
||||
if (pptr)
|
||||
pptr->next = ptr->next;
|
||||
else
|
||||
lists.next = ptr->next;
|
||||
p = ptr->item;
|
||||
if (ptr->name)
|
||||
Efree(ptr->name);
|
||||
Efree(ptr);
|
||||
EDBUG_RETURN(p);
|
||||
}
|
||||
pptr = ptr;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
else if (find_by == LIST_FINDBY_ID)
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
if ((ptr->type == type) && (ptr->id == id))
|
||||
{
|
||||
if (pptr)
|
||||
pptr->next = ptr->next;
|
||||
else
|
||||
lists.next = ptr->next;
|
||||
p = ptr->item;
|
||||
if (ptr->name)
|
||||
Efree(ptr->name);
|
||||
Efree(ptr);
|
||||
EDBUG_RETURN(p);
|
||||
}
|
||||
pptr = ptr;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
else if (find_by == LIST_FINDBY_BOTH)
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
if ((ptr->type == type) && (!strcmp(name, ptr->name)) && (ptr->id == id))
|
||||
{
|
||||
if (pptr)
|
||||
pptr->next = ptr->next;
|
||||
else
|
||||
lists.next = ptr->next;
|
||||
p = ptr->item;
|
||||
if (ptr->name)
|
||||
Efree(ptr->name);
|
||||
Efree(ptr);
|
||||
EDBUG_RETURN(p);
|
||||
}
|
||||
pptr = ptr;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
else if (find_by == LIST_FINDBY_NONE)
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
if ((ptr->type == type))
|
||||
{
|
||||
if (pptr)
|
||||
pptr->next = ptr->next;
|
||||
else
|
||||
lists.next = ptr->next;
|
||||
p = ptr->item;
|
||||
if (ptr->name)
|
||||
Efree(ptr->name);
|
||||
Efree(ptr);
|
||||
EDBUG_RETURN(p);
|
||||
}
|
||||
pptr = ptr;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
EDBUG_RETURN(NULL);
|
||||
}
|
||||
|
||||
void **
|
||||
ListItemType(int *num, int type)
|
||||
{
|
||||
List *ptr;
|
||||
int i, len;
|
||||
void **lst;
|
||||
|
||||
EDBUG(6, "ListItemType");
|
||||
*num = 0;
|
||||
len = 0;
|
||||
if (type == LIST_TYPE_ANY)
|
||||
EDBUG_RETURN(NULL);
|
||||
ptr = lists.next;
|
||||
while (ptr)
|
||||
{
|
||||
if (ptr->type == type)
|
||||
len++;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
if (!len)
|
||||
EDBUG_RETURN(NULL);
|
||||
lst = Emalloc(len * sizeof(void *));
|
||||
|
||||
i = 0;
|
||||
ptr = lists.next;
|
||||
while (ptr)
|
||||
{
|
||||
if (ptr->type == type)
|
||||
lst[i++] = ptr->item;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
*num = i;
|
||||
EDBUG_RETURN(lst);
|
||||
}
|
||||
|
||||
char **
|
||||
ListItems(int *num, int type)
|
||||
{
|
||||
List *ptr;
|
||||
int i, len;
|
||||
char **list;
|
||||
|
||||
EDBUG(7, "ListItems");
|
||||
i = 0;
|
||||
len = 0;
|
||||
list = NULL;
|
||||
ptr = lists.next;
|
||||
if (type != LIST_TYPE_ANY)
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
if (ptr->type == type)
|
||||
len++;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
len++;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
list = Emalloc(len * sizeof(char *));
|
||||
|
||||
if (!list)
|
||||
{
|
||||
*num = 0;
|
||||
EDBUG_RETURN(NULL);
|
||||
}
|
||||
ptr = lists.next;
|
||||
if (type != LIST_TYPE_ANY)
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
if (ptr->type == type)
|
||||
{
|
||||
list[i] = duplicate(ptr->name);
|
||||
i++;
|
||||
}
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (ptr)
|
||||
{
|
||||
list[i] = duplicate(ptr->name);
|
||||
i++;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
}
|
||||
*num = len;
|
||||
EDBUG_RETURN(list);
|
||||
}
|
||||
|
||||
void **
|
||||
ListItemTypeID(int *num, int type, int id)
|
||||
{
|
||||
List *ptr;
|
||||
int i, len;
|
||||
void **lst;
|
||||
|
||||
EDBUG(6, "ListItemType");
|
||||
*num = 0;
|
||||
len = 0;
|
||||
if (type == LIST_TYPE_ANY)
|
||||
EDBUG_RETURN(NULL);
|
||||
ptr = lists.next;
|
||||
while (ptr)
|
||||
{
|
||||
if ((ptr->type == type) && (ptr->id == id))
|
||||
len++;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
if (!len)
|
||||
EDBUG_RETURN(NULL);
|
||||
lst = Emalloc(len * sizeof(void *));
|
||||
|
||||
i = 0;
|
||||
ptr = lists.next;
|
||||
while (ptr)
|
||||
{
|
||||
if ((ptr->type == type) && (ptr->id == id))
|
||||
lst[i++] = ptr->item;
|
||||
ptr = ptr->next;
|
||||
}
|
||||
*num = i;
|
||||
EDBUG_RETURN(lst);
|
||||
}
|
|
@ -0,0 +1,130 @@
|
|||
#include "E.h"
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
extern char waitonly;
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
XEvent ev;
|
||||
Client *me, *e;
|
||||
char buf[10240];
|
||||
int i, j, k;
|
||||
fd_set fd;
|
||||
char ret;
|
||||
|
||||
waitonly = 0;
|
||||
lists.next = NULL;
|
||||
SetupX();
|
||||
CommsSetup();
|
||||
CommsFindCommsWindow();
|
||||
XSelectInput(disp, comms_win, StructureNotifyMask);
|
||||
XSelectInput(disp, root.win, PropertyChangeMask);
|
||||
e = MakeClient(comms_win);
|
||||
AddItem(e, "E", e->win, LIST_TYPE_CLIENT);
|
||||
me = MakeClient(my_win);
|
||||
AddItem(me, "ME", me->win, LIST_TYPE_CLIENT);
|
||||
CommsSend(e, "set clientname eesh");
|
||||
CommsSend(e, "set version 0.1");
|
||||
CommsSend(e, "set author The Rasterman");
|
||||
CommsSend(e, "set email raster@rasterman.com");
|
||||
CommsSend(e, "set web http://www.enlightenment.org");
|
||||
/* CommsSend(e, "set address NONE"); */
|
||||
CommsSend(e, "set info Enlightenment IPC Shell - talk to E direct");
|
||||
/* CommsSend(e, "set pixmap 0"); */
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
if (!strcmp(argv[i], "-e"))
|
||||
{
|
||||
if (i != (argc - 1))
|
||||
{
|
||||
CommsSend(e, argv[++i]);
|
||||
XSync(disp, False);
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
else if (!strcmp(argv[i], "-ewait"))
|
||||
{
|
||||
waitonly = 1;
|
||||
if (i != (argc - 1))
|
||||
CommsSend(e, argv[++i]);
|
||||
}
|
||||
else if ((!strcmp(argv[i], "-h")) ||
|
||||
(!strcmp(argv[i], "--h")) ||
|
||||
(!strcmp(argv[i], "-help")) ||
|
||||
(!strcmp(argv[i], "--help")))
|
||||
{
|
||||
printf("%s [ -e \"Command to Send to Enlightenment then exit\"]\n"
|
||||
" [ -ewait \"Command to Send to E then wait for a reply then exit\"]\n",
|
||||
argv[0]);
|
||||
printf("Use \"%s\" by itself to enter the \"interactive mode\"\n"
|
||||
"Ctrl-D will exit interactive mode (EOF)\n"
|
||||
"use \"help\" from inside interactive mode for further "
|
||||
"assistance\n", argv[0]);
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
XSync(disp, False);
|
||||
j = 0;
|
||||
fcntl(0, F_SETFL, O_NONBLOCK);
|
||||
for (;;)
|
||||
{
|
||||
if (waitonly)
|
||||
{
|
||||
XNextEvent(disp, &ev);
|
||||
if (ev.type == ClientMessage)
|
||||
HandleComms(&ev);
|
||||
else if (ev.type == DestroyNotify)
|
||||
exit(0);
|
||||
XSync(disp, False);
|
||||
}
|
||||
else
|
||||
{
|
||||
FD_ZERO(&fd);
|
||||
FD_SET(0, &fd);
|
||||
FD_SET(ConnectionNumber(disp), &fd);
|
||||
if (select(ConnectionNumber(disp) + 1, &fd, NULL, NULL, NULL) < 0)
|
||||
exit(0);
|
||||
XSync(disp, False);
|
||||
|
||||
if (FD_ISSET(0, &fd))
|
||||
{
|
||||
k = 0;
|
||||
while ((ret = read(0, &(buf[j]), 1) > 0))
|
||||
{
|
||||
k = 1;
|
||||
if (buf[j] == '\n')
|
||||
{
|
||||
buf[j] = 0;
|
||||
if (strlen(buf) > 0)
|
||||
{
|
||||
CommsSend(e, buf);
|
||||
XSync(disp, False);
|
||||
}
|
||||
j = -1;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
if ((ret < 0) || ((k == 0) && (ret == 0)))
|
||||
exit(0);
|
||||
}
|
||||
else if (FD_ISSET(ConnectionNumber(disp), &fd))
|
||||
{
|
||||
while (XPending(disp))
|
||||
{
|
||||
XNextEvent(disp, &ev);
|
||||
if (ev.type == ClientMessage)
|
||||
HandleComms(&ev);
|
||||
else if (ev.type == DestroyNotify)
|
||||
exit(0);
|
||||
}
|
||||
XSync(disp, False);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,145 @@
|
|||
#include "E.h"
|
||||
|
||||
/*#define DBUG_MEM 1 */
|
||||
|
||||
#ifdef DBUG_MEM
|
||||
#define POINTERS_SIZE 10240
|
||||
static unsigned int num_pointers = 0;
|
||||
static void *pointers_ptr[POINTERS_SIZE];
|
||||
static unsigned int pointers_size[POINTERS_SIZE];
|
||||
|
||||
#endif
|
||||
|
||||
void
|
||||
EDisplayMemUse()
|
||||
{
|
||||
#ifdef DBUG_MEM
|
||||
int i, min, max, sum;
|
||||
|
||||
max = 0;
|
||||
min = 0x7ffffff;
|
||||
sum = 0;
|
||||
for (i = 0; i < num_pointers; i++)
|
||||
{
|
||||
sum += pointers_size[i];
|
||||
if (pointers_size[i] < min)
|
||||
min = pointers_size[i];
|
||||
if (pointers_size[i] > max)
|
||||
max = pointers_size[i];
|
||||
}
|
||||
if (num_pointers > 0)
|
||||
{
|
||||
fprintf(stderr, "Num:%6i Sum:%8i Av:%8i Min:%8i Max%6i\n",
|
||||
num_pointers, sum, sum / num_pointers, min, max);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void *
|
||||
__Emalloc(int size)
|
||||
{
|
||||
void *p;
|
||||
|
||||
EDBUG(9, "Emalloc");
|
||||
p = malloc(size);
|
||||
if (!p)
|
||||
Alert("Warning! malloc for %i bytes failed \n ", size);
|
||||
#ifdef DBUG_MEM
|
||||
if (p)
|
||||
{
|
||||
num_pointers++;
|
||||
pointers_ptr[num_pointers - 1] = p;
|
||||
pointers_size[num_pointers - 1] = size;
|
||||
}
|
||||
#endif
|
||||
EDBUG_RETURN(p);
|
||||
}
|
||||
|
||||
void *
|
||||
__Erealloc(void *ptr, int size)
|
||||
{
|
||||
void *p;
|
||||
|
||||
#ifdef DBUG_MEM
|
||||
char bad = 0;
|
||||
|
||||
#endif
|
||||
|
||||
EDBUG(9, "Erealloc");
|
||||
p = realloc(ptr, size);
|
||||
if (!p)
|
||||
Alert("Warning! realloc for %i bytes failed\n", size);
|
||||
#ifdef DBUG_MEM
|
||||
if (p)
|
||||
{
|
||||
int i;
|
||||
|
||||
bad = 1;
|
||||
for (i = 0; i < num_pointers; i++)
|
||||
{
|
||||
if (pointers_ptr[i] == ptr)
|
||||
{
|
||||
pointers_size[i] = size;
|
||||
pointers_ptr[i] = p;
|
||||
bad = 0;
|
||||
i = num_pointers;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bad)
|
||||
Alert("WARNING!\n Attempt to free memory that hasn't been allocated.\n");
|
||||
#endif
|
||||
EDBUG_RETURN(p);
|
||||
}
|
||||
|
||||
void
|
||||
__Efree(void *ptr)
|
||||
{
|
||||
#ifdef DBUG_MEM
|
||||
char bad = 0;
|
||||
|
||||
#endif
|
||||
EDBUG(9, "Efree");
|
||||
free(ptr);
|
||||
#ifdef DBUG_MEM
|
||||
{
|
||||
int i, j;
|
||||
|
||||
bad = 1;
|
||||
for (i = 0; i < num_pointers; i++)
|
||||
{
|
||||
if (pointers_ptr[i] == ptr)
|
||||
{
|
||||
for (j = i; j < num_pointers - 1; j++)
|
||||
{
|
||||
pointers_ptr[j] = pointers_ptr[j + 1];
|
||||
}
|
||||
bad = 0;
|
||||
i = num_pointers;
|
||||
num_pointers--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#ifdef DBUG_MEM
|
||||
if (bad)
|
||||
Alert("WARNING!\n Attempt to free memory that hasn't been allocated.\n");
|
||||
#endif
|
||||
EDBUG_RETURN_;
|
||||
}
|
||||
|
||||
char *
|
||||
duplicate(char *s)
|
||||
{
|
||||
char *ss;
|
||||
int sz;
|
||||
|
||||
EDBUG(9, "duplicate");
|
||||
if (!s)
|
||||
EDBUG_RETURN(NULL);
|
||||
sz = strlen(s);
|
||||
ss = Emalloc(sz + 1);
|
||||
strncpy(ss, s, sz + 1);
|
||||
EDBUG_RETURN(ss);
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
#include "E.h"
|
||||
|
||||
void
|
||||
SetupX()
|
||||
{
|
||||
EDBUG(6, "SetupX");
|
||||
/* Open a connection to the diplay nominated by the DISPLAY variable */
|
||||
disp = XOpenDisplay(NULL);
|
||||
/* if cannot connect to display */
|
||||
if (!disp)
|
||||
{
|
||||
Alert("Eesh cannot connect to the display nominated by\n"
|
||||
"your shell's DISPLAY environment variable. You may set this\n"
|
||||
"variable to indicate which display name Enlightenment is to\n"
|
||||
"connect to. It may be that you do not have an Xserver already\n"
|
||||
"running to serve that Display connection, or that you do not\n"
|
||||
"have permission to connect to that display. Please make sure\n"
|
||||
"all is correct before trying again. Run an Xserver by running\n"
|
||||
"xdm or startx first, or contact your local system\n"
|
||||
"administrator, or Xserver vendor, or read the X, xdm and\n"
|
||||
"startx manual pages before proceeding.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
root.win = DefaultRootWindow(disp);
|
||||
root.scr = DefaultScreen(disp);
|
||||
root.w = DisplayWidth(disp, root.scr);
|
||||
root.h = DisplayHeight(disp, root.scr);
|
||||
|
||||
/* warn, if necessary about lack fo multi-head support */
|
||||
if (ScreenCount(disp) > 1)
|
||||
{
|
||||
Alert("WARNING:\n"
|
||||
"Your Xserver supports a multi-headed configuration with\n"
|
||||
"multiple screens attached to the one display. Enlightenment\n"
|
||||
"does not currently support multi-headed setups, and as a\n"
|
||||
"result will only manage the first screen (this one).\n");
|
||||
}
|
||||
/* warn, if necessary about X version problems */
|
||||
if (ProtocolVersion(disp) != 11)
|
||||
{
|
||||
Alert("WARNING:\n"
|
||||
"This is not an X11 Xserver. It infact talks the X%i protocol.\n"
|
||||
"This may mean Enlightenment will either not function, or\n"
|
||||
"function incorrectly. If it is later than X11, then your\n"
|
||||
"server is one the author(s) of Enlightenment neither have\n"
|
||||
"access to, nor have heard of.\n", ProtocolVersion(disp));
|
||||
}
|
||||
EDBUG_RETURN_;
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
Makefile.in
|
||||
Makefile
|
||||
.deps
|
||||
epp
|
||||
*.da
|
|
@ -0,0 +1,44 @@
|
|||
Sat Jul 10 17:43:10 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
I'm on a warning crushing mission. damn you, llane. Well, I've STARTED to
|
||||
clean this up. I don't know where all this code came from, but I'll be damned
|
||||
if I'm going to let this haunt me for the rest of my days because E has some
|
||||
crappily written code in it.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat Jul 10 18:49:30 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
down to 155 warnings from like 300-400. Closer, at least.
|
||||
*sigh*
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat Jul 10 22:07:59 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
Down to 103 warnings to remove.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun Jul 11 10:08:58 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
Down to ~60 warnings.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun Jul 11 11:05:39 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
Down to 28 warnings. This is beginning to drive me batty. we'll deal with
|
||||
this later.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun Jul 11 11:56:55 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
Forget that last commit message. tagged and bagged all of them.
|
|
@ -0,0 +1,75 @@
|
|||
# Makefile for GNU C compiler.
|
||||
# Copyright (C) 1987, 88, 90-94, 1995 Free Software Foundation, Inc.
|
||||
|
||||
#This file is part of GNU CC.
|
||||
|
||||
#GNU CC is free software; you can redistribute it and/or modify
|
||||
#it under the terms of the GNU General Public License as published by
|
||||
#the Free Software Foundation; either version 2, or (at your option)
|
||||
#any later version.
|
||||
|
||||
#GNU CC is distributed in the hope that it will be useful,
|
||||
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
#GNU General Public License for more details.
|
||||
|
||||
#You should have received a copy of the GNU General Public License
|
||||
#along with GNU CC; see the file COPYING. If not, write to
|
||||
#the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
if FSSTD
|
||||
bindir = @bindir@
|
||||
else
|
||||
bindir=$(prefix)/enlightenment/bin
|
||||
endif
|
||||
|
||||
bin_PROGRAMS = epp
|
||||
|
||||
epp_SOURCES = \
|
||||
cpplib.h \
|
||||
cpphash.h \
|
||||
header.h \
|
||||
config.h \
|
||||
cppalloc.c \
|
||||
cpperror.c \
|
||||
cppexp.c \
|
||||
cpphash.c \
|
||||
cpplib.c \
|
||||
cppmain.c
|
||||
|
||||
INCLUDES=-I$(top_srcdir) -I$(top_builddir) -I$(includedir)
|
||||
|
||||
DEFS= \
|
||||
-DHAVE_STRERROR \
|
||||
-DFATAL_EXIT_CODE=1 \
|
||||
-DSUCCESS_EXIT_CODE=1 \
|
||||
-DGCC_INCLUDE_DIR=\"/usr/include\" \
|
||||
-DGPLUSPLUS_INCLUDE_DIR=\"/usr/include\" \
|
||||
-DTOOL_INCLUDE_DIR=\"/usr/bin\" \
|
||||
-DHOST_BITS_PER_LONG=32 \
|
||||
-DBITS_PER_UNIT=8 \
|
||||
-DHOST_BITS_PER_INT=32 \
|
||||
-DBITS_PER_WORD=16 \
|
||||
-DTARGET_BELL=7 \
|
||||
-DTARGET_BS=8 \
|
||||
-DTARGET_FF=12 \
|
||||
-DTARGET_NEWLINE=10 \
|
||||
-DTARGET_CR=13 \
|
||||
-DTARGET_TAB=9 \
|
||||
-DTARGET_VT=11
|
||||
|
||||
LIBS =
|
||||
|
||||
#install-exec-local:
|
||||
# if [ x@USE_FSSTD@ = "xno" ]; then \
|
||||
# ../mkinstalldirs $(exec_prefix)/bin; \
|
||||
# for i in $(bin_PROGRAMS); do \
|
||||
# rm -f $(exec_prefix)/bin/$$i; \
|
||||
# $(LN_S) $(bindir)/$$i $(exec_prefix)/bin/$$i; \
|
||||
# done; \
|
||||
# fi
|
||||
|
||||
uninstall-local:
|
||||
for i in $(bin_PROGRAMS); do \
|
||||
rm -f $(exec_prefix)/bin/$$i; \
|
||||
done
|
|
@ -0,0 +1,69 @@
|
|||
/* Part of CPP library. (memory allocation - xmalloc etc)
|
||||
* Copyright (C) 1986, 87, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
|
||||
* Written by Per Bothner, 1994.
|
||||
* Based on CCCP program by by Paul Rubin, June 1986
|
||||
* Adapted to ANSI C, Richard Stallman, Jan 1987
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* In other words, you are welcome to use, share and improve this program.
|
||||
* You are forbidden to forbid anyone else to use, share and improve
|
||||
* what you give them. Help stamp out software-hoarding! */
|
||||
|
||||
#include "config.h"
|
||||
#include <stdlib.h>
|
||||
#include "header.h"
|
||||
|
||||
static void
|
||||
memory_full()
|
||||
{
|
||||
fatal("Memory exhausted.");
|
||||
}
|
||||
|
||||
void *
|
||||
xmalloc(size)
|
||||
unsigned size;
|
||||
{
|
||||
register char *ptr = (char *)malloc(size);
|
||||
|
||||
if (ptr != 0)
|
||||
return (ptr);
|
||||
memory_full();
|
||||
/*NOTREACHED */
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *
|
||||
xrealloc(old, size)
|
||||
void *old;
|
||||
unsigned size;
|
||||
{
|
||||
register char *ptr = (char *)realloc(old, size);
|
||||
|
||||
if (ptr == 0)
|
||||
memory_full();
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void *
|
||||
xcalloc(number, size)
|
||||
unsigned number, size;
|
||||
{
|
||||
register char *ptr = (char *)calloc(number, size);
|
||||
|
||||
if (ptr == 0)
|
||||
memory_full();
|
||||
return ptr;
|
||||
}
|
|
@ -0,0 +1,129 @@
|
|||
/* Default error handlers for CPP Library.
|
||||
* Copyright (C) 1986, 87, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
|
||||
* Written by Per Bothner, 1994.
|
||||
* Based on CCCP program by by Paul Rubin, June 1986
|
||||
* Adapted to ANSI C, Richard Stallman, Jan 1987
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* In other words, you are welcome to use, share and improve this program.
|
||||
* You are forbidden to forbid anyone else to use, share and improve
|
||||
* what you give them. Help stamp out software-hoarding! */
|
||||
|
||||
#include <stdio.h>
|
||||
#include "header.h"
|
||||
|
||||
/* Print the file names and line numbers of the #include
|
||||
* commands which led to the current file. */
|
||||
|
||||
void fatal(char *str, char *arg);
|
||||
|
||||
void
|
||||
cpp_print_containing_files(pfile)
|
||||
cpp_reader *pfile;
|
||||
{
|
||||
cpp_buffer *ip;
|
||||
int first = 1;
|
||||
|
||||
/* If stack of files hasn't changed since we last printed
|
||||
* this info, don't repeat it. */
|
||||
if (pfile->input_stack_listing_current)
|
||||
return;
|
||||
|
||||
ip = cpp_file_buffer(pfile);
|
||||
|
||||
/* Give up if we don't find a source file. */
|
||||
if (ip == NULL)
|
||||
return;
|
||||
|
||||
/* Find the other, outer source files. */
|
||||
while ((ip = CPP_PREV_BUFFER(ip)), ip != CPP_NULL_BUFFER(pfile))
|
||||
{
|
||||
long line, col;
|
||||
|
||||
cpp_buf_line_and_col(ip, &line, &col);
|
||||
if (ip->fname != NULL)
|
||||
{
|
||||
if (first)
|
||||
{
|
||||
first = 0;
|
||||
fprintf(stderr, "In file included");
|
||||
}
|
||||
else
|
||||
fprintf(stderr, ",\n ");
|
||||
}
|
||||
}
|
||||
if (!first)
|
||||
fprintf(stderr, ":\n");
|
||||
|
||||
/* Record we have printed the status as of this time. */
|
||||
pfile->input_stack_listing_current = 1;
|
||||
}
|
||||
|
||||
void
|
||||
cpp_file_line_for_message(pfile, filename, line, column)
|
||||
cpp_reader *pfile;
|
||||
char *filename;
|
||||
int line, column;
|
||||
{
|
||||
pfile = NULL;
|
||||
if (column > 0)
|
||||
{
|
||||
fprintf(stderr, "%s:%d:%d: ", filename, line, column);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "%s:%d: ", filename, line);
|
||||
}
|
||||
}
|
||||
|
||||
/* IS_ERROR is 1 for error, 0 for warning */
|
||||
void
|
||||
cpp_message(pfile, is_error, msg, arg1, arg2, arg3)
|
||||
int is_error;
|
||||
cpp_reader *pfile;
|
||||
char *msg;
|
||||
char *arg1, *arg2, *arg3;
|
||||
{
|
||||
if (is_error)
|
||||
pfile->errors++;
|
||||
else
|
||||
fprintf(stderr, "warning: ");
|
||||
fprintf(stderr, msg, arg1, arg2, arg3);
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
||||
void
|
||||
fatal(str, arg)
|
||||
char *str, *arg;
|
||||
{
|
||||
fprintf(stderr, "%s: ", progname);
|
||||
fprintf(stderr, str, arg);
|
||||
fprintf(stderr, "\n");
|
||||
exit(FATAL_EXIT_CODE);
|
||||
}
|
||||
|
||||
void
|
||||
cpp_pfatal_with_name(pfile, name)
|
||||
cpp_reader *pfile;
|
||||
char *name;
|
||||
{
|
||||
cpp_perror_with_name(pfile, name);
|
||||
#ifdef VMS
|
||||
exit(vaxc$errno);
|
||||
#else
|
||||
exit(FATAL_EXIT_CODE);
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,224 @@
|
|||
/* Part of CPP library. (Macro hash table support.)
|
||||
* Copyright (C) 1986, 87, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
|
||||
* Written by Per Bothner, 1994.
|
||||
* Based on CCCP program by by Paul Rubin, June 1986
|
||||
* Adapted to ANSI C, Richard Stallman, Jan 1987
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* In other words, you are welcome to use, share and improve this program.
|
||||
* You are forbidden to forbid anyone else to use, share and improve
|
||||
* what you give them. Help stamp out software-hoarding! */
|
||||
|
||||
#include "header.h"
|
||||
#include "cpphash.h"
|
||||
|
||||
static HASHNODE *hashtab[HASHSIZE];
|
||||
HASHNODE *cpp_lookup(struct parse_file *pfile, const U_CHAR * name, int len,
|
||||
int hash);
|
||||
void delete_macro(HASHNODE * hp);
|
||||
HASHNODE *install(U_CHAR * name, int len, enum node_type type, int ivalue,
|
||||
char *value, int hash);
|
||||
|
||||
/* Define a generic NULL if one hasn't already been defined. */
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
#ifndef __STDC__
|
||||
#define const
|
||||
#define volatile
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* return hash function on name. must be compatible with the one
|
||||
* computed a step at a time, elsewhere
|
||||
*/
|
||||
int
|
||||
hashf(name, len, hashsize)
|
||||
register const U_CHAR *name;
|
||||
register int len;
|
||||
int hashsize;
|
||||
{
|
||||
register int r = 0;
|
||||
|
||||
while (len--)
|
||||
r = HASHSTEP(r, *name++);
|
||||
|
||||
return MAKE_POS(r) % hashsize;
|
||||
}
|
||||
|
||||
/*
|
||||
* find the most recent hash node for name name (ending with first
|
||||
* non-identifier char) installed by install
|
||||
*
|
||||
* If LEN is >= 0, it is the length of the name.
|
||||
* Otherwise, compute the length by scanning the entire name.
|
||||
*
|
||||
* If HASH is >= 0, it is the precomputed hash code.
|
||||
* Otherwise, compute the hash code.
|
||||
*/
|
||||
HASHNODE *
|
||||
cpp_lookup(pfile, name, len, hash)
|
||||
struct parse_file *pfile;
|
||||
const U_CHAR *name;
|
||||
int len;
|
||||
int hash;
|
||||
{
|
||||
register const U_CHAR *bp;
|
||||
register HASHNODE *bucket;
|
||||
|
||||
pfile = NULL;
|
||||
if (len < 0)
|
||||
{
|
||||
for (bp = name; is_idchar[*bp]; bp++);
|
||||
len = bp - name;
|
||||
}
|
||||
if (hash < 0)
|
||||
hash = hashf(name, len, HASHSIZE);
|
||||
|
||||
bucket = hashtab[hash];
|
||||
while (bucket)
|
||||
{
|
||||
if (bucket->length == len && strncmp(bucket->name, name, len) == 0)
|
||||
return bucket;
|
||||
bucket = bucket->next;
|
||||
}
|
||||
return (HASHNODE *) 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Delete a hash node. Some weirdness to free junk from macros.
|
||||
* More such weirdness will have to be added if you define more hash
|
||||
* types that need it.
|
||||
*/
|
||||
|
||||
/* Note that the DEFINITION of a macro is removed from the hash table
|
||||
* but its storage is not freed. This would be a storage leak
|
||||
* except that it is not reasonable to keep undefining and redefining
|
||||
* large numbers of macros many times.
|
||||
* In any case, this is necessary, because a macro can be #undef'd
|
||||
* in the middle of reading the arguments to a call to it.
|
||||
* If #undef freed the DEFINITION, that would crash. */
|
||||
|
||||
void
|
||||
delete_macro(hp)
|
||||
HASHNODE *hp;
|
||||
{
|
||||
|
||||
if (hp->prev != NULL)
|
||||
hp->prev->next = hp->next;
|
||||
if (hp->next != NULL)
|
||||
hp->next->prev = hp->prev;
|
||||
|
||||
/* make sure that the bucket chain header that
|
||||
* the deleted guy was on points to the right thing afterwards. */
|
||||
if (hp == *hp->bucket_hdr)
|
||||
*hp->bucket_hdr = hp->next;
|
||||
|
||||
if (hp->type == T_MACRO)
|
||||
{
|
||||
DEFINITION *d = hp->value.defn;
|
||||
struct reflist *ap, *nextap;
|
||||
|
||||
for (ap = d->pattern; ap != NULL; ap = nextap)
|
||||
{
|
||||
nextap = ap->next;
|
||||
free(ap);
|
||||
}
|
||||
if (d->nargs >= 0)
|
||||
free(d->args.argnames);
|
||||
free(d);
|
||||
}
|
||||
free(hp);
|
||||
}
|
||||
/*
|
||||
* install a name in the main hash table, even if it is already there.
|
||||
* name stops with first non alphanumeric, except leading '#'.
|
||||
* caller must check against redefinition if that is desired.
|
||||
* delete_macro () removes things installed by install () in fifo order.
|
||||
* this is important because of the `defined' special symbol used
|
||||
* in #if, and also if pushdef/popdef directives are ever implemented.
|
||||
*
|
||||
* If LEN is >= 0, it is the length of the name.
|
||||
* Otherwise, compute the length by scanning the entire name.
|
||||
*
|
||||
* If HASH is >= 0, it is the precomputed hash code.
|
||||
* Otherwise, compute the hash code.
|
||||
*/
|
||||
HASHNODE *
|
||||
install(name, len, type, ivalue, value, hash)
|
||||
U_CHAR *name;
|
||||
int len;
|
||||
enum node_type type;
|
||||
int ivalue;
|
||||
char *value;
|
||||
int hash;
|
||||
{
|
||||
register HASHNODE *hp;
|
||||
register int i, bucket;
|
||||
register U_CHAR *p, *q;
|
||||
|
||||
if (len < 0)
|
||||
{
|
||||
p = name;
|
||||
while (is_idchar[*p])
|
||||
p++;
|
||||
len = p - name;
|
||||
}
|
||||
if (hash < 0)
|
||||
hash = hashf(name, len, HASHSIZE);
|
||||
|
||||
i = sizeof(HASHNODE) + len + 1;
|
||||
hp = (HASHNODE *) xmalloc(i);
|
||||
bucket = hash;
|
||||
hp->bucket_hdr = &hashtab[bucket];
|
||||
hp->next = hashtab[bucket];
|
||||
hashtab[bucket] = hp;
|
||||
hp->prev = NULL;
|
||||
if (hp->next != NULL)
|
||||
hp->next->prev = hp;
|
||||
hp->type = type;
|
||||
hp->length = len;
|
||||
if (hp->type == T_CONST)
|
||||
hp->value.ival = ivalue;
|
||||
else
|
||||
hp->value.cpval = value;
|
||||
hp->name = ((U_CHAR *) hp) + sizeof(HASHNODE);
|
||||
p = hp->name;
|
||||
q = name;
|
||||
for (i = 0; i < len; i++)
|
||||
*p++ = *q++;
|
||||
hp->name[len] = 0;
|
||||
return hp;
|
||||
}
|
||||
|
||||
void
|
||||
cpp_hash_cleanup(pfile)
|
||||
cpp_reader *pfile;
|
||||
{
|
||||
register int i;
|
||||
|
||||
pfile = NULL;
|
||||
for (i = HASHSIZE; --i >= 0;)
|
||||
{
|
||||
while (hashtab[i])
|
||||
delete_macro(hashtab[i]);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
enum node_type;
|
||||
|
||||
/* different kinds of things that can appear in the value field
|
||||
of a hash node. Actually, this may be useless now. */
|
||||
union hashval {
|
||||
int ival;
|
||||
char *cpval;
|
||||
DEFINITION *defn;
|
||||
};
|
||||
|
||||
struct hashnode {
|
||||
struct hashnode *next; /* double links for easy deletion */
|
||||
struct hashnode *prev;
|
||||
struct hashnode **bucket_hdr; /* also, a back pointer to this node's hash
|
||||
chain is kept, in case the node is the head
|
||||
of the chain and gets deleted. */
|
||||
enum node_type type; /* type of special token */
|
||||
int length; /* length of token, for quick comparison */
|
||||
U_CHAR *name; /* the actual name */
|
||||
union hashval value; /* pointer to expansion, or whatever */
|
||||
};
|
||||
|
||||
typedef struct hashnode HASHNODE;
|
||||
|
||||
/* Some definitions for the hash table. The hash function MUST be
|
||||
computed as shown in hashf () below. That is because the rescan
|
||||
loop computes the hash value `on the fly' for most tokens,
|
||||
in order to avoid the overhead of a lot of procedure calls to
|
||||
the hashf () function. Hashf () only exists for the sake of
|
||||
politeness, for use when speed isn't so important. */
|
||||
|
||||
#define HASHSIZE 1403
|
||||
#define HASHSTEP(old, c) ((old << 2) + c)
|
||||
#define MAKE_POS(v) (v & 0x7fffffff) /* make number positive */
|
||||
|
||||
extern HASHNODE* install PARAMS ((U_CHAR*,int,enum node_type, int,char*,int));
|
|
@ -0,0 +1,98 @@
|
|||
/* CPP main program, using CPP Library.
|
||||
* Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
* Written by Per Bothner, 1994-95.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* In other words, you are welcome to use, share and improve this program.
|
||||
* You are forbidden to forbid anyone else to use, share and improve
|
||||
* what you give them. Help stamp out software-hoarding! */
|
||||
|
||||
#include "header.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
extern char *getenv();
|
||||
|
||||
cpp_reader parse_in;
|
||||
cpp_options options;
|
||||
|
||||
/* More 'friendly' abort that prints the line and file.
|
||||
* config.h can #define abort fancy_abort if you like that sort of thing. */
|
||||
|
||||
void
|
||||
fancy_abort()
|
||||
{
|
||||
fatal("Internal gcc abort.");
|
||||
}
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
char *p;
|
||||
int i;
|
||||
int argi = 1; /* Next argument to handle. */
|
||||
struct cpp_options *opts = &options;
|
||||
|
||||
p = argv[0] + strlen(argv[0]);
|
||||
while (p != argv[0] && p[-1] != '/')
|
||||
--p;
|
||||
progname = p;
|
||||
|
||||
init_parse_file(&parse_in);
|
||||
parse_in.data = opts;
|
||||
|
||||
init_parse_options(opts);
|
||||
|
||||
argi += cpp_handle_options(&parse_in, argc - argi, argv + argi);
|
||||
if (argi < argc)
|
||||
fatal("Invalid option `%s'", argv[argi]);
|
||||
parse_in.show_column = 1;
|
||||
|
||||
i = push_parse_file(&parse_in, opts->in_fname);
|
||||
if (i != SUCCESS_EXIT_CODE)
|
||||
return i;
|
||||
|
||||
/* Now that we know the input file is valid, open the output. */
|
||||
|
||||
if (!opts->out_fname || !strcmp(opts->out_fname, ""))
|
||||
opts->out_fname = "stdout";
|
||||
else if (!freopen(opts->out_fname, "w", stdout))
|
||||
cpp_pfatal_with_name(&parse_in, opts->out_fname);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
enum cpp_token kind;
|
||||
|
||||
if (!opts->no_output)
|
||||
{
|
||||
fwrite(parse_in.token_buffer, 1, CPP_WRITTEN(&parse_in), stdout);
|
||||
}
|
||||
parse_in.limit = parse_in.token_buffer;
|
||||
kind = cpp_get_token(&parse_in);
|
||||
if (kind == CPP_EOF)
|
||||
break;
|
||||
}
|
||||
|
||||
cpp_finish(&parse_in);
|
||||
|
||||
if (parse_in.errors)
|
||||
exit(FATAL_EXIT_CODE);
|
||||
exit(SUCCESS_EXIT_CODE);
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* declares.h
|
||||
* This is a file with some declarations in it to get everyone to shut up :)
|
||||
* --Mandrake
|
||||
*/
|
||||
|
||||
#include "cpplib.h"
|
||||
|
||||
#ifndef HOST_BITS_PER_WIDE_INT
|
||||
|
||||
#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
|
||||
#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
|
||||
#define HOST_WIDE_INT long
|
||||
#else
|
||||
#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
|
||||
#define HOST_WIDE_INT int
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
struct directive
|
||||
{
|
||||
int length;
|
||||
int (*func) ();
|
||||
char *name;
|
||||
enum node_type type;
|
||||
char command_reads_line;
|
||||
char traditional_comments;
|
||||
char pass_thru;
|
||||
};
|
||||
|
||||
void *xmalloc(unsigned size);
|
||||
void *xrealloc(void *old, unsigned size);
|
||||
void *xcalloc(unsigned number, unsigned size);
|
||||
void cpp_print_containing_files(cpp_reader *pfile);
|
||||
void cpp_file_line_for_message(cpp_reader *pfile, char *filename, int line,
|
||||
int column);
|
||||
void cpp_message(cpp_reader *pfile, int is_error, char *msg, char *arg1,
|
||||
char *arg2, char *arg3);
|
||||
void cpp_pfatal_with_name(cpp_reader *pfile, char *name);
|
||||
struct operation parse_number(cpp_reader *pfile, char *start, int olen);
|
||||
struct operation cpp_lex(cpp_reader *pfile);
|
||||
int cpp_parse_escape(cpp_reader *pfile, char **string_ptr);
|
||||
HOST_WIDE_INT cpp_parse_expr(cpp_reader *pfile);
|
||||
void cpp_grow_buffer(cpp_reader *pfile, long n);
|
||||
void cpp_define(cpp_reader *pfile, U_CHAR *str);
|
||||
void init_parse_options(struct cpp_options *opts);
|
||||
enum cpp_token null_underflow(cpp_reader *pfile);
|
||||
int null_cleanup(cpp_buffer *pbuf, cpp_reader *pfile);
|
||||
int macro_cleanup(cpp_buffer *pbuf, cpp_reader *pfile);
|
||||
int file_cleanup(cpp_buffer *pbuf, cpp_reader *pfile);
|
||||
void cpp_skip_hspace(cpp_reader *pfile);
|
||||
void copy_rest_of_line(cpp_reader *pfile);
|
||||
void skip_rest_of_line(cpp_reader *pfile);
|
||||
int handle_directive(cpp_reader *pfile);
|
||||
cpp_buffer *cpp_push_buffer(cpp_reader *pfile, U_CHAR *buffer, long length);
|
||||
cpp_buffer *cpp_pop_buffer(cpp_reader *pfile);
|
||||
void cpp_scan_buffer(cpp_reader *pfile);
|
||||
void cpp_buf_line_and_col(register cpp_buffer *pbuf, long *linep, long *colp);
|
||||
int hashf(register const U_CHAR *name,register int len, int hashsize);
|
||||
void cpp_hash_cleanup(cpp_reader *pfile);
|
||||
int cpp_read_check(cpp_reader *pfile);
|
||||
int parse_name(cpp_reader *pfile, int c);
|
||||
void init_parse_file(cpp_reader *pfile);
|
||||
void init_parse_options(struct cpp_options *opts);
|
||||
int push_parse_file(cpp_reader *pfile, char *fname);
|
||||
void cpp_finish(cpp_reader *pfile);
|
||||
cpp_buffer *cpp_file_buffer(cpp_reader *pfile);
|
||||
int cpp_read_check_assertion(cpp_reader *pfile);
|
||||
void fancy_abort(void);
|
||||
enum cpp_token cpp_get_token(cpp_reader *pfile);
|
||||
enum cpp_token cpp_get_non_space_token(cpp_reader *pfile);
|
||||
int cpp_handle_options(cpp_reader *pfile, int argc, char **argv);
|
||||
void cpp_print_file_and_line(cpp_reader *pfile);
|
|
@ -0,0 +1,91 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# This is a little script that will create a window that says
|
||||
# "Follow the Bouncing Ball" and then drops it to the bottom of the
|
||||
# screen and slowly bounces it around.
|
||||
# then when it's done bouncing it gets rid of it.
|
||||
|
||||
|
||||
$screen_size = `eesh -ewait \"general_info screen_size\"`;
|
||||
|
||||
chomp($screen_size);
|
||||
|
||||
($crap,$width,$height) = split(/\s+/,$screen_size);
|
||||
|
||||
|
||||
# we'll create the ball here and by process of elimination determine what
|
||||
# the winid is.
|
||||
@winlist1 = `eesh -ewait window_list`;
|
||||
|
||||
`eesh -e \"dialog_ok Follow the Bouncing Ball\"`;
|
||||
@winlist2 = `eesh -ewait window_list`;
|
||||
|
||||
# run through the two lists and figure out which one is new.
|
||||
|
||||
foreach $item1 (@winlist2) {
|
||||
$inside = 0;
|
||||
foreach $item2 (@winlist1) {
|
||||
$inside = 1 if($item1 eq $item2);
|
||||
}
|
||||
$ballwininfo = $item1 if(!$inside);
|
||||
}
|
||||
|
||||
# call the ball, ace
|
||||
# (now we have the windowid of our ball)
|
||||
|
||||
($ball,$message) = split(/ \: /,$ballwininfo);
|
||||
$ball =~ s/\s+//g;
|
||||
|
||||
$ballloc = `eesh -ewait \"win_op $ball move ?\"`;
|
||||
$ballsize = `eesh -ewait \"win_op $ball resize ??\"`;
|
||||
|
||||
$ballloc =~ s/^.*\: //g;
|
||||
$ballloc =~ s/\n//g;
|
||||
$ballsize =~ s/^.*\: //g;
|
||||
$ballsize =~ s/\n//g;
|
||||
|
||||
($ballx,$bally) = split(/\s+/,$ballloc);
|
||||
($ballw,$ballh) = split(/\s+/,$ballsize);
|
||||
|
||||
# now for the fun part. make that baby bounce up and down.
|
||||
# we're going to open a big pipe for this one and just shove data
|
||||
# to it.
|
||||
|
||||
open IPCPIPE,"| eesh";
|
||||
|
||||
@fallspeed = (30,25,20,15,10,5,4,3,2);
|
||||
$i = 0;
|
||||
foreach(@fallspeed) {
|
||||
$originalbally = $bally;
|
||||
$fallspeed = $fallspeed[i];
|
||||
while($bally < ($height - $ballh)) {
|
||||
if(($bally + $fallspeed + $ballh) < $height) {
|
||||
$bally += $fallspeed;
|
||||
} else {
|
||||
$bally = $height - $ballh;
|
||||
}
|
||||
print IPCPIPE "win_op $ball move $ballx $bally\n";
|
||||
}
|
||||
|
||||
if($fallspeed[i+1]) {
|
||||
$fallspeed = $fallspeed[i+1];
|
||||
} else {
|
||||
$fallspeed = 1;
|
||||
}
|
||||
|
||||
while($bally > ($originalbally + int($originalbally * (1/$#fallspeed)))) {
|
||||
if(($bally - $fallspeed) >
|
||||
($originalbally + int($originalbally * (1/$#fallspeed)))) {
|
||||
$bally -= $fallspeed;
|
||||
} else {
|
||||
$bally = $originalbally + int($originalbally * (1/$#fallspeed));
|
||||
}
|
||||
print IPCPIPE "win_op $ball move $ballx $bally\n";
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
print IPCPIPE "win_op $ball close\n";
|
||||
close IPCPIPE;
|
||||
|
||||
# that's all folks.
|
|
@ -0,0 +1,67 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Use: none!
|
||||
# instructions: move the lucy in the sky with diamonds window and see what
|
||||
# happends to the other window.
|
||||
|
||||
# The very wierd and bad way of getting the windowids of the two message
|
||||
# windows in bash, there must be a better way!
|
||||
|
||||
a=0
|
||||
eesh -e "dialog_ok Lucy in the sky with diamonds"
|
||||
window=`eesh -ewait window_list|grep Message`
|
||||
for i in $window;do
|
||||
a=$(($a + 1))
|
||||
if [ $a = 1 ];then
|
||||
windowid=$i
|
||||
fi
|
||||
done
|
||||
a=0
|
||||
eesh -e "dialog_ok Move me with LSD"
|
||||
window2=`eesh -ewait window_list|grep Message|grep -v $windowid`
|
||||
for i in $window2;do
|
||||
a=$(($a + 1))
|
||||
if [ $a = 1 ];then
|
||||
windowid2=$i
|
||||
fi
|
||||
done
|
||||
|
||||
# In one endless loop, get window positions and see if the lcd window is moving
|
||||
# if so we move the other window too
|
||||
while true;do
|
||||
lcdpos=`eesh -ewait "win_op $windowid move ? ?"`
|
||||
a=0
|
||||
for i in $lcdpos;do
|
||||
a=$(($a + 1))
|
||||
if [ $a = 3 ];then
|
||||
lcdxpos=$i
|
||||
fi
|
||||
if [ $a = 4 ];then
|
||||
lcdypos=$i
|
||||
fi
|
||||
done
|
||||
|
||||
pupos=`eesh -ewait "win_op $windowid move ? ?"`
|
||||
a=0
|
||||
for i in $pupos;do
|
||||
a=$(($a + 1))
|
||||
if [ $a = 3 ];then
|
||||
puxpos=$i
|
||||
fi
|
||||
if [ $a = 4 ];then
|
||||
puypos=$i
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $puxpos = $(($lcdxpos)) ];then
|
||||
newxpos=$(($puxpos + 58))
|
||||
newypos=$(($puypos + 74))
|
||||
eesh -e "win_op $windowid2 move $newxpos $newypos"
|
||||
fi
|
||||
|
||||
# Is it faster if we give it a little time delay?
|
||||
# I think it is, atleast we don't stress E too much if we give it a delay
|
||||
for y in 1 2 3;do
|
||||
bill=0
|
||||
done
|
||||
done
|
|
@ -0,0 +1,105 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# This script is still VERY VERY VERY early on in development
|
||||
# but I wanted to give you folks an idea of why the IPC was being
|
||||
# set up the way it was. this is just a quick hack. expect better
|
||||
# samples in the near future.
|
||||
# This app will take the parameters "on" and "off", and will basically
|
||||
# shade all the windows on the current desktop and area. (or unshade)
|
||||
#
|
||||
# --Mandrake
|
||||
|
||||
@winlist_temp = `eesh -ewait window_list`;
|
||||
@intlist_temp = `eesh -ewait \"internal_list internal_ewin\"`;
|
||||
|
||||
# here we're going to test to see whether we are shading or unshading
|
||||
# the window.
|
||||
|
||||
if($ARGV[0] eq "on") {
|
||||
$shade = 1;
|
||||
} else {
|
||||
$shade = 0;
|
||||
}
|
||||
|
||||
|
||||
# make sure that we're not an internal window in our list
|
||||
|
||||
foreach(@winlist_temp) {
|
||||
chomp;
|
||||
@stuff = split /\:/;
|
||||
$insert = 1;
|
||||
foreach $member (@intlist_temp) {
|
||||
chomp($member);
|
||||
$stuff[0] =~ s/\s+//g;
|
||||
$member =~ s/\s+//g;
|
||||
if($member eq $stuff[0]) {
|
||||
$insert = 0;
|
||||
}
|
||||
}
|
||||
if($insert) {
|
||||
push @winlist,$stuff[0] if($stuff[0]);
|
||||
}
|
||||
}
|
||||
|
||||
# here we'll retreive the current desk we're on
|
||||
|
||||
$current_desk = `eesh -ewait \"goto_desktop ?\"`;
|
||||
@stuff = split(/\:/,$current_desk);
|
||||
$current_desk = $stuff[1];
|
||||
$current_desk =~ s/\n//g;
|
||||
$current_desk =~ s/^\s+//;
|
||||
|
||||
# here we'll retreive the current area we're on
|
||||
|
||||
$current_area = `eesh -ewait \"goto_area ?\"`;
|
||||
@stuff = split(/\:/,$current_area);
|
||||
$current_area = $stuff[1];
|
||||
$current_area =~ s/\n//g;
|
||||
$current_area =~ s/^\s+//;
|
||||
|
||||
|
||||
# get the old shadespeed so that we can set it back later
|
||||
# because we want this to happen fairly quickly, we'll set
|
||||
# the speed to something really high
|
||||
|
||||
$shadespeed = `eesh -ewait \"fx window_shade_speed ?\"`;
|
||||
@stuff = split(/\: /,$shadespeed);
|
||||
$shadespeed = $stuff[1];
|
||||
chomp($shadespeed);
|
||||
|
||||
open IPCPIPE,"| eesh";
|
||||
print IPCPIPE "fx window_shade_speed 10000000\n";
|
||||
|
||||
# now we're going to walk through each of these windows and
|
||||
# shade them
|
||||
|
||||
foreach $window (@winlist) {
|
||||
$cur_window_desk = `eesh -ewait \"win_op $window desk ?\"`;
|
||||
@stuff = split(/\:/,$cur_window_desk);
|
||||
$cur_window_desk = $stuff[1];
|
||||
$cur_window_desk =~ s/\n//g;
|
||||
$cur_window_desk =~ s/^\s+//;
|
||||
if($cur_window_desk eq $current_desk) {
|
||||
$cur_window_area = `eesh -ewait \"win_op $window area ?\"`;
|
||||
@stuff = split(/\:/,$cur_window_area);
|
||||
$cur_window_area = $stuff[1];
|
||||
$cur_window_area =~ s/\n//g;
|
||||
$cur_window_area =~ s/^\s+//;
|
||||
if($cur_window_area eq $current_area) {
|
||||
if($shade) {
|
||||
print IPCPIPE "win_op $window shade on\n";
|
||||
} else {
|
||||
print IPCPIPE "win_op $window shade off\n";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# now we're going to set the shade speed back to what it was originally
|
||||
|
||||
print IPCPIPE "fx window_shade_speed $shadespeed\n";
|
||||
close IPCPIPE;
|
||||
|
||||
|
||||
# that's it!
|
|
@ -0,0 +1,14 @@
|
|||
config.log
|
||||
confdefs.h
|
||||
configure
|
||||
enlightenment
|
||||
config.cache
|
||||
Makefile
|
||||
Makefile.in
|
||||
.deps
|
||||
.libs
|
||||
aclocal.m4
|
||||
config.status
|
||||
*.da
|
||||
bb.out
|
||||
gmon.out
|
|
@ -0,0 +1,985 @@
|
|||
Sun Mar 14 17:26:01 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
Beginning work on 0.16 - new ChangeLog, too.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Mar 15 19:16:45 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
fixed crashing bug. non-input windows being selected as the selected window no
|
||||
longer should crash everything
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Mar 15 20:55:34 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
fixing things to say 0.15.3... blah. damned bugs :)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Mar 17 02:42:04 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
ARGH. bug bug bug. some code got commented out that shouldn't have been
|
||||
commented out last night in draw.c. uncommented and committing.
|
||||
(messes up shaped/borderless window resizes)
|
||||
increased revision number to 0.15.4. hope to release some time tomorrow.
|
||||
maybe I'll tackle some other bugs before then.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Mar 17 14:52:24 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
Fixed a bug in translucent move mode in draw.c
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Mar 18 02:38:18 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
Added network.c and update.c - VERY rough skeleton code. user-optional
|
||||
automatic code updates and update testing
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat Mar 20 13:21:14 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
added button_show IPC command
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Mar 22 02:52:04 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
a little bit of work on the auto-update stuff. I still have a long way to go
|
||||
here, but I thought that I would go ahead and start putting in a little bit of
|
||||
logic here and there for the upgrade paths. still no actual http support.
|
||||
debating on whether or not to use ghttp (since it doesn't require any of gnome
|
||||
I'm thinking about it)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Mar 22 03:53:51 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
Cleaned up epp a little more. still LOTS of work there.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Mar 22 20:46:46 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
cleaned up auto-upgrade to where it won't compile if you don't have libghttp.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Mar 25 14:36:47 CST 1999
|
||||
(KainX)
|
||||
|
||||
Fixed a bug with reverting focus to desktop zero. If you went from desktop 0
|
||||
to desktop 2 to desktop 6, then back to desktop 0, a window on desktop 2 would
|
||||
remain focused. Not any more. =)
|
||||
|
||||
Also added code to revert to the default colormap when leaving a window or a
|
||||
desktop. Most users won't notice this. But you definitely will see a
|
||||
difference if you use Netscape with the "-install" option. :-)
|
||||
|
||||
Commented out the debugging output for select() since it was confusing the hell
|
||||
out of lots of users.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Mar 31 09:27:54 EST 1999
|
||||
(Raster)
|
||||
|
||||
Well - back from CEBIT... and now to the goodies...
|
||||
|
||||
* added pager that does snapshots - and continuous snapshot updating... works
|
||||
beautifully with almost no cpu use on a local machine - it'll probably kill
|
||||
your network if you run it over a network... :( But it does everything
|
||||
except allowe you to drag and drop windows around (at the moment) - that will
|
||||
be added.
|
||||
|
||||
* added mode.show_pagers option that is internal for now...
|
||||
|
||||
* added flatfile menu loading - sorry - no examples yet - but it works and
|
||||
automagically updates the menu if the file changes. It makes constructing menus
|
||||
childs play - I mean REALLY childs play.
|
||||
|
||||
* fixed countless minor buglets.
|
||||
|
||||
* added area sliding (if desktop sliding is on areas will slide around too)
|
||||
|
||||
* fixed manual placement so the mouse up doesnt get passed onto clients under
|
||||
the pointer then the window is placed
|
||||
|
||||
* fixed window list off dragbar so things dont die when you try focus an ewin
|
||||
ID that doesnt exist anymore
|
||||
|
||||
* this brings E's code (not including fnlib, imlib etc.) up to about 60756
|
||||
lines of code.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Mar 31 10:28:48 CST 1999
|
||||
(KainX)
|
||||
|
||||
When we use the pager to make a window sticky, bring that window to the
|
||||
current desktop as one would expect to happen.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Mar 31 17:30:49 EST 1999
|
||||
(Raster)
|
||||
|
||||
* fixed numlock / scrollock keybinding / action etc. issues....
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Apr 1 14:56:19 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
netowrk updates, etc
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Apr 2 00:56:47 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
Lots of stuff. ipc commands. pager command now enables and disables the pager
|
||||
- made a couple of generic functions EnableAllPagers() and DisableAllPagers()
|
||||
to do the actual work there. also added skeleton of the fx command. will do
|
||||
that tonight as I watch a movie. added move_mode and resize_mode commands
|
||||
(since everyone seems to have wanted that and I don't know how those slipped my
|
||||
mind) they're not documented well yet, but if you read ipc.c you should be able
|
||||
to guess how they work (they all work similarly to other ipc commands - I like
|
||||
the interface I'm brewing up and I'm likely to continue using it)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Apr 2 12:04:19 EST 1999
|
||||
(Mandrake)
|
||||
|
||||
#if 0'd some stuff out for 0.15.5 release
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun Apr 4 17:10:08 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
lots of IPC work. new fx command. also a big restructuring of the code itself
|
||||
in the ipc array (much prettier to the eye)
|
||||
also I commented a few bits of code -- it's now documented somewhat how to add
|
||||
new IPC commands in there.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun Apr 4 20:04:20 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
more IPC work. now many win_op commands have status checks
|
||||
win_op <windowid> <operation> ?
|
||||
as well as support
|
||||
win_op <windowid> <operation> <on/off>
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun Apr 4 21:32:43 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
added more "?" commands to win_op
|
||||
very useful.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun Apr 4 23:04:17 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
CPPFLAGS problems people were having should be solved
|
||||
put the -D stuff from e/src/Makefile.am into econfig.h
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Apr 5 21:30:50 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
updated some numbers to 0.16.0 -> time to say goodbye to 0.15
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Apr 5 22:59:08 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
holy cow, commented some code. Also split out all the initial setup of
|
||||
fallback classes into SetupFallbackClasses() in init.c -- cleans up main.c
|
||||
considerably
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Tue Apr 6 18:54:54 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
minor bugfix care of Daniele Paoni for java applications.
|
||||
also some more comments.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Apr 8 02:33:54 EDT 1999
|
||||
(Raster)
|
||||
|
||||
again - minor fixes to manual placement, a few other little things here and
|
||||
there scattered about.... but one major addition...
|
||||
|
||||
you can drag windows around the pager now... and..... between pagers for
|
||||
desktops... soi you can move windows form any area to any desktop and around
|
||||
any desktop now... and it all works nicely... :)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Apr 8 11:39:45 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
now we autosave whether or not the pager was on.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Apr 8 15:14:19 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
added the very useful internal_list IPC command.
|
||||
see help for details.
|
||||
|
||||
also added a samplescripts directory with my first sample script,
|
||||
testroller.pl
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Apr 8 16:50:22 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
fleshed out the --help / -h cmdline parameter to eesh a little.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Apr 8 17:55:20 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
added advanced_focus IPC command. see IPC help for more information
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Apr 9 00:07:46 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
added set_focus IPC command.
|
||||
also added "focus" to win_op command
|
||||
added dialog_ok IPC command.
|
||||
see ipc help for more details
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Apr 9 12:36:56 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
added list_class IPC command
|
||||
see ipc help for more details
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Apr 9 13:36:12 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
added play_sound IPC command.
|
||||
started work on soundclass IPC command (not finished)
|
||||
added -v/--version commandline parameter
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Apr 9 14:14:54 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
added general_info IPC command. just has screen_size in it now, but I
|
||||
am sure tehre will be more going in later
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Apr 9 17:16:27 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
fleshed out soundclass ipc
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat Apr 10 00:26:09 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
GetNetText() actually does something now. also fixed Makefile.am
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat Apr 10 00:44:50 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
mostly-functional GetNetFileDate() now. also cleaned up update.c (doesn't
|
||||
give warnings anymore)
|
||||
also the bulk of the work in SaveNetFile()
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat Apr 10 10:53:00 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
Somehow network.c got messed up inbetween compile and commit.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat Apr 10 11:50:45 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
minor bugfix in ipc.c
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun Apr 11 23:15:27 EDT 1999
|
||||
(Mandrake)
|
||||
|
||||
merged pager stuff into uni-pager command.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Tue Apr 20 17:48:12 EDT 1999
|
||||
(Raster)
|
||||
|
||||
Again - I've been lazy with the changelog... but I have done a buttload...
|
||||
lets summarise...
|
||||
|
||||
* added slider widget and event handleing
|
||||
* added drawing area widget and event handleing
|
||||
* added sliders to all dialog settings boxes that need them
|
||||
* added start of a background editor dialog
|
||||
* added multiple desktop editor
|
||||
* fixed soem menu bugs
|
||||
* fixed memory leaks
|
||||
* fixed "app resizes whilst being moved" bug
|
||||
* fixed tables instie tables so they work
|
||||
* optimised backgorudns menu a bit better for file searching
|
||||
* got rid of redundant sound code that esd now does
|
||||
* fixed minor bug in WAV loading code
|
||||
* added elements to brushed metal theme to supply data for new widgets &
|
||||
features
|
||||
* fixed 1 or 2 little pager bugs
|
||||
* fixed possible segfault in text shortening code
|
||||
* fixed internationalisation problem in saving and reading floats
|
||||
* did lots of other fixes and adds I've forgotten about
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Apr 23 12:38:30 EDT 1999
|
||||
(Raster)
|
||||
|
||||
* added desktop background selector AND editor settings dialog - all gui - all
|
||||
works. You can't select files to use as backgrounds yet - need file selector
|
||||
dialog for that (probably next on my list) BUT if you have E generate
|
||||
background defs from ~/.enlightenmen/backgrounds (which should be a symlink
|
||||
to wherever you store your images, or just fill that directory with images
|
||||
and sibdirectories and images - E will auto-index them into the backgrounds
|
||||
menu). you can edit all of those and their attributes, and clone versions
|
||||
then edit the clones, modify them, remove the images to use a solid color
|
||||
instead - etc. all works.. :)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat May 15 15:04:35 EDT 1999
|
||||
(Raster)
|
||||
|
||||
* added pager background caching - now pager backrounds will be cached and
|
||||
saved to disk for faster "repainting" or initial painting. This should
|
||||
work now.
|
||||
|
||||
* session saving no longer saves "-theme" optin ofr command line - the
|
||||
~/.enlightenment/user_theme.cfg takes pcare of this.
|
||||
|
||||
* "snapshots" now use a snapshot dialog. snapshotting location also snaps
|
||||
desktop area as well (since a desktop is one virtually large desktop).
|
||||
It can also snap the "command" and be able to start the apps up again on
|
||||
startup if you select that option. You can also select if the snapped
|
||||
attributes are to apply toall windows of that class and not just the first
|
||||
instance. should be a lot nicer.
|
||||
|
||||
* some minor pager updating bugs fixed - now if you close a window on another
|
||||
desktop area it updates properly. the pager "hilight" zoom window should
|
||||
now be pretty hard to make hang around - paranoia added to hide all zoom
|
||||
window whenever there is a chance we dont want them.
|
||||
|
||||
* minor memory leak fixed.
|
||||
|
||||
* brushed metal theme now has different pager border style - more of a
|
||||
demonstration now of the power of internal ewins that are beng used for the
|
||||
pager border and how you can make them vehave like a slideout so you can
|
||||
shade the pager out of the way when you dont want it.
|
||||
|
||||
* X11R5 apps should be session managed pproperly now if E is X11R6 session
|
||||
managed - they shoudl normally go back on the same desktop etc. - but its
|
||||
not guaranteed - still not 100% unambiguous to determine windows of
|
||||
unique apps.
|
||||
|
||||
* fixed cloning bug where double cloning happens on desktop switch - sticky
|
||||
windows should not flicker as much now. should be faster / more efficient
|
||||
|
||||
* fixed numerous other little buglets and made numerous other little speedups
|
||||
and improvements.
|
||||
|
||||
* added new menu scrolling method patch from Christian - very nice - thanks
|
||||
fixed one minor bug in it.
|
||||
|
||||
* added rotated fonts patch from, Christian - thanks again.
|
||||
|
||||
* fixed app re-focus when we go back to the previous desktop in click-to-focus
|
||||
|
||||
* fixed potential pixmap leak
|
||||
|
||||
* suggest using Imlib from CVS - E triggered a pixmap leak - OOOPS - fixed
|
||||
|
||||
* should have fixed "wierd focus behavior" when flipping desktops - basically
|
||||
now the code goes throuhg ALL ewins - ALL the border parts and removes motion
|
||||
enter leave and other miscellaneous events that may trigger E to respond to
|
||||
these and set the focus to that window - so basically we now get E to not
|
||||
recieve any such tiggering events whilst flipping desktops.
|
||||
|
||||
* fixed some internal stack tracing problems where we forget to wrap some
|
||||
returns form some functions.
|
||||
|
||||
* added options for turing pager zoom on and off - loads ans saves it and
|
||||
has settings check button for it.
|
||||
|
||||
* added window title popup option and code (using tooltip as definition
|
||||
backend - now have PAGER tooltip type to define this). loads and saves
|
||||
this option - also has settings check button for it.
|
||||
|
||||
* added PAGER tooltip type (and image & text classes for it) to BrushedMetal
|
||||
theme.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri May 14 12:40:27 IST 1999
|
||||
(Merlin)
|
||||
|
||||
* Fixed a bug in list.c movetofront that turned lists into loops.
|
||||
|
||||
* Updated keyboard warping to operate more sanely; especially in a cramped
|
||||
desktop with lots of overlapping windows. At start, it makes a list of
|
||||
the warpring; then when you release alt (currently hardwired for only
|
||||
alt) it dumps the warpring. Added configuration option 'raise after warp'
|
||||
if you use focus with pointer; when you release alt, the chosen window
|
||||
is raised. Also, displays the title of the windows it is warping to so
|
||||
you know, even if you can't see them. This is only compiled in if you
|
||||
define WITH_TARTY_WARP; see E.h; needs XKB X extension.
|
||||
|
||||
* Added action MOVE_CONTRAINED which is a normal window move, but the
|
||||
window is absolutely constrained to the current view area.
|
||||
|
||||
* Changed menu handling so if you click on a menu item, drag off it and
|
||||
then release, the menu item is not activated. So you can undo a mistaken
|
||||
click.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Tue May 25 11:43:48 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
modules. that's what I'm going to start working on now.
|
||||
incidentally, the xkb tests don't seem to work under accelx.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed May 26 17:13:26 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
More modules work. Now we can load and unload modules. they don't do much
|
||||
yet, though.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat May 29 13:14:42 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
more modules work. the unloading should actually work correctly now (wasn't
|
||||
removing them before).
|
||||
Also, the ipc "exit" command now runs a logout (pops up a dialog box) unless
|
||||
you pass a parameter (of any kind) to it.
|
||||
people should learn to use the IPC help mechanisms.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat May 29 19:08:59 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
more IPC work. advanced_focus and pager got some stuff added.
|
||||
check out online help for details.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun May 30 14:21:39 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
fixed restart_wm in doExit(), which has apparently been broken for ages.
|
||||
(allows you to start another window manager from inside of E)
|
||||
this will fix the menus, the ipc, etc...
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon May 31 00:20:06 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
began work on ref_counts in all sorts of things. also added ability to enable
|
||||
and disable a particular pager at runtime. see pager IPC help for more
|
||||
details.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon May 31 15:52:00 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
borderless windows save state between restarts
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Jun 2 13:33:59 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
fixed pagers on restarts.
|
||||
sorry about that. use "pager off" "pager on" ipc commands, should reset (after
|
||||
starting this version)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun Jun 6 12:59:53 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
some work on reference counting. Things should start picking up now that
|
||||
at least one class does reference counting properly in one instance.
|
||||
(this is a very large problem to solve)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Jun 9 12:49:52 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
reference counting continues. more of the same. lots of work to do here.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Jun 11 14:30:34 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
more work on reference counting.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat Jun 12 19:20:10 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
reference counting, reference counting, etc.
|
||||
oh, and some more IPC work in order to test a little more thoroughly.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sat Jun 12 19:46:41 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
flipped around some IPC commands, added a couple of new ones.
|
||||
still testing.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun Jun 13 15:54:51 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
more IPC work, more reference count work, as well as some additional
|
||||
destructors for things like borders.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Jun 14 17:39:17 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
more IPC work, skeletoning out some stuff. Also fixed reference counting on
|
||||
backgrounds.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Jun 16 10:39:58 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
just when you thought reference counting madness was over, it wasn't :)
|
||||
thanks to Christian Kreibich for helping me there :)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Jun 18 14:18:58 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
fixed a bug in cached config file loading. thanks to
|
||||
Peter Kjellerstedt <peter.kjellerstedt@axis.com>
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Jun 18 17:51:04 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
fixed the pager bug on restart. also fixed the "88% load bug"
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Jun 21 15:19:11 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
added "windowlist" and "desktopwindowlist" menu types. -- same code from
|
||||
dragbar.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Tue Jun 22 13:27:57 CDT 1999
|
||||
(KainX)
|
||||
|
||||
This should fix the button toggling bug reported by David Joseph Goehrig
|
||||
<djg5@st-andrews.ac.uk>
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Jun 28 01:54:01 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
this should fix some config loading bugs as reported by
|
||||
Jesse Michael <jessem@revlabs.com>
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Tue Jun 29 13:13:04 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
Merged in a patch from Christian Kreibich <kreibich@informatik.tu-muenchen.de>
|
||||
for Labeled Buttons. Also added dereferening to the destructor for the
|
||||
additional memory he allocated, as well as removed a couple of lines of
|
||||
redundant code. Will add to the default themes later.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Jun 30 12:22:40 PDT 1999
|
||||
(Raster)
|
||||
|
||||
Oooops - overoptimised the event pruner... optimised out some window
|
||||
map requests - fixed this... just got rid of the map request compressor.
|
||||
thanks shaleh for bugging us about this
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Jul 7 13:55:42 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
Fixed labeled buttons definition for Christian. Also added the regex that he
|
||||
sent in.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Sun Jul 11 13:07:07 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
added "dock" IPC command. see
|
||||
eesh -ewait "help dock" for more information
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Tue Jul 13 01:07:29 CEST 1999
|
||||
(Christian)
|
||||
|
||||
Cleaned up eesh's help output. Also added a generic quicksort algorithm,
|
||||
see misc.c for details and IPC_Help() for an example.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Tue Jul 13 11:12:25 EST 1999
|
||||
(Raster)
|
||||
|
||||
Committing work on iconbox - scrollbar, scrollarrows ec. all work - in theory
|
||||
i can re-arrange the arrows to be either end, on one of the ends or no arrows
|
||||
and arrange the scrollbar to be on the botton or top.. some code left to do
|
||||
vertical iconbox - not much though - just scrollbar arrangement code.
|
||||
|
||||
iconify and de-iconfi works all great - only thing to watch.. dont restart
|
||||
E with iconified windows.. you'll lose their icons right now.. need to fix
|
||||
that.
|
||||
|
||||
next need to ad non snapshotted icon support (several stages - use E defined
|
||||
icons only, use E definied icons only if defined, otherwise use snapshotted
|
||||
icons, use app defined icons only if defined otherwise use snapshots,
|
||||
use E defined icons if defined, otherwise use app defined icon if defined,
|
||||
if not defined use snapshot.. not ot mention the introduction of default
|
||||
E defined icons for all unknown windows - then the actual icon def list itself
|
||||
and the config system for that etc... then need to support multiple iconboxes
|
||||
and dnd form pager to iconbox and back... and between iconboxes... then
|
||||
definable iconification into certain iconboxes - and also need to support
|
||||
transparent backgrouns for iconbox - thus simulating the old icons floating
|
||||
about thing... but its all coming...
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Jul 16 03:31:40 EST 1999
|
||||
(Raster)
|
||||
|
||||
Iconbox now handles ghe horizontal, the vertical, all scrollbar optiond - even
|
||||
has a settings dialog box (right muse on iconbox). it can even be transparent.
|
||||
|
||||
I also optimised property change event handling - e should be much much much
|
||||
more eficient at it avoiding lots of unecessary X traffic.
|
||||
|
||||
Changed gthe box draw mode to move the inner box 1 pixel in so on borderless
|
||||
window you can see the border when moving & resizing.
|
||||
|
||||
added icon creation policy code.
|
||||
|
||||
in the middle of ading icon list code /9that determines what icon image is
|
||||
to be used for what apps and is user definable)
|
||||
|
||||
play with the iconbox - it shouldnt be too bad. :)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Jul 16 02:04:42 CEST 1999
|
||||
(Christian)
|
||||
|
||||
Replaced about.png so that it matches the look of the website logo.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Jul 16 15:54:44 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
KDE hints start. rev 1 didn't actually work, so we started over
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Jul 19 23:03:11 EST 1999
|
||||
(Raster)
|
||||
|
||||
* fixed minor shape propagation bug
|
||||
* improved dialog code by adding bindable callback keyboard shortcuts
|
||||
* improved backgroudns dialog... I just got an influx of about 4000 new pix,
|
||||
and it did get a bit tedious as i have to filter the backgrounds to only
|
||||
keep the good ones... now the backgrounds dialog can becme almost an image
|
||||
viewer that lets me filter my background colletcion... not to mention some
|
||||
keyboard shorts work now (like left/right arrow, d, delete, space and
|
||||
backspace)
|
||||
* iconbox now starts up when E starts - still doesnt remember settings but
|
||||
iconifed windows on start / restart get handled now, and added some
|
||||
imageclasses for the iconbox widget parts - still need more bits put in
|
||||
though like a scrollbar knob imageclass and a iconbox frame imageclass
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Tue Jul 20 02:34:29 EST 1999
|
||||
(Raster)
|
||||
|
||||
* added iconbox coverwin support and imageclass - if the iclass is there the
|
||||
cover win is displayed... also updated brushed metal. again.. to include this
|
||||
stuff.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Jul 23 11:34:11 PDT 1999
|
||||
(KainX)
|
||||
|
||||
Added support for HP-UX 10.x modules thanks to a patch from Marty Riedling
|
||||
<m_riedling@hotmail.com>
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Jul 26 14:03:39 PDT 1999
|
||||
(Troy R. Pesola)
|
||||
|
||||
Here is a patch file that incorporates the following:
|
||||
|
||||
-fixed actions.c to set the desktop and area when switching to another ewin.
|
||||
|
||||
-added sound "SOUND_FOCUS_SET" to be played when the focus is set.
|
||||
|
||||
-added win_op title to the IPC stuff.
|
||||
|
||||
-changed keybindings to reveal deskmenu and taskmenu.
|
||||
|
||||
-changed menus to remove -geom params on netscape calls (personal pref)
|
||||
|
||||
I will start working on the IPC stuff that has the create/modify/delete
|
||||
functions.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Jul 26 23:31:51 CEST 1999
|
||||
(Christian)
|
||||
|
||||
Window Groups :)
|
||||
|
||||
E's windows can new be grouped by opening the winops menu for a
|
||||
window, and selecting 'Window Group'->'Start Group'. Windows can be added
|
||||
using 'Window Group'->'Add to group'. There's a control dialog for groups
|
||||
via 'Window Group'->'Configure group', which defines what actions are
|
||||
applied to all group members. Moving groups should work in every method
|
||||
except for translucent, which is turned into opaque.
|
||||
|
||||
The pagers by default are a group.
|
||||
|
||||
The group members can be emphasized using 'Window Group'->'Show/Hide Group',
|
||||
doing so again returns to the previous borders. Which borders are used for
|
||||
emphasizing is defined by a tag __BORDER_GROUP_NAME <bordername> for every
|
||||
border in the theme. Still needs to be added to BrushedMetal.
|
||||
|
||||
Also corrected a typo. Or two, or three ... ;)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Jul 26 16:09:13 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
cleaned up a little bit (especially in actions.c -- there was a spot where i
|
||||
was being used from a previous context but being reset inside of a closure - I
|
||||
HAVE to assume that was a mistake). Also took out a couple of warnings.
|
||||
Expect a new version of kde.c when I get home, also -- time to commit
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Tue Jul 27 23:38:36 EST 1999
|
||||
(Raster)
|
||||
|
||||
guess what... i'm back... and the iconbox is almost 100% done... sorry no
|
||||
example icondefs.cfg files yt to demo the app window -> micon image matching...
|
||||
but i'll include that later... just trust me that it all works.
|
||||
|
||||
the icobox now does a hell of a LOT and is very configrable and malleble. set
|
||||
the right options and it'd look and feel almost exactly like the old
|
||||
iconification stuff except with enhancements and better behavior.
|
||||
|
||||
at least now you can have multpile iconboxes, create and destroy them at will
|
||||
and chnage all the options int he iconbox and e will remember and save/load
|
||||
this info up again.
|
||||
|
||||
quite nice actually... :) try it out - sorry - snapshotted windows only for
|
||||
those of you not evil enuf to read e's code to figure out thr iconfdefs.cfg
|
||||
format. :) i''ll let that cat out of the bag soon enuf.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Tue Jul 27 22:23:25 CEST 1999
|
||||
(Christian)
|
||||
|
||||
Hopefully fixed a segfault in moving windows with transients.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Jul 28 08:19:27 EST 1999
|
||||
(Raster)
|
||||
|
||||
added in owens withdrawn state patch thst fixes sojme java apps continuously
|
||||
spinning after withdrawing windows...
|
||||
|
||||
also fixed variable clash.. this could cause segv's - the cvs merge didnt
|
||||
notice we now had to i variables in different contexts... :) fixed.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Jul 29 00:46:24 CEST 1999
|
||||
(Christian)
|
||||
|
||||
Added window group shortcuts to titlebar of BrushedMetal. Also dropped
|
||||
Tigert a mail today and told him that we could use borders for grouped
|
||||
windows ... I have something here for that purpose but it's Tigert's
|
||||
theme, right?
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Jul 28 18:33:09 PDT 1999
|
||||
(KainX)
|
||||
|
||||
Added iconbox images to ShinyMetal theme (which I still use...sue me).
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Jul 29 17:41:14 PDT 1999
|
||||
(Knut Neumann)
|
||||
|
||||
this adds create/modify/delete ability to the
|
||||
background ipc command. Its using the format, Troy suggested on e-develop,
|
||||
though it might easily be changed to the "old" style system.
|
||||
|
||||
It is using a new value type system as well, which is working the following
|
||||
way:
|
||||
|
||||
background TEST bg.file /home/test/test.png
|
||||
|
||||
will create a background (resp. modifying it, if it already exists) and set
|
||||
bg.file property to the specified file.
|
||||
|
||||
This way takes advantage over the way to provide parameters as the set_bg
|
||||
command from comms.c works as one does not have to hack in every single
|
||||
parameter. On the other side, it is a real mess, if one wants to set a whole
|
||||
bunch of options at once. I have no idea how to solve that discrepance at the
|
||||
moment. Suggestions are welcome.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Jul 29 18:33:02 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
shut up compile. still reading kwm.cpp - if we're going to support KDE hints,
|
||||
we're going to do them right. this _STRING_ stuff is silly.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Fri Jul 30 11:10:28 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
applied patch from Valdis Kletnieks <Valdis.Kletnieks@vt.edu> to make epp
|
||||
compile cleanly on AIX.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Aug 2 15:06:33 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
KDE Part thirty-seven. should start working soon
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Mon Aug 2 17:16:55 PDT 1999
|
||||
(Mandrake)
|
||||
|
||||
more atom work.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Thu Aug 5 00:32:51 CEST 1999
|
||||
(Christian)
|
||||
|
||||
The tooltip icons are back. Add tooltip text to the actions in an
|
||||
action class using __TOOLTIP_ACTION_TEXT "whatever" and you get the mouse
|
||||
button and key combination visualized for free :) See BrushedMetal's
|
||||
window titlebar for an example. Theme designers can override the icon
|
||||
looks by providing imageclasses named: TOOLTIP_MOUSEBUTTON_ANY,
|
||||
TOOLTIP_MOUSEBUTTON_1, TOOLTIP_MOUSEBUTTON_2, TOOLTIP_MOUSEBUTTON_3,
|
||||
TOOLTIP_KEY_SHIFT, TOOLTIP_KEY_LOCK, TOOLTIP_KEY_CTRL, TOOLTIP_KEY_MOD1
|
||||
TOOLTIP_KEY_MOD2, TOOLTIP_KEY_MOD3, TOOLTIP_KEY_MOD4, TOOLTIP_KEY_MOD5.
|
||||
|
||||
Have fun folks :)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Wed Aug 4 23:08:41 PDT 1999
|
||||
(KainX)
|
||||
|
||||
The beginnings of the imageclass apply IPC.
|
||||
|
||||
-------------------------------------------------------------------------------
|