summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2019-07-30 16:03:58 +0200
committerSimon Rettberg2019-07-30 16:03:58 +0200
commit6a32252403781b303d4ebd195932ce39c5b1c08e (patch)
treecd2f8b3c4052c1b575caf33c9983ae531fad9092
parentRemove android and OSX files (diff)
downloadxscreensaver-6a32252403781b303d4ebd195932ce39c5b1c08e.tar.gz
xscreensaver-6a32252403781b303d4ebd195932ce39c5b1c08e.tar.xz
xscreensaver-6a32252403781b303d4ebd195932ce39c5b1c08e.zip
Update to 5.43
-rw-r--r--Makefile.in25
-rw-r--r--README12
-rw-r--r--config.h.in6
-rwxr-xr-xconfigure583
-rw-r--r--configure.in187
-rw-r--r--driver/Makefile.in16
-rw-r--r--driver/XScreenSaver.ad.in286
-rw-r--r--driver/XScreenSaver_Xm_ad.h108
-rw-r--r--driver/XScreenSaver_ad.h417
-rw-r--r--driver/demo-Gtk.c8
-rw-r--r--driver/demo-Xm.c3
-rw-r--r--driver/lock.c4
-rw-r--r--driver/remote.c118
-rw-r--r--driver/screens.c4
-rw-r--r--driver/splash.c2
-rw-r--r--driver/subprocs.c24
-rw-r--r--driver/types.h5
-rw-r--r--driver/windows.c20
-rw-r--r--driver/xscreensaver-command.c15
-rw-r--r--driver/xscreensaver-command.man11
-rw-r--r--driver/xscreensaver-systemd.c232
-rw-r--r--driver/xscreensaver-systemd.man49
-rw-r--r--driver/xscreensaver.c64
-rw-r--r--driver/xscreensaver.h5
-rw-r--r--driver/xscreensaver.man17
-rw-r--r--hacks/bsod.c26
-rw-r--r--hacks/ccurve.c2
-rw-r--r--hacks/config/README4
-rw-r--r--hacks/config/bouncingcow.xml6
-rw-r--r--hacks/config/deepstars.xml29
-rw-r--r--hacks/config/flyingtoasters.xml1
-rw-r--r--hacks/config/glplanet.xml11
-rw-r--r--hacks/config/gravitywell.xml44
-rw-r--r--hacks/config/hexadrop.xml2
-rw-r--r--hacks/config/imsmap.xml2
-rw-r--r--hacks/config/unknownpleasures.xml2
-rw-r--r--hacks/filmleader.c20
-rw-r--r--hacks/fontglide.c4
-rw-r--r--hacks/fps.c45
-rw-r--r--hacks/fuzzyflakes.c8
-rw-r--r--hacks/glitchpeg.c17
-rw-r--r--hacks/glx/Makefile.in77
-rw-r--r--hacks/glx/bouncingcow.c224
-rw-r--r--hacks/glx/bouncingcow.man5
-rw-r--r--hacks/glx/boxed.c2
-rw-r--r--hacks/glx/circuit.man2
-rw-r--r--hacks/glx/deepstars.c387
-rw-r--r--hacks/glx/deepstars.man57
-rw-r--r--hacks/glx/esper.c4
-rw-r--r--hacks/glx/fliptext.c4
-rw-r--r--hacks/glx/flyingtoasters.c24
-rw-r--r--hacks/glx/flyingtoasters.man4
-rw-r--r--hacks/glx/gears.c6
-rw-r--r--hacks/glx/glhanoi.c4
-rw-r--r--hacks/glx/glplanet.c206
-rw-r--r--hacks/glx/glplanet.man10
-rw-r--r--hacks/glx/glslideshow.c32
-rw-r--r--hacks/glx/gravitywell.c767
-rw-r--r--hacks/glx/gravitywell.man64
-rw-r--r--hacks/glx/hypertorus.c4
-rw-r--r--hacks/glx/jigsaw.c4
-rw-r--r--hacks/glx/lament.c2
-rw-r--r--hacks/glx/peepers.c5
-rw-r--r--hacks/glx/quickhull.c7
-rw-r--r--hacks/glx/sonar-icmp.c53
-rw-r--r--hacks/glx/splodesic.c2
-rw-r--r--hacks/glx/unknownpleasures.c120
-rw-r--r--hacks/glx/unknownpleasures.man6
-rw-r--r--hacks/hexadrop.c54
-rw-r--r--hacks/kumppa.c8
-rw-r--r--hacks/petri.c11
-rw-r--r--hacks/shadebobs.c2
-rwxr-xr-xhacks/webcollage6
-rw-r--r--hacks/xjack.c10
-rw-r--r--jwxyz/jwxyz-cocoa.m24
-rw-r--r--jwxyz/jwxyz-common.c3
-rw-r--r--jwxyz/jwxyz-timers.c10
-rw-r--r--jwxyz/jwxyz.m4
-rw-r--r--jwxyz/jwzgles.c6
-rw-r--r--jwxyz/jwzglesI.h4
-rw-r--r--po/POTFILES.in4
-rw-r--r--po/ru.po4313
-rw-r--r--utils/colors.c6
-rw-r--r--utils/erase.c2
-rw-r--r--utils/font-retry.c53
-rw-r--r--utils/thread_util.c2
-rw-r--r--utils/version.h2
-rw-r--r--xscreensaver.spec2
88 files changed, 6017 insertions, 3035 deletions
diff --git a/Makefile.in b/Makefile.in
index a948681..e0795b2 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -18,8 +18,11 @@ TARFILES = README README.hacking README.VMS INSTALL \
TAR = tar
-MAKE_SUBDIR = for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) $@) || exit 5; done
-MAKE_SUBDIR2 = for dir in $(SUBDIRS2); do (cd $$dir; $(MAKE) $@) || exit 5; done
+# Using $(MAKE) directly means the shell executes things even with "make -n"
+MAKE2 = $(MAKE)
+
+MAKE_SUBDIR = for dir in $(SUBDIRS); do (cd $$dir; $(MAKE2) $@) || exit 5; done
+MAKE_SUBDIR2 = for dir in $(SUBDIRS2); do (cd $$dir; $(MAKE2) $@) || exit 5; done
default::
@+$(MAKE_SUBDIR)
@@ -42,9 +45,9 @@ uninstall-man::
depend::
@$(MAKE_SUBDIR)
distdepend::
- @$(MAKE) update_spec_version
+ @$(MAKE2) update_spec_version
@$(MAKE_SUBDIR2)
- @cd po ; $(MAKE) update-po
+ @cd po ; $(MAKE2) update-po
TAGS:: tags
tags::
@@ -64,8 +67,8 @@ tar::
@ \
sh config.status ; \
rm -f configure ; \
- $(MAKE) configure ; \
- $(MAKE) version-date distdepend ; \
+ $(MAKE2) configure ; \
+ $(MAKE2) version-date distdepend ; \
VERS=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' utils/version.h` ; \
NAME="xscreensaver-$$VERS" ; \
rm -rf $$NAME ; ln -s . $$NAME ; \
@@ -74,7 +77,7 @@ tar::
for subdir in $(SUBDIRS2) ; do \
d=`pwd` ; \
cd $$subdir ; \
- FILES="$$FILES `$(MAKE) echo_tarfiles \
+ FILES="$$FILES `$(MAKE2) echo_tarfiles \
| grep -v '^.*make\[' \
| sed \"s|^|$$subdir/|g;s| | $$subdir/|g\" \
` "; \
@@ -231,9 +234,9 @@ rpm::
ls -lFG xscreensaver*-$$VERS-*.rpm
dmg::
- $(MAKE) -C OSX release dmg
+ $(MAKE2) -C OSX release dmg
apk::
- $(MAKE) -C android apk
+ $(MAKE2) -C android apk
www::
@ \
@@ -256,7 +259,7 @@ www::
exit 1 ; \
fi ; \
\
- $(MAKE) -C OSX updates.xml ; \
+ $(MAKE2) -C OSX updates.xml ; \
\
if [ ! -f $$NAME ]; then \
echo "$$NAME does not exist! Did you forget to \`make tar'?" ; \
@@ -331,7 +334,7 @@ www::
\
git add $$BNAME $$BNAME2 $$BNAME3 ; \
\
- $(MAKE) -C ../ xscreensaver/changelog.html xscreensaver/screenshots/index.html; \
+ $(MAKE2) -C ../ xscreensaver/changelog.html xscreensaver/screenshots/index.html; \
git diff changelog.html ; \
set +x ; \
\
diff --git a/README b/README
index 9a2a384..118a061 100644
--- a/README
+++ b/README
@@ -46,6 +46,18 @@ XScreenSaver has an extensive manual -- please read it!
===============================================================================
+5.43 * New hacks, `GravityWell', `DeepStars'.
+ * GLPlanet now supports the Mercator projection.
+ * Bouncing Cow has mathematically ideal cows (spherical, frictionless).
+ * Foggy toasters.
+ * Unknown Pleasures can now use an image file as a clip mask.
+ * Updated `webcollage' for recent changes.
+ * macOS: Fixed BSOD fonts on UWQHD+ displays.
+ * X11: Added some sample unlock dialog color schemes to the .ad file.
+ * X11: On systemd systems, closing your laptop lid might actually lock
+ your screen now, maybe.
+ * X11: 'sonar' can ping without being setuid by using setcap.
+
5.42 * macOS: Fixed Sparkle auto-updater.
5.41 * X11: Those new font-loading fallback heuristics work again. Oops.
diff --git a/config.h.in b/config.h.in
index 8c031ec..9f66b48 100644
--- a/config.h.in
+++ b/config.h.in
@@ -171,11 +171,17 @@
/* Define if your <locale.h> file defines LC_MESSAGES. */
#undef HAVE_LC_MESSAGES
+/* Define this if your system has libcap. */
+#undef HAVE_LIBCAP
+
/* Define this if the Portable Network Graphics library is installed. It is
basically required, but many things will more-or-less limp along without
it. */
#undef HAVE_LIBPNG
+/* Define this if you have libsystemd. */
+#undef HAVE_LIBSYSTEMD
+
/* Define to 1 if you have the <locale.h> header file. */
#undef HAVE_LOCALE_H
diff --git a/configure b/configure
index f61dfbe..e566796 100755
--- a/configure
+++ b/configure
@@ -661,6 +661,7 @@ PASSWD_OBJS
PASSWD_SRCS
MEN_OSX
SCRIPTS_OSX
+EXES_SYSTEMD
EXES_OSX
OBJCC
COMMENT_DEMO_GLADE2_GTK_2_22_TAIL
@@ -676,8 +677,12 @@ HAVE_PAM_FAIL_DELAY
INSTALL_PAM
NEED_SETUID
INSTALL_DIRS
+SETCAP_HACKS
SETUID_HACKS
INSTALL_SETUID
+PROG_SETCAP
+LIBCAP_LIBS
+LIBCAP_CFLAGS
PASSWD_LIBS
XINERAMA_LIBS
XDPMS_LIBS
@@ -694,6 +699,7 @@ SAVER_LIBS
ALL_DEMO_PROGRAMS
PREFERRED_DEMO_PROGRAM
INCLUDES
+setcap_program
gnome_url_show_program
gnome_open_program
pkg_config
@@ -854,6 +860,7 @@ with_png
with_pixbuf
with_jpeg
with_xft
+with_systemd
with_xshm_ext
with_xdbe_ext
with_readdisplay
@@ -861,6 +868,7 @@ with_image_directory
with_text_file
with_browser
with_setuid_hacks
+with_setcap_hacks
with_record_animation
'
ac_precious_vars='build_alias
@@ -1552,6 +1560,7 @@ Graphics options:
GIF, JPEG, and PNG files as well.
--with-jpeg Include support for the JPEG library.
--with-xft Include support for the X Freetype library.
+ --with-systemd Build xscreensaver-systemd to lock on suspend.
--with-xshm-ext Include support for the Shared Memory extension.
--with-xdbe-ext Include support for the DOUBLE-BUFFER extension.
--with-readdisplay Include support for the XReadDisplay extension.
@@ -1561,10 +1570,10 @@ Graphics options:
--with-browser=BROWSER Specify the web browser used to show the help URL.
--with-setuid-hacks Allow some demos to be installed `setuid root'
(which is needed in order to ping other hosts.)
-
+ --with-setcap-hacks Allow some demos to be installed with setcap
+ (which is needed in order to ping other hosts.)
--with-record-animation Include code for generating MP4 videos.
-
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
@@ -1740,6 +1749,43 @@ fi
} # ac_fn_c_try_link
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
# ac_fn_c_try_run LINENO
# ----------------------
# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
@@ -1782,43 +1828,6 @@ fi
} # ac_fn_c_try_run
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } > conftest.i && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
# Tests whether HEADER exists, giving a warning if it cannot be compiled using
@@ -2630,6 +2639,10 @@ echo "command line was: $0 $@"
+
+
+
+
# After checking to see that --srcdir is correct (which AC_INIT does)
# check for some random other files that come later in the tar file,
# to make sure everything is here.
@@ -4376,27 +4389,15 @@ $as_echo "Solaris: adding -D__EXTENSIONS__" >&6; }
OBJCC="$CC"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler works on ANSI C" >&5
-$as_echo_n "checking whether the compiler works on ANSI C... " >&6; }
- if test "$cross_compiling" = yes; then :
- as_fn_error $? "Couldn't build even a trivial ANSI C program: check CC." "$LINENO" 5
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
- main(int ac, char **av) { return 0; }
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error $? "Couldn't build even a trivial ANSI C program: check CC." "$LINENO" 5
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
+ # This test makes cross-compiling fail, so let's just assume that nobody
+ # is using a K&R compiler any more...
+ #
+# AC_MSG_CHECKING([whether the compiler works on ANSI C])
+# AC_TRY_RUN([ main(int ac, char **av) { return 0; } ],
+# AC_MSG_RESULT(yes),
+# AC_MSG_RESULT(no)
+# AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.),
+# AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.))
if test -n "$GCC"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Turning on gcc compiler warnings." >&5
@@ -13410,7 +13411,7 @@ if ${ac_cv_mesagl_version_string+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.$ac_ext <<EOF
-#line 13417 "configure"
+#line 13418 "configure"
#include "confdefs.h"
#include <GL/gl.h>
#ifndef MESA_MAJOR_VERSION
@@ -15019,6 +15020,219 @@ fi
###############################################################################
#
+# Check for -lsystemd
+#
+###############################################################################
+
+have_systemd=no
+with_systemd_req=unspecified
+systemd_halfassed=no
+
+# Check whether --with-systemd was given.
+if test "${with_systemd+set}" = set; then :
+ withval=$with_systemd; with_systemd="$withval"; with_systemd_req="$withval"
+else
+ with_systemd=yes
+fi
+
+
+
+ case "$with_systemd" in
+ yes) ;;
+ no) ;;
+
+ /*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd headers" >&5
+$as_echo_n "checking for systemd headers... " >&6; }
+ d=$with_systemd/include
+ if test -d $d; then
+ X_CFLAGS="-I$d $X_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd libs" >&5
+$as_echo_n "checking for systemd libs... " >&6; }
+ d=$with_systemd/lib
+ if test -d $d; then
+ X_LIBS="-L$d $X_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ # replace the directory string with "yes".
+ with_systemd_req="yes"
+ with_systemd=$with_systemd_req
+ ;;
+
+ *)
+ echo ""
+ echo "error: argument to --with-systemd must be \"yes\", \"no\", or a directory."
+ echo " If it is a directory, then \`DIR/include' will be added to"
+ echo " the -I list, and \`DIR/lib' will be added to the -L list."
+ exit 1
+ ;;
+ esac
+
+
+if test "$with_systemd" != yes -a "$with_systemd" != no ; then
+ echo "error: must be yes or no: --with-systemd=$with_systemd"
+ exit 1
+fi
+
+if test "$with_systemd" = yes; then
+
+ pkgs=''
+ ok="yes"
+ pkg_check_version libsystemd 221
+ have_systemd="$ok"
+
+ if test "$have_systemd" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd includes" >&5
+$as_echo_n "checking for libsystemd includes... " >&6; }
+if ${ac_cv_systemd_config_cflags+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_systemd_config_cflags=`$pkg_config --cflags $pkgs`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_systemd_config_cflags" >&5
+$as_echo "$ac_cv_systemd_config_cflags" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd libs" >&5
+$as_echo_n "checking for libsystemd libs... " >&6; }
+if ${ac_cv_systemd_config_libs+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_systemd_config_libs=`$pkg_config --libs $pkgs`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_systemd_config_libs" >&5
+$as_echo "$ac_cv_systemd_config_libs" >&6; }
+ fi
+
+ ac_systemd_config_cflags=$ac_cv_systemd_config_cflags
+ ac_systemd_config_libs=$ac_cv_systemd_config_libs
+
+ if test "$have_systemd" = yes; then
+ #
+ # we appear to have libsystemd; check for headers/libs to be sure.
+ #
+ ac_save_systemd_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $ac_systemd_config_cflags"
+
+ have_systemd=no
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-bus.h" "ac_cv_header_systemd_sd_bus_h" "$ac_includes_default"
+if test "x$ac_cv_header_systemd_sd_bus_h" = xyes; then :
+ have_systemd=yes
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+
+ CPPFLAGS="$ac_save_systemd_CPPFLAGS"
+ fi
+
+ if test "$have_systemd" = yes; then
+ # we have the headers, now check for the libraries
+ have_systemd=no
+ systemd_halfassed=yes
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for libsystemd usability..." >&5
+$as_echo "checking for libsystemd usability..." >&6; }
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_save_LDFLAGS="$LDFLAGS"
+# ac_save_LIBS="$LIBS"
+
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ # note: $X_CFLAGS includes $x_includes
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test \! -z "$libdir" ; then
+ LDFLAGS="$LDFLAGS -L$libdir"
+ fi
+ # note: $X_LIBS includes $x_libraries
+ LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sd_bus_open_system in -lc" >&5
+$as_echo_n "checking for sd_bus_open_system in -lc... " >&6; }
+if ${ac_cv_lib_c_sd_bus_open_system+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lc $ac_systemd_config_libs -lX11 -lXext -lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sd_bus_open_system ();
+int
+main ()
+{
+return sd_bus_open_system ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_c_sd_bus_open_system=yes
+else
+ ac_cv_lib_c_sd_bus_open_system=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sd_bus_open_system" >&5
+$as_echo "$ac_cv_lib_c_sd_bus_open_system" >&6; }
+if test "x$ac_cv_lib_c_sd_bus_open_system" = xyes; then :
+ have_systemd=yes
+fi
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
+# LIBS="$ac_save_LIBS"
+
+ fi
+
+ if test "$have_systemd" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for libsystemd usability... no" >&5
+$as_echo "checking for libsystemd usability... no" >&6; }
+ fi
+fi
+
+if test "$have_systemd" = yes; then
+ INCLUDES="$INCLUDES $ac_systemd_config_cflags"
+ EXES_SYSTEMD='$(EXES_SYSTEMD)'
+ $as_echo "#define HAVE_LIBSYSTEMD 1" >>confdefs.h
+
+else
+ EXES_SYSTEMD=''
+fi
+
+
+###############################################################################
+#
# Check for pty support: this allows 'phosphor' and 'apple2'
# to run curses-based programs, or be used as terminal windows.
#
@@ -15837,6 +16051,207 @@ fi
###############################################################################
#
+# Check for setcap, which is less worrying than setuid.
+#
+###############################################################################
+
+have_libcap=no
+setcap_hacks_default=yes
+setcap_hacks="$setcap_hacks_default"
+setcap_hacks_req=unspecified
+
+# Check whether --with-setcap-hacks was given.
+if test "${with_setcap_hacks+set}" = set; then :
+ withval=$with_setcap_hacks; setcap_hacks="$withval"; setcap_hacks_req="$withval"
+else
+ setcap_hacks=yes
+fi
+
+
+
+ case "$setcap_hacks" in
+ yes) ;;
+ no) ;;
+
+ /*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setcap hacks headers" >&5
+$as_echo_n "checking for setcap hacks headers... " >&6; }
+ d=$setcap_hacks/include
+ if test -d $d; then
+ X_CFLAGS="-I$d $X_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setcap hacks libs" >&5
+$as_echo_n "checking for setcap hacks libs... " >&6; }
+ d=$setcap_hacks/lib
+ if test -d $d; then
+ X_LIBS="-L$d $X_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ # replace the directory string with "yes".
+ setcap_hacks_req="yes"
+ setcap_hacks=$setcap_hacks_req
+ ;;
+
+ *)
+ echo ""
+ echo "error: argument to --with-setcap-hacks must be \"yes\", \"no\", or a directory."
+ echo " If it is a directory, then \`DIR/include' will be added to"
+ echo " the -I list, and \`DIR/lib' will be added to the -L list."
+ exit 1
+ ;;
+ esac
+
+
+if test "$setcap_hacks" != yes -a "$setcap_hacks" != no ; then
+ echo "error: must be yes or no: --with-setcap-hacks=$setcap_hacks"
+ exit 1
+fi
+
+if test "$setcap_hacks" = yes; then
+
+ for ac_prog in setcap
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_setcap_program+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$setcap_program"; then
+ ac_cv_prog_setcap_program="$setcap_program" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_setcap_program="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+setcap_program=$ac_cv_prog_setcap_program
+if test -n "$setcap_program"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $setcap_program" >&5
+$as_echo "$setcap_program" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$setcap_program" && break
+done
+
+ if test "$setcap_program" != ''; then
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_capability_h" = xyes; then :
+ have_setcap=yes
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ fi
+ if test "$have_setcap" = yes; then
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_save_LDFLAGS="$LDFLAGS"
+# ac_save_LIBS="$LIBS"
+
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ # note: $X_CFLAGS includes $x_includes
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test \! -z "$libdir" ; then
+ LDFLAGS="$LDFLAGS -L$libdir"
+ fi
+ # note: $X_LIBS includes $x_libraries
+ LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_set_flag in -lcap" >&5
+$as_echo_n "checking for cap_set_flag in -lcap... " >&6; }
+if ${ac_cv_lib_cap_cap_set_flag+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcap $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cap_set_flag ();
+int
+main ()
+{
+return cap_set_flag ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_cap_cap_set_flag=yes
+else
+ ac_cv_lib_cap_cap_set_flag=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_cap_set_flag" >&5
+$as_echo "$ac_cv_lib_cap_cap_set_flag" >&6; }
+if test "x$ac_cv_lib_cap_cap_set_flag" = xyes; then :
+ have_libcap=yes
+ PROG_SETCAP="$setcap_program"
+ LIBCAP_LIBS="-lcap"
+ $as_echo "#define HAVE_LIBCAP 1" >>confdefs.h
+
+fi
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
+# LIBS="$ac_save_LIBS"
+
+ fi
+fi
+
+
+###############################################################################
+#
# Check for --with-record-animation
#
###############################################################################
@@ -16005,6 +16420,12 @@ else
SETUID_HACKS=no
fi
+if test "$have_libcap" = yes; then
+ SETCAP_HACKS=yes
+else
+ SETCAP_HACKS=no
+fi
+
tab=' '
if test "$have_gl" = yes; then
GL_EXES='$(GL_EXES)'
@@ -16165,6 +16586,11 @@ INCLUDES=`echo "$INCLUDES" | sed 's@ -I${prefix}/include@@g;'`
+
+
+
+
+
APPDEFAULTS=$ac_x_app_defaults
@@ -17831,6 +18257,37 @@ if test "$have_xft" = no ; then
fi
+if test "$have_systemd" = no ; then
+ systemd_warned=no
+ if test "$with_systemd_req" = yes ; then
+ warnL "Use of systemd was requested, but it was not found."
+ systemd_warned=yes
+ elif test "$with_systemd_req" = no ; then
+ true
+ # noteL 'The systemd library is not being used.'
+ # systemd_warned=yes
+ else
+ true
+ # noteL "The systemd library was not found."
+ # systemd_warned=yes
+ fi
+
+ if test "$systemd_halfassed" = yes ; then
+ echo ''
+ warn2 'More specifically, we found the headers, but not the'
+ warn2 'libraries; so either systemd is half-installed on this'
+ warn2 "system, or something else went wrong. The \`config.log'"
+ warn2 'file might contain some clues.'
+ echo ''
+ systemd_warned=yes
+ fi
+
+ if test "$systemd_warned" = yes; then
+ warn2 "This means that xscreensaver-systemd won't be built."
+ fi
+fi
+
+
if test "$have_gl" = yes -a "$ac_have_mesa_gl" = yes ; then
preferred_mesagl=3.4
mgv="$ac_mesagl_version_string"
@@ -17930,6 +18387,10 @@ if test "$with_shadow_req" = yes -a "$have_shadow" = no ; then
warn 'Use of shadow passwords was requested, but they were not found.'
fi
+if test "$setcap_hacks_req" = yes -a "$have_libcap" = no ; then
+ warn 'Use of libcap was requested, but it was not found.'
+fi
+
if test "$ac_macosx" = yes ; then
if test "$enable_locking" = yes ; then
warn "You have specified --enable-locking on MacOS X."
diff --git a/configure.in b/configure.in
index f8ed25e..20fb0f7 100644
--- a/configure.in
+++ b/configure.in
@@ -181,6 +181,9 @@ AH_TEMPLATE([HAVE_XUTF8DRAWSTRING],
AH_TEMPLATE([HAVE_XFT],
[Define this if you have libXft2.])
+AH_TEMPLATE([HAVE_LIBSYSTEMD],
+ [Define this if you have libsystemd.])
+
AH_TEMPLATE([HAVE_GL],
[Define this if you have OpenGL. Some of the demos require it,
so if you don't have it, then those particular demos won't be
@@ -329,6 +332,9 @@ AH_TEMPLATE([XPointer],
AH_TEMPLATE([HAVE_PTHREAD],
[Define this if your system supports POSIX threads.])
+AH_TEMPLATE([HAVE_LIBCAP],
+ [Define this if your system has libcap.])
+
AH_TEMPLATE([HAVE_RECORD_ANIM],
[Define this to enable recording of videos.])
@@ -427,12 +433,15 @@ AC_DEFUN([AC_PROG_CC_ANSI],
OBJCC="$CC"
- AC_MSG_CHECKING([whether the compiler works on ANSI C])
- AC_TRY_RUN([ main(int ac, char **av) { return 0; } ],
- AC_MSG_RESULT(yes),
- AC_MSG_RESULT(no)
- AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.),
- AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.))
+ # This test makes cross-compiling fail, so let's just assume that nobody
+ # is using a K&R compiler any more...
+ #
+# AC_MSG_CHECKING([whether the compiler works on ANSI C])
+# AC_TRY_RUN([ main(int ac, char **av) { return 0; } ],
+# AC_MSG_RESULT(yes),
+# AC_MSG_RESULT(no)
+# AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.),
+# AC_MSG_ERROR(Couldn't build even a trivial ANSI C program: check CC.))
if test -n "$GCC"; then
AC_MSG_RESULT(Turning on gcc compiler warnings.)
@@ -3563,6 +3572,81 @@ fi
###############################################################################
#
+# Check for -lsystemd
+#
+###############################################################################
+
+have_systemd=no
+with_systemd_req=unspecified
+systemd_halfassed=no
+AC_ARG_WITH(systemd,
+[ --with-systemd Build xscreensaver-systemd to lock on suspend.],
+ [with_systemd="$withval"; with_systemd_req="$withval"],
+ [with_systemd=yes])
+
+HANDLE_X_PATH_ARG(with_systemd, --with-systemd, systemd)
+
+if test "$with_systemd" != yes -a "$with_systemd" != no ; then
+ echo "error: must be yes or no: --with-systemd=$with_systemd"
+ exit 1
+fi
+
+if test "$with_systemd" = yes; then
+
+ pkgs=''
+ ok="yes"
+ pkg_check_version libsystemd 221
+ have_systemd="$ok"
+
+ if test "$have_systemd" = yes; then
+ AC_CACHE_CHECK([for libsystemd includes], ac_cv_systemd_config_cflags,
+ [ac_cv_systemd_config_cflags=`$pkg_config --cflags $pkgs`])
+ AC_CACHE_CHECK([for libsystemd libs], ac_cv_systemd_config_libs,
+ [ac_cv_systemd_config_libs=`$pkg_config --libs $pkgs`])
+ fi
+
+ ac_systemd_config_cflags=$ac_cv_systemd_config_cflags
+ ac_systemd_config_libs=$ac_cv_systemd_config_libs
+
+ if test "$have_systemd" = yes; then
+ #
+ # we appear to have libsystemd; check for headers/libs to be sure.
+ #
+ ac_save_systemd_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $ac_systemd_config_cflags"
+
+ have_systemd=no
+ AC_CHECK_X_HEADER(systemd/sd-bus.h, [have_systemd=yes])
+
+ CPPFLAGS="$ac_save_systemd_CPPFLAGS"
+ fi
+
+ if test "$have_systemd" = yes; then
+ # we have the headers, now check for the libraries
+ have_systemd=no
+ systemd_halfassed=yes
+
+ AC_MSG_RESULT(checking for libsystemd usability...)
+ AC_CHECK_X_LIB(c, sd_bus_open_system, [have_systemd=yes],,
+ $ac_systemd_config_libs -lX11 -lXext -lm)
+ fi
+
+ if test "$have_systemd" = no; then
+ AC_MSG_RESULT(checking for libsystemd usability... no)
+ fi
+fi
+
+if test "$have_systemd" = yes; then
+ INCLUDES="$INCLUDES $ac_systemd_config_cflags"
+ EXES_SYSTEMD='$(EXES_SYSTEMD)'
+ AC_DEFINE(HAVE_LIBSYSTEMD)
+else
+ EXES_SYSTEMD=''
+fi
+
+
+###############################################################################
+#
# Check for pty support: this allows 'phosphor' and 'apple2'
# to run curses-based programs, or be used as terminal windows.
#
@@ -3885,8 +3969,7 @@ setuid_hacks_default=no
setuid_hacks="$setuid_hacks_default"
AC_ARG_WITH(setuid-hacks,
[ --with-setuid-hacks Allow some demos to be installed `setuid root'
- (which is needed in order to ping other hosts.)
-],
+ (which is needed in order to ping other hosts.)],
[setuid_hacks="$withval"], [setuid_hacks="$setuid_hacks_default"])
HANDLE_X_PATH_ARG(setuid_hacks, --with-setuid-hacks, setuid hacks)
@@ -3901,6 +3984,45 @@ fi
###############################################################################
#
+# Check for setcap, which is less worrying than setuid.
+#
+###############################################################################
+
+have_libcap=no
+setcap_hacks_default=yes
+setcap_hacks="$setcap_hacks_default"
+setcap_hacks_req=unspecified
+AC_ARG_WITH(setcap-hacks,
+[ --with-setcap-hacks Allow some demos to be installed with setcap
+ (which is needed in order to ping other hosts.)],
+ [setcap_hacks="$withval"; setcap_hacks_req="$withval"],
+ [setcap_hacks=yes])
+
+HANDLE_X_PATH_ARG(setcap_hacks, --with-setcap-hacks, setcap hacks)
+
+if test "$setcap_hacks" != yes -a "$setcap_hacks" != no ; then
+ echo "error: must be yes or no: --with-setcap-hacks=$setcap_hacks"
+ exit 1
+fi
+
+if test "$setcap_hacks" = yes; then
+
+ AC_CHECK_PROGS(setcap_program, setcap)
+ if test "$setcap_program" != ''; then
+ AC_CHECK_X_HEADER(sys/capability.h, [have_setcap=yes])
+ fi
+ if test "$have_setcap" = yes; then
+ AC_CHECK_X_LIB(cap, cap_set_flag,
+ [have_libcap=yes
+ PROG_SETCAP="$setcap_program"
+ LIBCAP_LIBS="-lcap"
+ AC_DEFINE(HAVE_LIBCAP)])
+ fi
+fi
+
+
+###############################################################################
+#
# Check for --with-record-animation
#
###############################################################################
@@ -3908,8 +4030,7 @@ fi
record_anim_default=no
record_anim="$record_anim_default"
AC_ARG_WITH(record-animation,
-[ --with-record-animation Include code for generating MP4 videos.
-],
+[ --with-record-animation Include code for generating MP4 videos.],
[record_anim="$withval"], [record_anim="$record_anim_default"])
HANDLE_X_PATH_ARG(record_anim, --with-record-animation, record animation)
@@ -4020,6 +4141,12 @@ else
SETUID_HACKS=no
fi
+if test "$have_libcap" = yes; then
+ SETCAP_HACKS=yes
+else
+ SETCAP_HACKS=no
+fi
+
tab=' '
if test "$have_gl" = yes; then
GL_EXES='$(GL_EXES)'
@@ -4121,8 +4248,12 @@ AC_SUBST(GLE_LIBS)
AC_SUBST(XDPMS_LIBS)
AC_SUBST(XINERAMA_LIBS)
AC_SUBST(PASSWD_LIBS)
+AC_SUBST(LIBCAP_CFLAGS)
+AC_SUBST(LIBCAP_LIBS)
+AC_SUBST(PROG_SETCAP)
AC_SUBST(INSTALL_SETUID)
AC_SUBST(SETUID_HACKS)
+AC_SUBST(SETCAP_HACKS)
AC_SUBST(INSTALL_DIRS)
AC_SUBST(NEED_SETUID)
AC_SUBST(INSTALL_PAM)
@@ -4140,6 +4271,7 @@ AC_SUBST(COMMENT_DEMO_GLADE2_GTK_2_22_TAIL)
AC_SUBST(OBJCC)
AC_SUBST(EXES_OSX)
+AC_SUBST(EXES_SYSTEMD)
AC_SUBST(SCRIPTS_OSX)
AC_SUBST(MEN_OSX)
@@ -4520,6 +4652,37 @@ if test "$have_xft" = no ; then
fi
+if test "$have_systemd" = no ; then
+ systemd_warned=no
+ if test "$with_systemd_req" = yes ; then
+ warnL "Use of systemd was requested, but it was not found."
+ systemd_warned=yes
+ elif test "$with_systemd_req" = no ; then
+ true
+ # noteL 'The systemd library is not being used.'
+ # systemd_warned=yes
+ else
+ true
+ # noteL "The systemd library was not found."
+ # systemd_warned=yes
+ fi
+
+ if test "$systemd_halfassed" = yes ; then
+ echo ''
+ warn2 'More specifically, we found the headers, but not the'
+ warn2 'libraries; so either systemd is half-installed on this'
+ warn2 "system, or something else went wrong. The \`config.log'"
+ warn2 'file might contain some clues.'
+ echo ''
+ systemd_warned=yes
+ fi
+
+ if test "$systemd_warned" = yes; then
+ warn2 "This means that xscreensaver-systemd won't be built."
+ fi
+fi
+
+
if test "$have_gl" = yes -a "$ac_have_mesa_gl" = yes ; then
preferred_mesagl=3.4
mgv="$ac_mesagl_version_string"
@@ -4619,6 +4782,10 @@ if test "$with_shadow_req" = yes -a "$have_shadow" = no ; then
warn 'Use of shadow passwords was requested, but they were not found.'
fi
+if test "$setcap_hacks_req" = yes -a "$have_libcap" = no ; then
+ warn 'Use of libcap was requested, but it was not found.'
+fi
+
if test "$ac_macosx" = yes ; then
if test "$enable_locking" = yes ; then
warn "You have specified --enable-locking on MacOS X."
diff --git a/driver/Makefile.in b/driver/Makefile.in
index b13853e..4ca00b6 100644
--- a/driver/Makefile.in
+++ b/driver/Makefile.in
@@ -113,6 +113,10 @@ LOCK_OBJS_1 = lock.o passwd.o
NOLOCK_SRCS_1 = lock.c
NOLOCK_OBJS_1 = lock.o
+SYSTEMD_SRCS = xscreensaver-systemd.c
+SYSTEMD_OBJS = xscreensaver-systemd.o
+SYSTEMD_LIBS = -lsystemd
+
TEST_SRCS = test-passwd.c test-uid.c test-xdpms.c test-grab.c \
test-apm.c test-fade.c test-xinerama.c test-vp.c \
test-randr.c xdpyinfo.c test-mlstring.c test-screens.c \
@@ -216,9 +220,10 @@ GETIMG_LIBS = $(LIBS) $(X_LIBS) $(PNG_LIBS) $(JPEG_LIBS) \
$(X_PRE_LIBS) -lXt -lX11 $(XMU_LIBS) -lXext $(X_EXTRA_LIBS)
EXES = xscreensaver xscreensaver-command xscreensaver-demo \
- xscreensaver-getimage @EXES_OSX@
+ xscreensaver-getimage @EXES_OSX@ @EXES_SYSTEMD@
EXES2 = @ALL_DEMO_PROGRAMS@
EXES_OSX = pdf2jpeg
+EXES_SYSTEMD = xscreensaver-systemd
SCRIPTS_1 = xscreensaver-getimage-file xscreensaver-getimage-video \
xscreensaver-text
@@ -233,7 +238,8 @@ MEN_1 = xscreensaver.man xscreensaver-demo.man \
xscreensaver-text.man \
xscreensaver-getimage.man \
xscreensaver-getimage-file.man \
- xscreensaver-getimage-video.man
+ xscreensaver-getimage-video.man \
+ xscreensaver-systemd.man
MEN_OSX = xscreensaver-getimage-desktop.man pdf2jpeg.man
MEN = $(MEN_1) @MEN_OSX@
@@ -246,7 +252,7 @@ VMSFILES = compile_axp.com compile_decc.com link_axp.com link_decc.com \
vms-getpwnam.c vms-pwd.h vms-hpwd.c vms-validate.c \
vms_axp.opt vms_axp_12.opt vms_decc.opt vms_decc_12.opt
-TARFILES = $(EXTRAS) $(VMSFILES) $(SAVER_SRCS_1) \
+TARFILES = $(EXTRAS) $(VMSFILES) $(SAVER_SRCS_1) $(SYSTEMD_SRCS) \
$(MOTIF_SRCS) $(GTK_SRCS) $(PWENT_SRCS) $(PWHELPER_SRCS) \
$(KERBEROS_SRCS) $(PAM_SRCS) $(LOCK_SRCS_1) $(DEMO_SRCS_1) \
$(CMD_SRCS) $(GETIMG_SRCS_1) $(PDF2JPEG_SRCS) $(HDRS) \
@@ -647,7 +653,7 @@ distdepend: check_men update_ad_version XScreenSaver_ad.h XScreenSaver_Xm_ad.h
$(INCLUDES_1) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \
$(SAVER_SRCS_1) $(MOTIF_SRCS) $(GTK_SRCS) $(GETIMG_SRCS_1) \
$(PWENT_SRCS) $(LOCK_SRCS_1) $(DEMO_SRCS_1) $(CMD_SRCS) \
- $(TEST_SRCS) 2>/dev/null | \
+ $(SYSTEMD_SRCS) $(TEST_SRCS) 2>/dev/null | \
sort -d | \
( \
awk '/^# .*Makefile.in ---/,/^# DO .*distdepend/' < Makefile.in ; \
@@ -820,6 +826,8 @@ xscreensaver-getimage: $(GETIMG_OBJS)
pdf2jpeg: $(PDF2JPEG_OBJS)
$(OBJCC) $(LDFLAGS) -o $@ $(PDF2JPEG_OBJS) $(PDF2JPEG_LIBS) -lm
+xscreensaver-systemd: $(SYSTEMD_OBJS)
+ $(CC) $(LDFLAGS) -o $@ $(SYSTEMD_OBJS) $(SYSTEMD_LIBS) -lm
TEST_PASSWD_OBJS = test-passwd.o $(LOCK_OBJS_1) $(PASSWD_OBJS) \
subprocs.o setuid.o splash.o prefs.o mlstring.o exec.o \
diff --git a/driver/XScreenSaver.ad.in b/driver/XScreenSaver.ad.in
index eec998f..5deb334 100644
--- a/driver/XScreenSaver.ad.in
+++ b/driver/XScreenSaver.ad.in
@@ -4,8 +4,8 @@
! a screen saver and locker for the X window system
! by Jamie Zawinski
!
-! version 5.42
-! 28-Dec-2018
+! version 5.43
+! 09-Jul-2019
!
! See "man xscreensaver" for more info. The latest version is always
! available at https://www.jwz.org/xscreensaver/
@@ -55,7 +55,7 @@
*splash: True
*splashDuration: 0:00:05
*visualID: default
-*captureStderr: True
+*installColormap: True
*ignoreUninstalledPrograms: False
*authWarningSlack: 20
@@ -65,12 +65,16 @@
*textProgram: fortune
*textURL: https://en.wikipedia.org/w/index.php?title=Special:NewPages&feed=rss
+! When a saver writes an error message to stdout/stderr, it can be printed
+! on the screen.
+!
+*captureStderr: True
+*overlayStderr: True
*overlayTextForeground: #FFFF00
*overlayTextBackground: #000000
-*overlayStderr: True
*font: *-medium-r-*-140-*-m-*
-! The default is to use these extensions if available (as noted.)
+! The default is to use these server extensions if available (as noted.)
*sgiSaverExtension: True
*xidleExtension: True
*procInterrupts: True
@@ -80,14 +84,11 @@
! Set this to True if you are experiencing longstanding XFree86 bug #421
! (xscreensaver not covering the whole screen)
-GetViewPortIsFullOfLies: False
+*GetViewPortIsFullOfLies: False
-! This is what the "Demo" button on the splash screen runs (/bin/sh syntax.)
+! This is what the "Settings" button on the splash screen runs.
*demoCommand: xscreensaver-demo
-! This is what the "Prefs" button on the splash screen runs (/bin/sh syntax.)
-*prefsCommand: xscreensaver-demo -prefs
-
! This is the URL loaded by the "Help" button on the splash screen,
! and by the "Documentation" menu item in xscreensaver-demo.
*helpURL: https://www.jwz.org/xscreensaver/man.html
@@ -124,6 +125,8 @@ GetViewPortIsFullOfLies: False
! The format used for printing the date and time in the password dialog box
! (see the strftime(3) manual page for details.)
*dateFormat: %d-%b-%y (%a); %I:%M %p
+! For day month date:
+! *dateFormat: %a %b %d, %I:%M %p
! To show the time only:
! *dateFormat: %I:%M %p
! For 24 hour time:
@@ -139,15 +142,195 @@ GetViewPortIsFullOfLies: False
@NEW_LOGIN_COMMAND_P@*newLoginCommand: @NEW_LOGIN_COMMAND@
-! Turning on "installColormap" on 8-bit systems interacts erratically with
-! certain jurassic window managers. If your screen turns some color other
-! than black, the window manager is buggy, and you need to set this resource
-! to false. Or switch WMs. Or join the 21st century and get a 24-bit
-! graphics card.
+! Change these at your peril:
!
-*installColormap: True
+XScreenSaver.pointerPollTime: 0:00:05
+XScreenSaver.pointerHysteresis: 10
+XScreenSaver.initialDelay: 0:00:00
+XScreenSaver.windowCreationTimeout: 0:00:30
+XScreenSaver.bourneShell: /bin/sh
+
+!=============================================================================
+!
+! Colors and fonts for the unlock dialog and splash screen.
+!
+!=============================================================================
+! Note, the daemon uses Xlib XLoadFont, not Xft. If these fonts don't
+! exist, arcane heuristics are applied until we find something similar.
+!
+*Dialog.headingFont: -*-helvetica-bold-r-*-*-*-180-*-*-*-*-iso8859-1
+*Dialog.bodyFont: -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-1
+*Dialog.labelFont: -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-1
+*Dialog.unameFont: -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-1
+*Dialog.buttonFont: -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-1
+*Dialog.dateFont: -*-helvetica-medium-r-*-*-*-80-*-*-*-*-iso8859-1
+
+! Helvetica asterisks look terrible.
+*passwd.passwdFont: -*-courier-bold-r-*-*-*-140-*-*-*-iso8859-1
+
+! Whether to display the local host name in the unlock dialog.
+*passwd.uname: True
+
+! Whether typed passwords should echo as asterisks (true) or nothing (false)
+*passwd.asterisks: True
+
+
+! The default color scheme for the unlock and splash dialogs.
+! This looks pretty close to the default Gtk theme.
+!
+*Dialog.foreground: #000000
+*Dialog.background: #E6E6E6
+*Dialog.Button.foreground: #000000
+*Dialog.Button.background: #F5F5F5
+*Dialog.text.foreground: #000000
+*Dialog.text.background: #FFFFFF
+*Dialog.topShadowColor: #FFFFFF
+*Dialog.bottomShadowColor: #CECECE
+*Dialog.logo.width: 210
+*Dialog.logo.height: 210
+*Dialog.internalBorderWidth: 24
+*Dialog.borderWidth: 1
+*Dialog.shadowThickness: 2
+*passwd.thermometer.foreground: #4464AC
+*passwd.thermometer.background: #FFFFFF
+*passwd.thermometer.width: 8
+
+
+! A few other example color schemes.
+!
+! A convenient way to debug these is to build and run "driver/test-passwd".
+! Remember that configure overwrites XScreenSaver.ad from XScreenSaver.ad.in.
+
+
+! Borderless theme:
+!
+! *Dialog.topShadowColor: #E6E6E6
+! *Dialog.bottomShadowColor: #E6E6E6
+! *passwd.thermometer.width: 6
+
+
+! Dark gray theme:
+!
+! *Dialog.foreground: #CCCCCC
+! *Dialog.background: #333333
+! *Dialog.topShadowColor: #444444
+! *Dialog.bottomShadowColor: #111111
+! *Dialog.text.foreground: #DDDDDD
+! *Dialog.text.background: #666666
+! *Dialog.Button.foreground: #CCCCCC
+! *Dialog.Button.background: #666666
+! *passwd.thermometer.foreground: #4464AC
+! *passwd.thermometer.background: #666666
+
+
+! Black borderless theme:
+!
+! *Dialog.foreground: #CCCCCC
+! *Dialog.background: #000000
+! *Dialog.topShadowColor: #000000
+! *Dialog.bottomShadowColor: #000000
+! *Dialog.text.foreground: #CCCCCC
+! *Dialog.text.background: #000000
+! *Dialog.Button.foreground: #CCCCCC
+! *Dialog.Button.background: #333333
+! *passwd.thermometer.foreground: #CCCCCC
+! *passwd.thermometer.background: #333333
+! *passwd.thermometer.width: 3
+
+
+! Green on black theme:
+!
+! *Dialog.foreground: #00FF00
+! *Dialog.background: #000000
+! *Dialog.topShadowColor: #000000
+! *Dialog.bottomShadowColor: #000000
+! *Dialog.shadowThickness: 1
+! *Dialog.text.foreground: #00FF00
+! *Dialog.text.background: #006600
+! *Dialog.Button.foreground: #00FF00
+! *Dialog.Button.background: #006600
+! *passwd.thermometer.foreground: #00CC00
+! *passwd.thermometer.background: #006600
+
+
+! White theme:
+!
+! *Dialog.foreground: #000000
+! *Dialog.background: #FFFFFF
+! *Dialog.topShadowColor: #CCCCCC
+! *Dialog.bottomShadowColor: #CCCCCC
+! *Dialog.shadowThickness: 1
+! *Dialog.text.foreground: #000000
+! *Dialog.text.background: #FFFFFF
+! *Dialog.Button.foreground: #000000
+! *Dialog.Button.background: #FFFFFF
+
+
+! Blue theme:
+!
+! *Dialog.foreground: #000000
+! *Dialog.background: #BBCCDD
+! *Dialog.topShadowColor: #CCDDEE
+! *Dialog.bottomShadowColor: #AABBCC
+! *Dialog.text.foreground: #000000
+! *Dialog.text.background: #DDEEFF
+! *Dialog.Button.foreground: #000000
+! *Dialog.Button.background: #DDEEFF
+! *passwd.thermometer.foreground: #5566AA
+! *passwd.thermometer.background: #BBCCDD
+
+
+! Aqua on black borderless theme:
+!
+! *Dialog.foreground: #00EFEF
+! *Dialog.background: #000000
+! *Dialog.topShadowColor: #000000
+! *Dialog.bottomShadowColor: #000000
+! *Dialog.Button.foreground: #000000
+! *Dialog.Button.background: #2244EE
+! *Dialog.text.foreground: #2244EE
+! *Dialog.text.background: #EEEEEE
+! *Dialog.internalBorderWidth: 36
+! *Dialog.borderWidth: 4
+! *Dialog.shadowThickness: 2
+! *passwd.thermometer.foreground: #2244EE
+! *passwd.thermometer.background: #000088
+
+
+! Wine theme, similar to the login screen of "Ubuntu 18.04 Community".
+!
+! *Dialog.foreground: #AD8FA6
+! *Dialog.background: #2C041E
+! *Dialog.topShadowColor: #2C041E
+! *Dialog.bottomShadowColor: #2C041E
+! *Dialog.text.foreground: #706B70
+! *Dialog.text.background: #F9F9F8
+! *Dialog.Button.foreground: #CFC8CB
+! *Dialog.Button.background: #4D2946
+! *passwd.thermometer.foreground: #AD8FA6
+! *passwd.thermometer.background: #4D2946
+! *passwd.thermometer.width: 6
+
+
+! Static text in the dialog boxes:
+!
+*passwd.heading.label: XScreenSaver %s
+*passwd.body.label: This screen is locked.
+*passwd.unlock.label: OK
+*passwd.login.label: New Login
+*passwd.user.label: Username:
+
+*splash.heading.label: XScreenSaver %s
+*splash.body.label: Copyright \251 1991-2019 by
+*splash.body2.label: Jamie Zawinski <jwz@jwz.org>
+*splash.demo.label: Settings
+*splash.help.label: Help
+
+
+!=============================================================================
+!
! This is the list of installed screen saver modes. See "man xscreensaver"
! for the syntax used here.
!
@@ -157,6 +340,8 @@ GetViewPortIsFullOfLies: False
! You can use the `xscreensaver-demo' program to edit the current list of
! screen savers interactively.
!
+!=============================================================================
+
*programs: \
maze -root \n\
@GL_KLUDGE@ GL: superquadrics -root \n\
@@ -390,75 +575,16 @@ GetViewPortIsFullOfLies: False
@GL_KLUDGE@ GL: maze3d -root \n\
@GL_KLUDGE@ GL: peepers -root \n\
@GL_KLUDGE@ GL: razzledazzle -root \n\
- vfeedback -root \n
-
-
-
-!=============================================================================
-!
-! You probably don't want to change anything after this point.
-!
-!=============================================================================
-
-
-XScreenSaver.pointerPollTime: 0:00:05
-XScreenSaver.pointerHysteresis: 10
-XScreenSaver.initialDelay: 0:00:00
-XScreenSaver.windowCreationTimeout: 0:00:30
-XScreenSaver.bourneShell: /bin/sh
-
-
-! Resources for the password and splash-screen dialog boxes of
-! the "xscreensaver" daemon.
-!
-*Dialog.headingFont: -*-helvetica-bold-r-*-*-*-180-*-*-*-*-iso8859-1
-*Dialog.bodyFont: -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-1
-*Dialog.labelFont: -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-1
-*Dialog.unameFont: -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-1
-*Dialog.buttonFont: -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-1
-*Dialog.dateFont: -*-helvetica-medium-r-*-*-*-80-*-*-*-*-iso8859-1
-
-! Helvetica asterisks look terrible.
-*passwd.passwdFont: -*-courier-medium-r-*-*-*-140-*-*-*-iso8859-1
-
-
-*Dialog.foreground: #000000
-*Dialog.background: #E6E6E6
-*Dialog.Button.foreground: #000000
-*Dialog.Button.background: #F5F5F5
-!*Dialog.Button.pointBackground: #EAEAEA
-!*Dialog.Button.clickBackground: #C3C3C3
-*Dialog.text.foreground: #000000
-*Dialog.text.background: #FFFFFF
-*passwd.thermometer.foreground: #4464AC
-*passwd.thermometer.background: #FFFFFF
-*Dialog.topShadowColor: #FFFFFF
-*Dialog.bottomShadowColor: #CECECE
-*Dialog.logo.width: 210
-*Dialog.logo.height: 210
-*Dialog.internalBorderWidth: 24
-*Dialog.borderWidth: 1
-*Dialog.shadowThickness: 2
+ vfeedback -root \n\
+@GL_KLUDGE@ GL: deepstars -root \n\
+@GL_KLUDGE@ GL: gravitywell -root \n
-*passwd.heading.label: XScreenSaver %s
-*passwd.body.label: This screen is locked.
-*passwd.unlock.label: OK
-*passwd.login.label: New Login
-*passwd.user.label: Username:
-*passwd.thermometer.width: 8
-*passwd.asterisks: True
-*passwd.uname: True
-
-*splash.heading.label: XScreenSaver %s
-*splash.body.label: Copyright \251 1991-2018 by
-*splash.body2.label: Jamie Zawinski <jwz@jwz.org>
-*splash.demo.label: Settings
-*splash.help.label: Help
!=============================================================================
!
! Pretty names for the hacks that have unusual capitalization.
+! Used by xscreensaver-demo.
!
!=============================================================================
@@ -483,6 +609,7 @@ XScreenSaver.bourneShell: /bin/sh
*hacks.cwaves.name: CWaves
*hacks.dangerball.name: DangerBall
*hacks.decayscreen.name: DecayScreen
+*hacks.deepstars.name: DeepStars
*hacks.dnalogo.name: DNA Logo
*hacks.dymaxionmap.name: DymaxionMap
*hacks.energystream.name: EnergyStream
@@ -501,6 +628,7 @@ XScreenSaver.bourneShell: /bin/sh
*hacks.gleidescope.name: Gleidescope
*hacks.glforestfire.name: GLForestFire
*hacks.glitchpeg.name: GlitchPEG
+*hacks.gravitywell.name: GravityWell
*hacks.hyperball.name: HyperBall
*hacks.hypercube.name: HyperCube
*hacks.ifs.name: IFS
diff --git a/driver/XScreenSaver_Xm_ad.h b/driver/XScreenSaver_Xm_ad.h
deleted file mode 100644
index 371e0a2..0000000
--- a/driver/XScreenSaver_Xm_ad.h
+++ /dev/null
@@ -1,108 +0,0 @@
-"*fontList: *-helvetica-medium-r-*-*-*-120-*-*-*-iso8859-1",
-"*demoDialog*label1.fontList: *-helvetica-medium-r-*-*-*-140-*-*-*-iso8859-1",
-"*cmdText.fontList: *-courier-medium-r-*-*-*-120-*-*-*-iso8859-1",
-"*label0.fontList: *-helvetica-bold-r-*-*-*-140-*-*-*-iso8859-1",
-"XScreenSaver*doc.fontList: *-helvetica-medium-r-*-*-*-100-*-*-*-iso8859-1",
-"*foreground: #000000",
-"*background: #C0C0C0",
-"*XmTextField.foreground: #000000",
-"*XmTextField.background: #FFFFFF",
-"*list.foreground: #000000",
-"*list.background: #FFFFFF",
-"*ApplicationShell.title: XScreenSaver",
-"*warning.title: XScreenSaver",
-"*warning_popup.title: XScreenSaver",
-"*allowShellResize: True",
-"*autoUnmanage: False",
-"*menubar*file.labelString: File",
-"*menubar*file.mnemonic: F",
-"*file.blank.labelString: Blank Screen Now",
-"*file.blank.mnemonic: B",
-"*file.lock.labelString: Lock Screen Now",
-"*file.lock.mnemonic: L",
-"*file.kill.labelString: Kill Daemon",
-"*file.kill.mnemonic: K",
-"*file.restart.labelString: Restart Daemon",
-"*file.restart.mnemonic: R",
-"*file.exit.labelString: Exit",
-"*file.exit.mnemonic: E",
-"*menubar*edit.labelString: Edit",
-"*menubar*edit.mnemonic: E",
-"*edit.cut.labelString: Cut",
-"*edit.cut.mnemonic: u",
-"*edit.copy.labelString: Copy",
-"*edit.copy.mnemonic: C",
-"*edit.paste.labelString: Paste",
-"*edit.paste.mnemonic: P",
-"*menubar*help.labelString: Help",
-"*menubar*help.mnemonic: H",
-"*help.about.labelString: About...",
-"*help.about.mnemonic: A",
-"*help.docMenu.labelString: Documentation...",
-"*help.docMenu.mnemonic: D",
-"*demoTab.marginWidth: 10",
-"*optionsTab.marginWidth: 10",
-"*XmScrolledWindow.topOffset: 10",
-"*XmScrolledWindow.leftOffset: 10",
-"*demoTab.topOffset: 4",
-"*form1.bottomOffset: 10",
-"*form3.leftOffset: 10",
-"*form3.rightOffset: 10",
-"*frame.topOffset: 10",
-"*frame.bottomOffset: 10",
-"*enabled.topOffset: 10",
-"*visLabel.topOffset: 10",
-"*combo.topOffset: 10",
-"*form4.bottomOffset: 4",
-"*hr.bottomOffset: 4",
-"*XmComboBox.marginWidth: 0",
-"*XmComboBox.marginHeight: 0",
-"*demo.marginWidth: 30",
-"*demo.marginHeight: 4",
-"*man.marginWidth: 10",
-"*man.marginHeight: 4",
-"*down.leftOffset: 40",
-"*down.marginWidth: 4",
-"*down.marginHeight: 4",
-"*up.marginWidth: 4",
-"*up.marginHeight: 4",
-"*frame.traversalOn: False",
-"*list.automaticSelection: True",
-"*list.visibleItemCount: 20",
-"*doc.columns: 60",
-"*combo.columns: 11",
-"*demoTab.labelString: Graphics Demos",
-"*optionsTab.labelString: Screensaver Options",
-"*down.labelString: \\\\/ ",
-"*up.labelString: /\\\\ ",
-"*frameLabel.labelString: ",
-"*cmdLabel.labelString: Command Line:",
-"*cmdLabel.alignment: ALIGNMENT_BEGINNING",
-"*enabled.labelString: Enabled",
-"*visLabel.labelString: Visual:",
-"*visLabel.alignment: ALIGNMENT_END",
-"*visLabel.leftOffset: 20",
-"*demo.labelString: Demo",
-"*man.labelString: Documentation...",
-"*done.labelString: Quit",
-"*preferencesLabel.labelString: XScreenSaver Parameters",
-"*timeoutLabel.labelString: Saver Timeout",
-"*cycleLabel.labelString: Cycle Timeout",
-"*fadeSecondsLabel.labelString: Fade Duration",
-"*fadeTicksLabel.labelString: Fade Ticks",
-"*lockLabel.labelString: Lock Timeout",
-"*passwdLabel.labelString: Password Timeout",
-"*preferencesForm*XmTextField.columns: 8",
-"*verboseToggle.labelString: Verbose",
-"*cmapToggle.labelString: Install Colormap",
-"*fadeToggle.labelString: Fade Colormap",
-"*unfadeToggle.labelString: Unfade Colormap",
-"*lockToggle.labelString: Require Password",
-"*OK.marginWidth: 30",
-"*OK.marginHeight: 4",
-"*OK.leftOffset: 10",
-"*OK.bottomOffset: 10",
-"*Cancel.marginWidth: 30",
-"*Cancel.marginHeight: 4",
-"*Cancel.rightOffset: 10",
-"*Cancel.bottomOffset: 10",
diff --git a/driver/XScreenSaver_ad.h b/driver/XScreenSaver_ad.h
deleted file mode 100644
index 2d7b168..0000000
--- a/driver/XScreenSaver_ad.h
+++ /dev/null
@@ -1,417 +0,0 @@
-"#error Do not run app-defaults files through xrdb!",
-"#error That does not do what you might expect.",
-"#error Put this file in /usr/lib/X11/app-defaults/XScreenSaver instead.",
-"*mode: random",
-"*timeout: 0:10:00",
-"*cycle: 0:10:00",
-"*lockTimeout: 0:00:00",
-"*passwdTimeout: 0:00:30",
-"*dpmsEnabled: False",
-"*dpmsQuickoffEnabled: False",
-"*dpmsStandby: 2:00:00",
-"*dpmsSuspend: 2:00:00",
-"*dpmsOff: 4:00:00",
-"*grabDesktopImages: True",
-"*grabVideoFrames: False",
-"*chooseRandomImages: True",
-"*imageDirectory: /Library/Desktop Pictures/",
-"*nice: 10",
-"*memoryLimit: 0",
-"*lock: False",
-"*verbose: False",
-"*timestamp: True",
-"*fade: True",
-"*unfade: False",
-"*fadeSeconds: 0:00:03",
-"*fadeTicks: 20",
-"*splash: True",
-"*splashDuration: 0:00:05",
-"*visualID: default",
-"*captureStderr: True",
-"*ignoreUninstalledPrograms: False",
-"*authWarningSlack: 20",
-"*textMode: file",
-"*textLiteral: XScreenSaver",
-"*textFile: ",
-"*textProgram: fortune",
-"*textURL: https://en.wikipedia.org/w/index.php?title=Special:NewPages&feed=rss",
-"*overlayTextForeground: #FFFF00",
-"*overlayTextBackground: #000000",
-"*overlayStderr: True",
-"*font: *-medium-r-*-140-*-m-*",
-"*sgiSaverExtension: True",
-"*xidleExtension: True",
-"*procInterrupts: True",
-"*xinputExtensionDev: False",
-"GetViewPortIsFullOfLies: False",
-"*demoCommand: xscreensaver-demo",
-"*prefsCommand: xscreensaver-demo -prefs",
-"*helpURL: https://www.jwz.org/xscreensaver/man.html",
-"*loadURL: firefox '%s' || mozilla '%s' || netscape '%s'",
-"*manualCommand: xterm -sb -fg black -bg gray75 -T '%s manual' \
- -e /bin/sh -c 'man \"%s\" ; read foo'",
-"*dateFormat: %d-%b-%y (%a); %I:%M %p",
-"*installColormap: True",
-"*programs: \
- maze -root \\n\
- GL: superquadrics -root \\n\
- attraction -root \\n\
- blitspin -root \\n\
- greynetic -root \\n\
- helix -root \\n\
- hopalong -root \\n\
- imsmap -root \\n\
-- noseguy -root \\n\
-- pyro -root \\n\
- qix -root \\n\
-- rocks -root \\n\
- rorschach -root \\n\
- decayscreen -root \\n\
- flame -root \\n\
- halo -root \\n\
- slidescreen -root \\n\
- pedal -root \\n\
- bouboule -root \\n\
-- braid -root \\n\
- coral -root \\n\
- deco -root \\n\
- drift -root \\n\
-- fadeplot -root \\n\
- galaxy -root \\n\
- goop -root \\n\
- grav -root \\n\
- ifs -root \\n\
- GL: jigsaw -root \\n\
- julia -root \\n\
-- kaleidescope -root \\n\
- GL: moebius -root \\n\
- moire -root \\n\
- GL: morph3d -root \\n\
- mountain -root \\n\
- munch -root \\n\
- penrose -root \\n\
- GL: pipes -root \\n\
- rd-bomb -root \\n\
- GL: rubik -root \\n\
-- sierpinski -root \\n\
- slip -root \\n\
- GL: sproingies -root \\n\
- starfish -root \\n\
- strange -root \\n\
- swirl -root \\n\
- triangle -root \\n\
- xjack -root \\n\
- xlyap -root \\n\
- GL: atlantis -root \\n\
- bsod -root \\n\
- GL: bubble3d -root \\n\
- GL: cage -root \\n\
-- crystal -root \\n\
- cynosure -root \\n\
- discrete -root \\n\
- distort -root \\n\
- epicycle -root \\n\
- flow -root \\n\
- GL: glplanet -root \\n\
- interference -root \\n\
- kumppa -root \\n\
- GL: lament -root \\n\
- moire2 -root \\n\
- GL: sonar -root \\n\
- GL: stairs -root \\n\
- truchet -root \\n\
-- vidwhacker -root \\n\
- blaster -root \\n\
- bumps -root \\n\
- ccurve -root \\n\
- compass -root \\n\
- deluxe -root \\n\
-- demon -root \\n\
- GL: extrusion -root \\n\
-- loop -root \\n\
- penetrate -root \\n\
- petri -root \\n\
- phosphor -root \\n\
- GL: pulsar -root \\n\
- ripples -root \\n\
- shadebobs -root \\n\
- GL: sierpinski3d -root \\n\
- spotlight -root \\n\
- squiral -root \\n\
- wander -root \\n\
-- webcollage -root \\n\
- xflame -root \\n\
- xmatrix -root \\n\
- GL: gflux -root \\n\
-- nerverot -root \\n\
- xrayswarm -root \\n\
- xspirograph -root \\n\
- GL: circuit -root \\n\
- GL: dangerball -root \\n\
-- GL: dnalogo -root \\n\
- GL: engine -root \\n\
- GL: flipscreen3d -root \\n\
- GL: gltext -root \\n\
- GL: menger -root \\n\
- GL: molecule -root \\n\
- rotzoomer -root \\n\
- speedmine -root \\n\
- GL: starwars -root \\n\
- GL: stonerview -root \\n\
- vermiculate -root \\n\
- whirlwindwarp -root \\n\
- zoom -root \\n\
- anemone -root \\n\
- apollonian -root \\n\
- GL: boxed -root \\n\
- GL: cubenetic -root \\n\
- GL: endgame -root \\n\
- euler2d -root \\n\
- fluidballs -root \\n\
- GL: flurry -root \\n\
-- GL: glblur -root \\n\
- GL: glsnake -root \\n\
- halftone -root \\n\
- GL: juggler3d -root \\n\
- GL: lavalite -root \\n\
-- polyominoes -root \\n\
- GL: queens -root \\n\
-- GL: sballs -root \\n\
- GL: spheremonics -root \\n\
-- thornbird -root \\n\
- twang -root \\n\
-- GL: antspotlight -root \\n\
- apple2 -root \\n\
- GL: atunnel -root \\n\
- barcode -root \\n\
- GL: blinkbox -root \\n\
- GL: blocktube -root \\n\
- GL: bouncingcow -root \\n\
- cloudlife -root \\n\
- GL: cubestorm -root \\n\
- eruption -root \\n\
- GL: flipflop -root \\n\
- GL: flyingtoasters -root \\n\
- fontglide -root \\n\
- GL: gleidescope -root \\n\
- GL: glknots -root \\n\
- GL: glmatrix -root \\n\
-- GL: glslideshow -root \\n\
- GL: hypertorus -root \\n\
-- GL: jigglypuff -root \\n\
- metaballs -root \\n\
- GL: mirrorblob -root \\n\
- piecewise -root \\n\
- GL: polytopes -root \\n\
- pong -root \\n\
- popsquares -root \\n\
- GL: surfaces -root \\n\
- xanalogtv -root \\n\
- abstractile -root \\n\
- anemotaxis -root \\n\
-- GL: antinspect -root \\n\
- fireworkx -root \\n\
- fuzzyflakes -root \\n\
- interaggregate -root \\n\
- intermomentary -root \\n\
- memscroller -root \\n\
- GL: noof -root \\n\
- pacman -root \\n\
- GL: pinion -root \\n\
- GL: polyhedra -root \\n\
-- GL: providence -root \\n\
- substrate -root \\n\
- wormhole -root \\n\
-- GL: antmaze -root \\n\
- GL: boing -root \\n\
- boxfit -root \\n\
- GL: carousel -root \\n\
- celtic -root \\n\
- GL: crackberg -root \\n\
- GL: cube21 -root \\n\
- fiberlamp -root \\n\
- GL: fliptext -root \\n\
- GL: glhanoi -root \\n\
- GL: tangram -root \\n\
- GL: timetunnel -root \\n\
- GL: glschool -root \\n\
- GL: topblock -root \\n\
- GL: cubicgrid -root \\n\
- cwaves -root \\n\
- GL: gears -root \\n\
- GL: glcells -root \\n\
- GL: lockward -root \\n\
- m6502 -root \\n\
- GL: moebiusgears -root \\n\
- GL: voronoi -root \\n\
- GL: hypnowheel -root \\n\
- GL: klein -root \\n\
-- lcdscrub -root \\n\
- GL: photopile -root \\n\
- GL: skytentacles -root \\n\
- GL: rubikblocks -root \\n\
- GL: companioncube -root \\n\
- GL: hilbert -root \\n\
- GL: tronbit -root \\n\
- GL: geodesic -root \\n\
- hexadrop -root \\n\
- GL: kaleidocycle -root \\n\
- GL: quasicrystal -root \\n\
- GL: unknownpleasures -root \\n\
- binaryring -root \\n\
- GL: cityflow -root \\n\
- GL: geodesicgears -root \\n\
- GL: projectiveplane -root \\n\
- GL: romanboy -root \\n\
- tessellimage -root \\n\
- GL: winduprobot -root \\n\
- GL: splitflap -root \\n\
- GL: cubestack -root \\n\
- GL: cubetwist -root \\n\
- GL: discoball -root \\n\
- GL: dymaxionmap -root \\n\
- GL: energystream -root \\n\
- GL: hexstrut -root \\n\
- GL: hydrostat -root \\n\
- GL: raverhoop -root \\n\
- GL: splodesic -root \\n\
- GL: unicrud -root \\n\
- GL: esper -root \\n\
- GL: vigilance -root \\n\
- GL: crumbler -root \\n\
- filmleader -root \\n\
- glitchpeg -root \\n\
- GL: handsy -root \\n\
- GL: maze3d -root \\n\
- GL: peepers -root \\n\
- GL: razzledazzle -root \\n\
- vfeedback -root \\n",
-"XScreenSaver.pointerPollTime: 0:00:05",
-"XScreenSaver.pointerHysteresis: 10",
-"XScreenSaver.initialDelay: 0:00:00",
-"XScreenSaver.windowCreationTimeout: 0:00:30",
-"XScreenSaver.bourneShell: /bin/sh",
-"*Dialog.headingFont: -*-helvetica-bold-r-*-*-*-180-*-*-*-*-iso8859-1",
-"*Dialog.bodyFont: -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-1",
-"*Dialog.labelFont: -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-1",
-"*Dialog.unameFont: -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-1",
-"*Dialog.buttonFont: -*-helvetica-bold-r-*-*-*-140-*-*-*-*-iso8859-1",
-"*Dialog.dateFont: -*-helvetica-medium-r-*-*-*-80-*-*-*-*-iso8859-1",
-"*passwd.passwdFont: -*-courier-medium-r-*-*-*-140-*-*-*-iso8859-1",
-"*Dialog.foreground: #000000",
-"*Dialog.background: #E6E6E6",
-"*Dialog.Button.foreground: #000000",
-"*Dialog.Button.background: #F5F5F5",
-"*Dialog.text.foreground: #000000",
-"*Dialog.text.background: #FFFFFF",
-"*passwd.thermometer.foreground: #4464AC",
-"*passwd.thermometer.background: #FFFFFF",
-"*Dialog.topShadowColor: #FFFFFF",
-"*Dialog.bottomShadowColor: #CECECE",
-"*Dialog.logo.width: 210",
-"*Dialog.logo.height: 210",
-"*Dialog.internalBorderWidth: 24",
-"*Dialog.borderWidth: 1",
-"*Dialog.shadowThickness: 2",
-"*passwd.heading.label: XScreenSaver %s",
-"*passwd.body.label: This screen is locked.",
-"*passwd.unlock.label: OK",
-"*passwd.login.label: New Login",
-"*passwd.user.label: Username:",
-"*passwd.thermometer.width: 8",
-"*passwd.asterisks: True",
-"*passwd.uname: True",
-"*splash.heading.label: XScreenSaver %s",
-"*splash.body.label: Copyright \\251 1991-2018 by",
-"*splash.body2.label: Jamie Zawinski <jwz@jwz.org>",
-"*splash.demo.label: Settings",
-"*splash.help.label: Help",
-"*hacks.antinspect.name: AntInspect",
-"*hacks.antmaze.name: AntMaze",
-"*hacks.antspotlight.name: AntSpotlight",
-"*hacks.binaryring.name: BinaryRing",
-"*hacks.blinkbox.name: BlinkBox",
-"*hacks.blitspin.name: BlitSpin",
-"*hacks.blocktube.name: BlockTube",
-"*hacks.bouncingcow.name: BouncingCow",
-"*hacks.boxfit.name: BoxFit",
-"*hacks.bsod.name: BSOD",
-"*hacks.bubble3d.name: Bubble3D",
-"*hacks.ccurve.name: CCurve",
-"*hacks.cloudlife.name: CloudLife",
-"*hacks.companioncube.name: CompanionCube",
-"*hacks.cubestack.name: CubeStack",
-"*hacks.cubestorm.name: CubeStorm",
-"*hacks.cubetwist.name: CubeTwist",
-"*hacks.cubicgrid.name: CubicGrid",
-"*hacks.cwaves.name: CWaves",
-"*hacks.dangerball.name: DangerBall",
-"*hacks.decayscreen.name: DecayScreen",
-"*hacks.dnalogo.name: DNA Logo",
-"*hacks.dymaxionmap.name: DymaxionMap",
-"*hacks.energystream.name: EnergyStream",
-"*hacks.euler2d.name: Euler2D",
-"*hacks.fadeplot.name: FadePlot",
-"*hacks.filmleader.name: FilmLeader",
-"*hacks.flipflop.name: FlipFlop",
-"*hacks.flipscreen3d.name: FlipScreen3D",
-"*hacks.fliptext.name: FlipText",
-"*hacks.fluidballs.name: FluidBalls",
-"*hacks.flyingtoasters.name: FlyingToasters",
-"*hacks.fontglide.name: FontGlide",
-"*hacks.fuzzyflakes.name: FuzzyFlakes",
-"*hacks.geodesicgears.name: GeodesicGears",
-"*hacks.gflux.name: GFlux",
-"*hacks.gleidescope.name: Gleidescope",
-"*hacks.glforestfire.name: GLForestFire",
-"*hacks.glitchpeg.name: GlitchPEG",
-"*hacks.hyperball.name: HyperBall",
-"*hacks.hypercube.name: HyperCube",
-"*hacks.ifs.name: IFS",
-"*hacks.imsmap.name: IMSMap",
-"*hacks.jigglypuff.name: JigglyPuff",
-"*hacks.juggler3d.name: Juggler3D",
-"*hacks.lcdscrub.name: LCDscrub",
-"*hacks.lmorph.name: LMorph",
-"*hacks.m6502.name: m6502",
-"*hacks.maze3d.name: Maze3D",
-"*hacks.memscroller.name: MemScroller",
-"*hacks.metaballs.name: MetaBalls",
-"*hacks.mirrorblob.name: MirrorBlob",
-"*hacks.moebiusgears.name: MoebiusGears",
-"*hacks.morph3d.name: Morph3D",
-"*hacks.nerverot.name: NerveRot",
-"*hacks.noseguy.name: NoseGuy",
-"*hacks.popsquares.name: PopSquares",
-"*hacks.projectiveplane.name:ProjectivePlane",
-"*hacks.quasicrystal.name: QuasiCrystal",
-"*hacks.raverhoop.name: RaverHoop",
-"*hacks.razzledazzle.name: RazzleDazzle",
-"*hacks.rd-bomb.name: RDbomb",
-"*hacks.rdbomb.name: RDbomb",
-"*hacks.romanboy.name: RomanBoy",
-"*hacks.rotzoomer.name: RotZoomer",
-"*hacks.rubikblocks.name: RubikBlocks",
-"*hacks.sballs.name: SBalls",
-"*hacks.shadebobs.name: ShadeBobs",
-"*hacks.sierpinski3d.name: Sierpinski3D",
-"*hacks.skytentacles.name: SkyTentacles",
-"*hacks.slidescreen.name: SlideScreen",
-"*hacks.speedmine.name: SpeedMine",
-"*hacks.splitflap.name: SplitFlap",
-"*hacks.starwars.name: StarWars",
-"*hacks.stonerview.name: StonerView",
-"*hacks.t3d.name: T3D",
-"*hacks.testx11.name: TestX11",
-"*hacks.timetunnel.name: TimeTunnel",
-"*hacks.topblock.name: TopBlock",
-"*hacks.tronbit.name: TronBit",
-"*hacks.unknownpleasures.name:UnknownPleasures",
-"*hacks.vfeedback.name: VFeedback",
-"*hacks.vidwhacker.name: VidWhacker",
-"*hacks.webcollage.name: WebCollage",
-"*hacks.whirlwindwarp.name: WhirlWindWarp",
-"*hacks.winduprobot.name: WindupRobot",
-"*hacks.xanalogtv.name: XAnalogTV",
-"*hacks.xrayswarm.name: XRaySwarm",
-"*hacks.documentation.isInstalled: True",
diff --git a/driver/demo-Gtk.c b/driver/demo-Gtk.c
index ef00d82..be4a238 100644
--- a/driver/demo-Gtk.c
+++ b/driver/demo-Gtk.c
@@ -1,5 +1,5 @@
/* demo-Gtk.c --- implements the interactive demo-mode and options dialogs.
- * xscreensaver, Copyright (c) 1993-2018 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1993-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -250,7 +250,8 @@ static state *global_state_kludge;
Atom XA_VROOT;
Atom XA_SCREENSAVER, XA_SCREENSAVER_RESPONSE, XA_SCREENSAVER_VERSION;
Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_SELECT, XA_DEMO;
-Atom XA_ACTIVATE, XA_BLANK, XA_LOCK, XA_RESTART, XA_EXIT;
+Atom XA_ACTIVATE, XA_SUSPEND, XA_BLANK, XA_LOCK, XA_RESTART, XA_EXIT;
+Atom XA_NEXT, XA_PREV;
static void populate_demo_window (state *, int list_elt);
@@ -5069,8 +5070,11 @@ main (int argc, char **argv)
XA_SELECT = XInternAtom (dpy, "SELECT", False);
XA_DEMO = XInternAtom (dpy, "DEMO", False);
XA_ACTIVATE = XInternAtom (dpy, "ACTIVATE", False);
+ XA_SUSPEND = XInternAtom (dpy, "SUSPEND", False);
XA_BLANK = XInternAtom (dpy, "BLANK", False);
XA_LOCK = XInternAtom (dpy, "LOCK", False);
+ XA_NEXT = XInternAtom (dpy, "NEXT", False);
+ XA_PREV = XInternAtom (dpy, "PREV", False);
XA_EXIT = XInternAtom (dpy, "EXIT", False);
XA_RESTART = XInternAtom (dpy, "RESTART", False);
diff --git a/driver/demo-Xm.c b/driver/demo-Xm.c
index 149e7c5..3497641 100644
--- a/driver/demo-Xm.c
+++ b/driver/demo-Xm.c
@@ -113,7 +113,7 @@ static char *short_version = 0;
Atom XA_VROOT;
Atom XA_SCREENSAVER, XA_SCREENSAVER_RESPONSE, XA_SCREENSAVER_VERSION;
Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_SELECT, XA_DEMO;
-Atom XA_ACTIVATE, XA_BLANK, XA_LOCK, XA_RESTART, XA_EXIT;
+Atom XA_ACTIVATE, XA_SUSPEND, XA_BLANK, XA_LOCK, XA_RESTART, XA_EXIT;
static void populate_demo_window (Widget toplevel,
@@ -1800,6 +1800,7 @@ main (int argc, char **argv)
XA_SELECT = XInternAtom (dpy, "SELECT", False);
XA_DEMO = XInternAtom (dpy, "DEMO", False);
XA_ACTIVATE = XInternAtom (dpy, "ACTIVATE", False);
+ XA_SUSPEND = XInternAtom (dpy, "SUSPEND", False);
XA_BLANK = XInternAtom (dpy, "BLANK", False);
XA_LOCK = XInternAtom (dpy, "LOCK", False);
XA_EXIT = XInternAtom (dpy, "EXIT", False);
diff --git a/driver/lock.c b/driver/lock.c
index 10b879e..7696f30 100644
--- a/driver/lock.c
+++ b/driver/lock.c
@@ -872,6 +872,7 @@ draw_passwd_window (saver_info *si)
memset (buf, 0, sizeof(buf));
strftime (buf, sizeof(buf)-1, pw->date_label, tm);
+ XSetForeground (si->dpy, gc1, pw->foreground);
XSetFont (si->dpy, gc1, pw->date_font->fid);
y1 += pw->shadow_width;
y1 += (spacing + tb_height);
@@ -1148,7 +1149,8 @@ update_passwd_window (saver_info *si, const char *printed_passwd, float ratio)
y = (pw->thermo_field_height - 2) * (1.0 - pw->ratio);
if (y > 0)
{
- XFillRectangle (si->dpy, si->passwd_dialog, gc2,
+ XSetForeground (si->dpy, gc1, pw->thermo_background);
+ XFillRectangle (si->dpy, si->passwd_dialog, gc1,
pw->thermo_field_x + 1,
pw->thermo_field_y + 1,
pw->thermo_width-2,
diff --git a/driver/remote.c b/driver/remote.c
index 775036a..83254e0 100644
--- a/driver/remote.c
+++ b/driver/remote.c
@@ -1,4 +1,4 @@
-/* xscreensaver-command, Copyright (c) 1991-2009 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver-command, Copyright (c) 1991-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -43,6 +43,7 @@ extern char *progname;
extern Atom XA_SCREENSAVER, XA_SCREENSAVER_VERSION, XA_SCREENSAVER_RESPONSE;
extern Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_EXIT;
extern Atom XA_VROOT, XA_SELECT, XA_DEMO, XA_BLANK, XA_LOCK;
+extern Atom XA_ACTIVATE, XA_SUSPEND, XA_NEXT, XA_PREV, XA_EXIT;
static XErrorHandler old_handler = 0;
@@ -490,6 +491,109 @@ xscreensaver_command_response (Display *dpy, Window window,
}
+/* Wait until the window has been mapped, blanking the screen.
+ Catches errors, times out after a few seconds.
+ */
+static int
+xscreensaver_command_wait_for_blank (Display *dpy, Window window,
+ Bool verbose_p, char **error_ret)
+{
+ time_t start = time((time_t*)0);
+ int max = 10;
+ char err[2048];
+ Status status = -1;
+
+ while (1)
+ {
+ XWindowAttributes xgwa;
+ xgwa.map_state = IsUnmapped;
+
+ if (!window)
+ got_badwindow = True;
+ else
+ {
+ XSync (dpy, False);
+ if (old_handler) abort();
+ got_badwindow = False;
+ old_handler = XSetErrorHandler (BadWindow_ehandler);
+ status = XGetWindowAttributes (dpy, window, &xgwa);
+ XSync (dpy, False);
+ XSetErrorHandler (old_handler);
+ old_handler = 0;
+ }
+
+ if (got_badwindow)
+ {
+ /* If we got a BadWindow, it might be that in the course of
+ activating, xscreensaver had to destroy and re-create the
+ window to get one with the proper Visual. So wait for a
+ new window to come into existence.
+ */
+ if (window && verbose_p > 1)
+ fprintf (stderr,
+ "%s: BadWindow 0x%08x waiting for screen to blank\n",
+ progname, (unsigned int) window);
+ window = find_screensaver_window (dpy, 0);
+ if (window && verbose_p > 1)
+ fprintf (stderr, "%s: new window is 0x%08x.\n",
+ progname, (unsigned int) window);
+ got_badwindow = False;
+ }
+ else if (status == 0)
+ {
+ sprintf (err, "error on 0x%08x waiting for screen to blank",
+ (unsigned int) window);
+ if (error_ret)
+ *error_ret = strdup (err);
+ else
+ fprintf (stderr, "%s: %s\n", progname, err);
+ return -1;
+ }
+ else if (xgwa.map_state == IsViewable)
+ {
+ if (verbose_p)
+ fprintf (stderr, "%s: window 0x%08x mapped.\n",
+ progname, (unsigned int) window);
+ return 0;
+ }
+ else
+ {
+ time_t now = time((time_t*)0);
+
+ if (now >= start + max)
+ {
+ sprintf (err, "Timed out waiting for screen to blank on 0x%08x",
+ (unsigned int) window);
+ if (error_ret)
+ *error_ret = strdup (err);
+ else
+ fprintf (stderr, "%s: %s\n", progname, err);
+ return -1;
+ }
+ else if (verbose_p && now > start+1)
+ {
+ fprintf (stderr, "%s: waiting for window 0x%08x to map\n",
+ progname, (unsigned int) window);
+ }
+ }
+
+# if defined(HAVE_SELECT)
+ {
+ struct timeval tv;
+ tv.tv_sec = 0;
+ tv.tv_usec = 1000000L / 10;
+ select (0, 0, 0, 0, &tv);
+ }
+# else
+ sleep (1);
+# endif
+ }
+
+ return 0;
+}
+
+
+
int
xscreensaver_command (Display *dpy, Atom command, long arg, Bool verbose_p,
char **error_ret)
@@ -501,6 +605,18 @@ xscreensaver_command (Display *dpy, Atom command, long arg, Bool verbose_p,
(command == XA_EXIT),
error_ret);
+ /* If this command should result in the screen being blank, wait until
+ the xscreensaver window is mapped before returning. */
+ if (status == 0 &&
+ (command == XA_ACTIVATE ||
+ command == XA_SUSPEND ||
+ command == XA_LOCK ||
+ command == XA_NEXT ||
+ command == XA_PREV ||
+ command == XA_SELECT))
+ status = xscreensaver_command_wait_for_blank (dpy, w, verbose_p,
+ error_ret);
+
fflush (stdout);
fflush (stderr);
return (status < 0 ? status : 0);
diff --git a/driver/screens.c b/driver/screens.c
index 1a2f41d..f319c96 100644
--- a/driver/screens.c
+++ b/driver/screens.c
@@ -576,7 +576,7 @@ randr_versus_xinerama_fight (Display *dpy, monitor **randr_monitors,
{
*errP = append (*errP,
"WARNING: RANDR reports 1 screen but Xinerama\n"
- "\t\treports multiple. Believing Xinerama.");
+ " reports multiple. Believing Xinerama.");
free_monitors (randr_monitors);
return xinerama_monitors;
}
@@ -584,7 +584,7 @@ randr_versus_xinerama_fight (Display *dpy, monitor **randr_monitors,
{
*errP = append (*errP,
"WARNING: RANDR and Xinerama report different\n"
- "\t\tscreen layouts! Believing RANDR.");
+ " screen layouts! Believing RANDR.");
free_monitors (xinerama_monitors);
return randr_monitors;
}
diff --git a/driver/splash.c b/driver/splash.c
index a4f1761..b971ade 100644
--- a/driver/splash.c
+++ b/driver/splash.c
@@ -881,7 +881,7 @@ do_prefs (saver_screen_info *ssi)
saver_preferences *p = &si->prefs;
const char *cmd = p->prefs_command;
- if (command && *command)
+ if (cmd && *cmd)
fork_and_exec (ssi, cmd);
else
fprintf (stderr, "%s: no preferences command has been specified.\n",
diff --git a/driver/subprocs.c b/driver/subprocs.c
index 4f327e9..d500f70 100644
--- a/driver/subprocs.c
+++ b/driver/subprocs.c
@@ -1,5 +1,5 @@
/* subprocs.c --- choosing, spawning, and killing screenhacks.
- * xscreensaver, Copyright (c) 1991-2017 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1991-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -439,7 +439,7 @@ unblock_sigchld (void)
block_sigchld_handler--;
}
-static int
+int
kill_job (saver_info *si, pid_t pid, int signal)
{
saver_preferences *p = &si->prefs;
@@ -738,12 +738,18 @@ describe_dead_child (saver_info *si, pid_t kid, int wait_status)
/* Clear out the pid so that screenhack_running_p() knows it's dead.
*/
if (!job || job->status == job_dead)
+ {
for (i = 0; i < si->nscreens; i++)
{
saver_screen_info *ssi = &si->screens[i];
if (kid == ssi->pid)
ssi->pid = 0;
}
+# ifdef HAVE_LIBSYSTEMD
+ if (kid == si->systemd_pid)
+ si->systemd_pid = 0;
+# endif
+ }
}
#else /* VMS */
@@ -872,7 +878,12 @@ print_path_error (const char *program)
pid_t
fork_and_exec (saver_screen_info *ssi, const char *command)
{
- saver_info *si = ssi->global;
+ return fork_and_exec_1 (ssi->global, ssi, command);
+}
+
+pid_t
+fork_and_exec_1 (saver_info *si, saver_screen_info *ssi, const char *command)
+{
saver_preferences *p = &si->prefs;
pid_t forked;
@@ -889,11 +900,12 @@ fork_and_exec (saver_screen_info *ssi, const char *command)
case 0:
close (ConnectionNumber (si->dpy)); /* close display fd */
limit_subproc_memory (p->inferior_memory_limit, p->verbose_p);
- hack_subproc_environment (ssi->screen, ssi->screensaver_window);
+ if (ssi)
+ hack_subproc_environment (ssi->screen, ssi->screensaver_window);
if (p->verbose_p)
fprintf (stderr, "%s: %d: spawning \"%s\" in pid %lu.\n",
- blurb(), ssi->number, command,
+ blurb(), (ssi ? ssi->number : 0), command,
(unsigned long) getpid ());
exec_command (p->shell, command, p->nice_inferior);
@@ -908,7 +920,7 @@ fork_and_exec (saver_screen_info *ssi, const char *command)
break;
default: /* parent */
- (void) make_job (forked, ssi->number, command);
+ (void) make_job (forked, (ssi ? ssi->number : 0), command);
break;
}
diff --git a/driver/types.h b/driver/types.h
index f1630b0..35992ae 100644
--- a/driver/types.h
+++ b/driver/types.h
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1993-2014 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1993-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -344,6 +344,9 @@ struct saver_info {
XtIntervalId stderr_popup_timer;
+# ifdef HAVE_LIBSYSTEMD
+ pid_t systemd_pid;
+# endif
};
/* This structure holds all the data that applies to the screen-specific parts
diff --git a/driver/windows.c b/driver/windows.c
index 9b2bf84..b7bea52 100644
--- a/driver/windows.c
+++ b/driver/windows.c
@@ -1,5 +1,5 @@
/* windows.c --- turning the screen black; dealing with visuals, virtual roots.
- * xscreensaver, Copyright (c) 1991-2014 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1991-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -752,6 +752,16 @@ restore_real_vroot_handler (int sig)
if (restore_real_vroot (si))
fprintf (real_stderr, "\n%s: %s intercepted, vroot restored.\n",
blurb(), signal_name(sig));
+# ifdef HAVE_LIBSYSTEMD
+ if (si->systemd_pid) /* Kill background xscreensaver-systemd process */
+ {
+ /* We're exiting, so there's no need to do a full kill_job() here,
+ which will waitpid(). */
+ /* kill_job (si, si->systemd_pid, SIGTERM); */
+ kill (si->systemd_pid, SIGTERM);
+ si->systemd_pid = 0;
+ }
+# endif
kill (getpid (), sig);
}
@@ -872,6 +882,14 @@ saver_exit (saver_info *si, int status, const char *dump_core_reason)
if (p->verbose_p && vrs)
fprintf (real_stderr, "%s: old vroot restored.\n", blurb());
+# ifdef HAVE_LIBSYSTEMD
+ if (si->systemd_pid) /* Kill background xscreensaver-systemd process */
+ {
+ kill_job (si, si->systemd_pid, SIGTERM);
+ si->systemd_pid = 0;
+ }
+# endif
+
fflush(real_stdout);
#ifdef VMS /* on VMS, 1 is the "normal" exit code instead of 0. */
diff --git a/driver/xscreensaver-command.c b/driver/xscreensaver-command.c
index f4a855d..4a4f0b4 100644
--- a/driver/xscreensaver-command.c
+++ b/driver/xscreensaver-command.c
@@ -1,4 +1,4 @@
-/* xscreensaver-command, Copyright (c) 1991-2013 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver-command, Copyright (c) 1991-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -51,8 +51,8 @@ char *progname;
Atom XA_VROOT;
Atom XA_SCREENSAVER, XA_SCREENSAVER_VERSION, XA_SCREENSAVER_RESPONSE;
Atom XA_SCREENSAVER_ID, XA_SCREENSAVER_STATUS, XA_SELECT, XA_DEMO, XA_EXIT;
-Atom XA_BLANK, XA_LOCK;
-static Atom XA_ACTIVATE, XA_DEACTIVATE, XA_CYCLE, XA_NEXT, XA_PREV;
+Atom XA_BLANK, XA_LOCK, XA_ACTIVATE, XA_SUSPEND, XA_NEXT, XA_PREV;
+static Atom XA_DEACTIVATE, XA_CYCLE;
static Atom XA_RESTART, XA_PREFS, XA_THROTTLE, XA_UNTHROTTLE;
static char *screensaver_version;
@@ -117,6 +117,11 @@ usage: %s -<option>\n\
well, even if locking is not the default. If the saver is\n\
already active, this causes it to be locked as well.\n\
\n\
+ -suspend Like -activate, but ignores the lock-timeout, if any, and\n\
+ immediately powers off the screen without fading out.\n\
+ This is intended to be run just after your laptop's lid\n\
+ is closed, and just before the CPU halts.\n\
+\n\
-version Prints the version of xscreensaver that is currently running\n\
on the display -- that is, the actual version number of the\n\
running xscreensaver background process, rather than the\n\
@@ -187,6 +192,7 @@ main (int argc, char **argv)
else if (cmd) USAGE();
else if (!strncmp (s, "-activate", L)) cmd = &XA_ACTIVATE;
else if (!strncmp (s, "-deactivate", L)) cmd = &XA_DEACTIVATE;
+ else if (!strncmp (s, "-suspend", L)) cmd = &XA_SUSPEND;
else if (!strncmp (s, "-cycle", L)) cmd = &XA_CYCLE;
else if (!strncmp (s, "-next", L)) cmd = &XA_NEXT;
else if (!strncmp (s, "-prev", L)) cmd = &XA_PREV;
@@ -300,6 +306,7 @@ main (int argc, char **argv)
XA_SCREENSAVER_RESPONSE = XInternAtom (dpy, "_SCREENSAVER_RESPONSE", False);
XA_ACTIVATE = XInternAtom (dpy, "ACTIVATE", False);
XA_DEACTIVATE = XInternAtom (dpy, "DEACTIVATE", False);
+ XA_SUSPEND = XInternAtom (dpy, "SUSPEND", False);
XA_RESTART = XInternAtom (dpy, "RESTART", False);
XA_CYCLE = XInternAtom (dpy, "CYCLE", False);
XA_NEXT = XInternAtom (dpy, "NEXT", False);
@@ -321,7 +328,7 @@ main (int argc, char **argv)
exit (i);
}
- if (*cmd == XA_ACTIVATE || *cmd == XA_LOCK ||
+ if (*cmd == XA_ACTIVATE || *cmd == XA_LOCK || *cmd == XA_SUSPEND ||
*cmd == XA_NEXT || *cmd == XA_PREV || *cmd == XA_SELECT)
/* People never guess that KeyRelease deactivates the screen saver too,
so if we're issuing an activation command, wait a second.
diff --git a/driver/xscreensaver-command.man b/driver/xscreensaver-command.man
index 040a183..5837e5d 100644
--- a/driver/xscreensaver-command.man
+++ b/driver/xscreensaver-command.man
@@ -11,7 +11,7 @@
.if n .sp 1
.if t .sp .5
..
-.TH XScreenSaver 1 "09-Nov-2013 (5.23)" "X Version 11"
+.TH XScreenSaver 1 "03-Jun-2019 (5.42)" "X Version 11"
.SH NAME
xscreensaver-command - control a running xscreensaver process
.SH SYNOPSIS
@@ -29,6 +29,7 @@ xscreensaver-command - control a running xscreensaver process
\-exit | \
\-restart | \
\-lock | \
+\-suspend | \
\-version | \
\-time | \
\-watch]
@@ -137,6 +138,12 @@ running as you. See
.BR xscreensaver (1)
for details.
.TP 8
+.B \-suspend
+Like \fI\-activate\fP, but ignores \fIlockTimeout\fP and immediately
+powers off the screen without fading out. This is intended to be run
+just after your laptop's lid is closed, and just before the CPU halts,
+to lock things down quickly.
+.TP 8
.B \-version
Prints the version of xscreensaver that is currently running on the display:
that is, the actual version number of the running xscreensaver background
@@ -249,7 +256,7 @@ and related tools can always be found at https://www.jwz.org/xscreensaver/
.BR xscreensaver\-demo (1),
.BR xset (1)
.SH COPYRIGHT
-Copyright \(co 1992-2013 by Jamie Zawinski.
+Copyright \(co 1992-2019 by Jamie Zawinski.
Permission to use, copy, modify, distribute, and sell this software
and its documentation for any purpose is hereby granted without fee,
provided that the above copyright notice appear in all copies and that
diff --git a/driver/xscreensaver-systemd.c b/driver/xscreensaver-systemd.c
new file mode 100644
index 0000000..a46ed4d
--- /dev/null
+++ b/driver/xscreensaver-systemd.c
@@ -0,0 +1,232 @@
+/* xscreensaver-systemd, Copyright (c) 2019 Martin Lucina <martin@lucina.net>
+ *
+ * ISC License
+ *
+ * Permission to use, copy, modify, and/or distribute this software
+ * for any purpose with or without fee is hereby granted, provided
+ * that the above copyright notice and this permission notice appear
+ * in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+ * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+ * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * This is a small utility providing systemd integration for XScreenSaver.
+ *
+ * When run from ~/.xsession or equivalent, this will:
+ *
+ * - Lock the screen before the system goes to sleep (using
+ * xscreensaver-command -suspend).
+ *
+ * - Ensure the XScreenSaver password dialog is shown after the system
+ * is resumed (using xscreensaver-command -deactivate).
+ *
+ * This is implemented using the recommended way to do these things
+ * nowadays, namely inhibitor locks. sd-bus is used for DBUS communication,
+ * so the only dependency is libsystemd (which you already have if you
+ * want this).
+ *
+ * https://github.com/mato/xscreensaver-systemd
+ */
+
+#include <assert.h>
+#include <err.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <systemd/sd-bus.h>
+
+struct handler_ctx {
+ sd_bus *bus;
+ sd_bus_message *lock;
+};
+static struct handler_ctx global_ctx = { NULL, NULL };
+
+static int handler(sd_bus_message *m, void *arg,
+ sd_bus_error *ret_error)
+{
+ struct handler_ctx *ctx = arg;
+ int before_sleep;
+ int rc;
+ sd_bus_error error = SD_BUS_ERROR_NULL;
+ sd_bus_message *reply = NULL;
+ int fd;
+
+ rc = sd_bus_message_read(m, "b", &before_sleep);
+ if (rc < 0) {
+ warnx("Failed to read message: %s", strerror(-rc));
+ return 0;
+ }
+
+ /* Use the scheme described at
+ * https://www.freedesktop.org/wiki/Software/systemd/inhibit/
+ * under "Taking Delay Locks".
+ */
+ if (before_sleep) {
+ rc = system("xscreensaver-command -suspend");
+ if (rc == -1) {
+ warnx("Failed to run xscreensaver-command");
+ }
+ else if (WEXITSTATUS(rc) != 0) {
+ warnx("xscreensaver-command failed with %d", WEXITSTATUS(rc));
+ }
+
+ if (ctx->lock) {
+ /*
+ * This will release the lock, since we hold the only ref to the
+ * message, and sd_bus_message_unref() will close the underlying
+ * fd.
+ */
+ sd_bus_message_unref(ctx->lock);
+ ctx->lock = NULL;
+ }
+ else {
+ warnx("Warning: ctx->lock is NULL, this should not happen?");
+ }
+ }
+ else {
+ rc = system("xscreensaver-command -deactivate");
+ if (rc == -1) {
+ warnx("Failed to run xscreensaver-command");
+ }
+ else if (WEXITSTATUS(rc) != 0) {
+ warnx("xscreensaver-command exited with %d", WEXITSTATUS(rc));
+ }
+
+ rc = sd_bus_call_method(ctx->bus,
+ "org.freedesktop.login1",
+ "/org/freedesktop/login1",
+ "org.freedesktop.login1.Manager",
+ "Inhibit",
+ &error,
+ &reply,
+ "ssss",
+ "sleep",
+ "xscreensaver",
+ "lock screen on suspend",
+ "delay");
+ if (rc < 0) {
+ warnx("Failed to call Inhibit(): %s", error.message);
+ goto out;
+ }
+ /*
+ * Verify that the reply actually contains a lock fd.
+ */
+ rc = sd_bus_message_read(reply, "h", &fd);
+ if (rc < 0) {
+ warnx("Failed to read message: %s", strerror(-rc));
+ goto out;
+ }
+ assert(fd >= 0);
+ ctx->lock = reply;
+
+out:
+ sd_bus_error_free(&error);
+ }
+
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ sd_bus *bus = NULL, *user_bus = NULL;
+ sd_bus_slot *slot = NULL;
+ struct handler_ctx *ctx = &global_ctx;
+ sd_bus_error error = SD_BUS_ERROR_NULL;
+ sd_bus_message *reply = NULL;
+ int rc;
+ int fd;
+ const char *match =
+ "type='signal',interface='org.freedesktop.login1.Manager'"
+ ",member='PrepareForSleep'";
+
+ rc = sd_bus_open_user(&user_bus);
+ if (rc < 0) {
+ warnx("Failed to connect to user bus: %s", strerror(-rc));
+ goto out;
+ }
+ rc = sd_bus_request_name(user_bus, "org.jwz.XScreenSaver", 0);
+ if (rc < 0) {
+ warnx("Failed to acquire well-known name: %s", strerror(-rc));
+ warnx("Is another copy of xscreensaver-systemd running?");
+ goto out;
+ }
+
+ rc = sd_bus_open_system(&bus);
+ if (rc < 0) {
+ warnx("Failed to connect to system bus: %s", strerror(-rc));
+ goto out;
+ }
+ ctx->bus = bus;
+
+ rc = sd_bus_call_method(bus,
+ "org.freedesktop.login1",
+ "/org/freedesktop/login1",
+ "org.freedesktop.login1.Manager",
+ "Inhibit",
+ &error,
+ &reply,
+ "ssss",
+ "sleep",
+ "xscreensaver",
+ "lock screen on suspend",
+ "delay");
+ if (rc < 0) {
+ warnx("Failed to call Inhibit(): %s", error.message);
+ goto out;
+ }
+ /*
+ * Verify that the reply actually contains a lock fd.
+ */
+ rc = sd_bus_message_read(reply, "h", &fd);
+ if (rc < 0) {
+ warnx("Failed to read message: %s", strerror(-rc));
+ goto out;
+ }
+ assert(fd >= 0);
+ ctx->lock = reply;
+
+ rc = sd_bus_add_match(bus, &slot, match, handler, &global_ctx);
+ if (rc < 0) {
+ warnx("Failed to add match: %s", strerror(-rc));
+ goto out;
+ }
+
+ for (;;) {
+ rc = sd_bus_process(bus, NULL);
+ if (rc < 0) {
+ warnx("Failed to process bus: %s", strerror(-rc));
+ goto out;
+ }
+ if (rc > 0)
+ /* we processed a request, try to process another one, right-away */
+ continue;
+
+ /* Wait for the next request to process */
+ rc = sd_bus_wait(bus, (uint64_t) -1);
+ if (rc < 0) {
+ warnx("Failed to wait on bus: %s", strerror(-rc));
+ goto out;
+ }
+ }
+
+out:
+ if (reply)
+ sd_bus_message_unref(reply);
+ if (slot)
+ sd_bus_slot_unref(slot);
+ if (bus)
+ sd_bus_flush_close_unref(bus);
+ if (user_bus)
+ sd_bus_flush_close_unref(user_bus);
+ sd_bus_error_free(&error);
+
+ return EXIT_FAILURE;
+}
diff --git a/driver/xscreensaver-systemd.man b/driver/xscreensaver-systemd.man
new file mode 100644
index 0000000..082cac7
--- /dev/null
+++ b/driver/xscreensaver-systemd.man
@@ -0,0 +1,49 @@
+.TH XScreenSaver 1 "4-Jun-2019 (5.43)" "X Version 11"
+.SH NAME
+xscreensaver-systemd - lock the screen when the machine suspends.
+.SH SYNOPSIS
+.B xscreensaver-systemd
+.SH DESCRIPTION
+The \fIxscreensaver\-systemd\fP program is a helper program to
+integrate xscreensaver with
+.BR systemd (1).
+When run from \fI~/.xsession\fP or equivalent, this will:
+.TP 3
+\fB1:
+Lock the screen before the system goes to sleep
+(using \fIxscreensaver-command -suspend\fP).
+.TP 3
+\fB2:
+Ensure the XScreenSaver password dialog is shown after the system
+is resumed (using \fIxscreensaver-command -deactivate\fP).
+.RS 0
+
+This is implemented using inhibitor locks;
+.BR sd-bus (3)
+is used for DBUS communication.
+.SH BUGS
+Uses libsystemd.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1),
+.BR xscreensaver\-demo (1),
+.BR xscreensaver\-command (1),
+.BR systemd (1),
+.BR sd-bus (3)
+.SH COPYRIGHT
+Copyright \(co 2019 by Martin Lucina.
+Permission to use, copy, modify, and/or distribute this software
+for any purpose with or without fee is hereby granted, provided
+that the above copyright notice and this permission notice appear
+in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.SH AUTHOR
+Martin Lucina <martin@lucina.net>, 4-Jun-2019
diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c
index abcb07f..2add3b8 100644
--- a/driver/xscreensaver.c
+++ b/driver/xscreensaver.c
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1991-2018 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1991-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -241,7 +241,7 @@ XrmDatabase db = 0;
static Atom XA_SCREENSAVER_RESPONSE;
-static Atom XA_ACTIVATE, XA_DEACTIVATE, XA_CYCLE, XA_NEXT, XA_PREV;
+static Atom XA_ACTIVATE, XA_DEACTIVATE, XA_SUSPEND, XA_CYCLE, XA_NEXT, XA_PREV;
static Atom XA_RESTART, XA_SELECT;
static Atom XA_THROTTLE, XA_UNTHROTTLE;
Atom XA_DEMO, XA_PREFS, XA_EXIT, XA_LOCK, XA_BLANK;
@@ -681,6 +681,7 @@ connect_to_server (saver_info *si, int *argc, char **argv)
XA_NET_WM_USER_TIME = XInternAtom (si->dpy, "_NET_WM_USER_TIME", False);
XA_ACTIVATE = XInternAtom (si->dpy, "ACTIVATE", False);
XA_DEACTIVATE = XInternAtom (si->dpy, "DEACTIVATE", False);
+ XA_SUSPEND = XInternAtom (si->dpy, "SUSPEND", False);
XA_RESTART = XInternAtom (si->dpy, "RESTART", False);
XA_CYCLE = XInternAtom (si->dpy, "CYCLE", False);
XA_NEXT = XInternAtom (si->dpy, "NEXT", False);
@@ -1206,7 +1207,13 @@ main_loop (saver_info *si)
maybe_reload_init_file (si);
- if (p->mode == DONT_BLANK)
+ /* Treat DONT_BLANK as BLANK_ONLY in emergency-lock when locking
+ is enabled. */
+
+ if (p->mode == DONT_BLANK &&
+ (!si->emergency_lock_p ||
+ !p->lock_p ||
+ si->locking_disabled_p))
{
if (p->verbose_p)
fprintf (stderr, "%s: idle with blanking disabled at %s.\n",
@@ -1332,6 +1339,9 @@ main_loop (saver_info *si)
if (si->fading_possible_p && p->fade_p)
lock_timeout += p->fade_seconds / 1000;
+ if (si->emergency_lock_p)
+ lock_timeout = 0;
+
if (si->emergency_lock_p && p->lock_p && lock_timeout)
{
int secs = p->lock_timeout / 1000;
@@ -1450,6 +1460,11 @@ main_loop (saver_info *si)
si->lock_id = 0;
}
+# ifdef HAVE_LIBSYSTEMD
+ /* This might be a good spot to re-launch si->systemd_pid
+ if it has died unexpectedly. Which shouldn't happen. */
+# endif
+
/* Since we're unblanked now, break race conditions and make
sure we stay that way (see comment in timers.c.) */
if (! si->de_race_id)
@@ -1575,6 +1590,10 @@ main (int argc, char **argv)
initialize_stderr (si);
handle_signals (si);
+# ifdef HAVE_LIBSYSTEMD /* Launch it in the background */
+ si->systemd_pid = fork_and_exec_1 (si, 0, "xscreensaver-systemd");
+# endif
+
make_splash_dialog (si);
main_loop (si); /* doesn't return */
@@ -1831,6 +1850,11 @@ handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p)
}
else if (type == XA_DEACTIVATE)
{
+
+ /* Regardless of whether the screen saver is active, a DEACTIVATE
+ message should cause the monitor to become powered on. */
+ monitor_power_on (si, True);
+
# if 0
/* When -deactivate is received while locked, pop up the dialog box
instead of just ignoring it. Some people depend on this behavior
@@ -1873,6 +1897,34 @@ handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p)
reset_timers (si);
}
}
+ else if (type == XA_SUSPEND)
+ {
+ clientmessage_response(si, window, False,
+ "SUSPEND ClientMessage received.",
+ "suspending.");
+ si->selection_mode = 0;
+ si->demoing_p = False;
+ si->emergency_lock_p = True;
+ si->throttled_p = True;
+
+ /* When suspending, immediately lock, if locking enabled. */
+# ifndef NO_LOCKING
+ if (p->lock_p && !si->locked_p && !si->locking_disabled_p)
+ {
+ if (p->verbose_p)
+ fprintf (stderr, "%s: locking.\n", blurb());
+ set_locked_p (si, True);
+ }
+# endif
+
+ /* When suspending, immediately power off the display. */
+ monitor_power_on (si, False);
+
+ if (until_idle_p)
+ return True; /* Blank now */
+ else
+ return False; /* Do not unblank now */
+ }
else if (type == XA_CYCLE)
{
if (! until_idle_p)
@@ -2354,6 +2406,12 @@ analyze_display (saver_info *si)
fprintf (stderr, "%s\n", buf);
}
+# ifdef HAVE_LIBSYSTEMD
+ fprintf (stderr, "%s: libsystemd\n", blurb());
+# else
+ fprintf (stderr, "%s: libsystemd (disabled at compile time)\n", blurb());
+# endif
+
for (i = 0; i < si->nscreens; i++)
{
saver_screen_info *ssi = &si->screens[i];
diff --git a/driver/xscreensaver.h b/driver/xscreensaver.h
index 42cf794..bed6537 100644
--- a/driver/xscreensaver.h
+++ b/driver/xscreensaver.h
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1993-2017 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1993-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -157,7 +157,10 @@ extern void hack_subproc_environment (Screen *, Window saver_window);
extern void init_sigchld (void);
extern void spawn_screenhack (saver_screen_info *ssi);
extern pid_t fork_and_exec (saver_screen_info *ssi, const char *command);
+extern pid_t fork_and_exec_1 (saver_info *si, saver_screen_info *ssi,
+ const char *command);
extern void kill_screenhack (saver_screen_info *ssi);
+int kill_job (saver_info *si, pid_t pid, int signal);
extern void suspend_screenhack (saver_screen_info *ssi, Bool suspend_p);
extern Bool screenhack_running_p (saver_info *si);
extern void emergency_kill_subproc (saver_info *si);
diff --git a/driver/xscreensaver.man b/driver/xscreensaver.man
index a99845b..0679ff4 100644
--- a/driver/xscreensaver.man
+++ b/driver/xscreensaver.man
@@ -11,7 +11,7 @@
.if n .sp 1
.if t .sp .5
..
-.TH XScreenSaver 1 "09-Nov-2013 (5.23)" "X Version 11"
+.TH XScreenSaver 1 "6-Jun-2019 (5.43)" "X Version 11"
.SH NAME
xscreensaver - extensible screen saver and screen locking framework
.SH SYNOPSIS
@@ -254,7 +254,7 @@ If that doesn't work, then try this:
Open "\fISystem Settings / Startup/Shutdown / Autostart\fP", and then
add "\fI/usr/bin/xscreensaver\fP".
-If you are lucky, that will create a \fIxscreensaver.desktop"\fP file
+If you are lucky, that will create a \fI"xscreensaver.desktop"\fP file
for you in \fI~/.config/autostart/\fP or \fI~/.kde/Autostart/\fP.
.TP 3
\fB3: Make xscreensaver be an Autostart program.\fP
@@ -369,6 +369,17 @@ X server's access control mechanisms, see the man pages for
.BR xauth (1),
and
.BR xhost (1).
+.SH LAPTOP LIDS
+If you are running a system with
+.BR systemd (1)
+221 or newer, and if xscreensaver was compiled with \fIlibsystemd\fP
+support, then closing the lid of your laptop will cause the screen to
+lock immediately.
+
+If not, then the screen might not lock until a few seconds \fIafter\fP you
+re-open the lid. Which is less than ideal. So if you don't
+use \fIsystemd\fP, you might want to get in the habit of
+doing \fIxscreensaver-command -lock\fP before closing the lid.
.SH BUGS
Bugs? There are no bugs. Ok, well, maybe. If you find one, please let
me know. https://www.jwz.org/xscreensaver/bugs.html explains how to
@@ -1016,7 +1027,7 @@ and a FAQ can always be found at https://www.jwz.org/xscreensaver/
.BR xscreensaver\-getimage (1),
.BR xscreensaver\-text (1).
.SH COPYRIGHT
-Copyright \(co 1991-2018 by Jamie Zawinski.
+Copyright \(co 1991-2019 by Jamie Zawinski.
Permission to use, copy, modify, distribute, and sell this software
and its documentation for any purpose is hereby granted without fee,
provided that the above copyright notice appear in all copies and that
diff --git a/hacks/bsod.c b/hacks/bsod.c
index f3af911..040db54 100644
--- a/hacks/bsod.c
+++ b/hacks/bsod.c
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1998-2018 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1998-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -6391,9 +6391,9 @@ static const char *bsod_defaults [] = {
".win10.fontB: Arial 50, Helvetica 50",
".win10.fontC: Arial 9, Helvetica 9",
- /* The real Solaris font is ../OSX/Gallant19.bdf but I don't know how
- to convert that to a TTF, so let's use Luxi Mono instead. */
- ".solaris.font: Luxi Mono 12, PxPlus IBM VGA8 12, Courier Bold 12",
+ /* The real Solaris font is Gallant (../OSX/gallant12x22.ttf)
+ but Luxi Mono (../OSX/luximr.ttf) is pretty close as well. */
+ ".solaris.font: Gallant12x22 12, Luxi Mono 12, PxPlus IBM VGA8 12, Courier Bold 12",
/* "Arial" loads "ArialMT" but "Arial Bold" does not load "Arial-BoldMT"? */
".ransomware.font: Arial 11, Helvetica 11",
@@ -6413,7 +6413,7 @@ static const char *bsod_defaults [] = {
".macinstall.bigFont: -*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*",
".msdos.font: PxPlus IBM VGA8 32",
".nt.font: PxPlus IBM VGA8 12",
- ".solaris.font: Luxi Mono 12, PxPlus IBM VGA8 12, Courier Bold 12",
+ ".solaris.font: Gallant12x22 14, Luxi Mono 12, PxPlus IBM VGA8 12, Courier Bold 12",
".win10.font: -*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*",
".win10.bigFont: -*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*",
@@ -6433,7 +6433,7 @@ static const char *bsod_defaults [] = {
".mac.bigFont: Monaco 18, Courier Bold 18",
".macsbug.font: Monaco 10, Courier Bold 9",
- ".macsbug.bigFont: Monaco 24, Courier Bold 24",
+ ".macsbug.bigFont: Monaco 10, Courier Bold 9",
".macx.font: Courier Bold 9",
".macx.bigFont: Courier Bold 14",
@@ -6442,13 +6442,13 @@ static const char *bsod_defaults [] = {
".macinstall.font: Helvetica 24, Arial 24",
".macinstall.bigFont: Helvetica 24, Arial 24",
- ".hvx.bigFont: PxPlus IBM VGA8 16, Courier Bold 14",
- ".hppalinux.bigFont: PxPlus IBM VGA8 16, Courier Bold 14",
- ".linux.bigFont: PxPlus IBM VGA8 16, Courier Bold 14",
- ".hpux.bigFont: PxPlus IBM VGA8 16, Courier Bold 14",
- ".msdos.font: PxPlus IBM VGA8 16, Courier Bold 14",
- ".solaris.font: Luxi Mono 12, PxPlus IBM VGA8 12, Courier Bold 12",
- ".solaris.bigFont: Luxi Mono 16, PxPlus IBM VGA8 16, Courier Bold 14",
+ ".hvx.bigFont: PxPlus IBM VGA8 24, Courier Bold 14",
+ ".hppalinux.bigFont: PxPlus IBM VGA8 24, Courier Bold 14",
+ ".linux.bigFont: PxPlus IBM VGA8 24, Courier Bold 14",
+ ".hpux.bigFont: PxPlus IBM VGA8 24, Courier Bold 14",
+ ".msdos.font: PxPlus IBM VGA8 24, Courier Bold 14",
+ ".solaris.font: Gallant12x22 12, Luxi Mono 12, PxPlus IBM VGA8 12, Courier Bold 12",
+ ".solaris.bigFont: Gallant12x22 22, Luxi Mono 16, PxPlus IBM VGA8 16, Courier Bold 14",
".win10.font: Arial 24, Helvetica 24",
".win10.bigFont: Arial 24, Helvetica 24",
diff --git a/hacks/ccurve.c b/hacks/ccurve.c
index a4423b2..874ada8 100644
--- a/hacks/ccurve.c
+++ b/hacks/ccurve.c
@@ -223,7 +223,7 @@ self_similar_normalized (struct state *st,
double x = 0.0;
double y = 0.0;
- replacement = (Position*)(malloc (segment_count * sizeof (Segment)));
+ replacement = (Position*)(malloc (segment_count * sizeof (*replacement)));
copy_points (segment_count, points, replacement);
assert (fabs ((replacement [segment_count - 1].x) - 1.0) < EPSILON);
assert (fabs (replacement [segment_count - 1].y) < EPSILON);
diff --git a/hacks/config/README b/hacks/config/README
index 5981463..58c4195 100644
--- a/hacks/config/README
+++ b/hacks/config/README
@@ -4,8 +4,8 @@
a screen saver and locker for the X window system
by Jamie Zawinski
- version 5.42
- 28-Dec-2018
+ version 5.43
+ 09-Jul-2019
https://www.jwz.org/xscreensaver/
diff --git a/hacks/config/bouncingcow.xml b/hacks/config/bouncingcow.xml
index 0e3dfe5..abbb0cb 100644
--- a/hacks/config/bouncingcow.xml
+++ b/hacks/config/bouncingcow.xml
@@ -19,7 +19,11 @@
_label="Number of cows" _low-label="Moo" _high-label="Herd"
low="1" high="9" default="1"/>
- <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="mathematical"
+ _label="Mathematically ideal cows (spherical, frictionless)"
+ arg-set="-mathematical"/>
+
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
<boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
<xscreensaver-updater />
diff --git a/hacks/config/deepstars.xml b/hacks/config/deepstars.xml
new file mode 100644
index 0000000..e1118e2
--- /dev/null
+++ b/hacks/config/deepstars.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="deepstars" _label="DeepStars" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=_FhYeKXGpxs"/>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="8.0" default="1.0"/>
+
+ <number id="smear" type="slider" arg="-smear %"
+ _label="Smear" _low-label="Low" _high-label="High"
+ low="0.1" high="5.0" default="1.0"/>
+
+ <xscreensaver-updater />
+
+ <_description>
+A long exposure of the night sky, showing star paths as vapor trails.
+
+Written by Jamie Zawinski; 2019.
+ </_description>
+</screensaver>
diff --git a/hacks/config/flyingtoasters.xml b/hacks/config/flyingtoasters.xml
index 7df6459..6b5f1f1 100644
--- a/hacks/config/flyingtoasters.xml
+++ b/hacks/config/flyingtoasters.xml
@@ -25,6 +25,7 @@
<hgroup>
<boolean id="tex" _label="Chrome" arg-unset="-no-texture"/>
+ <boolean id="fog" _label="Fog" arg-unset="-no-fog"/>
<boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
<boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
</hgroup>
diff --git a/hacks/config/glplanet.xml b/hacks/config/glplanet.xml
index 5714b7a..802f629 100644
--- a/hacks/config/glplanet.xml
+++ b/hacks/config/glplanet.xml
@@ -5,6 +5,7 @@
<command arg="-root"/>
<video href="https://www.youtube.com/watch?v=ohcJ1bVkLZ4"/>
+<!--<video href="https://www.youtube.com/watch?v=OZ6zRLLFLk4"/>-->
<number id="delay" type="slider" arg="-delay %"
_label="Frame rate" _low-label="Low" _high-label="High"
@@ -21,10 +22,18 @@
<boolean id="rotate" _label="Rotate" arg-unset="-no-rotate"/>
<boolean id="roll" _label="Roll" arg-unset="-no-roll"/>
<boolean id="stars" _label="Stars" arg-unset="-no-stars"/>
+ <select id="mode">
+ <option id="globe" _label="Globe"/>
+ <option id="mercator" _label="Mercator"
+ arg-set="-mode mercator"/>
+ <option id="equirectangular" _label="Equirectangular"
+ arg-set="-mode equirectangular"/>
+ </select>
+
</hgroup>
<hgroup>
- <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
+ <boolean id="wire" _label="Wireframe" arg-set="-wireframe"/>
<boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
</hgroup>
diff --git a/hacks/config/gravitywell.xml b/hacks/config/gravitywell.xml
new file mode 100644
index 0000000..ebecd1c
--- /dev/null
+++ b/hacks/config/gravitywell.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<screensaver name="gravitywell" _label="GravityWell" gl="yes">
+
+ <command arg="-root"/>
+
+ <video href="https://www.youtube.com/watch?v=yhsw0QhIjjs"/>
+
+ <hgroup>
+ <vgroup>
+
+ <number id="delay" type="slider" arg="-delay %"
+ _label="Frame rate" _low-label="Low" _high-label="High"
+ low="0" high="100000" default="30000"
+ convert="invert"/>
+
+ <number id="speed" type="slider" arg="-speed %"
+ _label="Speed" _low-label="Slow" _high-label="Fast"
+ low="0.01" high="8.0" default="1.0"/>
+
+ <number id="resolution" type="slider" arg="-resolution %"
+ _label="Resolution" _low-label="Low" _high-label="High"
+ low="1.0" high="5.0" default="1.0"/>
+ </vgroup>
+ <vgroup>
+
+ <number id="grid-size" type="slider" arg="-grid-size %"
+ _label="Grid Size" _low-label="Dense" _high-label="Sparse"
+ low="0.1" high="5.0" default="1.0"/>
+
+ <number id="count" type="slider" arg="-count %"
+ _label="Number of stars" _low-label="One" _high-label="Lots"
+ low="1" high="40" default="15"/>
+ </vgroup>
+ </hgroup>
+
+ <xscreensaver-updater />
+
+ <_description>
+Massive objects distort space in a two dimensional universe.
+
+Written by Jamie Zawinski; 2019.
+ </_description>
+</screensaver>
diff --git a/hacks/config/hexadrop.xml b/hacks/config/hexadrop.xml
index 8f8baef..b845963 100644
--- a/hacks/config/hexadrop.xml
+++ b/hacks/config/hexadrop.xml
@@ -35,7 +35,7 @@
<select id="uniform">
<option id="r-uniform" _label="Random speed"/>
<option id="uniform" _label="Uniform speed" arg-set="-uniform-speed"/>
- <option id="no-uniform" _label="Non-uniform speed" arg-set="-no-uniform-speed"/>
+ <option id="no-uniform" _label="Non-uniform speed" arg-set="-nonuniform-speed"/>
</select>
<select id="lockstep">
diff --git a/hacks/config/imsmap.xml b/hacks/config/imsmap.xml
index f3d3cb2..f0feda9 100644
--- a/hacks/config/imsmap.xml
+++ b/hacks/config/imsmap.xml
@@ -21,7 +21,7 @@
<number id="ncolors" type="slider" arg="-ncolors %"
_label="Number of colors" _low-label="Two" _high-label="Many"
- low="1" high="255" default="50"/>
+ low="3" high="255" default="50"/>
<select id="mode">
<option id="random" _label="Random coloration"/>
diff --git a/hacks/config/unknownpleasures.xml b/hacks/config/unknownpleasures.xml
index 0730599..8cac817 100644
--- a/hacks/config/unknownpleasures.xml
+++ b/hacks/config/unknownpleasures.xml
@@ -44,6 +44,8 @@
<boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
</hgroup>
+ <file id="mask" _label="Mask image" arg="-mask %"/>
+
<xscreensaver-updater />
<_description>
diff --git a/hacks/filmleader.c b/hacks/filmleader.c
index 25b64c4..2aabb9d 100644
--- a/hacks/filmleader.c
+++ b/hacks/filmleader.c
@@ -1,4 +1,4 @@
-/* filmleader, Copyright (c) 2018 Jamie Zawinski <jwz@jwz.org>
+/* filmleader, Copyright (c) 2018-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -223,10 +223,10 @@ filmleader_draw (Display *dpy, Window window, void *closure)
XftTextExtentsUtf8 (dpy, xftfont, (FcChar8 *)
blurbs[i].s[0], strlen(blurbs[i].s[0]),
&extents);
- lbearing = -extents.x;
+ /* lbearing = -extents.x; */
rbearing = extents.width - extents.x;
ascent = extents.y;
- descent = extents.height - extents.y;
+ /* descent = extents.height - extents.y; */
x = (st->w - rbearing) / 2;
y = st->h * 0.1 + ascent;
@@ -245,10 +245,10 @@ filmleader_draw (Display *dpy, Window window, void *closure)
XftTextExtentsUtf8 (dpy, xftfont, (FcChar8 *)
blurbs[i].s[0], strlen(blurbs[i].s[j]),
&extents);
- lbearing = -extents.x;
- rbearing = extents.width - extents.x;
- ascent = extents.y;
- descent = extents.height - extents.y;
+ /* lbearing = -extents.x; */
+ /* rbearing = extents.width - extents.x; */
+ /* ascent = extents.y; */
+ /* descent = extents.height - extents.y; */
}
}
@@ -360,7 +360,7 @@ filmleader_draw (Display *dpy, Window window, void *closure)
lbearing = -extents.x;
rbearing = extents.width - extents.x;
ascent = extents.y;
- descent = extents.height - extents.y;
+ /* descent = extents.height - extents.y; */
x = st->w * 0.1;
y = st->h * 0.1 + ascent;
@@ -377,8 +377,8 @@ filmleader_draw (Display *dpy, Window window, void *closure)
XftTextExtentsUtf8 (dpy, xftfont, (FcChar8 *) s, strlen(s), &extents);
lbearing = -extents.x;
rbearing = extents.width - extents.x;
- ascent = extents.y;
- descent = extents.height - extents.y;
+ /* ascent = extents.y; */
+ /* descent = extents.height - extents.y; */
x = st->w * 0.1;
y = st->h * 0.95;
diff --git a/hacks/fontglide.c b/hacks/fontglide.c
index df8f498..54c11b1 100644
--- a/hacks/fontglide.c
+++ b/hacks/fontglide.c
@@ -2421,8 +2421,8 @@ fontglide_free (Display *dpy, Window window, void *closure)
textclient_close (s->tc);
-// if (s->b && s->b != s->window) XFreePixmap (dpy, s->b);
-// if (s->ba && s->ba != s->b) XFreePixmap (dpy, s->ba);
+/* if (s->b && s->b != s->window) XFreePixmap (dpy, s->b); */
+/* if (s->ba && s->ba != s->b) XFreePixmap (dpy, s->ba); */
XFreeGC (dpy, s->bg_gc);
if (s->charset) free (s->charset);
if (s->font_override) free (s->font_override);
diff --git a/hacks/fps.c b/hacks/fps.c
index a24f623..6322fbe 100644
--- a/hacks/fps.c
+++ b/hacks/fps.c
@@ -1,4 +1,4 @@
-/* fps, Copyright (c) 2001-2018 Jamie Zawinski <jwz@jwz.org>
+/* fps, Copyright (c) 2001-2019 Jamie Zawinski <jwz@jwz.org>
* Draw a frames-per-second display (Xlib and OpenGL).
*
* Permission to use, copy, modify, distribute, and sell this software and its
@@ -170,14 +170,41 @@ fps_compute (fps_state *st, unsigned long polys, double depth)
if (depth >= 0.0)
{
- unsigned long L = strlen (st->string);
- char *s = st->string + L;
- strcat (s, "\nDepth: ");
- sprintf (s + strlen(s), "%.1f", depth);
- L = strlen (s);
- /* Remove trailing ".0" in case depth is not a fraction. */
- if (s[L-2] == '.' && s[L-1] == '0')
- s[L-2] = 0;
+ const char *s = "";
+ unsigned long ldepth = depth;
+# if 0
+ if (depth >= (1024 * 1024 * 1024))
+ ldepth = depth / (1024 * 1024 * 1024), s = "G";
+ else if (depth >= (1024 * 1024)) ldepth >>= 20, s = "M";
+ else if (depth >= 2048) ldepth >>= 10, s = "K";
+# endif
+ strcat (st->string, "\nDepth: ");
+ if (ldepth >= 1000000000)
+ sprintf (st->string + strlen(st->string),
+ "%lu,%03lu,%03lu,%03lu%s ",
+ (ldepth / 1000000000),
+ ((ldepth / 1000000) % 1000),
+ ((ldepth / 1000) % 1000),
+ (ldepth % 1000), s);
+ else if (ldepth >= 1000000)
+ sprintf (st->string + strlen(st->string), "%lu,%03lu,%03lu%s ",
+ (ldepth / 1000000), ((ldepth / 1000) % 1000),
+ (ldepth % 1000), s);
+ else if (ldepth >= 1000)
+ sprintf (st->string + strlen(st->string), "%lu,%03lu%s ",
+ (ldepth / 1000), (ldepth % 1000), s);
+ else if (*s)
+ sprintf (st->string + strlen(st->string), "%lu%s ",
+ ldepth, s);
+ else
+ {
+ int L;
+ sprintf (st->string + strlen(st->string), "%.1f", depth);
+ L = strlen (st->string);
+ /* Remove trailing ".0" in case depth is not a fraction. */
+ if (st->string[L-2] == '.' && st->string[L-1] == '0')
+ st->string[L-2] = 0;
+ }
}
}
diff --git a/hacks/fuzzyflakes.c b/hacks/fuzzyflakes.c
index 7429fa8..d655ca9 100644
--- a/hacks/fuzzyflakes.c
+++ b/hacks/fuzzyflakes.c
@@ -300,8 +300,8 @@ FuzzyFlakesColorHelper(Flake *flake)
iG1 = nG1 * 255;
iB1 = nB1 * 255;
- flake->Colors.Fore = malloc(sizeof(unsigned char) * 8);
- flake->Colors.Bord = malloc(sizeof(unsigned char) * 8);
+ flake->Colors.Fore = malloc(sizeof(char) * 8);
+ flake->Colors.Bord = malloc(sizeof(char) * 8);
sprintf(flake->Colors.Fore, "#%02X%02X%02X", iR0, iG0, iB0);
sprintf(flake->Colors.Bord, "#%02X%02X%02X", iR1, iG1, iB1);
@@ -372,7 +372,7 @@ FuzzyFlakesInit(Flake *flake)
{
if (flake->Colors.Back)
free(flake->Colors.Back);
- flake->Colors.Back = malloc(sizeof(unsigned char) * 8);
+ flake->Colors.Back = malloc(sizeof(char) * 8);
sprintf(flake->Colors.Back, "#%X%X%X%X%X%X", random() % 16,
random() % 16, random() % 16, random() % 16, random() % 16,
random() % 16);
@@ -387,7 +387,7 @@ FuzzyFlakesInit(Flake *flake)
fprintf(stderr, " reverting to random\n");
if (flake->Colors.Back)
free(flake->Colors.Back);
- flake->Colors.Back = malloc(sizeof(unsigned char) * 8);
+ flake->Colors.Back = malloc(sizeof(char) * 8);
sprintf(flake->Colors.Back, "#%X%X%X%X%X%X", random() % 16,
random() % 16, random() % 16, random() % 16, random() % 16,
random() % 16);
diff --git a/hacks/glitchpeg.c b/hacks/glitchpeg.c
index 4f3b052..91a05de 100644
--- a/hacks/glitchpeg.c
+++ b/hacks/glitchpeg.c
@@ -1,4 +1,4 @@
-/* glitchpeg, Copyright (c) 2018 Jamie Zawinski <jwz@jwz.org>
+/* glitchpeg, Copyright (c) 2018-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -232,6 +232,13 @@ xscreensaver_getimage_file_cb (XtPointer closure, int *source, XtInputId *id)
while (L > 0 && (buf[L-1] == '\r' || buf[L-1] == '\n'))
buf[--L] = 0;
+ if (!*file)
+ {
+ fprintf (stderr, "%s: no suitable images in imageDirectory\n",
+ progname);
+ return;
+ }
+
fp = fopen (file, "r");
if (! fp)
{
@@ -286,6 +293,14 @@ glitchpeg_init (Display *dpy, Window window)
XClearWindow (st->dpy, st->window);
+# if 0 /* This check doesn't work, because X11 resources are the devil. */
+ if (! get_boolean_resource (dpy, "chooseRandomImages", "Boolean"))
+ {
+ fprintf (stderr, "%s: chooseRandomImages must be True", progname);
+ exit (1);
+ }
+# endif
+
return st;
}
diff --git a/hacks/glx/Makefile.in b/hacks/glx/Makefile.in
index 91e4d51..482bed3 100644
--- a/hacks/glx/Makefile.in
+++ b/hacks/glx/Makefile.in
@@ -43,6 +43,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SETUID = @INSTALL_SETUID@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_DIRS = @INSTALL_DIRS@
+PROG_SETCAP = @PROG_SETCAP@
+SETCAP_FLAGS = cap_net_raw=p
X_CFLAGS = @X_CFLAGS@
X_LIBS = @X_LIBS@
@@ -60,6 +62,9 @@ HACK_LIBS = $(HACK_PRE) @ANIM_LIBS@ $(HACK_POST2)
PNG_LIBS = $(HACK_PRE) @PNG_LIBS@ $(HACK_POST2)
GLE_LIBS = $(HACK_PRE) @GLE_LIBS@ @PNG_LIBS@ $(HACK_POST2)
TEXT_LIBS = @PTY_LIBS@
+#### Is LIBCAP_CFLAGS necessary?
+LIBCAP_CFLAGS = @LIBCAP_CFLAGS@
+LIBCAP_LIBS = @LIBCAP_LIBS@
HACK_SRC = $(srcdir)/..
HACK_BIN = ..
@@ -132,7 +137,7 @@ SRCS = xscreensaver-gl-helper.c normals.c erase-gl.c fps-gl.c \
raverhoop.c hydrostat.c discoball.c cubetwist.c cubestack.c \
splodesic.c hexstrut.c vigilance.c seccam.c esper.c \
razzledazzle.c ships.c peepers.c crumbler.c quickhull.c \
- maze3d.c handsy.c handsy_model.c
+ maze3d.c handsy.c handsy_model.c gravitywell.c deepstars.c
OBJS = xscreensaver-gl-helper.o normals.o erase-gl.o fps-gl.o \
atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \
@@ -179,7 +184,7 @@ OBJS = xscreensaver-gl-helper.o normals.o erase-gl.o fps-gl.o \
raverhoop.o hydrostat.o discoball.o cubetwist.o cubestack.o \
splodesic.o hexstrut.o vigilance.o seccam.o esper.o \
razzledazzle.o ships.o peepers.o crumbler.o quickhull.o \
- maze3d.o handsy.o handsy_model.o
+ maze3d.o handsy.o handsy_model.o gravitywell.o deepstars.o
GL_EXES = cage gears moebius pipes sproingies stairs superquadrics \
morph3d rubik atlantis lament bubble3d glplanet pulsar \
@@ -200,9 +205,10 @@ GL_EXES = cage gears moebius pipes sproingies stairs superquadrics \
splitflap dymaxionmap unicrud energystream raverhoop \
hydrostat discoball cubetwist cubestack splodesic \
hexstrut vigilance esper razzledazzle peepers crumbler \
- maze3d handsy
+ maze3d handsy gravitywell deepstars
GLE_EXES = extrusion
SUID_EXES = sonar
+SETCAP_EXES = sonar
GL_UTIL_EXES = xscreensaver-gl-helper
JWZGLES_OBJS = @JWZGLES_OBJS@
HACK_EXES_1 = @GL_EXES@ @GLE_EXES@
@@ -225,7 +231,7 @@ HACK_OBJS = $(JWZGLES_OBJS) $(HACK_BIN)/screenhack.o @ANIM_OBJS@ \
$(UTILS_BIN)/colors.o $(UTILS_BIN)/async_netdb.o \
$(UTILS_BIN)/aligned_malloc.o $(UTILS_BIN)/thread_util.o \
$(UTILS_BIN)/utf8wc.o $(UTILS_BIN)/pow2.o \
- $(UTILS_BIN)/font-retry-xft.o
+ $(UTILS_BIN)/font-retry-xft.o @XMU_OBJS@
HDRS = atlantis.h bubble3d.h buildlwo.h e_textures.h \
grab-ximage.h tube.h sphere.h boxed.h \
@@ -266,7 +272,8 @@ GL_MEN = atlantis.man boxed.man bubble3d.man cage.man circuit.man \
unicrud.man energystream.man raverhoop.man hydrostat.man \
discoball.man cubetwist.man cubestack.man splodesic.man \
hexstrut.man vigilance.man esper.man razzledazzle.man \
- peepers.man crumbler.man maze3d.man handsy.man
+ peepers.man crumbler.man maze3d.man handsy.man \
+ gravitywell.man deepstars.man
MEN = @GL_MEN@
RETIRED_MEN = glforestfire.man
EXTRAS = README Makefile.in dxf2gl.pl vrml2gl.pl wfront2gl.pl \
@@ -321,6 +328,20 @@ install-program:: $(EXES)
exit 1 ; \
fi ; \
done ; \
+ \
+ exes="${SETCAP_EXES}" ; \
+ if [ @SETCAP_HACKS@ = yes ]; then \
+ for program in $$exes; do \
+ echo $(PROG_SETCAP) $(SETCAP_FLAGS) $$idir/$$program ; \
+ if $(PROG_SETCAP) $(SETCAP_FLAGS) $$idir/$$program ; then \
+ true ; \
+ else \
+ echo "" ; \
+ echo "WARNING: unable to setcap $$program" ; \
+ echo "" ; \
+ fi ; \
+ done ; \
+ fi ; \
fi
@@ -898,7 +919,7 @@ skytentacles: skytentacles.o $(TENTACLE_OBJS)
SONAR_OBJS=sonar-sim.o sonar-icmp.o $(HACK_TRACK_OBJS)
sonar: sonar.o $(SONAR_OBJS)
- $(CC_HACK) -o $@ $@.o $(SONAR_OBJS) $(HACK_LIBS)
+ $(CC_HACK) -o $@ $@.o $(SONAR_OBJS) $(HACK_LIBS) $(LIBCAP_LIBS)
JIGSAW_OBJS=normals.o $(UTILS_BIN)/spline.o $(HACK_TRACK_GRAB_OBJS)
jigsaw: jigsaw.o $(JIGSAW_OBJS)
@@ -932,8 +953,8 @@ kaleidocycle: $(KALEIDOCYCLE_OBJS)
quasicrystal: quasicrystal.o $(HACK_TRACK_OBJS)
$(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
-unknownpleasures: unknownpleasures.o $(HACK_TRACK_OBJS)
- $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+unknownpleasures: unknownpleasures.o $(PNG) $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(PNG) $(HACK_TRACK_OBJS) $(HACK_LIBS) $(PNG_LIBS)
geodesic: geodesic.o normals.o $(HACK_TRACK_OBJS)
$(CC_HACK) -o $@ $@.o normals.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
@@ -1006,6 +1027,11 @@ handsy: handsy.o $(HANDSY_OBJS)
handsy_dxf::
./dxf2gl.pl --smooth 28 --layers handsy.dxf handsy_model.c
+gravitywell: gravitywell.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+deepstars: deepstars.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
##############################################################################
#
@@ -1518,6 +1544,23 @@ dangerball.o: $(UTILS_SRC)/visual.h
dangerball.o: $(UTILS_SRC)/yarandom.h
dangerball.o: $(HACK_SRC)/xlockmoreI.h
dangerball.o: $(HACK_SRC)/xlockmore.h
+deepstars.o: ../../config.h
+deepstars.o: $(HACK_SRC)/fps.h
+deepstars.o: $(srcdir)/gltrackball.h
+deepstars.o: $(HACK_SRC)/recanim.h
+deepstars.o: $(HACK_SRC)/screenhackI.h
+deepstars.o: $(srcdir)/sphere.h
+deepstars.o: $(UTILS_SRC)/colors.h
+deepstars.o: $(UTILS_SRC)/erase.h
+deepstars.o: $(UTILS_SRC)/font-retry.h
+deepstars.o: $(UTILS_SRC)/grabscreen.h
+deepstars.o: $(UTILS_SRC)/hsv.h
+deepstars.o: $(UTILS_SRC)/resources.h
+deepstars.o: $(UTILS_SRC)/usleep.h
+deepstars.o: $(UTILS_SRC)/visual.h
+deepstars.o: $(UTILS_SRC)/yarandom.h
+deepstars.o: $(HACK_SRC)/xlockmoreI.h
+deepstars.o: $(HACK_SRC)/xlockmore.h
discoball.o: ../../config.h
discoball.o: $(HACK_SRC)/fps.h
discoball.o: $(srcdir)/gltrackball.h
@@ -2161,6 +2204,22 @@ grab-ximage.o: $(UTILS_SRC)/grabscreen.h
grab-ximage.o: $(UTILS_SRC)/pow2.h
grab-ximage.o: $(UTILS_SRC)/visual.h
grab-ximage.o: $(UTILS_SRC)/xshm.h
+gravitywell.o: ../../config.h
+gravitywell.o: $(HACK_SRC)/fps.h
+gravitywell.o: $(srcdir)/gltrackball.h
+gravitywell.o: $(HACK_SRC)/recanim.h
+gravitywell.o: $(HACK_SRC)/screenhackI.h
+gravitywell.o: $(UTILS_SRC)/colors.h
+gravitywell.o: $(UTILS_SRC)/erase.h
+gravitywell.o: $(UTILS_SRC)/font-retry.h
+gravitywell.o: $(UTILS_SRC)/grabscreen.h
+gravitywell.o: $(UTILS_SRC)/hsv.h
+gravitywell.o: $(UTILS_SRC)/resources.h
+gravitywell.o: $(UTILS_SRC)/usleep.h
+gravitywell.o: $(UTILS_SRC)/visual.h
+gravitywell.o: $(UTILS_SRC)/yarandom.h
+gravitywell.o: $(HACK_SRC)/xlockmoreI.h
+gravitywell.o: $(HACK_SRC)/xlockmore.h
handsy_model.o: ../../config.h
handsy_model.o: $(srcdir)/gllist.h
handsy.o: ../../config.h
@@ -3402,6 +3461,7 @@ unicrud.o: $(HACK_SRC)/xlockmore.h
unknownpleasures.o: ../../config.h
unknownpleasures.o: $(HACK_SRC)/fps.h
unknownpleasures.o: $(srcdir)/gltrackball.h
+unknownpleasures.o: $(srcdir)/grab-ximage.h
unknownpleasures.o: $(HACK_SRC)/recanim.h
unknownpleasures.o: $(HACK_SRC)/screenhackI.h
unknownpleasures.o: $(UTILS_SRC)/colors.h
@@ -3413,6 +3473,7 @@ unknownpleasures.o: $(UTILS_SRC)/resources.h
unknownpleasures.o: $(UTILS_SRC)/usleep.h
unknownpleasures.o: $(UTILS_SRC)/visual.h
unknownpleasures.o: $(UTILS_SRC)/yarandom.h
+unknownpleasures.o: $(HACK_SRC)/ximage-loader.h
unknownpleasures.o: $(HACK_SRC)/xlockmoreI.h
unknownpleasures.o: $(HACK_SRC)/xlockmore.h
vigilance.o: ../../config.h
diff --git a/hacks/glx/bouncingcow.c b/hacks/glx/bouncingcow.c
index bcbea24..5dc9466 100644
--- a/hacks/glx/bouncingcow.c
+++ b/hacks/glx/bouncingcow.c
@@ -1,4 +1,4 @@
-/* bouncingcow, Copyright (c) 2003-2018 Jamie Zawinski <jwz@jwz.org>
+/* bouncingcow, Copyright (c) 2003-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -19,6 +19,7 @@
# define release_cow 0
#define DEF_SPEED "1.0"
#define DEF_TEXTURE "(none)"
+#define DEF_MATHEMATICAL "False"
#undef countof
#define countof(x) (sizeof((x))/sizeof((*x)))
@@ -68,6 +69,8 @@ typedef struct {
GLuint *dlists;
GLuint texture;
+ enum { BOUNCE, INFLATE, DEFLATE } mode;
+ GLfloat ratio;
int nfloaters;
floater *floaters;
@@ -78,16 +81,20 @@ static cow_configuration *bps = NULL;
static GLfloat speed;
static const char *do_texture;
+static Bool mathematical;
static XrmOptionDescRec opts[] = {
{ "-speed", ".speed", XrmoptionSepArg, 0 },
{"-texture", ".texture", XrmoptionSepArg, 0 },
{"+texture", ".texture", XrmoptionNoArg, "(none)" },
+ {"-mathematical", ".mathematical", XrmoptionNoArg, "True" },
+ {"+mathematical", ".mathematical", XrmoptionNoArg, "False" },
};
static argtype vars[] = {
{&speed, "speed", "Speed", DEF_SPEED, t_Float},
{&do_texture, "texture", "Texture", DEF_TEXTURE, t_String},
+ {&mathematical,"mathematical","Mathematical",DEF_MATHEMATICAL,t_Bool},
};
ENTRYPOINT ModeSpecOpt cow_opts = {countof(opts), opts, countof(vars), vars, NULL};
@@ -196,29 +203,33 @@ cow_handle_event (ModeInfo *mi, XEvent *event)
/* Textures
*/
-static Bool
+static void
load_texture (ModeInfo *mi, const char *filename)
{
+ cow_configuration *bp = &bps[MI_SCREEN(mi)];
Display *dpy = mi->dpy;
Visual *visual = mi->xgwa.visual;
char buf[1024];
XImage *image;
+ bp->texture = 0;
if (MI_IS_WIREFRAME(mi))
- return False;
+ return;
if (!filename ||
!*filename ||
!strcasecmp (filename, "(none)"))
{
glDisable (GL_TEXTURE_2D);
- return False;
+ return;
}
image = file_to_ximage (dpy, visual, filename);
- if (!image) return False;
+ if (!image) return;
clear_gl_error();
+ glGenTextures (1, &bp->texture);
+ glBindTexture (GL_TEXTURE_2D, bp->texture);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA,
image->width, image->height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, image->data);
@@ -228,62 +239,24 @@ load_texture (ModeInfo *mi, const char *filename)
glPixelStorei (GL_UNPACK_ALIGNMENT, 4);
glPixelStorei (GL_UNPACK_ROW_LENGTH, image->width);
-
- return True;
}
-ENTRYPOINT void
-init_cow (ModeInfo *mi)
+static void
+render_cow (ModeInfo *mi, GLfloat ratio)
{
- cow_configuration *bp;
+ cow_configuration *bp = &bps[MI_SCREEN(mi)];
int wire = MI_IS_WIREFRAME(mi);
int i;
- Bool tex_p = False;
-
- MI_INIT (mi, bps);
-
- bp = &bps[MI_SCREEN(mi)];
-
- bp->glx_context = init_GL(mi);
-
- reshape_cow (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
-
- glShadeModel(GL_SMOOTH);
-
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_NORMALIZE);
- glEnable(GL_CULL_FACE);
-
- if (!wire)
+ if (! bp->dlists)
+ bp->dlists = (GLuint *) calloc (countof(all_objs)+1, sizeof(GLuint));
+ for (i = 0; i < countof(all_objs); i++)
{
- GLfloat pos[4] = {0.4, 0.2, 0.4, 0.0};
-/* GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0};*/
- GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0};
- GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0};
- GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0};
-
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_CULL_FACE);
-
- glLightfv(GL_LIGHT0, GL_POSITION, pos);
- glLightfv(GL_LIGHT0, GL_AMBIENT, amb);
- glLightfv(GL_LIGHT0, GL_DIFFUSE, dif);
- glLightfv(GL_LIGHT0, GL_SPECULAR, spc);
+ if (bp->dlists[i])
+ glDeleteLists (bp->dlists[i], 1);
+ bp->dlists[i] = glGenLists (1);
}
- bp->trackball = gltrackball_init (False);
-
- bp->dlists = (GLuint *) calloc (countof(all_objs)+1, sizeof(GLuint));
- for (i = 0; i < countof(all_objs); i++)
- bp->dlists[i] = glGenLists (1);
-
- tex_p = load_texture (mi, do_texture);
- if (tex_p)
- glBindTexture (GL_TEXTURE_2D, bp->texture);
-
for (i = 0; i < countof(all_objs); i++)
{
GLfloat black[4] = {0, 0, 0, 1};
@@ -296,7 +269,7 @@ init_cow (ModeInfo *mi)
if (i == HIDE)
{
GLfloat color[4] = {0.63, 0.43, 0.36, 1.00};
- if (tex_p)
+ if (bp->texture)
{
/* if we have a texture, make the base color be white. */
color[0] = color[1] = color[2] = 1.0;
@@ -366,11 +339,121 @@ init_cow (ModeInfo *mi)
glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, shiny);
}
- renderList (gll, wire);
+ if (ratio == 0)
+ renderList (gll, wire);
+ else
+ {
+ /* Transition between a physics cow (cow-shaped) and a
+ mathematical cow (spherical).
+ */
+ struct gllist *gll2 = (struct gllist *) malloc (sizeof(*gll2));
+ GLfloat *p = (GLfloat *) malloc (gll->points * 6 * sizeof(*p));
+ GLfloat scale2 = 0.5 + (0.5 * (1-ratio));
+ const GLfloat *pin = (GLfloat *) gll->data;
+ GLfloat *pout = p;
+ int j;
+ GLfloat scale = 10.46;
+
+ memcpy (gll2, gll, sizeof(*gll2));
+ gll2->next = 0;
+ gll2->data = p;
+
+ for (j = 0; j < gll2->points; j++)
+ {
+ const GLfloat *ppi;
+ GLfloat *ppo, d;
+ int k;
+ switch (gll2->format) {
+ case GL_N3F_V3F:
+
+ /* Verts transition from cow-shaped to the surface of
+ the enclosing sphere. */
+ ppi = &pin[3];
+ ppo = &pout[3];
+ d = sqrt (ppi[0]*ppi[0] + ppi[1]*ppi[1] + ppi[2]*ppi[2]);
+ for (k = 0; k < 3; k++)
+ {
+ GLfloat min = ppi[k];
+ GLfloat max = ppi[k] / d * scale;
+ ppo[k] = (min + ratio * (max - min)) * scale2;
+ }
+
+ /* Normals are the ratio between original normals and
+ the radial coordinates. */
+ ppi = &pin[0];
+ ppo = &pout[0];
+ for (k = 0; k < 3; k++)
+ {
+ GLfloat min = ppi[k];
+ GLfloat max = ppi[k] / d;
+ ppo[k] = (min + ratio * (max - min));
+ }
+
+ pin += 6;
+ pout += 6;
+ break;
+ default: abort(); break; /* write me */
+ }
+ }
+
+ renderList (gll2, wire);
+ free (gll2);
+ free (p);
+ }
glEndList ();
}
+}
+
+
+ENTRYPOINT void
+init_cow (ModeInfo *mi)
+{
+ cow_configuration *bp;
+ int wire = MI_IS_WIREFRAME(mi);
+ int i;
+
+ MI_INIT (mi, bps);
+
+ bp = &bps[MI_SCREEN(mi)];
+
+ bp->glx_context = init_GL(mi);
+
+ reshape_cow (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+
+ glShadeModel(GL_SMOOTH);
+
+ glEnable(GL_DEPTH_TEST);
+ glEnable(GL_NORMALIZE);
+ glEnable(GL_CULL_FACE);
+
+ if (!wire)
+ {
+ GLfloat pos[4] = {0.4, 0.2, 0.4, 0.0};
+/* GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0};*/
+ GLfloat amb[4] = {0.2, 0.2, 0.2, 1.0};
+ GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0};
+ GLfloat spc[4] = {1.0, 1.0, 1.0, 1.0};
+
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glEnable(GL_DEPTH_TEST);
+ glEnable(GL_CULL_FACE);
+
+ glLightfv(GL_LIGHT0, GL_POSITION, pos);
+ glLightfv(GL_LIGHT0, GL_AMBIENT, amb);
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, dif);
+ glLightfv(GL_LIGHT0, GL_SPECULAR, spc);
+ }
+
+ bp->trackball = gltrackball_init (False);
+
+ load_texture (mi, do_texture);
+
+ bp->ratio = 0;
+ render_cow (mi, bp->ratio);
+ bp->mode = BOUNCE;
bp->nfloaters = MI_COUNT (mi);
bp->floaters = (floater *) calloc (bp->nfloaters, sizeof (floater));
@@ -482,6 +565,39 @@ draw_cow (ModeInfo *mi)
mi->polygon_count = 0;
+ if (mathematical)
+ {
+ switch (bp->mode) {
+ case BOUNCE:
+ if (bp->ratio == 0 && !(random() % 400))
+ bp->mode = INFLATE;
+ else if (bp->ratio > 0 && !(random() % 2000))
+ bp->mode = DEFLATE;
+ break;
+ case INFLATE:
+ bp->ratio += 0.01;
+ if (bp->ratio >= 1)
+ {
+ bp->ratio = 1;
+ bp->mode = BOUNCE;
+ }
+ break;
+ case DEFLATE:
+ bp->ratio -= 0.01;
+ if (bp->ratio <= 0)
+ {
+ bp->ratio = 0;
+ bp->mode = BOUNCE;
+ }
+ break;
+ default:
+ abort();
+ }
+
+ if (bp->ratio > 0)
+ render_cow (mi, bp->ratio);
+ }
+
# if 0
{
floater F;
diff --git a/hacks/glx/bouncingcow.man b/hacks/glx/bouncingcow.man
index 516d1de..9657d41 100644
--- a/hacks/glx/bouncingcow.man
+++ b/hacks/glx/bouncingcow.man
@@ -10,6 +10,7 @@ bouncingcow - a happy cow on a trampoline in 3D. Moo.
[\-delay \fInumber\fP]
[\-speed \fInumber\fP]
[\-count \fInumber\fP]
+[\-mathematical]
[\-texture \fIfilename\fP]
[\-wireframe]
[\-fps]
@@ -42,6 +43,10 @@ An image file to paint on the cow's hide.
Note that on most systems, GL textures must have dimensions that are a
power of two.
.TP 8
+.B \-mathematical
+Periodically transition to display mathematically ideal cows (spherical,
+frictionless).
+.TP 8
.B \-wireframe
Render in wireframe instead of solid.
.TP 8
diff --git a/hacks/glx/boxed.c b/hacks/glx/boxed.c
index 6ce82bb..7d1b5d0 100644
--- a/hacks/glx/boxed.c
+++ b/hacks/glx/boxed.c
@@ -1248,7 +1248,7 @@ pinit(ModeInfo * mi)
gp->tic = gp->camtic = rnd() * 100.0f;
/* define tex1 (bottom plate) */
- gp->tex1 = (char *)malloc(3*width*height*sizeof(GLuint));
+ gp->tex1 = (char *)malloc(3*width*height*sizeof(*gp->tex1));
texpixels = 256*256; /*width*height;*/
texpixeldata = header_data;
texpixeltarget = gp->tex1;
diff --git a/hacks/glx/circuit.man b/hacks/glx/circuit.man
index 794f97b..f41f51c 100644
--- a/hacks/glx/circuit.man
+++ b/hacks/glx/circuit.man
@@ -44,7 +44,7 @@ Whether the scene should spin.
Rotation speed, 0 - 100. Default: 1.
.TP 8
.B \-light | \-no-light
-Whether to us lighting, or flat coloring.
+Whether to use lighting, or flat coloring.
.TP 8
.B \-fps
Display the current frame rate, CPU load, and polygon count.
diff --git a/hacks/glx/deepstars.c b/hacks/glx/deepstars.c
new file mode 100644
index 0000000..b477e00
--- /dev/null
+++ b/hacks/glx/deepstars.c
@@ -0,0 +1,387 @@
+/* xscreensaver, Copyright (c) 2019 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#ifdef STANDALONE
+#define DEFAULTS "*delay: 30000 \n" \
+ "*showFPS: False \n" \
+ "*suppressRotationAnimation: True\n" \
+
+# define release_deepstars 0
+# include "xlockmore.h" /* from the xscreensaver distribution */
+#else /* !STANDALONE */
+# include "xlock.h" /* from the xlockmore distribution */
+#endif /* !STANDALONE */
+
+#ifdef USE_GL /* whole file */
+
+#include "sphere.h"
+#include "gltrackball.h"
+
+#define DEF_SPEED "1.0"
+#define DEF_SMEAR "1.0"
+#define SMEAR_BASE 400
+#define SPEED_BASE 0.02
+
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+#undef BELLRAND
+#define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3)
+
+static GLfloat speed_arg, smear_arg;
+
+static XrmOptionDescRec opts[] = {
+ {"-speed", ".speed", XrmoptionSepArg, 0 },
+ {"-smear", ".smear", XrmoptionSepArg, 0 },
+};
+
+static argtype vars[] = {
+ {&speed_arg, "speed" ,"Speed", DEF_SPEED, t_Float},
+ {&smear_arg, "smear" ,"Smear", DEF_SMEAR, t_Float},
+};
+
+ENTRYPOINT ModeSpecOpt deepstars_opts = {countof(opts), opts, countof(vars), vars, NULL};
+
+#ifdef USE_MODULES
+ModStruct deepstars_description =
+{"deepstars", "init_deepstars", "draw_deepstars", NULL,
+ "draw_deepstars", "init_deepstars", "free_deepstars", &deepstars_opts,
+ 1000, 1, 2, 1, 4, 1.0, "",
+ "Animates texture mapped sphere (deepstars)", 0, NULL};
+#endif
+
+typedef struct {
+ GLfloat *colors;
+ GLuint starlist, groundlist;
+ int ncolors, starcount, groundcount;
+ GLXContext *glx_context;
+ GLfloat z, latitude, facing;
+ int smear, dsmear;
+ trackball_state *trackball;
+ Bool button_down_p;
+} starstruct;
+
+static starstruct *deepstarss = NULL;
+
+
+ENTRYPOINT void
+reshape_deepstars (ModeInfo *mi, int width, int height)
+{
+ starstruct *gp = &deepstarss[MI_SCREEN(mi)];
+ GLfloat h = (GLfloat) height / (GLfloat) width;
+
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *gp->glx_context);
+
+ glViewport(0, 0, (GLint) width, (GLint) height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-1.0, 1.0, -h, h, 5.0, 200.0);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glTranslatef(0.0, 0.0, -40);
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+}
+
+
+ENTRYPOINT Bool
+deepstars_handle_event (ModeInfo *mi, XEvent *event)
+{
+ starstruct *gp = &deepstarss[MI_SCREEN(mi)];
+
+ /* Neutralize any horizontal motion, and flip Y */
+ GLfloat rot = current_device_rotation();
+ Bool rotp = ((rot > 45 && rot < 135) ||
+ (rot < -45 && rot > -135));
+
+ if (event->xany.type == ButtonPress ||
+ event->xany.type == ButtonRelease)
+ {
+ if (rotp)
+ {
+ event->xbutton.y = MI_HEIGHT(mi) / 2;
+ event->xbutton.x = MI_WIDTH(mi) - event->xbutton.x;
+ }
+ else
+ {
+ event->xbutton.x = MI_WIDTH(mi) / 2;
+ event->xbutton.y = MI_HEIGHT(mi) - event->xbutton.y;
+ }
+ }
+ else if (event->xany.type == MotionNotify)
+ {
+ if (rotp)
+ {
+ event->xmotion.y = MI_HEIGHT(mi) / 2;
+ event->xmotion.x = MI_WIDTH(mi) - event->xmotion.x;
+ }
+ else
+ {
+ event->xmotion.x = MI_WIDTH(mi) / 2;
+ event->xmotion.y = MI_HEIGHT(mi) - event->xmotion.y;
+ }
+ }
+
+ if (gltrackball_event_handler (event, gp->trackball,
+ MI_WIDTH (mi), MI_HEIGHT (mi),
+ &gp->button_down_p))
+ return True;
+ else if (screenhack_event_helper (MI_DISPLAY(mi), MI_WINDOW(mi), event))
+ {
+ if (gp->smear <= 1)
+ gp->dsmear = 1;
+ else
+ gp->dsmear = gp->smear = 0;
+ return True;
+ }
+
+ return False;
+}
+
+
+ENTRYPOINT void
+init_deepstars (ModeInfo * mi)
+{
+ starstruct *gp;
+ int screen = MI_SCREEN(mi);
+
+ int i, j, k;
+ int width = MI_WIDTH(mi);
+ int height = MI_HEIGHT(mi);
+ int size = (width > height ? width : height);
+ int nstars = size * size / 80;
+ int max_size = 3;
+ GLfloat inc = 0.5;
+ int sizes = max_size / inc;
+ GLfloat scale = 1;
+
+ MI_INIT (mi, deepstarss);
+ gp = &deepstarss[screen];
+
+ if ((gp->glx_context = init_GL(mi)) != NULL) {
+ reshape_deepstars(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+ }
+
+# ifdef HAVE_MOBILE
+ scale *= 3;
+ nstars /= 3;
+# else /* !HAVE_MOBILE */
+ if (MI_WIDTH(mi) > 2560) { /* Retina displays */
+ scale *= 2;
+ nstars /= 2;
+ }
+# endif /* !HAVE_MOBILE */
+
+
+ gp->trackball = gltrackball_init (True);
+
+ gp->latitude = 10 + frand(70);
+ gp->facing = 10 * (frand(1.0)-0.5);
+
+ /* Only need a small number of distinct star colors, and we have one
+ display list for each color, so we can modify the alpha.
+ */
+ gp->ncolors = 16;
+ gp->colors = (GLfloat *) malloc (4 * gp->ncolors * sizeof(*gp->colors));
+
+ for (i = 0; i < gp->ncolors; i++)
+ {
+ GLfloat d = 0.1;
+ GLfloat r = 0.15 + frand(0.3);
+ GLfloat g = r + frand(d) - d;
+ GLfloat b = r + frand(d) - d;
+ gp->colors[i*4+0] = r;
+ gp->colors[i*4+1] = g;
+ gp->colors[i*4+2] = b;
+ gp->colors[i*4+3] = 1;
+ }
+
+ gp->starcount = nstars / gp->ncolors;
+ gp->starlist = glGenLists(gp->ncolors);
+ for (i = 0; i < gp->ncolors; i++)
+ {
+ glNewList (gp->starlist + i, GL_COMPILE);
+ for (j = 1; j <= sizes; j++)
+ {
+ glPointSize (inc * j * scale);
+ glBegin (GL_POINTS);
+ for (k = 0; k < gp->starcount / sizes; k++)
+ {
+ GLfloat x = frand(1)-0.5;
+ GLfloat y = frand(1)-0.5;
+ GLfloat z = ((random() & 1)
+ ? frand(1)-0.5
+ : (BELLRAND(1)-0.5)/20); /* milky way */
+ GLfloat d = sqrt (x*x + y*y + z*z);
+ x /= d;
+ y /= d;
+ z /= d;
+ glVertex3f (x, y, z);
+ }
+ glEnd();
+ }
+ glEndList();
+ }
+
+ glDisable (GL_BLEND);
+ gp->groundlist = glGenLists(1);
+ glNewList(gp->groundlist, GL_COMPILE);
+ {
+ GLfloat inc = 0.5;
+ glColor3f (0.02, 0.02, 0.05);
+ glBegin (GL_QUAD_STRIP);
+ gp->groundcount = 50;
+ for (i = 0; i <= gp->groundcount; i++)
+ {
+ glVertex3f (i / (GLfloat) gp->groundcount, 0, 0);
+ glVertex3f (i / (GLfloat) gp->groundcount, inc, 0);
+ inc += 0.1 * (frand(1.0) - 0.5);
+ }
+ glEnd();
+ }
+ glEndList();
+}
+
+
+ENTRYPOINT void
+draw_deepstars (ModeInfo * mi)
+{
+ starstruct *gp = &deepstarss[MI_SCREEN(mi)];
+ Display *dpy = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int smear_change = 800;
+ int sky_scale = 60;
+ int i, j;
+
+ if (!gp->glx_context)
+ return;
+
+ glDrawBuffer(GL_BACK);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glXMakeCurrent (dpy, window, *gp->glx_context);
+
+ mi->polygon_count = 0;
+
+ glEnable (GL_LINE_SMOOTH);
+ glEnable (GL_POINT_SMOOTH);
+ glDisable (GL_DEPTH_TEST);
+ glDisable (GL_CULL_FACE);
+
+ glPushMatrix();
+
+ gltrackball_rotate (gp->trackball);
+
+ /* At the equator, Polaris is on the horizon. In the Arctic, overhead. */
+ glRotatef (180 - gp->latitude, 1, 0, 0);
+ glRotatef (gp->facing, 0, 1, 0);
+
+ if (gp->dsmear == 0 && !(random() % smear_change))
+ gp->dsmear = 1;
+ else if (gp->smear == SMEAR_BASE * smear_arg && !(random() % smear_change))
+ gp->dsmear = -1;
+
+ if (! gp->button_down_p)
+ gp->smear += gp->dsmear;
+ if (gp->smear < 1) gp->smear = 1;
+ else if (gp->smear > SMEAR_BASE * smear_arg)
+ gp->smear = SMEAR_BASE * smear_arg;
+
+ if (!gp->button_down_p)
+ gp->z -= SPEED_BASE * speed_arg;
+
+ glEnable (GL_BLEND);
+ glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ for (i = 0; i < gp->smear; i++)
+ {
+ GLfloat alpha = 1 - (i / (GLfloat) gp->smear);
+
+ glPushMatrix();
+
+ glRotatef (gp->z - (-i * SPEED_BASE * speed_arg), 0, 0, 1);
+
+# if 0
+ if (i == 0)
+ {
+ glBegin(GL_LINES);
+ glVertex3f(0,0,0); glVertex3f(0,0,-3);
+ glVertex3f(0,-1,0); glVertex3f(0,1,0);
+ glVertex3f(-1,0,0); glVertex3f(1,0,0);
+ glEnd();
+
+ glPushMatrix();
+ glRotatef (90, 1, 0, 0);
+ glScalef (sky_scale, sky_scale, sky_scale);
+ mi->polygon_count += unit_sphere (12, 24, 1);
+ glPopMatrix();
+ }
+# endif
+
+ glRotatef (50, 1, 0, 0); /* Tilt milky way */
+ glScalef (sky_scale, sky_scale, sky_scale);
+
+ for (j = 0; j < gp->ncolors; j++)
+ {
+ gp->colors[j*4+3] = alpha;
+ glColor4fv (&gp->colors[j*4]);
+ glCallList (gp->starlist + j);
+ mi->polygon_count += gp->starcount;
+ }
+ glPopMatrix();
+ }
+
+ glPopMatrix();
+
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ {
+ glLoadIdentity();
+
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+ {
+ glLoadIdentity();
+ glTranslatef (-1, -1, 0);
+ glScalef (2, 0.7, 1);
+ glCallList (gp->groundlist);
+ mi->polygon_count += gp->groundcount;
+ }
+ glPopMatrix();
+ }
+ glMatrixMode(GL_PROJECTION);
+ glPopMatrix();
+
+ glMatrixMode(GL_MODELVIEW);
+
+ if (mi->fps_p) do_fps (mi);
+ glFinish();
+ glXSwapBuffers(dpy, window);
+}
+
+
+ENTRYPOINT void
+free_deepstars (ModeInfo * mi)
+{
+ starstruct *gp = &deepstarss[MI_SCREEN(mi)];
+
+ if (!gp->glx_context) return;
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *gp->glx_context);
+ if (gp->colors) free (gp->colors);
+ if (glIsList(gp->groundlist)) glDeleteLists(gp->groundlist, 1);
+ if (glIsList(gp->starlist)) glDeleteLists(gp->starlist, gp->ncolors);
+ if (gp->trackball) gltrackball_free (gp->trackball);
+}
+
+
+XSCREENSAVER_MODULE ("DeepStars", deepstars)
+
+#endif
diff --git a/hacks/glx/deepstars.man b/hacks/glx/deepstars.man
new file mode 100644
index 0000000..bd4a65a
--- /dev/null
+++ b/hacks/glx/deepstars.man
@@ -0,0 +1,57 @@
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+deepstars - screen saver.
+.SH SYNOPSIS
+.B deepstars
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-speed \fInumber\fP]
+[\-smear \fInumber\fP]
+.SH DESCRIPTION
+A long exposure of the night sky, showing star paths as vapor trails.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 30000 (0.03 seconds).
+.TP 8
+.B \-speed \fInumber\fP
+Animation speed. 2.0 means twice as fast, 0.5 means half as fast.
+.TP 8
+.B \-smear \fInumber\fP
+How long the vapor trails should be.
+2.0 means twice as long, 0.5 means half as long.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2019 by Jamie Zawinski. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski.
diff --git a/hacks/glx/esper.c b/hacks/glx/esper.c
index e7d85a9..90887a8 100644
--- a/hacks/glx/esper.c
+++ b/hacks/glx/esper.c
@@ -210,7 +210,7 @@ typedef enum {
MANUAL_RETICLE_ON,
MANUAL_RETICLE,
MANUAL_BOX_ON,
- MANUAL_BOX,
+ MANUAL_BOX
} anim_state;
typedef enum { NEW, IN, FULL, OUT, DEAD } sprite_state;
@@ -1185,13 +1185,13 @@ static void
draw_flash_sprite (ModeInfo *mi, sprite *sp)
{
/* esper_state *ss = &sss[MI_SCREEN(mi)]; */
+ int wire = MI_IS_WIREFRAME(mi);
GLfloat o = sp->opacity;
if (o <= 0) return;
o = 0.7; /* Too fast to see, so keep it consistent */
glPushMatrix();
- int wire = MI_IS_WIREFRAME(mi);
if (!wire)
glDisable (GL_TEXTURE_2D);
glColor4f (0, 0, 1, o);
diff --git a/hacks/glx/fliptext.c b/hacks/glx/fliptext.c
index 951c188..030900b 100644
--- a/hacks/glx/fliptext.c
+++ b/hacks/glx/fliptext.c
@@ -1,5 +1,5 @@
/*
- * fliptext, Copyright (c) 2005-2015 Jamie Zawinski <jwz@jwz.org>
+ * fliptext, Copyright (c) 2005-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -805,7 +805,7 @@ init_fliptext (ModeInfo *mi)
MI_INIT(mi, scs);
sc = &scs[MI_SCREEN(mi)];
- sc->lines = (line **) calloc (max_lines+1, sizeof(char *));
+ sc->lines = (line **) calloc (max_lines+1, sizeof(*sc->lines));
sc->dpy = MI_DISPLAY(mi);
diff --git a/hacks/glx/flyingtoasters.c b/hacks/glx/flyingtoasters.c
index a527e8b..dce20e7 100644
--- a/hacks/glx/flyingtoasters.c
+++ b/hacks/glx/flyingtoasters.c
@@ -1,4 +1,4 @@
-/* flyingtoasters, Copyright (c) 2003-2018 Jamie Zawinski <jwz@jwz.org>
+/* flyingtoasters, Copyright (c) 2003-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -40,6 +40,7 @@
#define DEF_NTOASTERS "20"
#define DEF_NSLICES "25"
#define DEF_TEXTURE "True"
+#define DEF_FOG "True"
#undef BELLRAND
#define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3)
@@ -138,6 +139,7 @@ static GLfloat speed;
static int ntoasters;
static int nslices;
static int do_texture;
+static int do_fog;
static XrmOptionDescRec opts[] = {
{ "-speed", ".speed", XrmoptionSepArg, 0 },
@@ -145,6 +147,8 @@ static XrmOptionDescRec opts[] = {
{ "-nslices", ".nslices", XrmoptionSepArg, 0 },
{"-texture", ".texture", XrmoptionNoArg, "True" },
{"+texture", ".texture", XrmoptionNoArg, "False" },
+ {"-fog", ".fog", XrmoptionNoArg, "True" },
+ {"+fog", ".fog", XrmoptionNoArg, "False" },
};
static argtype vars[] = {
@@ -152,6 +156,7 @@ static argtype vars[] = {
{&ntoasters, "ntoasters", "Count", DEF_NTOASTERS, t_Int},
{&nslices, "nslices", "Count", DEF_NSLICES, t_Int},
{&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool},
+ {&do_fog, "fog", "Fog", DEF_FOG, t_Bool},
};
ENTRYPOINT ModeSpecOpt toasters_opts = {countof(opts), opts, countof(vars), vars, NULL};
@@ -651,6 +656,12 @@ draw_grid (ModeInfo *mi)
glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, GRID_DEPTH/2);
glVertex3f( GRID_SIZE/2, GRID_SIZE/2, GRID_DEPTH/2);
glEnd();
+ glBegin(GL_QUADS);
+ glVertex3f( GRID_SIZE/2, -GRID_SIZE/2, -GRID_DEPTH/2);
+ glVertex3f( GRID_SIZE/2, GRID_SIZE/2, -GRID_DEPTH/2);
+ glVertex3f( 0, GRID_SIZE/2, -GRID_DEPTH/2);
+ glVertex3f( 0, -GRID_SIZE/2, -GRID_DEPTH/2);
+ glEnd();
glPopMatrix();
if (!MI_IS_WIREFRAME(mi)) glEnable(GL_LIGHTING);
@@ -845,6 +856,15 @@ draw_toasters (ModeInfo *mi)
glTranslatef (0, 0, -GRID_DEPTH/2.5);
draw_grid (mi);
+ if (do_fog && !MI_IS_WIREFRAME(mi))
+ {
+ GLfloat fog_color[4] = { 0, 0, 0, 1 };
+ glFogi (GL_FOG_MODE, GL_EXP2);
+ glFogfv (GL_FOG_COLOR, fog_color);
+ glFogf (GL_FOG_DENSITY, 0.0085);
+ glEnable (GL_FOG);
+ }
+
mi->polygon_count = 0;
for (i = 0; i < bp->nfloaters; i++)
{
@@ -872,11 +892,11 @@ free_toasters (ModeInfo *mi)
if (!bp->glx_context) return;
glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context);
- if (bp->dlists) free (bp->dlists);
if (bp->floaters) free (bp->floaters);
if (bp->user_trackball) gltrackball_free (bp->user_trackball);
for (i = 0; i < countof(all_objs); i++)
if (glIsList(bp->dlists[i])) glDeleteLists(bp->dlists[i], 1);
+ if (bp->dlists) free (bp->dlists);
if (bp->toast_texture) glDeleteTextures (1, &bp->toast_texture);
# ifndef HAVE_JWZGLES
if (bp->chrome_texture) glDeleteTextures (1, &bp->chrome_texture);
diff --git a/hacks/glx/flyingtoasters.man b/hacks/glx/flyingtoasters.man
index dbe5d5a..1de96da 100644
--- a/hacks/glx/flyingtoasters.man
+++ b/hacks/glx/flyingtoasters.man
@@ -12,6 +12,7 @@ flyingtoasters - 3d space-age jet-powered flying toasters (and toast)
[\-ntoasters \fInumber\fP]
[\-nslices \fInumber\fP]
[\-no-texture]
+[\-no-fog]
[\-wireframe]
[\-fps]
.SH DESCRIPTION
@@ -44,6 +45,9 @@ How many slices of toast to draw. Default 25.
.B \-no-texture
Turn off texture mapping (for slow machines.)
.TP 8
+.B \-no-fog
+Turn off fog (do not fade out distant toasters.)
+.TP 8
.B \-wireframe
Render in wireframe instead of solid.
.TP 8
diff --git a/hacks/glx/gears.c b/hacks/glx/gears.c
index feaae8c..86e7e97 100644
--- a/hacks/glx/gears.c
+++ b/hacks/glx/gears.c
@@ -1,4 +1,4 @@
-/* gears, Copyright (c) 2007-2014 Jamie Zawinski <jwz@jwz.org>
+/* gears, Copyright (c) 2007-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -684,7 +684,7 @@ planetary_gears (ModeInfo *mi)
g0->spokes = 0;
g0->size = INVOLUTE_LARGE;
- bp->gears = (gear **) calloc (6, sizeof(**bp->gears));
+ bp->gears = (gear **) calloc (6, sizeof(*bp->gears));
bp->ngears = 0;
bp->gears[bp->ngears++] = g1;
@@ -768,7 +768,7 @@ init_gears (ModeInfo *mi)
if (total_gears <= 0)
total_gears = 3 + fabs (BELLRAND (8) - 4); /* 3 - 7, mostly 3. */
- bp->gears = (gear **) calloc (total_gears+2, sizeof(**bp->gears));
+ bp->gears = (gear **) calloc (total_gears+2, sizeof(*bp->gears));
bp->ngears = 0;
for (i = 0; i < total_gears; i++)
diff --git a/hacks/glx/glhanoi.c b/hacks/glx/glhanoi.c
index eaf775f..46cdc68 100644
--- a/hacks/glx/glhanoi.c
+++ b/hacks/glx/glhanoi.c
@@ -1296,7 +1296,7 @@ static void initData(glhcfg *glhanoi)
glhanoi->pole[i].size = glhanoi->numberOfDisks;
}
checkAllocAndExit(
- !!(glhanoi->diskPos = calloc(glhanoi->numberOfDisks, sizeof(double))),
+ !!(glhanoi->diskPos = calloc(glhanoi->numberOfDisks, sizeof(float))),
"diskPos");
if (glhanoi->trailQSize) {
@@ -1430,7 +1430,7 @@ static GLubyte *makeTexture(glhcfg *glhanoi, int x_size, int y_size, int z_size,
double xi, yi, zi;
if((textureData =
- calloc(x_size * y_size * z_size, sizeof(GLuint))) == NULL) {
+ calloc(x_size * y_size * z_size, sizeof(GLubyte))) == NULL) {
return NULL;
}
diff --git a/hacks/glx/glplanet.c b/hacks/glx/glplanet.c
index a2f6889..83748cc 100644
--- a/hacks/glx/glplanet.c
+++ b/hacks/glx/glplanet.c
@@ -65,6 +65,7 @@
#define DEF_RESOLUTION "128"
#define DEF_IMAGE "BUILTIN"
#define DEF_IMAGE2 "BUILTIN"
+#define DEF_MODE "globe"
#define BLENDED_TERMINATOR
@@ -83,6 +84,7 @@ static char *which_image;
static char *which_image2;
static int resolution;
static GLfloat spin_arg;
+static char *mode_arg;
static XrmOptionDescRec opts[] = {
{"-rotate", ".rotate", XrmoptionNoArg, "true" },
@@ -96,9 +98,11 @@ static XrmOptionDescRec opts[] = {
{"-stars", ".stars", XrmoptionNoArg, "true" },
{"+stars", ".stars", XrmoptionNoArg, "false" },
{"-spin", ".spin", XrmoptionSepArg, 0 },
+ {"-no-spin", ".spin", XrmoptionNoArg, "0" },
{"-image", ".image", XrmoptionSepArg, 0 },
{"-image2", ".image2", XrmoptionSepArg, 0 },
{"-resolution", ".resolution", XrmoptionSepArg, 0 },
+ {"-mode", ".mode", XrmoptionSepArg, 0 },
};
static argtype vars[] = {
@@ -110,6 +114,7 @@ static argtype vars[] = {
{&spin_arg, "spin", "Spin", DEF_SPIN, t_Float},
{&which_image, "image", "Image", DEF_IMAGE, t_String},
{&which_image2,"image2", "Image", DEF_IMAGE2, t_String},
+ {&mode_arg, "mode" ,"Mode" , DEF_MODE, t_String},
{&resolution, "resolution","Resolution", DEF_RESOLUTION, t_Int},
};
@@ -154,6 +159,7 @@ typedef struct {
Bool button_down_p;
GLuint tex1, tex2;
int draw_axis;
+ enum { GLOBE, EQUIRECTANGULAR, MERCATOR } mode;
} planetstruct;
@@ -268,6 +274,138 @@ setup_texture (ModeInfo * mi)
static void
+unit_mercator (int stacks, int slices, int wire_p, Bool mercp)
+{
+ int i, j;
+ GLfloat x, y, ty, xs, ys;
+ GLfloat lastx = 0, lasty = 0, lastty = 0;
+ GLfloat r, north, south;
+
+ /* #### TODO: the grid lines are always rendered as Equirectangular,
+ not Mercator. */
+
+ stacks /= 2;
+ xs = 1.0 / slices;
+ ys = 1.0 / stacks;
+
+ glPushMatrix();
+ r = 1.8;
+ glScalef (r, r, r);
+ glFrontFace(GL_CW);
+
+ r = 0.35; /* Grids are roughly square at equator */
+
+ if (mercp)
+ {
+ /* The poles go to infinity. The traditional Mercator projection
+ omits the Northern and Southern latitudes asymmetrically to
+ move Europe toward the center. How Colonial! */
+ north = 85 / 180.0;
+ south = -66 / 180.0;
+ }
+ else
+ {
+ /* Antarctica should be roughly the same width as North America,
+ but even Equirectangular is crazypants here. */
+ north = 80 / 180.0;
+ south = -north;
+ }
+
+
+ for (j = 0, y = -0.5, ty = 0; j <= stacks;
+ lasty = y, lastty = ty, y += ys, j++)
+ {
+ GLfloat th;
+
+ ty = (0.5 - y) * (south - north) - south;
+ ty += 0.5;
+
+ th = M_PI * (ty - 0.5); /* latitude in radians */
+
+ if (mercp)
+ {
+ /* Obviously I have no idea what I'm doing here */
+ ty = 2 * (atan (pow(M_E, th)) - M_PI/4);
+ ty *= 0.41;
+ ty += 0.5;
+ }
+
+ /* Draw the end caps
+ */
+ if (j == 0 || j == stacks)
+ {
+ GLfloat xx, yy, lxx, lyy;
+ glFrontFace(j == 0 ? GL_CCW : GL_CW);
+
+ if (j == stacks && !wire_p) glEnd();
+
+ glNormal3f (0, (j == 0 ? -1 : 1), 0);
+
+ glBegin (wire_p ? GL_LINE_LOOP : GL_TRIANGLES);
+
+ for (i = 0, x = 0, lastx = 0, lxx = 0;
+ i <= slices;
+ lastx = x, lxx = xx, lyy = yy, x += xs, i++)
+ {
+ xx = r * cos(M_PI * 2 * x);
+ yy = r * sin(M_PI * 2 * x);
+ if (i == 0) continue;
+
+ glTexCoord2f (x, j == 0 ? 0 : 1);
+ glVertex3f (0, y, 0);
+ glTexCoord2f (lastx, ty); glVertex3f (lxx, y, lyy);
+ glTexCoord2f (x, ty); glVertex3f (xx, y, yy);
+ }
+ glEnd();
+ glFrontFace(GL_CW);
+
+ if (!wire_p) glBegin (GL_QUADS);
+ }
+
+ if (j == 0)
+ continue;
+
+ /* Draw one ring of quads.
+ */
+ for (i = 0, x = 0, lastx = 0; i <= slices; lastx = x, x += xs, i++)
+ {
+ GLfloat xx = r * cos(M_PI * 2 * x);
+ GLfloat yy = r * sin(M_PI * 2 * x);
+ GLfloat lx = r * cos(M_PI * 2 * lastx);
+ GLfloat ly = r * sin(M_PI * 2 * lastx);
+ GLfloat y2 = y;
+ GLfloat ly2 = lasty;
+
+#if 0
+ if (mercp)
+ {
+ y2 = ty - 0.5;
+ ly2 = lastty - 0.5;
+ }
+#endif
+
+ if (i == 0) continue;
+ if (wire_p) glBegin(GL_LINE_LOOP);
+ glNormal3f (lx, 0, ly);
+ glTexCoord2f (lastx, lastty); glVertex3f (lx, ly2, ly);
+ glNormal3f (xx, 0, yy);
+ glTexCoord2f (x, lastty); glVertex3f (xx, ly2, yy);
+ glNormal3f (xx, 0, yy);
+ glTexCoord2f (x, ty); glVertex3f (xx, y2, yy);
+ glNormal3f (lx, 0, ly);
+ glTexCoord2f (lastx, ty); glVertex3f (lx, y2, ly);
+ if (wire_p) glEnd();
+ }
+ }
+
+ if (!wire_p) glEnd();
+
+ glPopMatrix();
+}
+
+
+
+static void
init_stars (ModeInfo *mi)
{
planetstruct *gp = &planets[MI_SCREEN(mi)];
@@ -452,6 +590,20 @@ init_planet (ModeInfo * mi)
reshape_planet(mi, MI_WIDTH(mi), MI_HEIGHT(mi));
}
+ if (!mode_arg || !*mode_arg || !strcasecmp(mode_arg, "GLOBE"))
+ gp->mode = GLOBE;
+ else if (!strcasecmp(mode_arg, "EQUIRECTANGULAR"))
+ gp->mode = EQUIRECTANGULAR;
+ else if (!strcasecmp(mode_arg, "mercator"))
+ gp->mode = MERCATOR;
+ else
+ {
+ fprintf (stderr,
+ "%s: mode must be 'globe', 'merecator' or 'equirectangular',"
+ " not '%s'\n", progname, mode_arg);
+ exit (1);
+ }
+
{
char *f = get_string_resource(mi->dpy, "imageForeground", "Foreground");
char *b = get_string_resource(mi->dpy, "imageBackground", "Background");
@@ -513,7 +665,10 @@ init_planet (ModeInfo * mi)
glFrontFace(GL_CCW);
glPushMatrix();
glRotatef (90, 1, 0, 0);
- unit_sphere (resolution, resolution, wire);
+ if (gp->mode == GLOBE)
+ unit_sphere (resolution, resolution, wire);
+ else
+ unit_mercator (resolution, resolution, wire, (gp->mode == MERCATOR));
glPopMatrix();
glEndList();
@@ -533,24 +688,27 @@ init_planet (ModeInfo * mi)
}
# endif
- glPushMatrix();
- glScalef (1.01, 1.01, 1.01);
- unit_dome (resolution, resolution, wire);
-
-# ifdef BLENDED_TERMINATOR
- terminator_tube (mi, resolution);
- if (!wire)
+ if (gp->mode == GLOBE)
{
- /* We have to draw the transparent side of the mask too,
- though I'm not sure why. */
- GLfloat c[] = { 0, 0, 0, 0 };
- glColor4fv (c);
- if (!do_texture)
- glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c);
- glRotatef (180, 1, 0, 0);
+ glPushMatrix();
+ glScalef (1.01, 1.01, 1.01);
unit_dome (resolution, resolution, wire);
- }
+
+# ifdef BLENDED_TERMINATOR
+ terminator_tube (mi, resolution);
+ if (!wire)
+ {
+ /* We have to draw the transparent side of the mask too,
+ though I'm not sure why. */
+ GLfloat c[] = { 0, 0, 0, 0 };
+ glColor4fv (c);
+ if (!do_texture)
+ glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c);
+ glRotatef (180, 1, 0, 0);
+ unit_dome (resolution, resolution, wire);
+ }
# endif
+ }
glPopMatrix();
glEndList();
@@ -562,8 +720,10 @@ init_planet (ModeInfo * mi)
glPushMatrix ();
glRotatef (90, 1, 0, 0); /* unit_sphere is off by 90 */
glRotatef (8, 0, 1, 0); /* line up the time zones */
- unit_sphere (12, 24, 1);
- unit_sphere (12, 24, 1);
+ if (gp->mode == GLOBE)
+ unit_sphere (12, 24, 1);
+ else
+ unit_mercator (20, 24, 1, (gp->mode == MERCATOR));
glBegin(GL_LINES);
glVertex3f(0, -2, 0);
glVertex3f(0, 2, 0);
@@ -599,7 +759,8 @@ draw_planet (ModeInfo * mi)
if (do_rotate && !gp->button_down_p)
{
- gp->z -= 0.001 * spin_arg; /* the sun sets in the west */
+ int wat = gp->mode == GLOBE ? 1 : -1;
+ gp->z -= 0.001 * spin_arg * wat; /* the sun sets in the west */
if (gp->z < 0) gp->z += 1;
}
@@ -685,7 +846,7 @@ draw_planet (ModeInfo * mi)
glPopMatrix();
}
- else if (!do_texture || gp->tex2)
+ else if (!do_texture || (gp->tex2 && gp->mode == GLOBE))
{
/* Originally we just used GL_LIGHT0 to produce the day/night sides of
the planet, but that always looked crappy, even with a vast number of
@@ -802,6 +963,11 @@ draw_planet (ModeInfo * mi)
#endif /* BLENDED_TERMINATOR */
}
+ else if (gp->mode != GLOBE)
+ {
+ glDisable (GL_LIGHTING);
+ glDisable (GL_BLEND);
+ }
if (gp->draw_axis)
{
diff --git a/hacks/glx/glplanet.man b/hacks/glx/glplanet.man
index 6a62dc9..f0602a8 100644
--- a/hacks/glx/glplanet.man
+++ b/hacks/glx/glplanet.man
@@ -10,6 +10,7 @@ glplanet - rotating 3d texture-mapped planet.
[\-delay \fInumber\fP]
[\-image \fIfile\fP]
[\-image2 \fIfile\fP]
+[\-mode \fIstring\fP]
[\-resolution \fInumber\fP]
[\-wireframe]
[\-fps]
@@ -40,6 +41,15 @@ The day texture map to wrap around the planet's surface.
The night texture map to wrap around the planet's surface.
The two will be blended together at the dusk terminator.
.TP 8
+.B \-mode globe
+All is right with the world.
+.TP 8
+.B \-mode equirectangular
+Wat.
+.TP 8
+.B \-mode mercator
+Good day, Sir. I said GOOD DAY.
+.TP 8
.B \-resolution
The resolution of the planetary mesh. Default: 128.
.TP 8
diff --git a/hacks/glx/glslideshow.c b/hacks/glx/glslideshow.c
index 77c741c..0edc1eb 100644
--- a/hacks/glx/glslideshow.c
+++ b/hacks/glx/glslideshow.c
@@ -388,8 +388,8 @@ destroy_image (ModeInfo *mi, image *img)
int i;
if (!img) abort();
- if (!img->loaded_p) abort();
- if (!img->used_p) abort();
+ /* if (!img->loaded_p) abort(); */
+ /* if (!img->used_p) abort(); */
if (img->texid <= 0) abort();
if (img->refcount != 0) abort();
@@ -1200,6 +1200,10 @@ draw_slideshow (ModeInfo *mi)
new_sprite (mi);
if (!ss->redisplay_needed_p)
+ /* Nothing to do! Don't bother drawing a texture or even swapping the
+ frame buffers. Note that this means that the FPS display will be
+ wrong: "Load" will be frozen on whatever it last was, when in
+ reality it will be close to 0. */
return;
if (debug_p && ss->now - ss->prev_frame_time > 1)
@@ -1222,21 +1226,27 @@ ENTRYPOINT void
free_slideshow (ModeInfo *mi)
{
slideshow_state *ss = &sss[MI_SCREEN(mi)];
- int i;
+ /* int i; */
if (!ss->glx_context) return;
glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *ss->glx_context);
if (ss->font_data) free_texture_font (ss->font_data);
- for (i = 0; i < ss->nimages; i++) {
- if (ss->images[i]) {
- if (ss->images[i]->title) free (ss->images[i]->title);
- if (ss->images[i]->texid) glDeleteTextures (1, &ss->images[i]->texid);
- free (ss->images[i]);
- }
+ ss->font_data = 0;
+
+# if 0
+ /* The lifetime of these objects is incomprehensible.
+ Doing this causes free pointers to be run from the XtInput.
+ */
+ for (i = ss->nimages-1; i >= 0; i--) {
+ if (ss->images[i] && ss->images[i]->refcount == 0)
+ destroy_image (mi, ss->images[i]);
}
- for (i = 0; i < countof(ss->sprites); i++) {
- if (ss->sprites[i]) free (ss->sprites[i]);
+
+ for (i = countof(ss->sprites)-1; i >= 0; i--) {
+ if (ss->sprites[i])
+ destroy_sprite (mi, ss->sprites[i]);
}
+# endif
}
XSCREENSAVER_MODULE_2 ("GLSlideshow", glslideshow, slideshow)
diff --git a/hacks/glx/gravitywell.c b/hacks/glx/gravitywell.c
new file mode 100644
index 0000000..7078764
--- /dev/null
+++ b/hacks/glx/gravitywell.c
@@ -0,0 +1,767 @@
+/* gravitywell, Copyright (c) 2019 Jamie Zawinski <jwz@jwz.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+
+#define DEFAULTS "*delay: 30000 \n" \
+ "*count: 15 \n" \
+ "*gridColor: #00FF00\n" \
+ "*gridColor2: #FF0000\n" \
+ "*showFPS: False \n" \
+ "*wireframe: False \n"
+
+# define release_gw 0
+#undef countof
+#define countof(x) (sizeof((x))/sizeof((*x)))
+
+#define DEF_SPEED "1.0"
+#define DEF_RESOLUTION "1.0"
+#define DEF_GRID_SIZE "1.0"
+
+#include "xlockmore.h"
+#include "gltrackball.h"
+#include "colors.h"
+#include "hsv.h"
+
+#include <ctype.h>
+
+#define ASSERT(x)
+
+#ifdef USE_GL /* whole file */
+
+typedef struct {
+ GLfloat mass;
+ GLfloat ro2, rm2, ri2; /* outer/middle/inner */
+ GLfloat ro, radius;
+ GLfloat x, y, dx, dy;
+ GLfloat surface_gravity, depth;
+} star;
+
+typedef struct {
+ GLXContext *glx_context;
+ trackball_state *user_trackball;
+ Bool button_down_p;
+ int nstars;
+ star *stars;
+ int grid_w, grid_h;
+ GLfloat *grid;
+ char *segs;
+ GLfloat *vtx, *col;
+ GLfloat color[4];
+ int ncolors;
+ XColor *colors;
+} gw_configuration;
+
+static gw_configuration *bps = NULL;
+
+static GLfloat speed, resolution, grid_size;
+
+#define RESOLUTION_BASE 512
+#define GRID_SIZE_BASE 7
+#define SPEED_BASE 2.5
+#define MASS_EPSILON 0.03
+#define SLOPE_EPSILON 0.06
+#define GRID_SEG 16u /* Power-of-two here is faster. */
+#define MAX_MASS_COLOR 120
+
+static XrmOptionDescRec opts[] = {
+ { "-speed", ".speed", XrmoptionSepArg, 0 },
+ { "-resolution", ".resolution", XrmoptionSepArg, 0 },
+ { "-grid-size", ".gridSize", XrmoptionSepArg, 0 },
+};
+
+static argtype vars[] = {
+ {&speed, "speed", "Speed", DEF_SPEED, t_Float},
+ {&resolution, "resolution", "Resolution", DEF_RESOLUTION, t_Float},
+ {&grid_size, "gridSize", "GridSize", DEF_GRID_SIZE, t_Float},
+};
+
+ENTRYPOINT ModeSpecOpt gw_opts = {
+ countof(opts), opts, countof(vars), vars, NULL};
+
+
+#define MAX(a,b) ((a)>(b)?(a):(b))
+#define MIN(a,b) ((a)<(b)?(a):(b))
+#define WCLIP(x,hi) MIN(MAX((int)(x),0),(hi))
+
+/* Window management, etc
+ */
+ENTRYPOINT void
+reshape_gw (ModeInfo *mi, int width, int height)
+{
+ GLfloat h = (GLfloat) height / (GLfloat) width;
+ int y = 0;
+
+ if (width > height * 5) { /* tiny window: show middle */
+ height = width * 9/16;
+ y = -height/2;
+ h = height / (GLfloat) width;
+ }
+
+ glViewport (0, y, width, height);
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective (40, 1/h, 10, 1000);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ gluLookAt( 0, 0, 30,
+ 0, 0, 0,
+ 0, 1, 0);
+
+ glClear(GL_COLOR_BUFFER_BIT);
+}
+
+
+ENTRYPOINT Bool
+gw_handle_event (ModeInfo *mi, XEvent *event)
+{
+ gw_configuration *bp = &bps[MI_SCREEN(mi)];
+
+ if (gltrackball_event_handler (event, bp->user_trackball,
+ MI_WIDTH (mi), MI_HEIGHT (mi),
+ &bp->button_down_p))
+ return True;
+ return False;
+}
+
+
+static void
+parse_color (ModeInfo *mi, char *key, GLfloat color[4])
+{
+ XColor xcolor;
+ char *string = get_string_resource (mi->dpy, key, "Color");
+ if (!XParseColor (mi->dpy, mi->xgwa.colormap, string, &xcolor))
+ {
+ fprintf (stderr, "%s: unparsable color in %s: %s\n", progname,
+ key, string);
+ exit (1);
+ }
+ free (string);
+
+ color[0] = xcolor.red / 65536.0;
+ color[1] = xcolor.green / 65536.0;
+ color[2] = xcolor.blue / 65536.0;
+ color[3] = 1;
+}
+
+
+static void
+new_star (const gw_configuration *bp, star *s)
+{
+ int w = bp->grid_w * GRID_SEG;
+
+ s->radius = 2 * (2 + frand(3) + frand(3) + frand(3));
+ s->mass = s->radius * 150 * (2 + frand(3) + frand(3) + frand(3));
+
+ s->ro2 = s->mass / MASS_EPSILON;
+ s->ro = sqrt (s->ro2);
+ s->rm2 = pow (s->mass * (2.0f / SLOPE_EPSILON), 2.0f / 3.0f);
+ s->ri2 = s->radius * s->radius;
+ if (s->rm2 < s->ri2)
+ s->rm2 = s->ri2;
+ if (s->ro2 < s->rm2)
+ s->ro2 = s->rm2;
+
+ s->x = w * (s == bp->stars ? 0.5 : (0.35 + frand(0.3)));
+ s->dx = ((frand(1.0) - 0.5) * 0.1) / resolution;
+ s->dy = (0.1 + frand(0.6)) / resolution;
+
+ /* What the experienced gravitation would be at the surface of the
+ star, were the mass actually held in a singularity at its center.
+ */
+ s->surface_gravity = s->mass / s->ri2;
+ s->depth = s->surface_gravity;
+}
+
+
+static void
+move_stars (ModeInfo *mi)
+{
+ gw_configuration *bp = &bps[MI_SCREEN(mi)];
+ int w = bp->grid_w * GRID_SEG;
+ int h = bp->grid_h * GRID_SEG;
+ int i;
+
+ for (i = 0; i < bp->nstars; i++)
+ {
+ star *s = &bp->stars[i];
+ /* Move stars off screen until most of their influence fades */
+ GLfloat off = speed * SPEED_BASE * resolution;
+ s->x += s->dx * off;
+ s->y += s->dy * off;
+
+ if (s->x < -s->ro ||
+ s->y < -s->ro ||
+ s->x >= w + s->ro ||
+ s->y >= h + s->ro)
+ {
+ new_star (bp, s);
+ s->y = -s->ro;
+ }
+ }
+}
+
+
+static void
+calc_o (gw_configuration *bp, GLfloat mass, GLfloat cx, GLfloat y02,
+ unsigned from, unsigned to)
+{
+ GLfloat x0 = cx - from * GRID_SEG;
+ GLfloat g0 = mass / (x0*x0 + y02);
+ unsigned x;
+
+ ASSERT (to <= bp->grid_w || to <= bp->grid_h);
+
+ for (x = from; x < to; x++)
+ {
+ GLfloat *g = &bp->grid[x * GRID_SEG];
+ GLfloat g1;
+
+ x0 = cx - (x + 1) * GRID_SEG;
+ g1 = mass / (x0*x0 + y02);
+
+ g[0] += g0;
+ if (bp->segs[x])
+ {
+ GLfloat d = (g1 - g0) / GRID_SEG;
+ unsigned i;
+ for(i = 1; i != GRID_SEG; i++)
+ {
+ g0 += d;
+ g[i] += g0;
+ }
+ }
+ g0 = g1;
+ }
+}
+
+
+static void
+make_hires (gw_configuration *bp, unsigned from, unsigned to, unsigned w)
+{
+ unsigned x;
+
+ /* One bigger than from/to so that there's a good angle between the middle
+ and inner zones.
+
+ Don't make the last GRID_SEG high-res. This keeps the length consistent.
+ */
+ if (from)
+ from--;
+ from = MIN(from / GRID_SEG, w - 1);
+ to = MIN(to / GRID_SEG + 1, w - 1);
+
+ ASSERT (to <= bp->grid_w - 1 || to <= bp->grid_h - 1);
+
+ for (x = from; x < to; x++)
+ {
+ if (! bp->segs[x])
+ {
+ GLfloat *g = &bp->grid[x * GRID_SEG];
+ GLfloat g0 = g[0], g1 = g[GRID_SEG];
+ GLfloat d = (g1 - g0) / GRID_SEG;
+ unsigned i;
+ for (i = 1; i != GRID_SEG; i++)
+ {
+ g0 += d;
+ g[i] = g0;
+ }
+ bp->segs[x] = True;
+ }
+ }
+}
+
+
+static void
+calc_m (gw_configuration *bp, GLfloat mass, GLfloat cx, GLfloat y02,
+ unsigned from, unsigned to)
+{
+ GLfloat *gridp = bp->grid;
+ unsigned x;
+
+ ASSERT (to <= bp->grid_w * GRID_SEG + 1 || to <= bp->grid_h * GRID_SEG + 1);
+
+ for (x = from; x < to; x++)
+ {
+ /* Inverse square of distance from mass as a point source */
+ GLfloat x0 = cx - x;
+ gridp[x] += mass / (x0*x0 + y02);
+ }
+}
+
+
+#define EASE(r) (sin ((r) * M_PI_2))
+
+static void
+draw_row (ModeInfo *mi, int w, int y, Bool swap)
+{
+ gw_configuration *bp = &bps[MI_SCREEN(mi)];
+ int i;
+ int x;
+ int polys;
+ int w2 = w * GRID_SEG;
+
+ GLfloat *vtx_x;
+ GLfloat *vtx_y;
+ GLfloat *gridp = bp->grid;
+ memset (gridp, 0, w2 * sizeof(*gridp));
+ memset (bp->segs, 0, w);
+
+ for (i = 0; i < bp->nstars; i++)
+ {
+ star *s = &bp->stars[i];
+ GLfloat cx, cy;
+ unsigned olo, ohi, mlo, mhi, ilo, ihi;
+ GLfloat mass, max;
+ /* Move stars off screen until most of their influence fades */
+ GLfloat ro, rm, ri;
+
+ GLfloat y0;
+ GLfloat y02;
+
+ if (swap)
+ {
+ cy = s->x;
+ cx = s->y;
+ }
+ else
+ {
+ cx = s->x;
+ cy = s->y;
+ }
+ mass = s->mass;
+ max = s->surface_gravity;
+
+ y0 = cy - y;
+ y02 = y0 * y0;
+
+ if (y02 > s->ro2) continue;
+
+ ro = sqrtf (s->ro2 - y02);
+ olo = WCLIP((cx - ro) / GRID_SEG + 1, w); /* GLfloat -> int */
+ ohi = WCLIP((cx + ro) / GRID_SEG + 1, w);
+
+ rm = s->rm2 > y02 ? sqrtf (s->rm2 - y02) : 0;
+ mlo = WCLIP((cx - rm) + 1, w2);
+ mhi = WCLIP((cx + rm) + 1, w2);
+
+ ASSERT (mlo <= mhi);
+
+ if (mlo != mhi)
+ {
+ ri = s->ri2 > y02 ? sqrtf (s->ri2 - y02) : 0;
+ ilo = WCLIP(cx - ri + 1, w2);
+ ihi = WCLIP(cx + ri + 1, w2);
+
+ mlo -= mlo % GRID_SEG;
+ mhi += GRID_SEG - 1;
+ mhi -= mhi % GRID_SEG;
+
+ /* These go first. */
+ make_hires (bp, mlo, ilo, w);
+ make_hires (bp, ihi, mhi, w);
+
+ calc_m (bp, mass, cx, y02, mlo, ilo);
+ calc_m (bp, mass, cx, y02, ihi, mhi);
+
+ /* This does a bit more work than it needs to. */
+ for (x = ilo; x < ihi; x++)
+ gridp[x] += max;
+ }
+
+ calc_o (bp, mass, cx, y02, olo, mlo / GRID_SEG);
+ calc_o (bp, mass, cx, y02, mhi / GRID_SEG, ohi);
+ }
+
+ if (swap)
+ {
+ vtx_y = bp->vtx;
+ vtx_x = bp->vtx + 1;
+ }
+ else
+ {
+ vtx_x = bp->vtx;
+ vtx_y = bp->vtx + 1;
+ }
+
+# define COLOR_CODE 0
+
+# if COLOR_CODE
+ {
+ unsigned grid_max = bp->grid_w > bp->grid_h ? bp->grid_w : bp->grid_h;
+ GLfloat *color = malloc(sizeof(GLfloat) * 4 * (grid_max * GRID_SEG + 1));
+ glEnableClientState (GL_COLOR_ARRAY);
+ glColorPointer (4, GL_FLOAT, 0, color);
+# endif
+
+ ASSERT (! bp->segs[w - 1]);
+
+ polys = 0;
+ for (x = 0; x != w; x++)
+ {
+ if (! bp->segs[x])
+ {
+ int ci;
+ size_t vp = polys * 3;
+ size_t cp = polys * 4;
+# if COLOR_CODE
+ GLfloat slope = 0;
+ if (x != 0)
+ slope += fabs(gridp[x * GRID_SEG] - gridp[(x - 1) * GRID_SEG]);
+ if (x != w - 1)
+ slope += fabs(gridp[(x + 1) * GRID_SEG] - gridp[x * GRID_SEG]);
+ slope = 1 - (slope / (SLOPE_EPSILON * 2));
+
+ color[cp] = slope;
+ color[cp + 1] = slope;
+ color[cp + 2] = 1;
+ color[cp + 3] = 1;
+# endif
+ vtx_x[vp] = x * GRID_SEG;
+ bp->vtx[vp + 2] = gridp[x * GRID_SEG];
+ polys += 1;
+
+ ci = EASE (bp->vtx[vp + 2] / MAX_MASS_COLOR) * bp->ncolors;
+ bp->col[cp] = bp->colors[ci].red / 65536.0;
+ bp->col[cp+1] = bp->colors[ci].green / 65536.0;
+ bp->col[cp+2] = bp->colors[ci].blue / 65536.0;
+ bp->col[cp+3] = 1;
+ }
+ else
+ {
+ for(i = 0; i != GRID_SEG; i++)
+ {
+ int ci;
+ size_t vp = (polys + i) * 3;
+ size_t cp = (polys + i) * 4;
+# if COLOR_CODE
+ color[cp] = 1;
+ color[cp + 1] = 0.75;
+ color[cp + 2] = 0;
+ color[cp + 3] = 1;
+# endif
+ vtx_x[vp] = x * GRID_SEG + i;
+ bp->vtx[vp + 2] = gridp[x * GRID_SEG + i];
+
+ ci = EASE (bp->vtx[vp + 2] / MAX_MASS_COLOR) * bp->ncolors;
+ bp->col[cp] = bp->colors[ci].red / 65536.0;
+ bp->col[cp+1] = bp->colors[ci].green / 65536.0;
+ bp->col[cp+2] = bp->colors[ci].blue / 65536.0;
+ bp->col[cp+3] = 1;
+ }
+ polys += GRID_SEG;
+ }
+ }
+
+ for (i = 0; i < polys; i++)
+ vtx_y[i * 3] = y; /* + random() * (MASS_EPSILON / (MAXRAND)); */
+
+ mi->polygon_count += polys;
+ glDrawArrays (GL_LINE_STRIP, 0, polys);
+
+# if COLOR_CODE
+ glDisableClientState (GL_COLOR_ARRAY);
+ free (color);
+ }
+# endif
+}
+
+
+ENTRYPOINT void
+init_gw (ModeInfo *mi)
+{
+ gw_configuration *bp;
+ unsigned grid_max, vtx_max;
+ int i;
+ MI_INIT (mi, bps);
+
+ bp = &bps[MI_SCREEN(mi)];
+
+ bp->glx_context = init_GL(mi);
+
+ reshape_gw (mi, MI_WIDTH(mi), MI_HEIGHT(mi));
+
+ glShadeModel(GL_SMOOTH);
+
+ glEnable(GL_DEPTH_TEST);
+ glEnable(GL_NORMALIZE);
+ glEnable(GL_CULL_FACE);
+
+ {
+ int h1, h2;
+ double s1, v1, s2, v2;
+ GLfloat color2[4];
+ parse_color (mi, "gridColor", bp->color);
+ parse_color (mi, "gridColor2", color2);
+ rgb_to_hsv (bp->color[0] * 65536,
+ bp->color[1] * 65536,
+ bp->color[2] * 65536,
+ &h1, &s1, &v1);
+ rgb_to_hsv (color2[0] * 65536,
+ color2[1] * 65536,
+ color2[2] * 65536,
+ &h2, &s2, &v2);
+ bp->ncolors = 128;
+ bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor));
+ make_color_ramp (0, 0, 0,
+ h1, s1, v1, h2, s2, v2,
+ bp->colors, &bp->ncolors,
+ False, 0, False);
+ }
+
+ bp->user_trackball = gltrackball_init (False);
+
+ bp->grid_w = (RESOLUTION_BASE * resolution) / GRID_SEG;
+ if (bp->grid_w < 2) bp->grid_w = 2;
+ bp->grid_h = bp->grid_w;
+
+ grid_max = bp->grid_w > bp->grid_h ? bp->grid_w : bp->grid_h;
+ vtx_max = grid_max * GRID_SEG;
+ bp->grid = (GLfloat *) calloc (vtx_max, sizeof(*bp->grid));
+ bp->vtx = (GLfloat *) calloc (vtx_max * 3, sizeof(*bp->vtx));
+ bp->col = (GLfloat *) calloc (vtx_max * 4, sizeof(*bp->col));
+ bp->segs = (char *) calloc (grid_max, sizeof(*bp->segs));
+ if (! bp->grid || ! bp->vtx || ! bp->col || ! bp->segs) abort();
+
+ bp->nstars = MI_COUNT(mi);
+ bp->stars = (star *) calloc (bp->nstars, sizeof (star));
+
+ for (i = 0; i < bp->nstars; i++)
+ {
+ star *s = &bp->stars[i];
+ new_star (bp, s);
+ s->y = frand(s->ro * 2 + bp->grid_h * GRID_SEG) - s->ro;
+ }
+
+ /* Let's tilt the floor a little. */
+ gltrackball_reset (bp->user_trackball,
+ -0.4 + frand(0.8),
+ -0.3 + frand(0.2));
+}
+
+
+ENTRYPOINT void
+draw_gw (ModeInfo *mi)
+{
+ gw_configuration *bp = &bps[MI_SCREEN(mi)];
+ int wire = MI_IS_WIREFRAME(mi);
+ Display *dpy = MI_DISPLAY(mi);
+ Window window = MI_WINDOW(mi);
+ int gridmod = grid_size * GRID_SIZE_BASE;
+ int x, y, i;
+ int sample_x, sample_y;
+ GLfloat sample_z = -1;
+
+ if (!bp->glx_context)
+ return;
+
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context);
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glPushMatrix ();
+
+# ifdef HAVE_MOBILE
+ glRotatef (current_device_rotation(), 0, 0, 1); /* right side up */
+# endif
+
+ gltrackball_rotate (bp->user_trackball);
+
+#if 0
+ glScalef(0.05/resolution, 0.05/resolution, 0.05/resolution);
+#endif
+
+ glRotatef (90, 1, 0, 0);
+ glTranslatef (-bp->grid_w * (GRID_SEG / 2.0f),
+ -bp->grid_h * (GRID_SEG * 0.75f),
+ 3);
+
+#if 0
+ glColor3f(1,0,0);
+ glPushMatrix();
+ glTranslatef(0,0,0);
+ glScalef (bp->grid_w * GRID_SEG,
+ bp->grid_w * GRID_SEG,
+ bp->grid_w * GRID_SEG);
+ glDisable (GL_FOG);
+ glBegin(GL_LINE_LOOP);
+ glVertex3f(0, 0, 0);
+ glVertex3f(1, 0, 0);
+ glVertex3f(1, 1, 0);
+ glVertex3f(.4, 1, 0);
+ glVertex3f(.5, .5, 0);
+ glVertex3f(.6, 1, 0);
+ glVertex3f(0, 1, 0);
+ glEnd();
+ glPopMatrix();
+ glColor3f(0,1,0);
+ if (!wire) glEnable (GL_FOG);
+#endif
+
+ if (!wire)
+ {
+ GLfloat fog_color[4] = { 0, 0, 0, 1 };
+
+ glLineWidth (2);
+ glEnable (GL_LINE_SMOOTH);
+ glHint (GL_LINE_SMOOTH_HINT, GL_NICEST);
+ glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable (GL_BLEND);
+
+ glFogi (GL_FOG_MODE, GL_EXP2);
+ glFogfv (GL_FOG_COLOR, fog_color);
+ glFogf (GL_FOG_DENSITY, 0.005);
+ glEnable (GL_FOG);
+ }
+
+ glEnableClientState (GL_COLOR_ARRAY);
+ glEnableClientState (GL_VERTEX_ARRAY);
+ glColorPointer (4, GL_FLOAT, 0, bp->col);
+ glVertexPointer (3, GL_FLOAT, 0, bp->vtx);
+
+ /* Somewhere near the midpoint of the view */
+ sample_x = ((int) (bp->grid_w * GRID_SEG * 0.5) / gridmod) * gridmod;
+ sample_y = ((int) (bp->grid_h * GRID_SEG * 0.75) / GRID_SEG) * GRID_SEG;
+
+ /* Find the cumulative gravitational effect at the midpoint of each star,
+ for the depth of the foot-circle. This duplicates some of the draw_row()
+ logic. */
+ for (i = 0; i < bp->nstars; i++)
+ {
+ star *s0 = &bp->stars[i];
+ GLfloat x0 = s0->x;
+ GLfloat y0 = s0->y;
+ int j;
+ s0->depth = s0->surface_gravity;
+ for (j = 0; j < bp->nstars; j++)
+ {
+ star *s1;
+ GLfloat x1, y1, d2;
+ if (i == j) continue;
+ s1 = &bp->stars[j];
+ x1 = s1->x;
+ y1 = s1->y;
+ d2 = (x1-x0)*(x1-x0) + (y1-y0)*(y1-y0);
+ s0->depth += s1->mass / d2;
+ }
+ }
+
+ mi->polygon_count = 0;
+ for (y = 0; y < (bp->grid_h - 1) * GRID_SEG; y += gridmod)
+ draw_row (mi, bp->grid_w, y, False);
+ for (x = 0; x < (bp->grid_w - 1) * GRID_SEG; x += gridmod)
+ {
+ draw_row (mi, bp->grid_h, x, True);
+ if (x == sample_x)
+ sample_z = bp->grid[sample_y];
+ }
+
+ if (mi->fps_p)
+ {
+ /* Mass of Sol is 2x10^30kg, or 332 kilo-Earths.
+ But I'm not sure what the funniest number to put here is. */
+ /* mi->recursion_depth = (int) sample_z/4; */
+ mi->recursion_depth = (int) (sample_z * 30000);
+ glColor4fv (bp->color);
+ glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, bp->color);
+ glBegin(GL_LINES);
+ glVertex3f (sample_x-0.15, sample_y-0.15, sample_z);
+ glVertex3f (sample_x+0.15, sample_y+0.15, sample_z);
+ glVertex3f (sample_x-0.15, sample_y+0.15, sample_z);
+ glVertex3f (sample_x+0.15, sample_y-0.15, sample_z);
+ glEnd();
+ }
+
+ /* Draw a circle around the "footprint" at the bottom of the gravity well.
+ */
+ for (i = 0; i < bp->nstars; i++)
+ {
+ int steps = 16;
+ star *s = &bp->stars[i];
+ GLfloat th, color[4];
+ int ci;
+ ci = EASE (s->depth / MAX_MASS_COLOR) * bp->ncolors;
+ color[0] = bp->colors[ci].red / 65536.0;
+ color[1] = bp->colors[ci].green / 65536.0;
+ color[2] = bp->colors[ci].blue / 65536.0;
+ color[3] = 1;
+ glColor4fv (color);
+ glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color);
+ glPushMatrix();
+ glTranslatef (s->x, s->y, 0);
+ glBegin (GL_LINE_LOOP);
+ for (th = 0; th < M_PI * 2; th += M_PI/steps)
+ glVertex3f (s->radius * cos(th), s->radius * sin(th), s->depth);
+ glEnd();
+ glPopMatrix();
+ mi->polygon_count += steps;
+ }
+
+#if 0
+ {
+ for (i = 0; i < bp->nstars; i++)
+ {
+ star *s = &bp->stars[i];
+ GLfloat maxr = sqrt (s->mass / MASS_EPSILON);
+ GLfloat th;
+ glPushMatrix();
+ glTranslatef (s->x, s->y, 0);
+ glColor3f(0, 0, 1);
+ glBegin (GL_LINE_LOOP);
+ for (th = 0; th < M_PI * 2; th += M_PI/32)
+ glVertex3f (s->radius * cos(th), s->radius * sin(th), 0);
+ glEnd();
+ glColor3f(0, 0, 0.5);
+ glBegin (GL_LINE_LOOP);
+ for (th = 0; th < M_PI * 2; th += M_PI/32)
+ glVertex3f (maxr * cos(th), maxr * sin(th), 0);
+ glEnd();
+ glBegin (GL_LINES);
+ glVertex3f ( 3000 * s->dx, 3000 * s->dy, 0);
+ glVertex3f (-3000 * s->dx, -3000 * s->dy, 0);
+ glEnd();
+ glPopMatrix();
+ }
+ }
+#endif
+
+ glPopMatrix ();
+
+ if (! bp->button_down_p)
+ move_stars (mi);
+
+ if (mi->fps_p) do_fps (mi);
+ glFinish();
+
+ glXSwapBuffers(dpy, window);
+}
+
+
+ENTRYPOINT void
+free_gw (ModeInfo *mi)
+{
+ gw_configuration *bp = &bps[MI_SCREEN(mi)];
+
+ if (!bp->glx_context) return;
+ glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context);
+
+ if (bp->user_trackball) gltrackball_free (bp->user_trackball);
+ if (bp->stars) free (bp->stars);
+ if (bp->grid) free (bp->grid);
+ if (bp->vtx) free (bp->vtx);
+ if (bp->col) free (bp->col);
+ if (bp->segs) free (bp->segs);
+ if (bp->colors) free (bp->colors);
+}
+
+XSCREENSAVER_MODULE_2 ("GravityWell", gravitywell, gw)
+
+#endif /* USE_GL */
diff --git a/hacks/glx/gravitywell.man b/hacks/glx/gravitywell.man
new file mode 100644
index 0000000..a33d578
--- /dev/null
+++ b/hacks/glx/gravitywell.man
@@ -0,0 +1,64 @@
+.TH XScreenSaver 1 "" "X Version 11"
+.SH NAME
+gravitywell - spaaaaace.
+.SH SYNOPSIS
+.B gravitywell
+[\-display \fIhost:display.screen\fP]
+[\-visual \fIvisual\fP]
+[\-window]
+[\-root]
+[\-delay \fInumber\fP]
+[\-speed \fInumber\fP]
+[\-resolution \fInumber\fP]
+[\-grid-size \fInumber\fP]
+[\-count \fInumber\fP]
+.SH DESCRIPTION
+Massive objects distort space in a two dimensional universe.
+.SH OPTIONS
+.TP 8
+.B \-visual \fIvisual\fP
+Specify which visual to use. Legal values are the name of a visual class,
+or the id number (decimal or hex) of a specific visual.
+.TP 8
+.B \-window
+Draw on a newly-created window. This is the default.
+.TP 8
+.B \-root
+Draw on the root window.
+.TP 8
+.B \-delay \fInumber\fP
+Per-frame delay, in microseconds. Default: 30000 (0.03 seconds).
+.TP 8
+.B \-speed \fInumber\fP
+Animation speed. 2.0 means twice as fast, 0.5 means half as fast.
+.TP 8
+.B \-resolution \fInumber\fP
+Density of the underlying universe. Default: 1.0.
+.TP 8
+.B \-grid-size \fInumber\fP
+Grid Size. Smaller values are more dense. Default: 1.0.
+.TP 8
+.B \-count \fInumber\fP
+Number of stars. Default: 15.
+.SH ENVIRONMENT
+.PP
+.TP 8
+.B DISPLAY
+to get the default host and display number.
+.TP 8
+.B XENVIRONMENT
+to get the name of a resource file that overrides the global resources
+stored in the RESOURCE_MANAGER property.
+.SH SEE ALSO
+.BR X (1),
+.BR xscreensaver (1)
+.SH COPYRIGHT
+Copyright \(co 2019 by Jamie Zawinski. Permission to use, copy, modify,
+distribute, and sell this software and its documentation for any purpose is
+hereby granted without fee, provided that the above copyright notice appear
+in all copies and that both that copyright notice and this permission notice
+appear in supporting documentation. No representations are made about the
+suitability of this software for any purpose. It is provided "as is" without
+express or implied warranty.
+.SH AUTHOR
+Jamie Zawinski.
diff --git a/hacks/glx/hypertorus.c b/hacks/glx/hypertorus.c
index df64923..8aa8d4d 100644
--- a/hacks/glx/hypertorus.c
+++ b/hacks/glx/hypertorus.c
@@ -736,6 +736,10 @@ static void display_hypertorus(ModeInfo *mi)
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
+ /* Let's keep a constant aspect ratio rather than stretching with the
+ shape of the window */
+ glScalef (hp->WindH / (GLfloat) hp->WindW, 1, 1);
+
mi->polygon_count = hypertorus(mi,0.0,2.0*M_PI,0.0,2.0*M_PI,64,64);
}
diff --git a/hacks/glx/jigsaw.c b/hacks/glx/jigsaw.c
index 38716e2..9c9e911 100644
--- a/hacks/glx/jigsaw.c
+++ b/hacks/glx/jigsaw.c
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1997-2017 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1997-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -555,7 +555,7 @@ draw_piece (jigsaw_configuration *jc, puzzle_piece *p,
# else /* !HAVE_TESS */
GLfloat *tri = (GLfloat *)
- (GLfloat *) malloc (s->n_points * 4 * 3 * 3 * sizeof(*pts));
+ malloc (s->n_points * 4 * 3 * 3 * sizeof(*tri));
GLfloat *otri = tri;
int count;
GLdouble zz;
diff --git a/hacks/glx/lament.c b/hacks/glx/lament.c
index d84a58f..6af37c4 100644
--- a/hacks/glx/lament.c
+++ b/hacks/glx/lament.c
@@ -209,7 +209,7 @@ typedef enum {
LAMENT_LEVIATHAN_EXPAND,
LAMENT_LEVIATHAN_UNTWIST,
LAMENT_LEVIATHAN_UNFADE,
- LAMENT_LEVIATHAN_UNSPIN,
+ LAMENT_LEVIATHAN_UNSPIN
} lament_type;
diff --git a/hacks/glx/peepers.c b/hacks/glx/peepers.c
index 4d15ff8..3dc8fc1 100644
--- a/hacks/glx/peepers.c
+++ b/hacks/glx/peepers.c
@@ -1,4 +1,4 @@
-/* peepers, Copyright (c) 2018 Jamie Zawinski <jwz@jwz.org>
+/* peepers, Copyright (c) 2018-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -851,7 +851,7 @@ draw_ball (ModeInfo *mi, component which)
polys++;
}
glEnd();
- return polys;
+ goto DONE;
}
for (i = xstart; i <= xstop; i++)
@@ -1009,6 +1009,7 @@ draw_ball (ModeInfo *mi, component which)
if (!wire)
glEnd();
+ DONE:
free (stacks);
free (normals);
diff --git a/hacks/glx/quickhull.c b/hacks/glx/quickhull.c
index 4c46ca0..ff517db 100644
--- a/hacks/glx/quickhull.c
+++ b/hacks/glx/quickhull.c
@@ -1351,10 +1351,11 @@ qh_quickhull3d(qh_vertex_t const* vertices, unsigned int nvertices)
}
for (i = 0; i < context.nfaces; ++i) {
+ qh_half_edge_t e0, e1, e2;
if (!context.valid[i]) { continue; }
- qh_half_edge_t e0 = context.edges[context.faces[i].edges[0]];
- qh_half_edge_t e1 = context.edges[context.faces[i].edges[1]];
- qh_half_edge_t e2 = context.edges[context.faces[i].edges[2]];
+ e0 = context.edges[context.faces[i].edges[0]];
+ e1 = context.edges[context.faces[i].edges[1]];
+ e2 = context.edges[context.faces[i].edges[2]];
m.vertices[m.nvertices++] = context.vertices[e0.to_vertex];
m.vertices[m.nvertices++] = context.vertices[e1.to_vertex];
diff --git a/hacks/glx/sonar-icmp.c b/hacks/glx/sonar-icmp.c
index 862f358..961dcf5 100644
--- a/hacks/glx/sonar-icmp.c
+++ b/hacks/glx/sonar-icmp.c
@@ -1,4 +1,4 @@
-/* sonar, Copyright (c) 1998-2018 Jamie Zawinski and Stephen Martin
+/* sonar, Copyright (c) 1998-2019 Jamie Zawinski and Stephen Martin
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -68,6 +68,9 @@
# ifdef HAVE_GETIFADDRS
# include <ifaddrs.h>
# endif
+# ifdef HAVE_LIBCAP
+# include <sys/capability.h>
+# endif
#endif /* HAVE_ICMP || HAVE_ICMPHDR */
#if defined(HAVE_ICMP)
@@ -1483,7 +1486,7 @@ parse_mode (sonar_sensor_data *ssd, char **error_ret, char **desc_ret,
if (!ping_works_p)
{
- *error_ret = strdup ("Sonar must be setuid to ping!\n"
+ *error_ret = strdup ("Sonar must be setuid or libcap to ping!\n"
"Running simulation instead.");
return 0;
}
@@ -1569,6 +1572,46 @@ parse_mode (sonar_sensor_data *ssd, char **error_ret, char **desc_ret,
}
+static Bool
+set_net_raw_capalibity(int enable_p)
+{
+ Bool ret_status = False;
+# ifdef HAVE_LIBCAP
+ cap_t cap_status;
+ cap_value_t cap_value[] = { CAP_NET_RAW, };
+ cap_flag_value_t cap_flag_value;
+ cap_flag_value_t new_value = enable_p ? CAP_SET : CAP_CLEAR;
+
+ cap_status = cap_get_proc();
+ do {
+ cap_flag_value = CAP_CLEAR;
+ if (cap_get_flag (cap_status, CAP_NET_RAW, CAP_EFFECTIVE, &cap_flag_value))
+ break;
+ if (cap_flag_value == new_value)
+ {
+ ret_status = True;
+ break;
+ }
+
+ cap_set_flag (cap_status, CAP_EFFECTIVE, 1, cap_value, new_value);
+ if (!cap_set_proc(cap_status))
+ ret_status = True;
+ } while (0);
+
+ if (cap_status) cap_free (cap_status);
+# endif /* HAVE_LIBCAP */
+
+ return ret_status;
+}
+
+static Bool
+set_ping_capability (void)
+{
+ if (geteuid() == 0) return True;
+ return set_net_raw_capalibity (True);
+}
+
+
sonar_sensor_data *
sonar_init_ping (Display *dpy, char **error_ret, char **desc_ret,
const char *subnet, int timeout,
@@ -1615,6 +1658,10 @@ sonar_init_ping (Display *dpy, char **error_ret, char **desc_ret,
On MacOS X, we can avoid the whole problem by using a
non-privileged datagram instead of a raw socket.
+
+ On recent Linux systems (2012-ish?) we can avoid setuid by instead
+ using cap_set_flag(... CAP_NET_RAW). To make that call the executable
+ needs to have "sudo setcap cap_net_raw=p sonar" done to it first.
*/
if (global_icmpsock)
{
@@ -1628,7 +1675,7 @@ sonar_init_ping (Display *dpy, char **error_ret, char **desc_ret,
{
socket_initted_p = True;
}
- else if (geteuid() == 0 &&
+ else if (set_ping_capability() &&
(pd->icmpsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) >= 0)
{
socket_initted_p = True;
diff --git a/hacks/glx/splodesic.c b/hacks/glx/splodesic.c
index a68e992..9a2f3a6 100644
--- a/hacks/glx/splodesic.c
+++ b/hacks/glx/splodesic.c
@@ -249,7 +249,7 @@ static void
link_neighbors (ModeInfo *mi)
{
splodesic_configuration *bp = &bps[MI_SCREEN(mi)];
- triangle *t0 = bp->triangles;
+ triangle *t0;
int i;
/* Triangles are neighbors if they share an edge (exactly 2 points).
diff --git a/hacks/glx/unknownpleasures.c b/hacks/glx/unknownpleasures.c
index a52819f..1fdee6d 100644
--- a/hacks/glx/unknownpleasures.c
+++ b/hacks/glx/unknownpleasures.c
@@ -1,4 +1,5 @@
-/* unknownpleasures, Copyright (c) 2013-2018 Jamie Zawinski <jwz@jwz.org>
+/* unknownpleasures, Copyright (c) 2013-2018, 2019
+ * -Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -28,10 +29,6 @@
*
* TODO:
*
- * - Load images and feed them line by line into the plotter, so it scrolls.
- *
- * - Same but use the image as a mask against the random graph data.
- *
* - Take a function generator program as a command line argument:
* read lines of N float values from it, interpolate to full width.
*/
@@ -43,6 +40,7 @@
#define DEF_NOISE "1.0"
#define DEF_ASPECT "1.9"
#define DEF_BUZZ "False"
+#define DEF_MASK "(none)"
#define DEFAULTS "*delay: 30000 \n" \
"*count: 80 \n" \
@@ -57,6 +55,8 @@
#include "xlockmore.h"
#include "colors.h"
#include "gltrackball.h"
+#include "ximage-loader.h"
+#include "grab-ximage.h"
#include <ctype.h>
#ifdef USE_GL /* whole file */
@@ -70,6 +70,7 @@ GLfloat amplitude_arg;
GLfloat noise_arg;
GLfloat aspect_arg;
Bool buzz_arg;
+char *mask_arg;
typedef struct {
@@ -88,6 +89,9 @@ typedef struct {
GLuint *lines; /* Display lists for each edge * face * frame */
GLfloat *heights; /* Animated elevation / alpha of each line */
GLfloat fg[4], bg[4]; /* Colors */
+ XImage *mask;
+ double mask_scale;
+ int frame_count;
} unk_configuration;
static unk_configuration *bps = NULL;
@@ -102,6 +106,7 @@ static XrmOptionDescRec opts[] = {
{ "-no-ortho", ".ortho", XrmoptionNoArg, "False" },
{ "-buzz", ".buzz", XrmoptionNoArg, "True" },
{ "-no-buzz", ".buzz", XrmoptionNoArg, "False" },
+ { "-mask", ".mask", XrmoptionSepArg, 0 },
};
static argtype vars[] = {
@@ -112,6 +117,7 @@ static argtype vars[] = {
{&noise_arg, "noise", "Noise", DEF_NOISE, t_Float},
{&aspect_arg, "aspect", "Aspect", DEF_ASPECT, t_Float},
{&buzz_arg, "buzz", "Buzz", DEF_BUZZ, t_Bool},
+ {&mask_arg, "mask", "Image", DEF_MASK, t_String},
};
ENTRYPOINT ModeSpecOpt unk_opts = {countof(opts), opts, countof(vars), vars, NULL};
@@ -241,21 +247,26 @@ reshape_unk (ModeInfo *mi, int width, int height)
GLfloat lw = 1;
GLfloat s = 1;
+# ifdef HAVE_MOBILE
+ lw = 4;
+ s = 1.4;
+
+# else /* !HAVE_MOBILE */
+
if (MI_WIDTH(mi) > 2560) lw = 4; /* Retina displays */
-# ifdef HAVE_COCOA
+# ifdef HAVE_COCOA
else if (MI_WIDTH(mi) > 1280) lw = 3; /* WTF */
-# endif
+# endif
else if (MI_WIDTH(mi) > 1920) lw = 3;
else if (mi->xgwa.width > 640 && mi->xgwa.height > 640) lw = 2;
-# ifdef HAVE_MOBILE
- lw = 4;
- s = 1.4;
-# else
/* Make the image fill the screen a little more fully */
if (mi->xgwa.width <= 640 || mi->xgwa.height <= 640)
s = 1.2;
-# endif
+
+# endif /* !HAVE_MOBILE */
+
+ s /= 1.9 / bp->aspect;
glScalef (s, s, s);
glLineWidth (lw);
@@ -264,6 +275,68 @@ reshape_unk (ModeInfo *mi, int width, int height)
glClear(GL_COLOR_BUFFER_BIT);
}
+static void
+load_image (ModeInfo *mi)
+{
+ unk_configuration *bp = &bps[MI_SCREEN(mi)];
+ XImage *image0;
+ int x, y;
+ double xs, ys;
+ unsigned long max = 0;
+
+ if (!mask_arg || !*mask_arg || !strcasecmp(mask_arg, "(none)"))
+ return;
+
+ image0 = file_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), mask_arg);
+ if (!image0) return;
+
+ bp->mask = XCreateImage (MI_DISPLAY(mi), MI_VISUAL(mi), 32, ZPixmap, 0, 0,
+ bp->resolution,
+ bp->count * image0->height / image0->width *
+ (1.9 / bp->aspect) * 0.75,
+ 32, 0);
+ if (!bp->mask) abort();
+ bp->mask->data = (char *)
+ malloc (bp->mask->height * bp->mask->bytes_per_line);
+ if (!bp->mask->data) abort();
+
+ xs = image0->width / (double) bp->mask->width;
+ ys = image0->height / (double) bp->mask->height;
+
+ /* Scale the image down to a 1-bit mask. */
+ for (y = 0; y < bp->mask->height; y++)
+ for (x = 0; x < bp->mask->width; x++)
+ {
+ int x2, y2, n = 0;
+ double total = 0;
+ unsigned long p;
+ for (y2 = y * ys; y2 < (y+1) * ys; y2++)
+ for (x2 = x * xs; x2 < (x+1) * xs; x2++)
+ {
+ unsigned long agbr = XGetPixel (image0, x2, y2);
+ unsigned long a = (agbr >> 24) & 0xFF;
+ unsigned long gray = (a == 0
+ ? 0
+ : ((((agbr >> 16) & 0xFF) +
+ ((agbr >> 8) & 0xFF) +
+ ((agbr >> 0) & 0xFF))
+ / 3));
+# if 0
+ if (gray < 96) gray /= 2; /* a little more contrast */
+# endif
+ total += gray / 255.0;
+ n++;
+ }
+ p = 255 * total / n;
+ if (p > max) max = p;
+ p = (0xFF << 24) | (p << 16) | (p << 8) | p;
+ XPutPixel (bp->mask, x, bp->mask->height-y-1, p);
+ }
+
+ bp->mask_scale = 255.0 / max;
+ XDestroyImage (image0);
+}
+
# ifdef DEBUG
static GLfloat poly1 = 0, poly2 = 0;
@@ -353,7 +426,9 @@ generate_signal (ModeInfo *mi)
for (j = 0; j < nspikes; j++)
{
- double off = frand (0.8) - 0.4;
+ double off = (bp->mask
+ ? frand (1.0) - 0.5 /* all the way to the edge */
+ : frand (0.8) - 0.4); /* leave a margin */
double amp = (0.1 + frand (0.9)) * nspikes;
double freq = (7 + frand (11)) * bp->noise;
for (i = 0, r = -0.5, p = points;
@@ -371,7 +446,10 @@ generate_signal (ModeInfo *mi)
/* Multiply by baseline clipping curve, add static. */
for (i = 0, r = -0.5, p = points; i < bp->resolution; i++, r += step, p++)
*p = ((*p / max)
- * (0.5 + 0.5 * cos1 (r * r * M_PI * 14) * (1 - frand(0.2))));
+ * (0.5 +
+ 0.5
+ * (bp->mask ? 1 : cos1 (r * r * M_PI * 14))
+ * (1 - frand(0.2))));
return points;
}
@@ -414,6 +492,16 @@ tick_unk (ModeInfo *mi)
{
GLfloat x = i / (GLfloat) bp->resolution;
GLfloat z = (points[i] + frand (0.05)) * bp->amplitude;
+
+ if (bp->mask)
+ {
+ int h = bp->mask->height; /* leave a 10% gutter */
+ int y = bp->frame_count % (int) (h * 1.1);
+ unsigned long p = (y < h ? XGetPixel (bp->mask, i, y) : 0);
+ unsigned long gray = ((p >> 8) & 0xFF);
+ z *= gray * bp->mask_scale / 255.0;
+ }
+
if (z < 0) z = 0;
if (z > bp->amplitude) z = bp->amplitude;
glVertex3f (x, 0, z);
@@ -426,6 +514,7 @@ tick_unk (ModeInfo *mi)
}
}
+ bp->frame_count++;
mi->polygon_count *= bp->count;
mi->polygon_count += 5; /* base */
@@ -471,6 +560,8 @@ init_unk (ModeInfo *mi)
if (MI_COUNT(mi) < 1) MI_COUNT(mi) = 1;
/* bp->count is set in reshape */
+ load_image (mi);
+
bp->base = glGenLists (1);
glNewList (bp->base, GL_COMPILE);
{
@@ -673,6 +764,7 @@ free_unk (ModeInfo *mi)
glDeleteLists (bp->lines[i], 1);
free (bp->lines);
free (bp->heights);
+ if (bp->mask) XDestroyImage (bp->mask);
}
XSCREENSAVER_MODULE_2 ("UnknownPleasures", unknownpleasures, unk)
diff --git a/hacks/glx/unknownpleasures.man b/hacks/glx/unknownpleasures.man
index 2eab727..405d78f 100644
--- a/hacks/glx/unknownpleasures.man
+++ b/hacks/glx/unknownpleasures.man
@@ -13,6 +13,7 @@ unknownpleasures - a waterfall graph of the signal from pulsar PSR B1919+21.
[\-resolution \fInumber\fP]
[\-amplitude \fInumber\fP]
[\-noise \fInumber\fP]
+[\-mask \fIfile\fP]
[\-no-ortho]
[\-buzz]
[\-wireframe]
@@ -55,6 +56,11 @@ Height of the waves, 0 - 1.0. Default: 0.13.
.B \-noise \fInumber\fP
How noisy the signal is. 2 for twice as noisy, 0.5 for half as noisy.
.TP 8
+.B \-mask \fIfile\fP
+Use the given image file as a clipping mask against the data.
+A high contrast image of around 256x256 works best.
+Signal peaks appear in the dark areas.
+.TP 8
.B \-ortho | \-no-ortho
Whether to use an orthographic projection.
.TP 8
diff --git a/hacks/hexadrop.c b/hacks/hexadrop.c
index e8c2d65..b1b7d49 100644
--- a/hacks/hexadrop.c
+++ b/hacks/hexadrop.c
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1999-2018 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1999-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -337,7 +337,7 @@ hexadrop_reshape (Display *dpy, Window window, void *closure,
static void
-hexadrop_free (Display *dpy, Window window, void *closure)
+hexadrop_free_1 (Display *dpy, Window window, void *closure)
{
state *st = (state *) closure;
if (st->colors)
@@ -356,7 +356,16 @@ hexadrop_free (Display *dpy, Window window, void *closure)
XFreeGC (st->dpy, st->gc);
st->gc = 0;
}
- free (st);
+
+ memset (st, 0, sizeof(*st));
+}
+
+
+static void
+hexadrop_free (Display *dpy, Window window, void *closure)
+{
+ hexadrop_free_1 (dpy, window, closure);
+ free (closure);
}
@@ -367,15 +376,35 @@ hexadrop_event (Display *dpy, Window window, void *closure, XEvent *event)
if (screenhack_event_helper (dpy, window, event))
{
- cell *c = st->cells;
- int i;
- st->cells = 0;
- hexadrop_free (st->dpy, st->window, st);
- free (st->cells);
- st->cells = c;
- for (i = 0; i < st->ncells; i++)
- st->cells[i].initted_p = False;
- hexadrop_init_1 (st->dpy, st->window, st);
+ if (random() % 5) /* Change everything */
+ {
+ hexadrop_free_1 (st->dpy, st->window, st);
+ hexadrop_init_1 (dpy, window, st);
+ }
+ else /* Change colors only */
+ {
+ /* Save the old geometry */
+ cell *c = st->cells;
+ int n = st->ncells;
+ int s = st->sides;
+ int i;
+
+ /* Protect it from being freed */
+ st->cells = 0;
+ hexadrop_free_1 (st->dpy, st->window, st);
+ hexadrop_init_1 (dpy, window, st);
+
+ /* Reset the old cells */
+ for (i = 0; i < n; i++)
+ c[i].initted_p = False;
+
+ /* Re-init, then put them back. */
+ free (st->cells);
+ st->cells = c;
+ st->ncells = n;
+ st->sides = s;
+ }
+
return True;
}
@@ -408,6 +437,7 @@ static XrmOptionDescRec hexadrop_options [] = {
{ "-ncolors", ".ncolors", XrmoptionSepArg, 0 },
{ "-uniform-speed", ".uniform", XrmoptionNoArg, "True" },
{ "-no-uniform-speed",".uniform", XrmoptionNoArg, "False" },
+ { "-nonuniform-speed",".uniform", XrmoptionNoArg, "False" },
{ "-lockstep", ".lockstep", XrmoptionNoArg, "True" },
{ "-no-lockstep", ".lockstep", XrmoptionNoArg, "False" },
{ 0, 0, 0, 0 }
diff --git a/hacks/kumppa.c b/hacks/kumppa.c
index fc5167d..f4cc5bb 100644
--- a/hacks/kumppa.c
+++ b/hacks/kumppa.c
@@ -215,10 +215,10 @@ static Bool make_rots(struct state *st, double xspeed,double yspeed)
st->rotsizeY=(int)(2/yspeed+1);
iy=(double)(st->midy+1)/(double)(st->rotsizeY);
- st->Xrotations=malloc((st->midx+2)*sizeof(unsigned int));
- st->Xrottable=malloc((st->rotsizeX+1)*sizeof(unsigned int));
- st->Yrotations=malloc((st->midy+2)*sizeof(unsigned int));
- st->Yrottable=malloc((st->rotsizeY+1)*sizeof(unsigned int));
+ st->Xrotations=malloc((st->midx+2)*sizeof(int));
+ st->Xrottable=malloc((st->rotsizeX+1)*sizeof(int));
+ st->Yrotations=malloc((st->midy+2)*sizeof(int));
+ st->Yrottable=malloc((st->rotsizeY+1)*sizeof(int));
chks=malloc(((st->midx>st->midy)?st->midx:st->midy)*sizeof(Bool));
if (!st->Xrottable || !st->Yrottable || !st->Xrotations || !st->Yrotations || !chks) return False;
diff --git a/hacks/petri.c b/hacks/petri.c
index e97c582..1906369 100644
--- a/hacks/petri.c
+++ b/hacks/petri.c
@@ -245,7 +245,10 @@ setup_display (struct state *st)
XWindowAttributes xgwa;
int cell_size = get_integer_resource (st->dpy, "size", "Integer");
- int osize, alloc_size, oalloc;
+ int osize, alloc_size;
+#if 0
+ int oalloc;
+#endif
int mem_throttle = 0;
char *s;
@@ -404,7 +407,9 @@ setup_display (struct state *st)
st->arr_height = st->windowHeight / cell_size;
alloc_size = sizeof(cell) * st->arr_width * st->arr_height;
+# if 0
oalloc = alloc_size;
+# endif
if (mem_throttle > 0)
while (cell_size < st->windowWidth/10 &&
@@ -419,7 +424,8 @@ setup_display (struct state *st)
if (osize != cell_size)
{
- if (0 && !st->warned)
+# if 0
+ if (!st->warned)
{
fprintf (stderr,
"%s: throttling cell size from %d to %d because of %dM limit.\n",
@@ -432,6 +438,7 @@ setup_display (struct state *st)
((float) alloc_size) / (1 << 20));
st->warned = 1;
}
+# endif
}
st->xSize = st->arr_width ? st->windowWidth / st->arr_width : 0;
diff --git a/hacks/shadebobs.c b/hacks/shadebobs.c
index d796162..8aaf6f7 100644
--- a/hacks/shadebobs.c
+++ b/hacks/shadebobs.c
@@ -121,7 +121,7 @@ static void InitShadeBob( struct state *st, SShadeBob *pShadeBob, Bool bDark )
double nDelta;
int iWidth, iHeight;
- if( ( pShadeBob->anDeltaMap = calloc( st->iBobDiameter * st->iBobDiameter, sizeof(char) ) ) == NULL )
+ if( ( pShadeBob->anDeltaMap = calloc( st->iBobDiameter * st->iBobDiameter, sizeof(signed char) ) ) == NULL )
{
fprintf( stderr, "%s: Could not allocate Delta Map!\n", progname );
return;
diff --git a/hacks/webcollage b/hacks/webcollage
index bacc814..5cc1196 100755
--- a/hacks/webcollage
+++ b/hacks/webcollage
@@ -1,6 +1,6 @@
#!/usr/bin/perl -w
#
-# webcollage, Copyright © 1999-2018 by Jamie Zawinski <jwz@jwz.org>
+# webcollage, Copyright © 1999-2019 by Jamie Zawinski <jwz@jwz.org>
# This program decorates the screen with random images from the web.
# One satisfied customer described it as "a nonstop pop culture brainbath."
#
@@ -60,7 +60,7 @@ use LWP::UserAgent;
my $progname = $0; $progname =~ s@.*/@@g;
-my ($version) = ('$Revision: 1.182 $' =~ m/\s(\d[.\d]+)\s/s);
+my ($version) = ('$Revision: 1.183 $' =~ m/\s(\d[.\d]+)\s/s);
my $copyright = "WebCollage $version, Copyright (c) 1999-2017" .
" Jamie Zawinski <jwz\@jwz.org>\n" .
" https://www.jwz.org/webcollage/\n";
@@ -228,6 +228,7 @@ my %warningless_sites = (
"tinypic.com" => 1,
"flickr.com" => 1,
"staticflickr.com" => 1,
+ "live.staticflickr.com" => 1,
"pbase.com" => 1,
"blogger.com" => 1,
"multiply.com" => 1,
@@ -2149,7 +2150,6 @@ sub pick_from_flickr_recent($) {
my ($img) = ($chunk =~ m@"displayUrl": *"(.*?)"@six);
next unless defined ($img);
$img =~ s/\\//gs;
- $img = "//" unless ($img =~ m@^/@s);
$img = "http:$img" unless ($img =~ m/^http/s);
my ($user) = ($chunk =~ m/"pathAlias": *"(.*?)"/si);
diff --git a/hacks/xjack.c b/hacks/xjack.c
index 27e4c9e..5feedb2 100644
--- a/hacks/xjack.c
+++ b/hacks/xjack.c
@@ -84,16 +84,18 @@ xjack_init (Display *dpy, Window window)
XGCValues gcv;
char *fontname;
+
st->dpy = dpy;
st->window = window;
st->s = source;
st->delay = get_integer_resource (st->dpy, "delay", "Integer");
- fontname = get_string_resource (st->dpy, "font", "Font");
XGetWindowAttributes (st->dpy, st->window, &st->xgwa);
- if (st->xgwa.width <= 480)
- fontname = "-*-courier-medium-r-*-*-*-180-*-*-m-*-*-*";
+ if (st->xgwa.width > 480)
+ fontname = get_string_resource (st->dpy, "font", "Font");
+ else
+ fontname = get_string_resource (st->dpy, "font2", "Font");
st->font = load_font_retry (st->dpy, fontname);
if (!st->font) abort();
@@ -474,8 +476,10 @@ static const char *xjack_defaults [] = {
"*fpsSolid: true",
#ifdef HAVE_COCOA
".font: American Typewriter 24",
+ ".font2: American Typewriter 10",
#else
".font: -*-courier-medium-r-*-*-*-240-*-*-m-*-*-*",
+ ".font2: -*-courier-medium-r-*-*-*-180-*-*-m-*-*-*",
#endif
"*delay: 50000",
0
diff --git a/jwxyz/jwxyz-cocoa.m b/jwxyz/jwxyz-cocoa.m
index 96d54b8..13666e7 100644
--- a/jwxyz/jwxyz-cocoa.m
+++ b/jwxyz/jwxyz-cocoa.m
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1991-2018 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1991-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -94,8 +94,8 @@ jwxyz_drawable_depth (Drawable d)
}
-float
-jwxyz_scale (Window main_window)
+static float
+jwxyz_scale_1 (Window main_window, BOOL fonts_p)
{
float scale = 1;
@@ -108,20 +108,32 @@ jwxyz_scale (Window main_window)
or so, even if the display has significantly higher resolution. That is
unrelated to this hack, which is really about DPI.
*/
- scale = main_window->window.view.hackedContentScaleFactor;
+ scale = [main_window->window.view hackedContentScaleFactor:fonts_p];
if (scale < 1) // iPad Pro magnifies the backbuffer by 3x, which makes text
scale = 1; // excessively blurry in BSOD.
# else // !USE_IPHONE
/* Desktop retina displays also need fonts doubled. */
- scale = main_window->window.view.hackedContentScaleFactor;
+ scale = [main_window->window.view hackedContentScaleFactor:fonts_p];
# endif // !USE_IPHONE
return scale;
}
+float
+jwxyz_scale (Window main_window)
+{
+ return jwxyz_scale_1 (main_window, FALSE);
+}
+
+static float
+jwxyz_font_scale (Window main_window)
+{
+ return jwxyz_scale_1 (main_window, TRUE);
+}
+
/* Font metric terminology, as used by X11:
@@ -421,7 +433,7 @@ jwxyz_load_native_font (Window main_window, int traits_jwxyz, int mask_jwxyz,
encoding:NSUTF8StringEncoding] :
nil;
- size *= jwxyz_scale (main_window);
+ size *= jwxyz_font_scale (main_window);
if (font_name_type == JWXYZ_FONT_RANDOM) {
diff --git a/jwxyz/jwxyz-common.c b/jwxyz/jwxyz-common.c
index 1a31ae3..febb3b5 100644
--- a/jwxyz/jwxyz-common.c
+++ b/jwxyz/jwxyz-common.c
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1991-2018 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1991-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -103,6 +103,7 @@ XDisplayHeightMM (Display *dpy, int screen)
unsigned long
XBlackPixelOfScreen(Screen *screen)
{
+ if (! screen) abort();
return DefaultVisualOfScreen (screen)->alpha_mask;
}
diff --git a/jwxyz/jwxyz-timers.c b/jwxyz/jwxyz-timers.c
index 67326b0..1e81ab8 100644
--- a/jwxyz/jwxyz-timers.c
+++ b/jwxyz/jwxyz-timers.c
@@ -200,7 +200,8 @@ XtAppAddInput (XtAppContext app, int fd, XtPointer flags,
data->app = app;
data->refcount++;
- LOGI("source 0x%08lX %2d: alloc", (unsigned long) data, data->fd);
+ LOGI("source 0x%08lX %2d: alloc 0x%08lX", (unsigned long) data, data->fd,
+ (unsigned long) closure);
ASSERT_RET0 (fd > 0 && fd < FD_SETSIZE, "fd out of range");
ASSERT_RET0 (td->ids[fd] == 0, "sources corrupted");
@@ -216,7 +217,8 @@ XtRemoveInput (XtInputId id)
{
jwxyz_sources_data *td = DISPLAY_SOURCES_DATA (id->app);
- LOGI("source 0x%08lX %2d: remove", (unsigned long) id, id->fd);
+ LOGI("source 0x%08lX %2d: remove 0x%08lX", (unsigned long) id, id->fd,
+ (unsigned long) id->closure);
ASSERT_RET (id->refcount > 0, "sources corrupted");
ASSERT_RET (td->fd_count > 0, "sources corrupted");
ASSERT_RET (id->fd > 0 && id->fd < FD_SETSIZE, "fd out of range");
@@ -226,8 +228,8 @@ XtRemoveInput (XtInputId id)
td->fd_count--;
id->refcount--;
- LOGI("source 0x%08lX %2d: release %d", (unsigned long) id, id->fd,
- id->refcount);
+ LOGI("source 0x%08lX %2d: release %d 0x%08lX", (unsigned long) id, id->fd,
+ id->refcount, (unsigned long) id->closure);
ASSERT_RET (id->refcount >= 0, "double free");
if (id->refcount == 0) {
memset (id, 0xA1, sizeof(*id));
diff --git a/jwxyz/jwxyz.m b/jwxyz/jwxyz.m
index 4256f6d..c6a7af5 100644
--- a/jwxyz/jwxyz.m
+++ b/jwxyz/jwxyz.m
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1991-2018 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1991-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -1284,7 +1284,7 @@ GetSubImage (Display *dpy, Drawable d, int x, int y,
// data points at (x,y) with ibpl rowstride. ignore x,y from now on.
data += (y * ibpl) + (x * (ibpp/8));
- format = (depth == 1 ? XYPixmap : ZPixmap);
+ // format = (depth == 1 ? XYPixmap : ZPixmap);
int obpl = image->bytes_per_line;
diff --git a/jwxyz/jwzgles.c b/jwxyz/jwzgles.c
index e0437e0..b26bc3a 100644
--- a/jwxyz/jwzgles.c
+++ b/jwxyz/jwzgles.c
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2012-2018 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2012-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -352,7 +352,8 @@ static jwzgles_state *state = 0;
#ifdef DEBUG
-static void Log(const char *fmt, ...)
+void
+Log(const char *fmt, ...)
{
va_list args;
va_start (args, fmt);
@@ -4287,6 +4288,7 @@ void jwzgles_##NAME (ARGS_##SIG) \
WRAP (glActiveTexture, I)
WRAP (glAlphaFunc, IF)
WRAP (glBlendFunc, II)
+//WRAP (glBlendColor, FFFF);
WRAP (glClear, I)
WRAP (glClearColor, FFFF)
WRAP (glClearStencil, I)
diff --git a/jwxyz/jwzglesI.h b/jwxyz/jwzglesI.h
index 8f09208..b90bad4 100644
--- a/jwxyz/jwzglesI.h
+++ b/jwxyz/jwzglesI.h
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2012-2018 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2012-2019 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -118,6 +118,7 @@
# define GL_VIEWPORT_BIT 0x00000800
# define GL_INT 0x1404
# define GL_DOUBLE 0x140A
+# define GL_CONSTANT_ALPHA 0x8003
#endif
@@ -173,6 +174,7 @@ extern void jwzgles_glPopAttrib(void);
extern void jwzgles_glActiveTexture (GLuint);
extern void jwzgles_glBindTexture (GLuint, GLuint);
extern void jwzgles_glBlendFunc (GLuint, GLuint);
+extern void jwzgles_glBlendColor (GLfloat, GLfloat, GLfloat, GLfloat);
extern void jwzgles_glClear (GLuint);
extern void jwzgles_glClearColor (GLclampf, GLclampf, GLclampf, GLclampf);
extern void jwzgles_glClearStencil (GLuint);
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 628e137..38a89ef 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,4 +1,4 @@
-# Auto-generated: Fri Dec 28 16:21:54 PST 2018
+# Auto-generated: Tue Jul 9 20:31:29 PDT 2019
driver/demo-Gtk-conf.c
driver/demo-Gtk.c
driver/screensaver-properties.desktop.in
@@ -56,6 +56,7 @@ hacks/config/cynosure.xml
hacks/config/dangerball.xml
hacks/config/decayscreen.xml
hacks/config/deco.xml
+hacks/config/deepstars.xml
hacks/config/deluxe.xml
hacks/config/demon.xml
hacks/config/discoball.xml
@@ -108,6 +109,7 @@ hacks/config/glsnake.xml
hacks/config/gltext.xml
hacks/config/goop.xml
hacks/config/grav.xml
+hacks/config/gravitywell.xml
hacks/config/greynetic.xml
hacks/config/halftone.xml
hacks/config/halo.xml
diff --git a/po/ru.po b/po/ru.po
index dd99ebd..7ac8b8f 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1,18 +1,25 @@
-# Russian translation for xscreensaver
-# Andrew W. Nosenko <awn@bcs.zp.ua>, 2002-2003
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: xscreensaver 4.09\n"
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# AlexL <loginov.alex.valer@gmail.com>, 2015,2019
+# Kашицин Роман <calorus@gmail.com>, 2015
+# Алексей Дедун <lewadedun@gmail.com>, 2015
+# Олег o1hk <o1h2k3@yandex.ru>, 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: rus-xscreensaver\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-11-03 21:11+0300\n"
-"PO-Revision-Date: 2003-05-17 16:53+0300\n"
-"Last-Translator: \"Andrew W. Nosenko\" <awn@bcs.zp.ua>\n"
-"Language-Team: Russian\n"
-"Language: \n"
+"POT-Creation-Date: 2019-04-25 05:28+0300\n"
+"PO-Revision-Date: 2019-05-01 06:15+0000\n"
+"Last-Translator: AlexL <loginov.alex.valer@gmail.com>\n"
+"Language-Team: Russian (http://www.transifex.com/rus-open-source/rus-xscreensaver/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: ../driver/demo-Gtk-conf.c:884
msgid "Browse..."
@@ -20,20 +27,16 @@ msgstr "Обзор..."
#: ../driver/demo-Gtk-conf.c:1087
msgid "Select file."
-msgstr "Выберите файл"
+msgstr "Выберите файл."
-#: ../driver/demo-Gtk.c:755 ../driver/demo-Gtk.c:4484
+#: ../driver/demo-Gtk.c:755 ../driver/demo-Gtk.c:4487
#, c-format
msgid ""
"Warning:\n"
"\n"
"The XScreenSaver daemon doesn't seem to be running\n"
"on display \"%s\". Launch it now?"
-msgstr ""
-"Предупреждение:\n"
-"\n"
-"XScreenSaver демон, похоже, не запущен\n"
-"для экрана \"%s\". Запустить его сейчас?"
+msgstr "Предупреждение:\n\nXScreenSaver демон, похоже, не запущен\nдля экрана \"%s\". Запустить его сейчас?"
#: ../driver/demo-Gtk.c:804
msgid "For updates, check https://www.jwz.org/xscreensaver/"
@@ -48,24 +51,17 @@ msgid ""
"Error:\n"
"\n"
"No Help URL has been specified.\n"
-msgstr ""
-"Ошибка:\n"
-"\n"
-"URL для файлов помощи не указан.\n"
+msgstr "Ошибка:\n\nURL для файлов помощи не указан.\n"
-#: ../driver/demo-Gtk.c:1037
+#: ../driver/demo-Gtk.c:1042
msgid ""
"Error:\n"
"\n"
"The xscreensaver daemon did not start up properly.\n"
"\n"
-msgstr ""
-"Ошибка:\n"
-"\n"
-"Демон xscreensaver не запущен или запущен неправильно.\n"
-"\n"
+msgstr "Ошибка:\n\nДемон xscreensaver не запущен или запущен неправильно.\n\n"
-#: ../driver/demo-Gtk.c:1049
+#: ../driver/demo-Gtk.c:1048
msgid ""
"You are running as root. This usually means that xscreensaver\n"
"was unable to contact your X server because access control is\n"
@@ -82,158 +78,121 @@ msgid ""
"\n"
"You shouldn't run X as root. Instead, you should log in as a\n"
"normal user, and `su' as necessary."
-msgstr ""
-"Вы работаете под root. Обычно это означает, что xscreensaver\n"
-"не смог подключиться к вашему X-серверу из-за включенного\n"
-"контроля доступа. Попробуйте выполнить эту команду:\n"
-"\n"
-" xhost +localhost\n"
-"\n"
-"а затем выбрать `Файл / Перезапустить демон'.\n"
-"\n"
-"Важно: отключение контроля доступа позволит любому пользователю\n"
-"вашего компьютера получить доступ к вашему экрану, что может быть\n"
-"расценено как проблема с безопасностью. Пожалуйста, прочитайте\n"
-"мануал xscreensaver, а также вопросы и ответы для более подробной\n"
-"информации.\n"
-"\n"
-"Не стоит запускать X от root. Вместо этого, вам нужно войти в\n"
-"систему от обычного пользователя, и `su' при необходимости."
+msgstr "Вы работаете под root. Обычно это означает, что xscreensaver\nне смог подключиться к вашему X-серверу из-за включенного\nконтроля доступа. Попробуйте выполнить эту команду:\n\n xhost +localhost\n\nа затем выбрать `Файл / Перезапустить демон'.\n\nВажно: отключение контроля доступа позволит любому пользователю\nвашего компьютера получить доступ к вашему экрану, что может быть\nрасценено как проблема с безопасностью. Пожалуйста, прочитайте\nмануал xscreensaver, а также вопросы и ответы для более подробной\nинформации.\n\nНе стоит запускать X от root. Вместо этого, вам нужно войти в\nсистему от обычного пользователя, и `su' при необходимости."
-#: ../driver/demo-Gtk.c:1065
+#: ../driver/demo-Gtk.c:1064
msgid "Please check your $PATH and permissions."
msgstr "Проверьте значение переменной $PATH и права доступа."
-#: ../driver/demo-Gtk.c:1103
+#: ../driver/demo-Gtk.c:1102
msgid ""
"Error:\n"
"\n"
"Couldn't determine init file name!\n"
-msgstr ""
-"Ошибка:\n"
-"\n"
-"Не удалось определить имя инициализационного файла!\n"
+msgstr "Ошибка:\n\nНе удалось определить имя инициализационного файла!\n"
-#: ../driver/demo-Gtk.c:1108
+#: ../driver/demo-Gtk.c:1107
#, c-format
msgid ""
"Error:\n"
"\n"
"Couldn't write %s\n"
-msgstr ""
-"Ошибка:\n"
-"\n"
-"Не удалось записать %s\n"
+msgstr "Ошибка:\n\nНе удалось записать %s\n"
-#: ../driver/demo-Gtk.c:1171
+#: ../driver/demo-Gtk.c:1170
msgid ""
"Error:\n"
"\n"
"no `manualCommand' resource set."
-msgstr ""
-"Ошибка:\n"
-"\n"
-"Ресурс `manualCommand' не установлен."
+msgstr "Ошибка:\n\nРесурс `manualCommand' не установлен."
-#: ../driver/demo-Gtk.c:1354
+#: ../driver/demo-Gtk.c:1353
#, c-format
msgid ""
"Error:\n"
"\n"
"Unparsable time format: \"%s\"\n"
-msgstr ""
-"Ошибка:\n"
-"\n"
-"Невозможно определить формат времени: \"%s\"\n"
+msgstr "Ошибка:\n\nНевозможно определить формат времени: \"%s\"\n"
-#: ../driver/demo-Gtk.c:1793 ../driver/demo-Gtk.c:3370
+#: ../driver/demo-Gtk.c:1792 ../driver/demo-Gtk.c:3368
#: ../driver/xscreensaver-demo.glade2.in.h:102
msgid "Any"
msgstr "Любой"
-#: ../driver/demo-Gtk.c:2091
+#: ../driver/demo-Gtk.c:2090
#, c-format
msgid ""
"Error:\n"
"\n"
"Directory does not exist: \"%s\"\n"
-msgstr ""
-"Ошибка:\n"
-"\n"
-"Каталога не существует: \"%s\"\n"
+msgstr "Ошибка:\n\nКаталога не существует: \"%s\"\n"
-#: ../driver/demo-Gtk.c:2121 ../driver/demo-Gtk.c:2152
+#: ../driver/demo-Gtk.c:2120 ../driver/demo-Gtk.c:2151
#, c-format
msgid ""
"Error:\n"
"\n"
"File does not exist: \"%s\"\n"
-msgstr ""
-"Ошибка:\n"
-"\n"
-"Файла не существует: \"%s\"\n"
+msgstr "Ошибка:\n\nФайла не существует: \"%s\"\n"
-#: ../driver/demo-Gtk.c:2533
+#: ../driver/demo-Gtk.c:2532
msgid "Use"
msgstr "Использовать"
-#: ../driver/demo-Gtk.c:2543
+#: ../driver/demo-Gtk.c:2542
msgid "Screen Saver"
msgstr "Хранитель экрана"
-#: ../driver/demo-Gtk.c:2995
+#: ../driver/demo-Gtk.c:2993
msgid "Descriptions not available: no XML support compiled in."
msgstr "Описание недоступно: поддержка XML не была включена при компиляции."
-#: ../driver/demo-Gtk.c:3000
+#: ../driver/demo-Gtk.c:2998
msgid "No description available."
msgstr "Описание отсутствует."
-#: ../driver/demo-Gtk.c:3322
+#: ../driver/demo-Gtk.c:3320
msgid "Blank Screen"
-msgstr "Пустой экран"
+msgstr "Погасить экран"
-#: ../driver/demo-Gtk.c:3328
+#: ../driver/demo-Gtk.c:3326
msgid "Screen Saver Disabled"
msgstr "Хранитель экрана отключен"
-#: ../driver/demo-Gtk.c:3351
+#: ../driver/demo-Gtk.c:3349
msgid "Preview"
msgstr "Предпросмотр"
-#: ../driver/demo-Gtk.c:3361
+#: ../driver/demo-Gtk.c:3359
#, c-format
msgid "%s: %.100s Settings"
msgstr "Настройки %s: %.100s"
-#: ../driver/demo-Gtk.c:3525
+#: ../driver/demo-Gtk.c:3523
#, c-format
msgid ""
"Warning:\n"
"\n"
"file \"%s\" has changed, reloading.\n"
-msgstr ""
-"Предупреждение:\n"
-"\n"
-"Файл \"%s\" изменился и будет перезагружен.\n"
+msgstr "Предупреждение:\n\nФайл \"%s\" изменился и будет перезагружен.\n"
-#: ../driver/demo-Gtk.c:3612
+#: ../driver/demo-Gtk.c:3610
msgid "No Preview"
-msgstr "Предпросмотр не"
+msgstr "Без предпросмотра"
-#: ../driver/demo-Gtk.c:3612
+#: ../driver/demo-Gtk.c:3610
msgid "Available"
-msgstr "доступен"
+msgstr "Доступен"
-#: ../driver/demo-Gtk.c:3613
+#: ../driver/demo-Gtk.c:3611
msgid "Not"
-msgstr ""
+msgstr "НЕ"
-#: ../driver/demo-Gtk.c:3613
+#: ../driver/demo-Gtk.c:3611
msgid "Installed"
-msgstr ""
+msgstr "Установлено"
-#: ../driver/demo-Gtk.c:4494
+#: ../driver/demo-Gtk.c:4497
#, c-format
msgid ""
"Warning:\n"
@@ -250,23 +209,9 @@ msgid ""
"xscreensaver as \"%s\".\n"
"\n"
"Restart the xscreensaver daemon now?\n"
-msgstr ""
-"Внимание!\n"
-"\n"
-"%s запущен от имени пользователя \"%s\" на хосте \"%s\".\n"
-"Но xscreensaver управляет дисплеем \"%s\"\n"
-"и запущен от имени пользователя \"%s\" на хосте \"%s\".\n"
-"\n"
-"Это различные пользователи, и они не смогут читать/записывать\n"
-"один и тот же файл ~/.xscreensaver , и %s\n"
-"будет работать некорректно.\n"
-"\n"
-"Вам нужно перезапустить либо %s от \"%s\", либо\n"
-"xscreensaver от \"%s\".\n"
-"\n"
-"Перезапустить демон xscreensaver сейчас?\n"
+msgstr "Внимание!\n\n%s запущен от имени пользователя \"%s\" на хосте \"%s\".\nНо xscreensaver управляет дисплеем \"%s\"\nи запущен от имени пользователя \"%s\" на хосте \"%s\".\n\nЭто различные пользователи, и они не смогут читать/записывать\nодин и тот же файл ~/.xscreensaver , и %s\nбудет работать некорректно.\n\nВам нужно перезапустить либо %s от \"%s\", либо\nxscreensaver от \"%s\".\n\nПерезапустить демон xscreensaver сейчас?\n"
-#: ../driver/demo-Gtk.c:4519
+#: ../driver/demo-Gtk.c:4522
#, c-format
msgid ""
"Warning:\n"
@@ -280,20 +225,9 @@ msgid ""
"%s won't work right.\n"
"\n"
"Restart the daemon on \"%s\" as \"%s\" now?\n"
-msgstr ""
-"Внимание!\n"
-"\n"
-"%s запущен от имени пользователя \"%s\" на хосте \"%s\".\n"
-"Но xscreensaver управляет дисплеем \"%s\"\n"
-"и запущен от имени пользователя \"%s\" на хосте \"%s\".\n"
-"\n"
-"Если у этих двух машин нет общей файловой системы (т.е.,\n"
-"если они не видят один и тот же файл ~%s/.xscreensaver), то\n"
-"%s будет работать некорректно.\n"
-"\n"
-"Перезапустить демон на \"%s\" от \"%s\" сейчас?\n"
+msgstr "Внимание!\n\n%s запущен от имени пользователя \"%s\" на хосте \"%s\".\nНо xscreensaver управляет дисплеем \"%s\"\nи запущен от имени пользователя \"%s\" на хосте \"%s\".\n\nЕсли у этих двух машин нет общей файловой системы (т.е.,\nесли они не видят один и тот же файл ~%s/.xscreensaver), то\n%s будет работать некорректно.\n\nПерезапустить демон на \"%s\" от \"%s\" сейчас?\n"
-#: ../driver/demo-Gtk.c:4541
+#: ../driver/demo-Gtk.c:4544
#, c-format
msgid ""
"Warning:\n"
@@ -303,16 +237,9 @@ msgid ""
"is version %s. This could cause problems.\n"
"\n"
"Restart the xscreensaver daemon now?\n"
-msgstr ""
-"Внимание!\n"
-"\n"
-"Это %s версия %s.\n"
-"Но xscreensaver управляет дисплеем \"%s\"\n"
-"версии %s. Это может вызвать проблемы.\n"
-"\n"
-"Перезапустить демон xscreensaver сейчас?\n"
+msgstr "Внимание!\n\nЭто %s версии %s.\nНо xscreensaver управляет дисплеем \"%s\"\nверсии %s. Это может вызвать проблемы.\n\nПерезапустить демон xscreensaver сейчас?\n"
-#: ../driver/demo-Gtk.c:4569
+#: ../driver/demo-Gtk.c:4572
msgid ""
"Warning:\n"
"\n"
@@ -320,15 +247,9 @@ msgid ""
"It must be stopped for XScreenSaver to work properly.\n"
"\n"
"Stop the GNOME screen saver daemon now?\n"
-msgstr ""
-"Внимание!\n"
-"\n"
-"Запущен демон хранителя экрана GNOME.\n"
-"Его нужно остановить для корректной работы XScreenSaver.\n"
-"\n"
-"Остановить демон хранителя экрана GNOME сейчас?\n"
+msgstr "Внимание!\n\nЗапущен демон хранителя экрана GNOME.\nЕго нужно остановить для корректной работы XScreenSaver.\n\nОстановить демон хранителя экрана GNOME сейчас?\n"
-#: ../driver/demo-Gtk.c:4578
+#: ../driver/demo-Gtk.c:4581
msgid ""
"Warning:\n"
"\n"
@@ -336,24 +257,18 @@ msgid ""
"It must be stopped for XScreenSaver to work properly.\n"
"\n"
"Stop the KDE screen saver daemon now?\n"
-msgstr ""
-"Внимание!\n"
-"\n"
-"Запущен демон хранителя экрана KDE.\n"
-"Его нужно остановить для корректной работы XScreenSaver.\n"
-"\n"
-"Остановить демон хранителя экрана KDE сейчас?\n"
+msgstr "Внимание!\n\nЗапущен демон хранителя экрана KDE.\nЕго нужно остановить для корректной работы XScreenSaver.\n\nОстановить демон хранителя экрана KDE сейчас?\n"
-#: ../driver/demo-Gtk.c:5030
+#: ../driver/demo-Gtk.c:5032
#, c-format
msgid "%s: unknown option: %s\n"
msgstr "%s: неизвестный параметр: %s\n"
-#: ../driver/demo-Gtk.c:5095
+#: ../driver/demo-Gtk.c:5097
msgid "Screensaver Preferences"
-msgstr "Хранитель экрана"
+msgstr "Настройки хранителя экрана"
-#: ../driver/demo-Gtk.c:5297
+#: ../driver/demo-Gtk.c:5299
msgid ""
"Warning:\n"
"\n"
@@ -364,28 +279,20 @@ msgid ""
"\n"
"(If this is the latest version that your distro ships, then\n"
"your distro is doing you a disservice. Build from source.)\n"
-msgstr ""
-"Внимание!\n"
-"\n"
-"Эта версия xscreensaver ОЧЕНЬ СТАРАЯ!\n"
-"Пожалуйста, обновите ее!\n"
-"\n"
-"https://www.jwz.org/xscreensaver/\n"
-"\n"
-"(Если это последняя версия программы, поставляемая вашим дистрибутивом, \n"
-"то он оказывает вам плохую услугу. Соберите ее из исходного кода.)\n"
+msgstr "Внимание!\n\nЭта версия xscreensaver ОЧЕНЬ СТАРАЯ!\nПожалуйста, обновите её!\n\nhttps://www.jwz.org/xscreensaver/\n\n(Если это последняя версия программы, поставляемая вашим дистрибутивом, \nто он оказывает вам плохую услугу. Соберите её из исходного кода.)\n"
#: ../driver/screensaver-properties.desktop.in.h:1
+#: ../driver/xscreensaver-demo.glade2.in.h:1
+msgid "XScreenSaver"
+msgstr "Хранитель экрана X"
+
+#: ../driver/screensaver-properties.desktop.in.h:2
msgid "Screensaver"
msgstr "Хранитель экрана"
-#: ../driver/screensaver-properties.desktop.in.h:2
+#: ../driver/screensaver-properties.desktop.in.h:3
msgid "Change screensaver properties"
-msgstr ""
-
-#: ../driver/xscreensaver-demo.glade2.in.h:1
-msgid "XScreenSaver"
-msgstr "Хранитель экрана"
+msgstr "Изменить свойства хранителя экрана"
#: ../driver/xscreensaver-demo.glade2.in.h:2
msgid "_File"
@@ -393,7 +300,7 @@ msgstr "_Файл"
#: ../driver/xscreensaver-demo.glade2.in.h:3
msgid "_Blank Screen Now"
-msgstr "_Активировать хранитель экрана немедленно"
+msgstr "_Погасить экран немедленно"
#: ../driver/xscreensaver-demo.glade2.in.h:4
msgid "_Lock Screen Now"
@@ -429,7 +336,7 @@ msgstr "С_мена через"
#: ../driver/xscreensaver-demo.glade2.in.h:12
msgid "Whether a password should be required to un-blank the screen."
-msgstr "Должен ли требоваться пароль для разблокировки экрана."
+msgstr "Должен ли требоваться пароль для отмены гашения экрана."
#: ../driver/xscreensaver-demo.glade2.in.h:13
msgid "_Lock Screen After "
@@ -437,7 +344,7 @@ msgstr "_Заблокировать экран через "
#: ../driver/xscreensaver-demo.glade2.in.h:14
msgid "Lock Screen"
-msgstr ""
+msgstr "Заблокировать экран"
#: ../driver/xscreensaver-demo.glade2.in.h:15
msgid "How long before the screen saver activates."
@@ -445,21 +352,17 @@ msgstr "Время до запуска хранителя экрана."
#: ../driver/xscreensaver-demo.glade2.in.h:16
msgid "How long after the screen blanks until a password will be required."
-msgstr ""
-"Время после очистки экрана, через которое для входа в систему требуется "
-"пароль."
+msgstr "Время после гашения экрана, через которое для входа в систему требуется пароль."
#: ../driver/xscreensaver-demo.glade2.in.h:17
msgid "Lock Screen After"
-msgstr "Запирать экран через"
+msgstr "Заблокировать экран через"
#: ../driver/xscreensaver-demo.glade2.in.h:18
msgid ""
"How long each display mode should run before choosing a new one (in Random "
"mode.)"
-msgstr ""
-"Время работы каждого режима дисплея до выбора нового (в режиме "
-"\"Случайный хранитель экрана\".)"
+msgstr "Время работы каждого режима дисплея до выбора нового (в режиме \"Случайный хранитель экрана\".)"
#: ../driver/xscreensaver-demo.glade2.in.h:19
msgid "minutes"
@@ -467,15 +370,13 @@ msgstr "минут(ы)"
#: ../driver/xscreensaver-demo.glade2.in.h:20
msgid "_Blank After"
-msgstr "_Активировать через"
+msgstr "_Погасить через"
#: ../driver/xscreensaver-demo.glade2.in.h:21
msgid ""
"Demo the selected screen saver in full-screen mode (click the mouse to "
"return.)"
-msgstr ""
-"Показать выбранный хранитель в полноэкранном режиме (возврат обратно по "
-"щелчку мыши)."
+msgstr "Показать выбранный хранитель в полноэкранном режиме (возврат обратно по щелчку мыши)."
#: ../driver/xscreensaver-demo.glade2.in.h:22
msgid "_Preview"
@@ -503,11 +404,11 @@ msgstr "_Отключить хранитель экрана"
#: ../driver/xscreensaver-demo.glade2.in.h:28
msgid "When idle or locked, blacken the screen only."
-msgstr "Только гасить экран во время простоя или блокировки."
+msgstr "Гасить экран только во время простоя или блокировки."
#: ../driver/xscreensaver-demo.glade2.in.h:29
msgid "_Blank Screen Only"
-msgstr "_Только пустой экран"
+msgstr "_Погасить только экран"
#: ../driver/xscreensaver-demo.glade2.in.h:30
msgid "When idle or locked, run the display mode selected below."
@@ -515,15 +416,13 @@ msgstr "Запустить выбранный ниже режим дисплея
#: ../driver/xscreensaver-demo.glade2.in.h:31
msgid "_Only One Screen Saver"
-msgstr "Один _постоянный хранитель экрана"
+msgstr "Только один _постоянный хранитель экрана"
#: ../driver/xscreensaver-demo.glade2.in.h:32
msgid ""
"When idle or locked, choose a random display mode from among the checked "
"items in the list below."
-msgstr ""
-"Выбрать случайный режим дисплея среди отмеченных элементов в списке ниже "
-"во время простоя или блокировки."
+msgstr "Выбрать случайный режим дисплея среди отмеченных элементов в списке ниже во время простоя или блокировки."
#: ../driver/xscreensaver-demo.glade2.in.h:33
msgid "_Random Screen Saver"
@@ -533,53 +432,47 @@ msgstr "_Случайный хранитель экрана"
msgid ""
"When idle or locked, choose a random display mode from among the checked "
"items in the list below. Run that same mode on each monitor."
-msgstr ""
+msgstr "В режиме ожидания, или блокировки экрана, выбрать, среди проверенных элементов в списке ниже, режим случайного отображения. Запустить этот режим и на других мониторах."
#: ../driver/xscreensaver-demo.glade2.in.h:35
msgid "_Same Random Savers"
-msgstr ""
+msgstr "_Те же случайные заставки"
#: ../driver/xscreensaver-demo.glade2.in.h:36
msgid ""
"Run the next screen saver in the list in full-screen mode (click the mouse "
"to return.)"
-msgstr ""
-"Исполнить следующий в списке хранитель экрана в полноэкранном режиме "
-"(возврат обратно по щелчку мыши)."
+msgstr "Запустить следующий в списке хранитель экрана в полноэкранном режиме (возврат обратно по щелчку мыши)."
#: ../driver/xscreensaver-demo.glade2.in.h:37
msgid ""
"Run the previous screen saver in the list in full-screen mode (click the "
"mouse to return.)"
-msgstr ""
-"Исполнить предыдущий в списке хранитель экрана в полноэкранном режиме "
-"(возврат обратно по щелчку мыши)."
+msgstr "Запустить предыдущий в списке хранитель экрана в полноэкранном режиме (возврат обратно по щелчку мыши)."
#: ../driver/xscreensaver-demo.glade2.in.h:38
msgid "preview"
-msgstr ""
+msgstr "предпросмотр"
#: ../driver/xscreensaver-demo.glade2.in.h:39
msgid ""
"No Preview\n"
"Available"
-msgstr ""
-"Предпросмотр\n"
-"недоступен"
+msgstr "Предпросмотр\nнедоступен"
#: ../driver/xscreensaver-demo.glade2.in.h:41
msgid "no preview"
-msgstr ""
+msgstr "без предпросмотра"
#: ../driver/xscreensaver-demo.glade2.in.h:42
msgid ""
"Not\n"
"Installed"
-msgstr "Не установлен"
+msgstr "Не\nустановлен"
#: ../driver/xscreensaver-demo.glade2.in.h:44
msgid "not installed"
-msgstr ""
+msgstr "не установлено"
#: ../driver/xscreensaver-demo.glade2.in.h:45
msgid ""
@@ -587,15 +480,11 @@ msgid ""
"\n"
"This probably means that the \"xscreensaver-extras\" and\n"
"\"xscreensaver-gl-extras\" packages are not installed."
-msgstr ""
-"Доступно очень мало хранителей экрана (или они не доступны вообще).\n"
-"\n"
-"Возможно, не установлены пакеты \"xscreensaver-extras\" и\n"
-"\"xscreensaver-gl-extras\"."
+msgstr "Доступно очень мало хранителей экрана (или они не доступны вообще).\n\nВозможно, не установлены пакеты \"xscreensaver-extras\" и\n\"xscreensaver-gl-extras\"."
#: ../driver/xscreensaver-demo.glade2.in.h:49
msgid "nothing"
-msgstr ""
+msgstr "ничего"
#: ../driver/xscreensaver-demo.glade2.in.h:50
msgid "Description"
@@ -609,9 +498,7 @@ msgstr "Режимы _экрана"
msgid ""
"Whether the image-manipulating modes should be allowed to operate on an "
"image of your desktop."
-msgstr ""
-"Разрешено ли хранителям экрана, управляющим изображениями, работать с "
-"изображением вашего рабочего стола."
+msgstr "Разрешено ли хранителям экрана, управляющим изображениями, работать с изображением вашего рабочего стола."
#: ../driver/xscreensaver-demo.glade2.in.h:53
msgid "Grab Desktop _Images"
@@ -621,9 +508,7 @@ msgstr "Захватывать _изображения с рабочего ст
msgid ""
"Whether the image-manipulating modes should operate on images captured from "
"the system's video input (if there is one.)"
-msgstr ""
-"Должны ли хранители экрана, управляющие изображениями, работать с "
-"изображениями, захваченными с системного видеовхода (если таковой имеется)."
+msgstr "Должны ли хранители экрана, управляющие изображениями, работать с изображениями, захваченными с системного видеовхода (если таковой имеется)."
#: ../driver/xscreensaver-demo.glade2.in.h:55
msgid "Grab _Video Frames"
@@ -631,21 +516,17 @@ msgstr "Захватывать кадры _видео"
#: ../driver/xscreensaver-demo.glade2.in.h:56
msgid "Whether the image-manipulating modes should load image files."
-msgstr ""
-"Должны ли хранители экрана, управляющие изображениями, загружать файлы "
-"изображений с диска."
+msgstr "Должны ли хранители экрана, управляющие изображениями, загружать файлы изображений с диска."
#: ../driver/xscreensaver-demo.glade2.in.h:57
msgid "Choose _Random Image:"
-msgstr "Выбирать случайное изображение:"
+msgstr "Выбрать _случайное изображение:"
#: ../driver/xscreensaver-demo.glade2.in.h:58
msgid ""
"The local directory, RSS feed or Atom feed from which images will be "
"randomly chosen."
-msgstr ""
-"Локальный каталог, канал RSS или Atom, из которого случайным образом будут "
-"выбираться изображения."
+msgstr "Локальный каталог, канал RSS или Atom, из которого случайным образом будут выбираться изображения."
#: ../driver/xscreensaver-demo.glade2.in.h:59
msgid "_Browse"
@@ -657,13 +538,11 @@ msgstr "Локальный каталог или URL канала RSS."
#: ../driver/xscreensaver-demo.glade2.in.h:61
msgid "Image Manipulation"
-msgstr "Управление изображениями"
+msgstr "Манипуляция изображениями"
#: ../driver/xscreensaver-demo.glade2.in.h:62
msgid "Text-displaying modes will display the text typed here."
-msgstr ""
-"Хранитель экрана, управляющий текстом, будет отображать набранный здесь "
-"текст."
+msgstr "Хранитель экрана, управляющий текстом, будет отображать набранный здесь текст."
#: ../driver/xscreensaver-demo.glade2.in.h:63
msgid "_Text"
@@ -671,9 +550,7 @@ msgstr "_Текст"
#: ../driver/xscreensaver-demo.glade2.in.h:64
msgid "Text-displaying modes will display the contents of this file."
-msgstr ""
-"Хранитель экрана, управляющий текстом, будет отображать содержимое данного "
-"файла."
+msgstr "Хранитель экрана, управляющий текстом, будет отображать содержимое данного файла."
#: ../driver/xscreensaver-demo.glade2.in.h:65
msgid "Text _file"
@@ -681,9 +558,7 @@ msgstr "Текстовый _файл"
#: ../driver/xscreensaver-demo.glade2.in.h:66
msgid "Text-displaying modes will display the output of this program."
-msgstr ""
-"Хранитель экрана, управляющий текстом, будет отображать вывод данной "
-"программы."
+msgstr "Хранитель экрана, управляющий текстом, будет отображать вывод данной программы."
#: ../driver/xscreensaver-demo.glade2.in.h:67
msgid "_Program"
@@ -692,19 +567,16 @@ msgstr "_Программа"
#: ../driver/xscreensaver-demo.glade2.in.h:68
msgid ""
"Text-displaying modes will display the contents of this URL (HTML or RSS)."
-msgstr ""
-"Хранитель экрана, управляющий текстом, будет отображать содержимое данного "
-"URL (HTML или RSS)."
+msgstr "Хранитель экрана, управляющий текстом, будет отображать содержимое данного URL (HTML или RSS)."
#: ../driver/xscreensaver-demo.glade2.in.h:69
msgid "_URL"
-msgstr ""
+msgstr "_URL"
#: ../driver/xscreensaver-demo.glade2.in.h:70
-msgid "Text-displaying modes will display the local host name, date, and time."
-msgstr ""
-"Хранитель экрана, управляющий текстом, будет отображать локальное имя хоста, "
-"дату и время."
+msgid ""
+"Text-displaying modes will display the local host name, date, and time."
+msgstr "Хранитель экрана, управляющий текстом, будет отображать локальное имя хоста, дату и время."
#: ../driver/xscreensaver-demo.glade2.in.h:71
msgid "_Host Name and Time"
@@ -712,13 +584,11 @@ msgstr "_Имя хоста и время"
#: ../driver/xscreensaver-demo.glade2.in.h:72
msgid "Text Manipulation"
-msgstr "Управление текстом"
+msgstr "Манипуляция текстом"
#: ../driver/xscreensaver-demo.glade2.in.h:73
msgid "Whether the monitor should be powered down after a while."
-msgstr ""
-"Должен ли монитор снижать энергопотребление или отключаться через какое-то "
-"время."
+msgstr "Должен ли монитор снижать энергопотребление или отключаться через какое-то время."
#: ../driver/xscreensaver-demo.glade2.in.h:74
msgid "_Power Management Enabled"
@@ -726,11 +596,11 @@ msgstr "_Управление питанием включено"
#: ../driver/xscreensaver-demo.glade2.in.h:75
msgid "Stand_by After"
-msgstr "Режим Standby через"
+msgstr "Режим _ожидания через"
#: ../driver/xscreensaver-demo.glade2.in.h:76
msgid "Sus_pend After"
-msgstr "Режим Suspend через"
+msgstr "Режим _приостановки через"
#: ../driver/xscreensaver-demo.glade2.in.h:77
msgid "_Off After"
@@ -746,19 +616,17 @@ msgstr "Время до перехода монитора в режим энер
#: ../driver/xscreensaver-demo.glade2.in.h:80
msgid "How long until the monitor goes completely black."
-msgstr "Время, через которое монитор начнет показывать \"черный экран\"."
+msgstr "Время, через которое монитор начнет показывать \"чёрный экран\"."
#: ../driver/xscreensaver-demo.glade2.in.h:81
msgid ""
-"Whether the monitor should be powered off immediately in \"Blank Screen Only"
-"\" mode, regardless of the above power-management timeouts."
-msgstr ""
-"Нужно ли сразу же выключать монитор в режиме \"Только пустой экран\", "
-"независимо от вышеперечисленных настроек управления питанием."
+"Whether the monitor should be powered off immediately in \"Blank Screen "
+"Only\" mode, regardless of the above power-management timeouts."
+msgstr "Нужно ли сразу же выключать монитор в режиме \"Погасить только экран\", независимо от вышеперечисленных настроек управления питанием."
#: ../driver/xscreensaver-demo.glade2.in.h:82
msgid "_Quick Power-off in Blank Only Mode"
-msgstr "_Быстрое отключение питания в режиме пустого экрана"
+msgstr "_Быстрое отключение питания в режиме гашения экрана"
#: ../driver/xscreensaver-demo.glade2.in.h:83
msgid "Display Power Management"
@@ -768,25 +636,21 @@ msgstr "Управление питанием монитора"
msgid ""
"Whether the screen should slowly fade to black when the screen saver "
"activates."
-msgstr ""
-"Должен ли экран плавно \"снижать яркость\", \"гаснуть\" до черного при "
-"активации хранителя экрана."
+msgstr "Должен ли экран плавно \"снижать яркость\", \"гаснуть\" до чёрного при активации хранителя экрана."
#: ../driver/xscreensaver-demo.glade2.in.h:85
msgid "Fade to Black when _Blanking"
-msgstr "Переход к черному при _активации"
+msgstr "Переход к чёрному при _гашении"
#: ../driver/xscreensaver-demo.glade2.in.h:86
msgid ""
"Whether the screen should slowly fade in from black when the screen saver "
"deactivates."
-msgstr ""
-"Должен ли экран плавно \"набирать яркость\" от черного до нормального при "
-"деактивации хранителя экрана."
+msgstr "Должен ли экран плавно \"набирать яркость\" от чёрного до нормального при деактивации хранителя экрана."
#: ../driver/xscreensaver-demo.glade2.in.h:87
msgid "Fade from Black When _Unblanking"
-msgstr "Переход от черного при _деактивации"
+msgstr "Переход от чёрного при _отмене гашения"
#: ../driver/xscreensaver-demo.glade2.in.h:88
msgid "F_ade Duration"
@@ -794,7 +658,7 @@ msgstr "_Продолжительность перехода"
#: ../driver/xscreensaver-demo.glade2.in.h:89
msgid "How long it should take for the screen to fade in and out."
-msgstr "Как долго должен длиться переход \"к черному\" или \"от черного\"."
+msgstr "Как долго должен длиться переход \"к чёрному\" или \"от чёрного\"."
#: ../driver/xscreensaver-demo.glade2.in.h:90
msgid "seconds"
@@ -804,9 +668,7 @@ msgstr "секунд(ы)"
msgid ""
"Whether to install a private colormap when running in 8-bit mode on the "
"default Visual."
-msgstr ""
-"Устанавливать ли собственную цветовую палитру при работе с 8-битным цветом в "
-"оптическом классе \"по умолчанию\"."
+msgstr "Устанавливать ли собственную цветовую палитру при работе с 8-битным цветом в оптическом классе \"по умолчанию\"."
#: ../driver/xscreensaver-demo.glade2.in.h:92
msgid "Install _Colormap"
@@ -814,7 +676,7 @@ msgstr "Устанавливать _цветовую палитру"
#: ../driver/xscreensaver-demo.glade2.in.h:93
msgid "Fading and Colormaps"
-msgstr "Переход и цветовые палитры"
+msgstr "Затухание и цветовые палитры"
#: ../driver/xscreensaver-demo.glade2.in.h:94
msgid "_Advanced"
@@ -822,7 +684,7 @@ msgstr "Рас_ширенные"
#: ../driver/xscreensaver-demo.glade2.in.h:95
msgid "dialog1"
-msgstr ""
+msgstr "диалог1"
#: ../driver/xscreensaver-demo.glade2.in.h:96
msgid "_Advanced >>"
@@ -834,7 +696,7 @@ msgstr "_Стандартные <<"
#: ../driver/xscreensaver-demo.glade2.in.h:98
msgid "_Reset to Defaults"
-msgstr "_По умолчанию"
+msgstr "_Сброс к по-умолчанию"
#: ../driver/xscreensaver-demo.glade2.in.h:99
msgid "Standard"
@@ -846,7 +708,7 @@ msgstr "_Командная строка:"
#: ../driver/xscreensaver-demo.glade2.in.h:101
msgid "_Visual:"
-msgstr "О_птический класс:"
+msgstr "_Видимое:"
#: ../driver/xscreensaver-demo.glade2.in.h:103
msgid "Best"
@@ -866,35 +728,36 @@ msgstr "GL"
#: ../driver/xscreensaver-demo.glade2.in.h:107
msgid "TrueColor"
-msgstr "TrueColor"
+msgstr "Истинный цвет"
#: ../driver/xscreensaver-demo.glade2.in.h:108
msgid "PseudoColor"
-msgstr "PseudoColor"
+msgstr "Псевдо цвет"
#: ../driver/xscreensaver-demo.glade2.in.h:109
msgid "StaticGray"
-msgstr "StaticGray"
+msgstr "Статический серый"
#: ../driver/xscreensaver-demo.glade2.in.h:110
msgid "GrayScale"
-msgstr "GrayScale"
+msgstr "Градации серого"
#: ../driver/xscreensaver-demo.glade2.in.h:111
msgid "DirectColor"
-msgstr "DirectColor"
+msgstr "Прямой цвет"
#: ../driver/xscreensaver-demo.glade2.in.h:112
msgid "Color"
-msgstr "Color"
+msgstr "Цвет"
#: ../driver/xscreensaver-demo.glade2.in.h:113
msgid "Gray"
-msgstr "Gray"
+msgstr "Серый"
#: ../driver/xscreensaver-demo.glade2.in.h:114
+#: ../hacks/config/razzledazzle.xml.h:8
msgid "Mono"
-msgstr "Mono"
+msgstr "Моно"
#: ../driver/xscreensaver-demo.glade2.in.h:115
msgid "Advanced"
@@ -906,7 +769,7 @@ msgstr "Настройки"
#: ../hacks/config/abstractile.xml.h:1
msgid "Abstractile"
-msgstr ""
+msgstr "Абстрактный"
#: ../hacks/config/abstractile.xml.h:2 ../hacks/config/anemone.xml.h:2
#: ../hacks/config/apollonian.xml.h:13 ../hacks/config/atlantis.xml.h:5
@@ -915,30 +778,33 @@ msgstr ""
#: ../hacks/config/boxed.xml.h:5 ../hacks/config/carousel.xml.h:5
#: ../hacks/config/ccurve.xml.h:5 ../hacks/config/circuit.xml.h:8
#: ../hacks/config/cityflow.xml.h:9 ../hacks/config/companioncube.xml.h:5
-#: ../hacks/config/cube21.xml.h:8 ../hacks/config/cubenetic.xml.h:17
-#: ../hacks/config/cubestack.xml.h:5 ../hacks/config/cubestorm.xml.h:5
-#: ../hacks/config/cubetwist.xml.h:5 ../hacks/config/cubicgrid.xml.h:5
-#: ../hacks/config/dangerball.xml.h:5 ../hacks/config/discoball.xml.h:5
-#: ../hacks/config/dymaxionmap.xml.h:5 ../hacks/config/energystream.xml.h:2
-#: ../hacks/config/eruption.xml.h:10 ../hacks/config/fliptext.xml.h:5
+#: ../hacks/config/crumbler.xml.h:5 ../hacks/config/cube21.xml.h:8
+#: ../hacks/config/cubenetic.xml.h:17 ../hacks/config/cubestack.xml.h:5
+#: ../hacks/config/cubestorm.xml.h:5 ../hacks/config/cubetwist.xml.h:5
+#: ../hacks/config/cubicgrid.xml.h:5 ../hacks/config/dangerball.xml.h:5
+#: ../hacks/config/discoball.xml.h:5 ../hacks/config/dymaxionmap.xml.h:5
+#: ../hacks/config/energystream.xml.h:2 ../hacks/config/eruption.xml.h:10
+#: ../hacks/config/esper.xml.h:5 ../hacks/config/fliptext.xml.h:5
#: ../hacks/config/flyingtoasters.xml.h:5 ../hacks/config/fontglide.xml.h:5
#: ../hacks/config/fuzzyflakes.xml.h:5 ../hacks/config/gears.xml.h:5
#: ../hacks/config/geodesic.xml.h:14 ../hacks/config/gflux.xml.h:5
#: ../hacks/config/glcells.xml.h:25 ../hacks/config/glknots.xml.h:5
#: ../hacks/config/glmatrix.xml.h:8 ../hacks/config/glsnake.xml.h:11
-#: ../hacks/config/goop.xml.h:5 ../hacks/config/hexadrop.xml.h:5
-#: ../hacks/config/hexstrut.xml.h:5 ../hacks/config/hilbert.xml.h:8
-#: ../hacks/config/hydrostat.xml.h:5 ../hacks/config/hyperball.xml.h:9
-#: ../hacks/config/hypercube.xml.h:9 ../hacks/config/hypnowheel.xml.h:2
-#: ../hacks/config/interference.xml.h:5 ../hacks/config/jigglypuff.xml.h:14
-#: ../hacks/config/jigsaw.xml.h:5 ../hacks/config/juggle.xml.h:5
-#: ../hacks/config/juggler3d.xml.h:5 ../hacks/config/kaleidocycle.xml.h:8
-#: ../hacks/config/moebiusgears.xml.h:5 ../hacks/config/penetrate.xml.h:2
-#: ../hacks/config/petri.xml.h:16 ../hacks/config/phosphor.xml.h:6
-#: ../hacks/config/photopile.xml.h:12 ../hacks/config/piecewise.xml.h:8
-#: ../hacks/config/pinion.xml.h:5 ../hacks/config/polyhedra.xml.h:5
-#: ../hacks/config/pong.xml.h:2 ../hacks/config/pyro.xml.h:2
-#: ../hacks/config/quasicrystal.xml.h:5 ../hacks/config/raverhoop.xml.h:11
+#: ../hacks/config/goop.xml.h:5 ../hacks/config/handsy.xml.h:5
+#: ../hacks/config/hexadrop.xml.h:5 ../hacks/config/hexstrut.xml.h:5
+#: ../hacks/config/hilbert.xml.h:8 ../hacks/config/hydrostat.xml.h:5
+#: ../hacks/config/hyperball.xml.h:9 ../hacks/config/hypercube.xml.h:9
+#: ../hacks/config/hypnowheel.xml.h:2 ../hacks/config/interference.xml.h:5
+#: ../hacks/config/jigglypuff.xml.h:14 ../hacks/config/jigsaw.xml.h:5
+#: ../hacks/config/juggle.xml.h:5 ../hacks/config/juggler3d.xml.h:5
+#: ../hacks/config/kaleidocycle.xml.h:8 ../hacks/config/maze3d.xml.h:2
+#: ../hacks/config/moebiusgears.xml.h:5 ../hacks/config/peepers.xml.h:5
+#: ../hacks/config/penetrate.xml.h:2 ../hacks/config/petri.xml.h:16
+#: ../hacks/config/phosphor.xml.h:6 ../hacks/config/photopile.xml.h:12
+#: ../hacks/config/piecewise.xml.h:8 ../hacks/config/pinion.xml.h:5
+#: ../hacks/config/polyhedra.xml.h:5 ../hacks/config/pong.xml.h:2
+#: ../hacks/config/pyro.xml.h:2 ../hacks/config/quasicrystal.xml.h:5
+#: ../hacks/config/raverhoop.xml.h:11 ../hacks/config/razzledazzle.xml.h:5
#: ../hacks/config/rd-bomb.xml.h:2 ../hacks/config/rdbomb.xml.h:2
#: ../hacks/config/rocks.xml.h:8 ../hacks/config/rubik.xml.h:6
#: ../hacks/config/rubikblocks.xml.h:8 ../hacks/config/skytentacles.xml.h:15
@@ -956,17 +822,20 @@ msgstr "Медленно"
#: ../hacks/config/abstractile.xml.h:3 ../hacks/config/anemone.xml.h:3
#: ../hacks/config/apollonian.xml.h:14 ../hacks/config/attraction.xml.h:25
#: ../hacks/config/boing.xml.h:6 ../hacks/config/boxed.xml.h:6
-#: ../hacks/config/cubestorm.xml.h:6 ../hacks/config/cubicgrid.xml.h:6
-#: ../hacks/config/discoball.xml.h:6 ../hacks/config/energystream.xml.h:3
+#: ../hacks/config/crumbler.xml.h:6 ../hacks/config/cubestorm.xml.h:6
+#: ../hacks/config/cubicgrid.xml.h:6 ../hacks/config/discoball.xml.h:6
+#: ../hacks/config/energystream.xml.h:3 ../hacks/config/esper.xml.h:6
#: ../hacks/config/fliptext.xml.h:6 ../hacks/config/fontglide.xml.h:6
#: ../hacks/config/fuzzyflakes.xml.h:6 ../hacks/config/gears.xml.h:6
#: ../hacks/config/glknots.xml.h:6 ../hacks/config/goop.xml.h:6
-#: ../hacks/config/hexadrop.xml.h:6 ../hacks/config/hexstrut.xml.h:6
-#: ../hacks/config/hilbert.xml.h:11 ../hacks/config/hypnowheel.xml.h:5
-#: ../hacks/config/jigsaw.xml.h:6 ../hacks/config/juggle.xml.h:6
-#: ../hacks/config/juggler3d.xml.h:6 ../hacks/config/kaleidocycle.xml.h:9
-#: ../hacks/config/moebiusgears.xml.h:6 ../hacks/config/polyhedra.xml.h:6
-#: ../hacks/config/quasicrystal.xml.h:6 ../hacks/config/skytentacles.xml.h:18
+#: ../hacks/config/handsy.xml.h:6 ../hacks/config/hexadrop.xml.h:6
+#: ../hacks/config/hexstrut.xml.h:6 ../hacks/config/hilbert.xml.h:11
+#: ../hacks/config/hypnowheel.xml.h:5 ../hacks/config/jigsaw.xml.h:6
+#: ../hacks/config/juggle.xml.h:6 ../hacks/config/juggler3d.xml.h:6
+#: ../hacks/config/kaleidocycle.xml.h:9 ../hacks/config/maze3d.xml.h:3
+#: ../hacks/config/moebiusgears.xml.h:6 ../hacks/config/peepers.xml.h:6
+#: ../hacks/config/polyhedra.xml.h:6 ../hacks/config/quasicrystal.xml.h:6
+#: ../hacks/config/razzledazzle.xml.h:6 ../hacks/config/skytentacles.xml.h:18
#: ../hacks/config/sonar.xml.h:6 ../hacks/config/splitflap.xml.h:6
#: ../hacks/config/tessellimage.xml.h:6
#: ../hacks/config/unknownpleasures.xml.h:9 ../hacks/config/vigilance.xml.h:6
@@ -981,30 +850,33 @@ msgstr "Скорость"
#: ../hacks/config/boxed.xml.h:7 ../hacks/config/carousel.xml.h:7
#: ../hacks/config/ccurve.xml.h:7 ../hacks/config/circuit.xml.h:10
#: ../hacks/config/cityflow.xml.h:11 ../hacks/config/companioncube.xml.h:7
-#: ../hacks/config/cube21.xml.h:10 ../hacks/config/cubenetic.xml.h:19
-#: ../hacks/config/cubestack.xml.h:7 ../hacks/config/cubestorm.xml.h:7
-#: ../hacks/config/cubetwist.xml.h:7 ../hacks/config/cubicgrid.xml.h:7
-#: ../hacks/config/dangerball.xml.h:7 ../hacks/config/discoball.xml.h:7
-#: ../hacks/config/dymaxionmap.xml.h:7 ../hacks/config/energystream.xml.h:4
-#: ../hacks/config/eruption.xml.h:12 ../hacks/config/fliptext.xml.h:7
+#: ../hacks/config/crumbler.xml.h:7 ../hacks/config/cube21.xml.h:10
+#: ../hacks/config/cubenetic.xml.h:19 ../hacks/config/cubestack.xml.h:7
+#: ../hacks/config/cubestorm.xml.h:7 ../hacks/config/cubetwist.xml.h:7
+#: ../hacks/config/cubicgrid.xml.h:7 ../hacks/config/dangerball.xml.h:7
+#: ../hacks/config/discoball.xml.h:7 ../hacks/config/dymaxionmap.xml.h:7
+#: ../hacks/config/energystream.xml.h:4 ../hacks/config/eruption.xml.h:12
+#: ../hacks/config/esper.xml.h:7 ../hacks/config/fliptext.xml.h:7
#: ../hacks/config/flyingtoasters.xml.h:7 ../hacks/config/fontglide.xml.h:7
#: ../hacks/config/fuzzyflakes.xml.h:7 ../hacks/config/gears.xml.h:7
#: ../hacks/config/geodesic.xml.h:16 ../hacks/config/gflux.xml.h:7
#: ../hacks/config/glknots.xml.h:7 ../hacks/config/glmatrix.xml.h:10
#: ../hacks/config/glsnake.xml.h:13 ../hacks/config/goop.xml.h:7
-#: ../hacks/config/hexadrop.xml.h:7 ../hacks/config/hexstrut.xml.h:7
-#: ../hacks/config/hilbert.xml.h:10 ../hacks/config/hydrostat.xml.h:7
-#: ../hacks/config/hyperball.xml.h:11 ../hacks/config/hypercube.xml.h:11
-#: ../hacks/config/hypnowheel.xml.h:4 ../hacks/config/interference.xml.h:7
-#: ../hacks/config/jigglypuff.xml.h:16 ../hacks/config/jigsaw.xml.h:7
-#: ../hacks/config/juggle.xml.h:7 ../hacks/config/juggler3d.xml.h:7
-#: ../hacks/config/kaleidocycle.xml.h:10 ../hacks/config/moebiusgears.xml.h:7
-#: ../hacks/config/penetrate.xml.h:4 ../hacks/config/petri.xml.h:18
-#: ../hacks/config/phosphor.xml.h:8 ../hacks/config/photopile.xml.h:14
-#: ../hacks/config/piecewise.xml.h:10 ../hacks/config/pinion.xml.h:7
-#: ../hacks/config/polyhedra.xml.h:7 ../hacks/config/pong.xml.h:4
-#: ../hacks/config/pyro.xml.h:4 ../hacks/config/quasicrystal.xml.h:7
-#: ../hacks/config/raverhoop.xml.h:13 ../hacks/config/rd-bomb.xml.h:4
+#: ../hacks/config/handsy.xml.h:7 ../hacks/config/hexadrop.xml.h:7
+#: ../hacks/config/hexstrut.xml.h:7 ../hacks/config/hilbert.xml.h:10
+#: ../hacks/config/hydrostat.xml.h:7 ../hacks/config/hyperball.xml.h:11
+#: ../hacks/config/hypercube.xml.h:11 ../hacks/config/hypnowheel.xml.h:4
+#: ../hacks/config/interference.xml.h:7 ../hacks/config/jigglypuff.xml.h:16
+#: ../hacks/config/jigsaw.xml.h:7 ../hacks/config/juggle.xml.h:7
+#: ../hacks/config/juggler3d.xml.h:7 ../hacks/config/kaleidocycle.xml.h:10
+#: ../hacks/config/maze3d.xml.h:4 ../hacks/config/moebiusgears.xml.h:7
+#: ../hacks/config/peepers.xml.h:7 ../hacks/config/penetrate.xml.h:4
+#: ../hacks/config/petri.xml.h:18 ../hacks/config/phosphor.xml.h:8
+#: ../hacks/config/photopile.xml.h:14 ../hacks/config/piecewise.xml.h:10
+#: ../hacks/config/pinion.xml.h:7 ../hacks/config/polyhedra.xml.h:7
+#: ../hacks/config/pong.xml.h:4 ../hacks/config/pyro.xml.h:4
+#: ../hacks/config/quasicrystal.xml.h:7 ../hacks/config/raverhoop.xml.h:13
+#: ../hacks/config/razzledazzle.xml.h:7 ../hacks/config/rd-bomb.xml.h:4
#: ../hacks/config/rdbomb.xml.h:4 ../hacks/config/rocks.xml.h:10
#: ../hacks/config/rubik.xml.h:8 ../hacks/config/rubikblocks.xml.h:10
#: ../hacks/config/skytentacles.xml.h:17 ../hacks/config/slidescreen.xml.h:13
@@ -1078,11 +950,9 @@ msgstr "Черепичные плитки"
#. #### -right3d [Red]
#. #### -cycle
#. <boolean id="shm" _label="Use shared memory" arg-unset="-no-shm"/>
-#.
#. <number id="ncolors" type="slider" arg="-ncolors %"
#. _label="Number of colors" _low-label="Two" _high-label="Many"
#. low="2" high="255" default="64"/>
-#.
#. #### -anim-step-size [3]
#. #### -3d
#. #### -font []
@@ -1106,57 +976,60 @@ msgstr "Черепичные плитки"
#: ../hacks/config/cityflow.xml.h:17 ../hacks/config/cloudlife.xml.h:12
#: ../hacks/config/companioncube.xml.h:14 ../hacks/config/compass.xml.h:5
#: ../hacks/config/coral.xml.h:14 ../hacks/config/crackberg.xml.h:18
-#: ../hacks/config/critical.xml.h:8 ../hacks/config/crystal.xml.h:15
-#: ../hacks/config/cube21.xml.h:26 ../hacks/config/cubenetic.xml.h:26
-#: ../hacks/config/cubestack.xml.h:16 ../hacks/config/cubestorm.xml.h:17
-#: ../hacks/config/cubetwist.xml.h:18 ../hacks/config/cubicgrid.xml.h:12
-#: ../hacks/config/cwaves.xml.h:9 ../hacks/config/cynosure.xml.h:11
-#: ../hacks/config/dangerball.xml.h:14 ../hacks/config/decayscreen.xml.h:23
-#: ../hacks/config/deco.xml.h:14 ../hacks/config/deluxe.xml.h:16
-#: ../hacks/config/demon.xml.h:15 ../hacks/config/discoball.xml.h:14
-#: ../hacks/config/discrete.xml.h:11 ../hacks/config/distort.xml.h:22
-#: ../hacks/config/dnalogo.xml.h:10 ../hacks/config/drift.xml.h:11
-#: ../hacks/config/dymaxionmap.xml.h:14 ../hacks/config/endgame.xml.h:6
-#: ../hacks/config/energystream.xml.h:7 ../hacks/config/engine.xml.h:19
-#: ../hacks/config/epicycle.xml.h:14 ../hacks/config/eruption.xml.h:22
+#: ../hacks/config/critical.xml.h:8 ../hacks/config/crumbler.xml.h:15
+#: ../hacks/config/crystal.xml.h:15 ../hacks/config/cube21.xml.h:26
+#: ../hacks/config/cubenetic.xml.h:26 ../hacks/config/cubestack.xml.h:16
+#: ../hacks/config/cubestorm.xml.h:20 ../hacks/config/cubetwist.xml.h:18
+#: ../hacks/config/cubicgrid.xml.h:12 ../hacks/config/cwaves.xml.h:9
+#: ../hacks/config/cynosure.xml.h:11 ../hacks/config/dangerball.xml.h:14
+#: ../hacks/config/decayscreen.xml.h:23 ../hacks/config/deco.xml.h:14
+#: ../hacks/config/deluxe.xml.h:16 ../hacks/config/demon.xml.h:15
+#: ../hacks/config/discoball.xml.h:14 ../hacks/config/discrete.xml.h:11
+#: ../hacks/config/distort.xml.h:22 ../hacks/config/dnalogo.xml.h:9
+#: ../hacks/config/drift.xml.h:11 ../hacks/config/dymaxionmap.xml.h:16
+#: ../hacks/config/endgame.xml.h:6 ../hacks/config/energystream.xml.h:7
+#: ../hacks/config/engine.xml.h:19 ../hacks/config/epicycle.xml.h:14
+#: ../hacks/config/eruption.xml.h:22 ../hacks/config/esper.xml.h:9
#: ../hacks/config/euler2d.xml.h:29 ../hacks/config/extrusion.xml.h:17
#: ../hacks/config/fadeplot.xml.h:14 ../hacks/config/fiberlamp.xml.h:11
-#: ../hacks/config/fireworkx.xml.h:10 ../hacks/config/flag.xml.h:13
-#: ../hacks/config/flame.xml.h:14 ../hacks/config/flipflop.xml.h:14
-#: ../hacks/config/flipscreen3d.xml.h:6 ../hacks/config/fliptext.xml.h:15
-#: ../hacks/config/flow.xml.h:21 ../hacks/config/fluidballs.xml.h:22
-#: ../hacks/config/flurry.xml.h:2 ../hacks/config/flyingtoasters.xml.h:14
-#: ../hacks/config/fontglide.xml.h:16 ../hacks/config/forest.xml.h:8
-#: ../hacks/config/fuzzyflakes.xml.h:12 ../hacks/config/galaxy.xml.h:13
-#: ../hacks/config/gears.xml.h:14 ../hacks/config/geodesic.xml.h:10
-#: ../hacks/config/geodesicgears.xml.h:13 ../hacks/config/gflux.xml.h:19
-#: ../hacks/config/glblur.xml.h:17 ../hacks/config/glcells.xml.h:32
-#: ../hacks/config/gleidescope.xml.h:14 ../hacks/config/glforestfire.xml.h:16
-#: ../hacks/config/glhanoi.xml.h:16 ../hacks/config/glknots.xml.h:24
-#: ../hacks/config/glmatrix.xml.h:20 ../hacks/config/glplanet.xml.h:13
-#: ../hacks/config/glschool.xml.h:17 ../hacks/config/glslideshow.xml.h:20
-#: ../hacks/config/glsnake.xml.h:18 ../hacks/config/gltext.xml.h:19
-#: ../hacks/config/goop.xml.h:13 ../hacks/config/grav.xml.h:12
-#: ../hacks/config/greynetic.xml.h:6 ../hacks/config/halftone.xml.h:17
-#: ../hacks/config/halo.xml.h:14 ../hacks/config/helix.xml.h:8
+#: ../hacks/config/filmleader.xml.h:9 ../hacks/config/fireworkx.xml.h:10
+#: ../hacks/config/flag.xml.h:13 ../hacks/config/flame.xml.h:14
+#: ../hacks/config/flipflop.xml.h:14 ../hacks/config/flipscreen3d.xml.h:6
+#: ../hacks/config/fliptext.xml.h:15 ../hacks/config/flow.xml.h:21
+#: ../hacks/config/fluidballs.xml.h:22 ../hacks/config/flurry.xml.h:2
+#: ../hacks/config/flyingtoasters.xml.h:14 ../hacks/config/fontglide.xml.h:16
+#: ../hacks/config/forest.xml.h:8 ../hacks/config/fuzzyflakes.xml.h:12
+#: ../hacks/config/galaxy.xml.h:13 ../hacks/config/gears.xml.h:14
+#: ../hacks/config/geodesic.xml.h:10 ../hacks/config/geodesicgears.xml.h:13
+#: ../hacks/config/gflux.xml.h:19 ../hacks/config/glblur.xml.h:17
+#: ../hacks/config/glcells.xml.h:32 ../hacks/config/gleidescope.xml.h:14
+#: ../hacks/config/glforestfire.xml.h:16 ../hacks/config/glhanoi.xml.h:16
+#: ../hacks/config/glknots.xml.h:24 ../hacks/config/glmatrix.xml.h:20
+#: ../hacks/config/glplanet.xml.h:13 ../hacks/config/glschool.xml.h:17
+#: ../hacks/config/glslideshow.xml.h:20 ../hacks/config/glsnake.xml.h:18
+#: ../hacks/config/gltext.xml.h:19 ../hacks/config/goop.xml.h:13
+#: ../hacks/config/grav.xml.h:12 ../hacks/config/greynetic.xml.h:6
+#: ../hacks/config/halftone.xml.h:17 ../hacks/config/halo.xml.h:14
+#: ../hacks/config/handsy.xml.h:23 ../hacks/config/helix.xml.h:8
#: ../hacks/config/hexadrop.xml.h:22 ../hacks/config/hexstrut.xml.h:17
#: ../hacks/config/hilbert.xml.h:20 ../hacks/config/hopalong.xml.h:23
#: ../hacks/config/hydrostat.xml.h:29 ../hacks/config/hyperball.xml.h:8
#: ../hacks/config/hypercube.xml.h:8 ../hacks/config/hypertorus.xml.h:5
#: ../hacks/config/hypnowheel.xml.h:8 ../hacks/config/ifs.xml.h:68
#: ../hacks/config/imsmap.xml.h:18 ../hacks/config/interaggregate.xml.h:8
-#: ../hacks/config/interference.xml.h:21 ../hacks/config/intermomentary.xml.h:8
-#: ../hacks/config/jigglypuff.xml.h:10 ../hacks/config/jigsaw.xml.h:15
-#: ../hacks/config/juggle.xml.h:21 ../hacks/config/juggler3d.xml.h:21
-#: ../hacks/config/julia.xml.h:14 ../hacks/config/kaleidescope.xml.h:13
-#: ../hacks/config/kaleidocycle.xml.h:21 ../hacks/config/klein.xml.h:45
-#: ../hacks/config/kumppa.xml.h:8 ../hacks/config/lament.xml.h:7
-#: ../hacks/config/laser.xml.h:12 ../hacks/config/lavalite.xml.h:16
-#: ../hacks/config/lcdscrub.xml.h:7 ../hacks/config/lightning.xml.h:8
-#: ../hacks/config/lisa.xml.h:16 ../hacks/config/lissie.xml.h:15
-#: ../hacks/config/lmorph.xml.h:17 ../hacks/config/lockward.xml.h:9
-#: ../hacks/config/loop.xml.h:12 ../hacks/config/m6502.xml.h:6
-#: ../hacks/config/maze.xml.h:12 ../hacks/config/memscroller.xml.h:9
+#: ../hacks/config/interference.xml.h:21
+#: ../hacks/config/intermomentary.xml.h:8 ../hacks/config/jigglypuff.xml.h:10
+#: ../hacks/config/jigsaw.xml.h:15 ../hacks/config/juggle.xml.h:21
+#: ../hacks/config/juggler3d.xml.h:21 ../hacks/config/julia.xml.h:14
+#: ../hacks/config/kaleidescope.xml.h:13 ../hacks/config/kaleidocycle.xml.h:21
+#: ../hacks/config/klein.xml.h:45 ../hacks/config/kumppa.xml.h:8
+#: ../hacks/config/lament.xml.h:7 ../hacks/config/laser.xml.h:12
+#: ../hacks/config/lavalite.xml.h:16 ../hacks/config/lcdscrub.xml.h:7
+#: ../hacks/config/lightning.xml.h:8 ../hacks/config/lisa.xml.h:16
+#: ../hacks/config/lissie.xml.h:15 ../hacks/config/lmorph.xml.h:17
+#: ../hacks/config/lockward.xml.h:9 ../hacks/config/loop.xml.h:12
+#: ../hacks/config/m6502.xml.h:3 ../hacks/config/maze.xml.h:12
+#: ../hacks/config/maze3d.xml.h:10 ../hacks/config/memscroller.xml.h:9
#: ../hacks/config/menger.xml.h:20 ../hacks/config/metaballs.xml.h:16
#: ../hacks/config/mirrorblob.xml.h:25 ../hacks/config/mismunch.xml.h:13
#: ../hacks/config/moebius.xml.h:7 ../hacks/config/moebiusgears.xml.h:14
@@ -1165,82 +1038,84 @@ msgstr "Черепичные плитки"
#: ../hacks/config/mountain.xml.h:11 ../hacks/config/munch.xml.h:16
#: ../hacks/config/nerverot.xml.h:21 ../hacks/config/noof.xml.h:5
#: ../hacks/config/noseguy.xml.h:2 ../hacks/config/pacman.xml.h:6
-#: ../hacks/config/pedal.xml.h:9 ../hacks/config/penetrate.xml.h:8
-#: ../hacks/config/penrose.xml.h:12 ../hacks/config/petri.xml.h:5
-#: ../hacks/config/phosphor.xml.h:13 ../hacks/config/photopile.xml.h:22
-#: ../hacks/config/piecewise.xml.h:15 ../hacks/config/pinion.xml.h:16
-#: ../hacks/config/pipes.xml.h:20 ../hacks/config/polyhedra.xml.h:168
-#: ../hacks/config/polyominoes.xml.h:12 ../hacks/config/polytopes.xml.h:18
-#: ../hacks/config/pong.xml.h:9 ../hacks/config/popsquares.xml.h:21
+#: ../hacks/config/pedal.xml.h:9 ../hacks/config/peepers.xml.h:17
+#: ../hacks/config/penetrate.xml.h:8 ../hacks/config/penrose.xml.h:12
+#: ../hacks/config/petri.xml.h:5 ../hacks/config/phosphor.xml.h:13
+#: ../hacks/config/photopile.xml.h:22 ../hacks/config/piecewise.xml.h:15
+#: ../hacks/config/pinion.xml.h:16 ../hacks/config/pipes.xml.h:20
+#: ../hacks/config/polyhedra.xml.h:168 ../hacks/config/polyominoes.xml.h:12
+#: ../hacks/config/polytopes.xml.h:18 ../hacks/config/pong.xml.h:9
+#: ../hacks/config/popsquares.xml.h:21
#: ../hacks/config/projectiveplane.xml.h:43 ../hacks/config/providence.xml.h:7
#: ../hacks/config/pulsar.xml.h:14 ../hacks/config/pyro.xml.h:14
#: ../hacks/config/qix.xml.h:24 ../hacks/config/quasicrystal.xml.h:13
#: ../hacks/config/queens.xml.h:6 ../hacks/config/raverhoop.xml.h:20
-#: ../hacks/config/rd-bomb.xml.h:17 ../hacks/config/rdbomb.xml.h:17
-#: ../hacks/config/ripples.xml.h:18 ../hacks/config/rocks.xml.h:17
-#: ../hacks/config/romanboy.xml.h:41 ../hacks/config/rorschach.xml.h:11
-#: ../hacks/config/rotor.xml.h:13 ../hacks/config/rotzoomer.xml.h:15
-#: ../hacks/config/rubik.xml.h:11 ../hacks/config/rubikblocks.xml.h:20
-#: ../hacks/config/sballs.xml.h:16 ../hacks/config/shadebobs.xml.h:16
-#: ../hacks/config/sierpinski.xml.h:13 ../hacks/config/sierpinski3d.xml.h:10
-#: ../hacks/config/skytentacles.xml.h:25 ../hacks/config/slidescreen.xml.h:18
-#: ../hacks/config/slip.xml.h:13 ../hacks/config/sonar.xml.h:34
-#: ../hacks/config/speedmine.xml.h:17 ../hacks/config/sphere.xml.h:8
-#: ../hacks/config/spheremonics.xml.h:22 ../hacks/config/spiral.xml.h:11
-#: ../hacks/config/splitflap.xml.h:25 ../hacks/config/splodesic.xml.h:11
-#: ../hacks/config/spotlight.xml.h:11 ../hacks/config/sproingies.xml.h:9
-#: ../hacks/config/squiral.xml.h:17 ../hacks/config/stairs.xml.h:5
-#: ../hacks/config/starfish.xml.h:17 ../hacks/config/starwars.xml.h:15
-#: ../hacks/config/stonerview.xml.h:7 ../hacks/config/strange.xml.h:23
-#: ../hacks/config/substrate.xml.h:19 ../hacks/config/superquadrics.xml.h:13
-#: ../hacks/config/surfaces.xml.h:27 ../hacks/config/swirl.xml.h:11
-#: ../hacks/config/t3d.xml.h:15 ../hacks/config/tangram.xml.h:16
-#: ../hacks/config/tessellimage.xml.h:16 ../hacks/config/testx11.xml.h:2
-#: ../hacks/config/thornbird.xml.h:16 ../hacks/config/timetunnel.xml.h:8
-#: ../hacks/config/topblock.xml.h:24 ../hacks/config/triangle.xml.h:8
-#: ../hacks/config/tronbit.xml.h:11 ../hacks/config/truchet.xml.h:6
-#: ../hacks/config/twang.xml.h:18 ../hacks/config/unicrud.xml.h:10
-#: ../hacks/config/unknownpleasures.xml.h:14
-#: ../hacks/config/vermiculate.xml.h:5 ../hacks/config/vidwhacker.xml.h:6
-#: ../hacks/config/vines.xml.h:8 ../hacks/config/voronoi.xml.h:11
-#: ../hacks/config/wander.xml.h:13 ../hacks/config/webcollage.xml.h:11
-#: ../hacks/config/whirlwindwarp.xml.h:8 ../hacks/config/whirlygig.xml.h:31
-#: ../hacks/config/winduprobot.xml.h:22 ../hacks/config/worm.xml.h:11
-#: ../hacks/config/wormhole.xml.h:11 ../hacks/config/xanalogtv.xml.h:2
-#: ../hacks/config/xflame.xml.h:7 ../hacks/config/xjack.xml.h:6
-#: ../hacks/config/xlyap.xml.h:9 ../hacks/config/xmatrix.xml.h:21
-#: ../hacks/config/xrayswarm.xml.h:5 ../hacks/config/xspirograph.xml.h:9
-#: ../hacks/config/zoom.xml.h:15
+#: ../hacks/config/razzledazzle.xml.h:20 ../hacks/config/rd-bomb.xml.h:17
+#: ../hacks/config/rdbomb.xml.h:17 ../hacks/config/ripples.xml.h:18
+#: ../hacks/config/rocks.xml.h:17 ../hacks/config/romanboy.xml.h:41
+#: ../hacks/config/rorschach.xml.h:11 ../hacks/config/rotor.xml.h:13
+#: ../hacks/config/rotzoomer.xml.h:15 ../hacks/config/rubik.xml.h:11
+#: ../hacks/config/rubikblocks.xml.h:20 ../hacks/config/sballs.xml.h:16
+#: ../hacks/config/shadebobs.xml.h:16 ../hacks/config/sierpinski.xml.h:13
+#: ../hacks/config/sierpinski3d.xml.h:10 ../hacks/config/skytentacles.xml.h:25
+#: ../hacks/config/slidescreen.xml.h:18 ../hacks/config/slip.xml.h:13
+#: ../hacks/config/sonar.xml.h:34 ../hacks/config/speedmine.xml.h:17
+#: ../hacks/config/sphere.xml.h:8 ../hacks/config/spheremonics.xml.h:22
+#: ../hacks/config/spiral.xml.h:11 ../hacks/config/splitflap.xml.h:25
+#: ../hacks/config/splodesic.xml.h:11 ../hacks/config/spotlight.xml.h:11
+#: ../hacks/config/sproingies.xml.h:9 ../hacks/config/squiral.xml.h:17
+#: ../hacks/config/stairs.xml.h:5 ../hacks/config/starfish.xml.h:17
+#: ../hacks/config/starwars.xml.h:15 ../hacks/config/stonerview.xml.h:7
+#: ../hacks/config/strange.xml.h:23 ../hacks/config/substrate.xml.h:19
+#: ../hacks/config/superquadrics.xml.h:13 ../hacks/config/surfaces.xml.h:27
+#: ../hacks/config/swirl.xml.h:11 ../hacks/config/t3d.xml.h:15
+#: ../hacks/config/tangram.xml.h:16 ../hacks/config/tessellimage.xml.h:19
+#: ../hacks/config/testx11.xml.h:2 ../hacks/config/thornbird.xml.h:16
+#: ../hacks/config/timetunnel.xml.h:8 ../hacks/config/topblock.xml.h:24
+#: ../hacks/config/triangle.xml.h:8 ../hacks/config/tronbit.xml.h:11
+#: ../hacks/config/truchet.xml.h:6 ../hacks/config/twang.xml.h:18
+#: ../hacks/config/unicrud.xml.h:10 ../hacks/config/unknownpleasures.xml.h:17
+#: ../hacks/config/vermiculate.xml.h:5 ../hacks/config/vfeedback.xml.h:9
+#: ../hacks/config/vidwhacker.xml.h:6 ../hacks/config/vines.xml.h:8
+#: ../hacks/config/voronoi.xml.h:11 ../hacks/config/wander.xml.h:13
+#: ../hacks/config/webcollage.xml.h:11 ../hacks/config/whirlwindwarp.xml.h:8
+#: ../hacks/config/whirlygig.xml.h:31 ../hacks/config/winduprobot.xml.h:22
+#: ../hacks/config/worm.xml.h:11 ../hacks/config/wormhole.xml.h:11
+#: ../hacks/config/xanalogtv.xml.h:2 ../hacks/config/xflame.xml.h:7
+#: ../hacks/config/xjack.xml.h:6 ../hacks/config/xlyap.xml.h:9
+#: ../hacks/config/xmatrix.xml.h:21 ../hacks/config/xrayswarm.xml.h:5
+#: ../hacks/config/xspirograph.xml.h:9 ../hacks/config/zoom.xml.h:15
msgid "Show frame rate"
msgstr "Показывать частоту кадров"
#: ../hacks/config/abstractile.xml.h:16
msgid ""
"Mosaic patterns of interlocking tiles. Written by Steve Sundstrom; 2004."
-msgstr ""
+msgstr "Мозаичные узоры плитки. Автор Стив Сандстром; 2004."
#: ../hacks/config/anemone.xml.h:1
msgid "Anemone"
-msgstr ""
+msgstr "Анемон"
#: ../hacks/config/anemone.xml.h:5 ../hacks/config/anemotaxis.xml.h:8
#: ../hacks/config/binaryring.xml.h:8 ../hacks/config/blaster.xml.h:7
#: ../hacks/config/bouboule.xml.h:5 ../hacks/config/boxed.xml.h:8
#: ../hacks/config/cityflow.xml.h:5 ../hacks/config/coral.xml.h:11
-#: ../hacks/config/crackberg.xml.h:8 ../hacks/config/cubenetic.xml.h:5
-#: ../hacks/config/cubestorm.xml.h:8 ../hacks/config/dangerball.xml.h:8
-#: ../hacks/config/eruption.xml.h:5 ../hacks/config/euler2d.xml.h:5
-#: ../hacks/config/fiberlamp.xml.h:5 ../hacks/config/flame.xml.h:8
-#: ../hacks/config/flow.xml.h:5 ../hacks/config/fluidballs.xml.h:5
-#: ../hacks/config/fuzzyflakes.xml.h:8 ../hacks/config/glcells.xml.h:8
-#: ../hacks/config/glschool.xml.h:5 ../hacks/config/goop.xml.h:8
-#: ../hacks/config/grav.xml.h:5 ../hacks/config/halftone.xml.h:5
-#: ../hacks/config/halo.xml.h:5 ../hacks/config/hydrostat.xml.h:14
-#: ../hacks/config/interaggregate.xml.h:5 ../hacks/config/interference.xml.h:11
-#: ../hacks/config/jigsaw.xml.h:8 ../hacks/config/julia.xml.h:5
-#: ../hacks/config/kaleidescope.xml.h:5 ../hacks/config/lisa.xml.h:5
-#: ../hacks/config/lmorph.xml.h:5 ../hacks/config/nerverot.xml.h:8
-#: ../hacks/config/pedal.xml.h:5 ../hacks/config/petri.xml.h:10
+#: ../hacks/config/crackberg.xml.h:8 ../hacks/config/crumbler.xml.h:8
+#: ../hacks/config/cubenetic.xml.h:5 ../hacks/config/cubestorm.xml.h:8
+#: ../hacks/config/dangerball.xml.h:8 ../hacks/config/eruption.xml.h:5
+#: ../hacks/config/euler2d.xml.h:5 ../hacks/config/fiberlamp.xml.h:5
+#: ../hacks/config/flame.xml.h:8 ../hacks/config/flow.xml.h:5
+#: ../hacks/config/fluidballs.xml.h:5 ../hacks/config/fuzzyflakes.xml.h:8
+#: ../hacks/config/glcells.xml.h:8 ../hacks/config/glschool.xml.h:5
+#: ../hacks/config/goop.xml.h:8 ../hacks/config/grav.xml.h:5
+#: ../hacks/config/halftone.xml.h:5 ../hacks/config/halo.xml.h:5
+#: ../hacks/config/hydrostat.xml.h:14 ../hacks/config/interaggregate.xml.h:5
+#: ../hacks/config/interference.xml.h:11 ../hacks/config/jigsaw.xml.h:8
+#: ../hacks/config/julia.xml.h:5 ../hacks/config/kaleidescope.xml.h:5
+#: ../hacks/config/lisa.xml.h:5 ../hacks/config/lmorph.xml.h:5
+#: ../hacks/config/nerverot.xml.h:8 ../hacks/config/pedal.xml.h:5
+#: ../hacks/config/peepers.xml.h:8 ../hacks/config/petri.xml.h:10
#: ../hacks/config/piecewise.xml.h:5 ../hacks/config/qix.xml.h:5
#: ../hacks/config/rocks.xml.h:5 ../hacks/config/sierpinski.xml.h:5
#: ../hacks/config/slip.xml.h:5 ../hacks/config/spiral.xml.h:5
@@ -1254,11 +1129,9 @@ msgstr "Мало"
#: ../hacks/config/anemone.xml.h:6 ../hacks/config/fuzzyflakes.xml.h:20
#: ../hacks/config/hypnowheel.xml.h:13
msgid "Arms"
-msgstr "Части"
+msgstr "Руки"
-#.
#. On a 2.93 gHz iMac i7, I get these rates with -delay 0:
-#.
#. detail 3: invisible
#. detail 4: barely visible
#. detail 5: 1000+ fps, looks like noise at -delay 0, ok at -delay 20000
@@ -1270,30 +1143,29 @@ msgstr "Части"
#. detail 13: ~17 fps
#. detail 14: ~8 fps
#. detail 15: ~2 fps
-#.
#. With the default -delay, CPU load only starts causing the frame rate
#. to drop below 30 fps detail 12 or higher.
-#.
#. #### -color [random]
#: ../hacks/config/anemone.xml.h:7 ../hacks/config/anemotaxis.xml.h:10
#: ../hacks/config/ant.xml.h:13 ../hacks/config/apollonian.xml.h:12
#: ../hacks/config/attraction.xml.h:19 ../hacks/config/blaster.xml.h:9
#: ../hacks/config/bouboule.xml.h:7 ../hacks/config/braid.xml.h:10
#: ../hacks/config/cityflow.xml.h:7 ../hacks/config/coral.xml.h:13
-#: ../hacks/config/critical.xml.h:7 ../hacks/config/crystal.xml.h:7
-#: ../hacks/config/cubenetic.xml.h:7 ../hacks/config/cubestorm.xml.h:10
-#: ../hacks/config/cynosure.xml.h:7 ../hacks/config/deco.xml.h:7
-#: ../hacks/config/deluxe.xml.h:13 ../hacks/config/demon.xml.h:13
-#: ../hacks/config/discrete.xml.h:10 ../hacks/config/drift.xml.h:10
-#: ../hacks/config/epicycle.xml.h:7 ../hacks/config/eruption.xml.h:7
-#: ../hacks/config/euler2d.xml.h:7 ../hacks/config/fadeplot.xml.h:13
-#: ../hacks/config/fiberlamp.xml.h:7 ../hacks/config/flag.xml.h:11
-#: ../hacks/config/flame.xml.h:10 ../hacks/config/flow.xml.h:7
-#: ../hacks/config/fluidballs.xml.h:7 ../hacks/config/forest.xml.h:7
-#: ../hacks/config/fuzzyflakes.xml.h:10 ../hacks/config/galaxy.xml.h:11
-#: ../hacks/config/glcells.xml.h:10 ../hacks/config/goop.xml.h:10
-#: ../hacks/config/grav.xml.h:7 ../hacks/config/halftone.xml.h:7
-#: ../hacks/config/halo.xml.h:7 ../hacks/config/hopalong.xml.h:11
+#: ../hacks/config/critical.xml.h:7 ../hacks/config/crumbler.xml.h:10
+#: ../hacks/config/crystal.xml.h:7 ../hacks/config/cubenetic.xml.h:7
+#: ../hacks/config/cubestorm.xml.h:10 ../hacks/config/cynosure.xml.h:7
+#: ../hacks/config/deco.xml.h:7 ../hacks/config/deluxe.xml.h:13
+#: ../hacks/config/demon.xml.h:13 ../hacks/config/discrete.xml.h:10
+#: ../hacks/config/drift.xml.h:10 ../hacks/config/epicycle.xml.h:7
+#: ../hacks/config/eruption.xml.h:7 ../hacks/config/euler2d.xml.h:7
+#: ../hacks/config/fadeplot.xml.h:13 ../hacks/config/fiberlamp.xml.h:7
+#: ../hacks/config/flag.xml.h:11 ../hacks/config/flame.xml.h:10
+#: ../hacks/config/flow.xml.h:7 ../hacks/config/fluidballs.xml.h:7
+#: ../hacks/config/forest.xml.h:7 ../hacks/config/fuzzyflakes.xml.h:10
+#: ../hacks/config/galaxy.xml.h:11 ../hacks/config/glcells.xml.h:10
+#: ../hacks/config/goop.xml.h:10 ../hacks/config/grav.xml.h:7
+#: ../hacks/config/halftone.xml.h:7 ../hacks/config/halo.xml.h:7
+#: ../hacks/config/handsy.xml.h:10 ../hacks/config/hopalong.xml.h:11
#: ../hacks/config/hydrostat.xml.h:10 ../hacks/config/ifs.xml.h:64
#: ../hacks/config/imsmap.xml.h:13 ../hacks/config/interaggregate.xml.h:7
#: ../hacks/config/interference.xml.h:13 ../hacks/config/jigsaw.xml.h:10
@@ -1305,9 +1177,10 @@ msgstr "Части"
#: ../hacks/config/moire.xml.h:7 ../hacks/config/moire2.xml.h:7
#: ../hacks/config/mountain.xml.h:10 ../hacks/config/munch.xml.h:10
#: ../hacks/config/nerverot.xml.h:10 ../hacks/config/pedal.xml.h:7
-#: ../hacks/config/penrose.xml.h:7 ../hacks/config/petri.xml.h:12
-#: ../hacks/config/piecewise.xml.h:7 ../hacks/config/polyominoes.xml.h:11
-#: ../hacks/config/qix.xml.h:7 ../hacks/config/rd-bomb.xml.h:16
+#: ../hacks/config/peepers.xml.h:10 ../hacks/config/penrose.xml.h:7
+#: ../hacks/config/petri.xml.h:12 ../hacks/config/piecewise.xml.h:7
+#: ../hacks/config/polyominoes.xml.h:11 ../hacks/config/qix.xml.h:7
+#: ../hacks/config/razzledazzle.xml.h:10 ../hacks/config/rd-bomb.xml.h:16
#: ../hacks/config/rdbomb.xml.h:16 ../hacks/config/rocks.xml.h:7
#: ../hacks/config/rotor.xml.h:10 ../hacks/config/shadebobs.xml.h:10
#: ../hacks/config/sierpinski.xml.h:7 ../hacks/config/slip.xml.h:7
@@ -1326,13 +1199,13 @@ msgid "Tentacles"
msgstr "Щупальца"
#: ../hacks/config/anemone.xml.h:9 ../hacks/config/cubestack.xml.h:8
-#: ../hacks/config/cubestorm.xml.h:11 ../hacks/config/cubetwist.xml.h:8
+#: ../hacks/config/cubestorm.xml.h:14 ../hacks/config/cubetwist.xml.h:8
#: ../hacks/config/deluxe.xml.h:5 ../hacks/config/fadeplot.xml.h:5
#: ../hacks/config/fuzzyflakes.xml.h:21 ../hacks/config/glknots.xml.h:19
#: ../hacks/config/hexstrut.xml.h:11 ../hacks/config/hilbert.xml.h:15
#: ../hacks/config/hydrostat.xml.h:16 ../hacks/config/lmorph.xml.h:11
-#: ../hacks/config/skytentacles.xml.h:8 ../hacks/config/starfish.xml.h:11
-#: ../hacks/config/thornbird.xml.h:8
+#: ../hacks/config/razzledazzle.xml.h:16 ../hacks/config/skytentacles.xml.h:8
+#: ../hacks/config/starfish.xml.h:11 ../hacks/config/thornbird.xml.h:8
msgid "Thin"
msgstr "Тонкая"
@@ -1345,13 +1218,13 @@ msgid "Thickness"
msgstr "Толщина"
#: ../hacks/config/anemone.xml.h:11 ../hacks/config/cubestack.xml.h:10
-#: ../hacks/config/cubestorm.xml.h:13 ../hacks/config/cubetwist.xml.h:10
+#: ../hacks/config/cubestorm.xml.h:16 ../hacks/config/cubetwist.xml.h:10
#: ../hacks/config/deluxe.xml.h:7 ../hacks/config/fadeplot.xml.h:7
#: ../hacks/config/fuzzyflakes.xml.h:23 ../hacks/config/glknots.xml.h:21
#: ../hacks/config/hexstrut.xml.h:13 ../hacks/config/hilbert.xml.h:17
#: ../hacks/config/hydrostat.xml.h:18 ../hacks/config/lmorph.xml.h:13
-#: ../hacks/config/skytentacles.xml.h:10 ../hacks/config/starfish.xml.h:13
-#: ../hacks/config/thornbird.xml.h:10
+#: ../hacks/config/razzledazzle.xml.h:14 ../hacks/config/skytentacles.xml.h:10
+#: ../hacks/config/starfish.xml.h:13 ../hacks/config/thornbird.xml.h:10
msgid "Thick"
msgstr "Толстая"
@@ -1370,15 +1243,15 @@ msgstr "Редко"
#: ../hacks/config/anemone.xml.h:15
msgid "Turn speed"
-msgstr "Скорость вращения"
+msgstr "Скорость поворота"
#: ../hacks/config/anemone.xml.h:17
msgid "Wiggling tentacles. Written by Gabriel Finch; 2002."
-msgstr ""
+msgstr "Шевелить щупальцами. Автор Габриэль Финч; 2002."
#: ../hacks/config/anemotaxis.xml.h:1
msgid "Anemotaxis"
-msgstr ""
+msgstr "Анемотаксис"
#. #### -colorcount [64]
#: ../hacks/config/anemotaxis.xml.h:2 ../hacks/config/ant.xml.h:2
@@ -1398,54 +1271,57 @@ msgstr ""
#: ../hacks/config/cloudlife.xml.h:2 ../hacks/config/companioncube.xml.h:2
#: ../hacks/config/compass.xml.h:2 ../hacks/config/coral.xml.h:2
#: ../hacks/config/crackberg.xml.h:2 ../hacks/config/critical.xml.h:2
-#: ../hacks/config/crystal.xml.h:2 ../hacks/config/cube21.xml.h:2
-#: ../hacks/config/cubenetic.xml.h:2 ../hacks/config/cubestack.xml.h:2
-#: ../hacks/config/cubestorm.xml.h:2 ../hacks/config/cubetwist.xml.h:2
-#: ../hacks/config/cubicgrid.xml.h:2 ../hacks/config/cwaves.xml.h:2
-#: ../hacks/config/cynosure.xml.h:2 ../hacks/config/dangerball.xml.h:2
-#: ../hacks/config/decayscreen.xml.h:2 ../hacks/config/deluxe.xml.h:2
-#: ../hacks/config/demon.xml.h:2 ../hacks/config/discoball.xml.h:2
-#: ../hacks/config/discrete.xml.h:2 ../hacks/config/distort.xml.h:2
-#: ../hacks/config/dnalogo.xml.h:2 ../hacks/config/drift.xml.h:2
-#: ../hacks/config/dymaxionmap.xml.h:2 ../hacks/config/endgame.xml.h:2
-#: ../hacks/config/engine.xml.h:2 ../hacks/config/epicycle.xml.h:2
-#: ../hacks/config/eruption.xml.h:2 ../hacks/config/euler2d.xml.h:2
+#: ../hacks/config/crumbler.xml.h:2 ../hacks/config/crystal.xml.h:2
+#: ../hacks/config/cube21.xml.h:2 ../hacks/config/cubenetic.xml.h:2
+#: ../hacks/config/cubestack.xml.h:2 ../hacks/config/cubestorm.xml.h:2
+#: ../hacks/config/cubetwist.xml.h:2 ../hacks/config/cubicgrid.xml.h:2
+#: ../hacks/config/cwaves.xml.h:2 ../hacks/config/cynosure.xml.h:2
+#: ../hacks/config/dangerball.xml.h:2 ../hacks/config/decayscreen.xml.h:2
+#: ../hacks/config/deluxe.xml.h:2 ../hacks/config/demon.xml.h:2
+#: ../hacks/config/discoball.xml.h:2 ../hacks/config/discrete.xml.h:2
+#: ../hacks/config/distort.xml.h:2 ../hacks/config/dnalogo.xml.h:2
+#: ../hacks/config/drift.xml.h:2 ../hacks/config/dymaxionmap.xml.h:2
+#: ../hacks/config/endgame.xml.h:2 ../hacks/config/engine.xml.h:2
+#: ../hacks/config/epicycle.xml.h:2 ../hacks/config/eruption.xml.h:2
+#: ../hacks/config/esper.xml.h:2 ../hacks/config/euler2d.xml.h:2
#: ../hacks/config/extrusion.xml.h:2 ../hacks/config/fadeplot.xml.h:2
-#: ../hacks/config/fiberlamp.xml.h:2 ../hacks/config/fireworkx.xml.h:2
-#: ../hacks/config/flag.xml.h:3 ../hacks/config/flame.xml.h:2
-#: ../hacks/config/flipflop.xml.h:2 ../hacks/config/flipscreen3d.xml.h:2
-#: ../hacks/config/fliptext.xml.h:2 ../hacks/config/flow.xml.h:2
-#: ../hacks/config/fluidballs.xml.h:2 ../hacks/config/flyingtoasters.xml.h:2
-#: ../hacks/config/fontglide.xml.h:2 ../hacks/config/forest.xml.h:2
-#: ../hacks/config/fuzzyflakes.xml.h:2 ../hacks/config/galaxy.xml.h:2
-#: ../hacks/config/gears.xml.h:2 ../hacks/config/geodesic.xml.h:11
-#: ../hacks/config/geodesicgears.xml.h:2 ../hacks/config/gflux.xml.h:2
-#: ../hacks/config/glblur.xml.h:2 ../hacks/config/glcells.xml.h:2
-#: ../hacks/config/gleidescope.xml.h:2 ../hacks/config/glforestfire.xml.h:2
-#: ../hacks/config/glhanoi.xml.h:2 ../hacks/config/glknots.xml.h:2
+#: ../hacks/config/fiberlamp.xml.h:2 ../hacks/config/filmleader.xml.h:2
+#: ../hacks/config/fireworkx.xml.h:2 ../hacks/config/flag.xml.h:3
+#: ../hacks/config/flame.xml.h:2 ../hacks/config/flipflop.xml.h:2
+#: ../hacks/config/flipscreen3d.xml.h:2 ../hacks/config/fliptext.xml.h:2
+#: ../hacks/config/flow.xml.h:2 ../hacks/config/fluidballs.xml.h:2
+#: ../hacks/config/flyingtoasters.xml.h:2 ../hacks/config/fontglide.xml.h:2
+#: ../hacks/config/forest.xml.h:2 ../hacks/config/fuzzyflakes.xml.h:2
+#: ../hacks/config/galaxy.xml.h:2 ../hacks/config/gears.xml.h:2
+#: ../hacks/config/geodesic.xml.h:11 ../hacks/config/geodesicgears.xml.h:2
+#: ../hacks/config/gflux.xml.h:2 ../hacks/config/glblur.xml.h:2
+#: ../hacks/config/glcells.xml.h:2 ../hacks/config/gleidescope.xml.h:2
+#: ../hacks/config/glforestfire.xml.h:2 ../hacks/config/glhanoi.xml.h:2
+#: ../hacks/config/glitchpeg.xml.h:2 ../hacks/config/glknots.xml.h:2
#: ../hacks/config/glmatrix.xml.h:2 ../hacks/config/glplanet.xml.h:2
#: ../hacks/config/glschool.xml.h:2 ../hacks/config/glslideshow.xml.h:2
#: ../hacks/config/glsnake.xml.h:2 ../hacks/config/gltext.xml.h:2
#: ../hacks/config/goop.xml.h:2 ../hacks/config/grav.xml.h:2
#: ../hacks/config/greynetic.xml.h:2 ../hacks/config/halftone.xml.h:2
-#: ../hacks/config/halo.xml.h:2 ../hacks/config/helix.xml.h:2
-#: ../hacks/config/hexadrop.xml.h:2 ../hacks/config/hexstrut.xml.h:2
-#: ../hacks/config/hopalong.xml.h:2 ../hacks/config/hydrostat.xml.h:2
-#: ../hacks/config/hyperball.xml.h:2 ../hacks/config/hypercube.xml.h:2
-#: ../hacks/config/hypertorus.xml.h:2 ../hacks/config/hypnowheel.xml.h:14
-#: ../hacks/config/ifs.xml.h:2 ../hacks/config/imsmap.xml.h:2
-#: ../hacks/config/interaggregate.xml.h:2 ../hacks/config/interference.xml.h:2
-#: ../hacks/config/intermomentary.xml.h:2 ../hacks/config/jigglypuff.xml.h:11
-#: ../hacks/config/jigsaw.xml.h:2 ../hacks/config/juggle.xml.h:2
-#: ../hacks/config/juggler3d.xml.h:2 ../hacks/config/julia.xml.h:2
-#: ../hacks/config/kaleidescope.xml.h:2 ../hacks/config/kaleidocycle.xml.h:2
-#: ../hacks/config/klein.xml.h:42 ../hacks/config/kumppa.xml.h:2
-#: ../hacks/config/lament.xml.h:2 ../hacks/config/laser.xml.h:2
-#: ../hacks/config/lavalite.xml.h:2 ../hacks/config/lcdscrub.xml.h:2
-#: ../hacks/config/lightning.xml.h:2 ../hacks/config/lisa.xml.h:2
-#: ../hacks/config/lissie.xml.h:2 ../hacks/config/lmorph.xml.h:2
-#: ../hacks/config/lockward.xml.h:2 ../hacks/config/loop.xml.h:2
-#: ../hacks/config/m6502.xml.h:7 ../hacks/config/maze.xml.h:2
+#: ../hacks/config/halo.xml.h:2 ../hacks/config/handsy.xml.h:2
+#: ../hacks/config/helix.xml.h:2 ../hacks/config/hexadrop.xml.h:2
+#: ../hacks/config/hexstrut.xml.h:2 ../hacks/config/hopalong.xml.h:2
+#: ../hacks/config/hydrostat.xml.h:2 ../hacks/config/hyperball.xml.h:2
+#: ../hacks/config/hypercube.xml.h:2 ../hacks/config/hypertorus.xml.h:2
+#: ../hacks/config/hypnowheel.xml.h:14 ../hacks/config/ifs.xml.h:2
+#: ../hacks/config/imsmap.xml.h:2 ../hacks/config/interaggregate.xml.h:2
+#: ../hacks/config/interference.xml.h:2 ../hacks/config/intermomentary.xml.h:2
+#: ../hacks/config/jigglypuff.xml.h:11 ../hacks/config/jigsaw.xml.h:2
+#: ../hacks/config/juggle.xml.h:2 ../hacks/config/juggler3d.xml.h:2
+#: ../hacks/config/julia.xml.h:2 ../hacks/config/kaleidescope.xml.h:2
+#: ../hacks/config/kaleidocycle.xml.h:2 ../hacks/config/klein.xml.h:42
+#: ../hacks/config/kumppa.xml.h:2 ../hacks/config/lament.xml.h:2
+#: ../hacks/config/laser.xml.h:2 ../hacks/config/lavalite.xml.h:2
+#: ../hacks/config/lcdscrub.xml.h:2 ../hacks/config/lightning.xml.h:2
+#: ../hacks/config/lisa.xml.h:2 ../hacks/config/lissie.xml.h:2
+#: ../hacks/config/lmorph.xml.h:2 ../hacks/config/lockward.xml.h:2
+#: ../hacks/config/loop.xml.h:2 ../hacks/config/m6502.xml.h:7
+#: ../hacks/config/maze.xml.h:2 ../hacks/config/maze3d.xml.h:5
#: ../hacks/config/memscroller.xml.h:2 ../hacks/config/menger.xml.h:2
#: ../hacks/config/metaballs.xml.h:2 ../hacks/config/mirrorblob.xml.h:2
#: ../hacks/config/mismunch.xml.h:2 ../hacks/config/moebius.xml.h:2
@@ -1453,17 +1329,18 @@ msgstr ""
#: ../hacks/config/molecule.xml.h:2 ../hacks/config/morph3d.xml.h:2
#: ../hacks/config/mountain.xml.h:2 ../hacks/config/munch.xml.h:2
#: ../hacks/config/nerverot.xml.h:2 ../hacks/config/noof.xml.h:2
-#: ../hacks/config/pacman.xml.h:2 ../hacks/config/penrose.xml.h:2
-#: ../hacks/config/petri.xml.h:2 ../hacks/config/phosphor.xml.h:2
-#: ../hacks/config/photopile.xml.h:15 ../hacks/config/piecewise.xml.h:2
-#: ../hacks/config/pinion.xml.h:2 ../hacks/config/pipes.xml.h:2
-#: ../hacks/config/polyhedra.xml.h:2 ../hacks/config/polyominoes.xml.h:3
-#: ../hacks/config/polytopes.xml.h:24 ../hacks/config/pong.xml.h:10
-#: ../hacks/config/popsquares.xml.h:2 ../hacks/config/projectiveplane.xml.h:35
-#: ../hacks/config/providence.xml.h:2 ../hacks/config/pulsar.xml.h:2
-#: ../hacks/config/pyro.xml.h:11 ../hacks/config/qix.xml.h:2
-#: ../hacks/config/quasicrystal.xml.h:2 ../hacks/config/queens.xml.h:2
-#: ../hacks/config/raverhoop.xml.h:2 ../hacks/config/ripples.xml.h:2
+#: ../hacks/config/pacman.xml.h:2 ../hacks/config/peepers.xml.h:2
+#: ../hacks/config/penrose.xml.h:2 ../hacks/config/petri.xml.h:2
+#: ../hacks/config/phosphor.xml.h:2 ../hacks/config/photopile.xml.h:15
+#: ../hacks/config/piecewise.xml.h:2 ../hacks/config/pinion.xml.h:2
+#: ../hacks/config/pipes.xml.h:2 ../hacks/config/polyhedra.xml.h:2
+#: ../hacks/config/polyominoes.xml.h:3 ../hacks/config/polytopes.xml.h:24
+#: ../hacks/config/pong.xml.h:10 ../hacks/config/popsquares.xml.h:2
+#: ../hacks/config/projectiveplane.xml.h:35 ../hacks/config/providence.xml.h:2
+#: ../hacks/config/pulsar.xml.h:2 ../hacks/config/pyro.xml.h:11
+#: ../hacks/config/qix.xml.h:2 ../hacks/config/quasicrystal.xml.h:2
+#: ../hacks/config/queens.xml.h:2 ../hacks/config/raverhoop.xml.h:2
+#: ../hacks/config/razzledazzle.xml.h:2 ../hacks/config/ripples.xml.h:2
#: ../hacks/config/rocks.xml.h:2 ../hacks/config/romanboy.xml.h:38
#: ../hacks/config/rotor.xml.h:2 ../hacks/config/rotzoomer.xml.h:2
#: ../hacks/config/rubik.xml.h:2 ../hacks/config/rubikblocks.xml.h:2
@@ -1485,13 +1362,14 @@ msgstr ""
#: ../hacks/config/triangle.xml.h:2 ../hacks/config/tronbit.xml.h:2
#: ../hacks/config/truchet.xml.h:2 ../hacks/config/twang.xml.h:2
#: ../hacks/config/unicrud.xml.h:2 ../hacks/config/unknownpleasures.xml.h:2
-#: ../hacks/config/vigilance.xml.h:2 ../hacks/config/vines.xml.h:2
-#: ../hacks/config/wander.xml.h:2 ../hacks/config/whirlygig.xml.h:4
-#: ../hacks/config/winduprobot.xml.h:2 ../hacks/config/worm.xml.h:2
-#: ../hacks/config/wormhole.xml.h:2 ../hacks/config/xanalogtv.xml.h:3
-#: ../hacks/config/xflame.xml.h:2 ../hacks/config/xlyap.xml.h:2
-#: ../hacks/config/xmatrix.xml.h:15 ../hacks/config/xrayswarm.xml.h:2
-#: ../hacks/config/xspirograph.xml.h:2 ../hacks/config/zoom.xml.h:2
+#: ../hacks/config/vfeedback.xml.h:2 ../hacks/config/vigilance.xml.h:2
+#: ../hacks/config/vines.xml.h:2 ../hacks/config/wander.xml.h:2
+#: ../hacks/config/whirlygig.xml.h:4 ../hacks/config/winduprobot.xml.h:2
+#: ../hacks/config/worm.xml.h:2 ../hacks/config/wormhole.xml.h:2
+#: ../hacks/config/xanalogtv.xml.h:4 ../hacks/config/xflame.xml.h:2
+#: ../hacks/config/xlyap.xml.h:2 ../hacks/config/xmatrix.xml.h:15
+#: ../hacks/config/xrayswarm.xml.h:2 ../hacks/config/xspirograph.xml.h:2
+#: ../hacks/config/zoom.xml.h:2
msgid "Low"
msgstr "Низкая"
@@ -1511,17 +1389,18 @@ msgstr "Низкая"
#: ../hacks/config/cloudlife.xml.h:3 ../hacks/config/companioncube.xml.h:3
#: ../hacks/config/compass.xml.h:3 ../hacks/config/coral.xml.h:3
#: ../hacks/config/crackberg.xml.h:3 ../hacks/config/critical.xml.h:3
-#: ../hacks/config/crystal.xml.h:3 ../hacks/config/cube21.xml.h:3
-#: ../hacks/config/cubenetic.xml.h:3 ../hacks/config/cubestack.xml.h:3
-#: ../hacks/config/cubestorm.xml.h:3 ../hacks/config/cubetwist.xml.h:3
-#: ../hacks/config/cubicgrid.xml.h:3 ../hacks/config/cwaves.xml.h:3
-#: ../hacks/config/cynosure.xml.h:3 ../hacks/config/dangerball.xml.h:3
-#: ../hacks/config/decayscreen.xml.h:3 ../hacks/config/deluxe.xml.h:3
-#: ../hacks/config/demon.xml.h:3 ../hacks/config/discoball.xml.h:3
-#: ../hacks/config/discrete.xml.h:3 ../hacks/config/distort.xml.h:3
-#: ../hacks/config/drift.xml.h:3 ../hacks/config/dymaxionmap.xml.h:3
-#: ../hacks/config/endgame.xml.h:3 ../hacks/config/engine.xml.h:3
-#: ../hacks/config/epicycle.xml.h:3 ../hacks/config/eruption.xml.h:3
+#: ../hacks/config/crumbler.xml.h:3 ../hacks/config/crystal.xml.h:3
+#: ../hacks/config/cube21.xml.h:3 ../hacks/config/cubenetic.xml.h:3
+#: ../hacks/config/cubestack.xml.h:3 ../hacks/config/cubestorm.xml.h:3
+#: ../hacks/config/cubetwist.xml.h:3 ../hacks/config/cubicgrid.xml.h:3
+#: ../hacks/config/cwaves.xml.h:3 ../hacks/config/cynosure.xml.h:3
+#: ../hacks/config/dangerball.xml.h:3 ../hacks/config/decayscreen.xml.h:3
+#: ../hacks/config/deluxe.xml.h:3 ../hacks/config/demon.xml.h:3
+#: ../hacks/config/discoball.xml.h:3 ../hacks/config/discrete.xml.h:3
+#: ../hacks/config/distort.xml.h:3 ../hacks/config/drift.xml.h:3
+#: ../hacks/config/dymaxionmap.xml.h:3 ../hacks/config/endgame.xml.h:3
+#: ../hacks/config/engine.xml.h:3 ../hacks/config/epicycle.xml.h:3
+#: ../hacks/config/eruption.xml.h:3 ../hacks/config/esper.xml.h:3
#: ../hacks/config/euler2d.xml.h:3 ../hacks/config/extrusion.xml.h:3
#: ../hacks/config/fadeplot.xml.h:3 ../hacks/config/fiberlamp.xml.h:3
#: ../hacks/config/fireworkx.xml.h:3 ../hacks/config/flag.xml.h:4
@@ -1535,12 +1414,13 @@ msgstr "Низкая"
#: ../hacks/config/gflux.xml.h:3 ../hacks/config/glblur.xml.h:3
#: ../hacks/config/glcells.xml.h:3 ../hacks/config/gleidescope.xml.h:3
#: ../hacks/config/glforestfire.xml.h:3 ../hacks/config/glhanoi.xml.h:3
-#: ../hacks/config/glknots.xml.h:3 ../hacks/config/glmatrix.xml.h:3
-#: ../hacks/config/glplanet.xml.h:3 ../hacks/config/glschool.xml.h:3
-#: ../hacks/config/glslideshow.xml.h:3 ../hacks/config/glsnake.xml.h:3
-#: ../hacks/config/gltext.xml.h:3 ../hacks/config/goop.xml.h:3
-#: ../hacks/config/grav.xml.h:3 ../hacks/config/greynetic.xml.h:3
-#: ../hacks/config/halftone.xml.h:3 ../hacks/config/halo.xml.h:3
+#: ../hacks/config/glitchpeg.xml.h:3 ../hacks/config/glknots.xml.h:3
+#: ../hacks/config/glmatrix.xml.h:3 ../hacks/config/glplanet.xml.h:3
+#: ../hacks/config/glschool.xml.h:3 ../hacks/config/glslideshow.xml.h:3
+#: ../hacks/config/glsnake.xml.h:3 ../hacks/config/gltext.xml.h:3
+#: ../hacks/config/goop.xml.h:3 ../hacks/config/grav.xml.h:3
+#: ../hacks/config/greynetic.xml.h:3 ../hacks/config/halftone.xml.h:3
+#: ../hacks/config/halo.xml.h:3 ../hacks/config/handsy.xml.h:3
#: ../hacks/config/helix.xml.h:3 ../hacks/config/hexadrop.xml.h:3
#: ../hacks/config/hexstrut.xml.h:3 ../hacks/config/hilbert.xml.h:9
#: ../hacks/config/hopalong.xml.h:3 ../hacks/config/hydrostat.xml.h:3
@@ -1558,14 +1438,15 @@ msgstr "Низкая"
#: ../hacks/config/lightning.xml.h:3 ../hacks/config/lisa.xml.h:3
#: ../hacks/config/lissie.xml.h:3 ../hacks/config/lmorph.xml.h:3
#: ../hacks/config/lockward.xml.h:3 ../hacks/config/loop.xml.h:3
-#: ../hacks/config/maze.xml.h:3 ../hacks/config/memscroller.xml.h:3
-#: ../hacks/config/menger.xml.h:3 ../hacks/config/metaballs.xml.h:3
-#: ../hacks/config/mirrorblob.xml.h:3 ../hacks/config/mismunch.xml.h:3
-#: ../hacks/config/moebius.xml.h:3 ../hacks/config/moebiusgears.xml.h:3
-#: ../hacks/config/moire2.xml.h:3 ../hacks/config/molecule.xml.h:3
-#: ../hacks/config/morph3d.xml.h:3 ../hacks/config/mountain.xml.h:3
-#: ../hacks/config/munch.xml.h:3 ../hacks/config/nerverot.xml.h:3
-#: ../hacks/config/noof.xml.h:3 ../hacks/config/pacman.xml.h:3
+#: ../hacks/config/maze.xml.h:3 ../hacks/config/maze3d.xml.h:6
+#: ../hacks/config/memscroller.xml.h:3 ../hacks/config/menger.xml.h:3
+#: ../hacks/config/metaballs.xml.h:3 ../hacks/config/mirrorblob.xml.h:3
+#: ../hacks/config/mismunch.xml.h:3 ../hacks/config/moebius.xml.h:3
+#: ../hacks/config/moebiusgears.xml.h:3 ../hacks/config/moire2.xml.h:3
+#: ../hacks/config/molecule.xml.h:3 ../hacks/config/morph3d.xml.h:3
+#: ../hacks/config/mountain.xml.h:3 ../hacks/config/munch.xml.h:3
+#: ../hacks/config/nerverot.xml.h:3 ../hacks/config/noof.xml.h:3
+#: ../hacks/config/pacman.xml.h:3 ../hacks/config/peepers.xml.h:3
#: ../hacks/config/penrose.xml.h:3 ../hacks/config/petri.xml.h:3
#: ../hacks/config/phosphor.xml.h:3 ../hacks/config/photopile.xml.h:16
#: ../hacks/config/piecewise.xml.h:3 ../hacks/config/pinion.xml.h:3
@@ -1575,36 +1456,36 @@ msgstr "Низкая"
#: ../hacks/config/providence.xml.h:3 ../hacks/config/pulsar.xml.h:3
#: ../hacks/config/pyro.xml.h:3 ../hacks/config/qix.xml.h:3
#: ../hacks/config/quasicrystal.xml.h:3 ../hacks/config/queens.xml.h:3
-#: ../hacks/config/raverhoop.xml.h:3 ../hacks/config/rd-bomb.xml.h:3
-#: ../hacks/config/rdbomb.xml.h:3 ../hacks/config/ripples.xml.h:3
-#: ../hacks/config/rocks.xml.h:3 ../hacks/config/romanboy.xml.h:39
-#: ../hacks/config/rotor.xml.h:3 ../hacks/config/rotzoomer.xml.h:3
-#: ../hacks/config/rubik.xml.h:3 ../hacks/config/rubikblocks.xml.h:3
-#: ../hacks/config/sballs.xml.h:3 ../hacks/config/shadebobs.xml.h:3
-#: ../hacks/config/sierpinski.xml.h:3 ../hacks/config/sierpinski3d.xml.h:3
-#: ../hacks/config/skytentacles.xml.h:16 ../hacks/config/slidescreen.xml.h:3
-#: ../hacks/config/slip.xml.h:3 ../hacks/config/sonar.xml.h:3
-#: ../hacks/config/speedmine.xml.h:3 ../hacks/config/sphere.xml.h:3
-#: ../hacks/config/spheremonics.xml.h:3 ../hacks/config/spiral.xml.h:3
-#: ../hacks/config/splitflap.xml.h:3 ../hacks/config/splodesic.xml.h:3
-#: ../hacks/config/spotlight.xml.h:3 ../hacks/config/sproingies.xml.h:3
-#: ../hacks/config/squiral.xml.h:3 ../hacks/config/stairs.xml.h:3
-#: ../hacks/config/starfish.xml.h:6 ../hacks/config/stonerview.xml.h:3
-#: ../hacks/config/strange.xml.h:3 ../hacks/config/substrate.xml.h:3
-#: ../hacks/config/superquadrics.xml.h:3 ../hacks/config/surfaces.xml.h:3
-#: ../hacks/config/swirl.xml.h:3 ../hacks/config/t3d.xml.h:3
-#: ../hacks/config/tangram.xml.h:3 ../hacks/config/tessellimage.xml.h:3
-#: ../hacks/config/thornbird.xml.h:3 ../hacks/config/topblock.xml.h:3
-#: ../hacks/config/triangle.xml.h:3 ../hacks/config/tronbit.xml.h:3
-#: ../hacks/config/truchet.xml.h:3 ../hacks/config/twang.xml.h:3
-#: ../hacks/config/unicrud.xml.h:3 ../hacks/config/unknownpleasures.xml.h:3
-#: ../hacks/config/vigilance.xml.h:3 ../hacks/config/vines.xml.h:3
-#: ../hacks/config/voronoi.xml.h:3 ../hacks/config/wander.xml.h:3
-#: ../hacks/config/winduprobot.xml.h:3 ../hacks/config/worm.xml.h:3
-#: ../hacks/config/wormhole.xml.h:3 ../hacks/config/xflame.xml.h:3
-#: ../hacks/config/xlyap.xml.h:3 ../hacks/config/xmatrix.xml.h:16
-#: ../hacks/config/xrayswarm.xml.h:3 ../hacks/config/xspirograph.xml.h:3
-#: ../hacks/config/zoom.xml.h:3
+#: ../hacks/config/raverhoop.xml.h:3 ../hacks/config/razzledazzle.xml.h:3
+#: ../hacks/config/rd-bomb.xml.h:3 ../hacks/config/rdbomb.xml.h:3
+#: ../hacks/config/ripples.xml.h:3 ../hacks/config/rocks.xml.h:3
+#: ../hacks/config/romanboy.xml.h:39 ../hacks/config/rotor.xml.h:3
+#: ../hacks/config/rotzoomer.xml.h:3 ../hacks/config/rubik.xml.h:3
+#: ../hacks/config/rubikblocks.xml.h:3 ../hacks/config/sballs.xml.h:3
+#: ../hacks/config/shadebobs.xml.h:3 ../hacks/config/sierpinski.xml.h:3
+#: ../hacks/config/sierpinski3d.xml.h:3 ../hacks/config/skytentacles.xml.h:16
+#: ../hacks/config/slidescreen.xml.h:3 ../hacks/config/slip.xml.h:3
+#: ../hacks/config/sonar.xml.h:3 ../hacks/config/speedmine.xml.h:3
+#: ../hacks/config/sphere.xml.h:3 ../hacks/config/spheremonics.xml.h:3
+#: ../hacks/config/spiral.xml.h:3 ../hacks/config/splitflap.xml.h:3
+#: ../hacks/config/splodesic.xml.h:3 ../hacks/config/spotlight.xml.h:3
+#: ../hacks/config/sproingies.xml.h:3 ../hacks/config/squiral.xml.h:3
+#: ../hacks/config/stairs.xml.h:3 ../hacks/config/starfish.xml.h:6
+#: ../hacks/config/stonerview.xml.h:3 ../hacks/config/strange.xml.h:3
+#: ../hacks/config/substrate.xml.h:3 ../hacks/config/superquadrics.xml.h:3
+#: ../hacks/config/surfaces.xml.h:3 ../hacks/config/swirl.xml.h:3
+#: ../hacks/config/t3d.xml.h:3 ../hacks/config/tangram.xml.h:3
+#: ../hacks/config/tessellimage.xml.h:3 ../hacks/config/thornbird.xml.h:3
+#: ../hacks/config/topblock.xml.h:3 ../hacks/config/triangle.xml.h:3
+#: ../hacks/config/tronbit.xml.h:3 ../hacks/config/truchet.xml.h:3
+#: ../hacks/config/twang.xml.h:3 ../hacks/config/unicrud.xml.h:3
+#: ../hacks/config/unknownpleasures.xml.h:3 ../hacks/config/vigilance.xml.h:3
+#: ../hacks/config/vines.xml.h:3 ../hacks/config/voronoi.xml.h:3
+#: ../hacks/config/wander.xml.h:3 ../hacks/config/winduprobot.xml.h:3
+#: ../hacks/config/worm.xml.h:3 ../hacks/config/wormhole.xml.h:3
+#: ../hacks/config/xflame.xml.h:3 ../hacks/config/xlyap.xml.h:3
+#: ../hacks/config/xmatrix.xml.h:16 ../hacks/config/xrayswarm.xml.h:3
+#: ../hacks/config/xspirograph.xml.h:3 ../hacks/config/zoom.xml.h:3
msgid "Frame rate"
msgstr "Частота кадров"
@@ -1626,54 +1507,57 @@ msgstr "Частота кадров"
#: ../hacks/config/cloudlife.xml.h:4 ../hacks/config/companioncube.xml.h:4
#: ../hacks/config/compass.xml.h:4 ../hacks/config/coral.xml.h:4
#: ../hacks/config/crackberg.xml.h:4 ../hacks/config/critical.xml.h:4
-#: ../hacks/config/crystal.xml.h:4 ../hacks/config/cube21.xml.h:4
-#: ../hacks/config/cubenetic.xml.h:4 ../hacks/config/cubestack.xml.h:4
-#: ../hacks/config/cubestorm.xml.h:4 ../hacks/config/cubetwist.xml.h:4
-#: ../hacks/config/cubicgrid.xml.h:4 ../hacks/config/cwaves.xml.h:4
-#: ../hacks/config/cynosure.xml.h:4 ../hacks/config/dangerball.xml.h:4
-#: ../hacks/config/decayscreen.xml.h:4 ../hacks/config/deluxe.xml.h:4
-#: ../hacks/config/demon.xml.h:4 ../hacks/config/discoball.xml.h:4
-#: ../hacks/config/discrete.xml.h:4 ../hacks/config/distort.xml.h:4
-#: ../hacks/config/dnalogo.xml.h:4 ../hacks/config/drift.xml.h:4
-#: ../hacks/config/dymaxionmap.xml.h:4 ../hacks/config/endgame.xml.h:4
-#: ../hacks/config/engine.xml.h:4 ../hacks/config/epicycle.xml.h:4
-#: ../hacks/config/eruption.xml.h:4 ../hacks/config/euler2d.xml.h:4
+#: ../hacks/config/crumbler.xml.h:4 ../hacks/config/crystal.xml.h:4
+#: ../hacks/config/cube21.xml.h:4 ../hacks/config/cubenetic.xml.h:4
+#: ../hacks/config/cubestack.xml.h:4 ../hacks/config/cubestorm.xml.h:4
+#: ../hacks/config/cubetwist.xml.h:4 ../hacks/config/cubicgrid.xml.h:4
+#: ../hacks/config/cwaves.xml.h:4 ../hacks/config/cynosure.xml.h:4
+#: ../hacks/config/dangerball.xml.h:4 ../hacks/config/decayscreen.xml.h:4
+#: ../hacks/config/deluxe.xml.h:4 ../hacks/config/demon.xml.h:4
+#: ../hacks/config/discoball.xml.h:4 ../hacks/config/discrete.xml.h:4
+#: ../hacks/config/distort.xml.h:4 ../hacks/config/dnalogo.xml.h:4
+#: ../hacks/config/drift.xml.h:4 ../hacks/config/dymaxionmap.xml.h:4
+#: ../hacks/config/endgame.xml.h:4 ../hacks/config/engine.xml.h:4
+#: ../hacks/config/epicycle.xml.h:4 ../hacks/config/eruption.xml.h:4
+#: ../hacks/config/esper.xml.h:4 ../hacks/config/euler2d.xml.h:4
#: ../hacks/config/extrusion.xml.h:4 ../hacks/config/fadeplot.xml.h:4
-#: ../hacks/config/fiberlamp.xml.h:4 ../hacks/config/fireworkx.xml.h:4
-#: ../hacks/config/flag.xml.h:5 ../hacks/config/flame.xml.h:4
-#: ../hacks/config/flipflop.xml.h:4 ../hacks/config/flipscreen3d.xml.h:4
-#: ../hacks/config/fliptext.xml.h:4 ../hacks/config/flow.xml.h:4
-#: ../hacks/config/fluidballs.xml.h:4 ../hacks/config/flyingtoasters.xml.h:4
-#: ../hacks/config/fontglide.xml.h:4 ../hacks/config/forest.xml.h:4
-#: ../hacks/config/fuzzyflakes.xml.h:4 ../hacks/config/galaxy.xml.h:4
-#: ../hacks/config/gears.xml.h:4 ../hacks/config/geodesic.xml.h:13
-#: ../hacks/config/geodesicgears.xml.h:4 ../hacks/config/gflux.xml.h:4
-#: ../hacks/config/glblur.xml.h:4 ../hacks/config/glcells.xml.h:4
-#: ../hacks/config/gleidescope.xml.h:4 ../hacks/config/glforestfire.xml.h:4
-#: ../hacks/config/glhanoi.xml.h:4 ../hacks/config/glknots.xml.h:4
+#: ../hacks/config/fiberlamp.xml.h:4 ../hacks/config/filmleader.xml.h:4
+#: ../hacks/config/fireworkx.xml.h:4 ../hacks/config/flag.xml.h:5
+#: ../hacks/config/flame.xml.h:4 ../hacks/config/flipflop.xml.h:4
+#: ../hacks/config/flipscreen3d.xml.h:4 ../hacks/config/fliptext.xml.h:4
+#: ../hacks/config/flow.xml.h:4 ../hacks/config/fluidballs.xml.h:4
+#: ../hacks/config/flyingtoasters.xml.h:4 ../hacks/config/fontglide.xml.h:4
+#: ../hacks/config/forest.xml.h:4 ../hacks/config/fuzzyflakes.xml.h:4
+#: ../hacks/config/galaxy.xml.h:4 ../hacks/config/gears.xml.h:4
+#: ../hacks/config/geodesic.xml.h:13 ../hacks/config/geodesicgears.xml.h:4
+#: ../hacks/config/gflux.xml.h:4 ../hacks/config/glblur.xml.h:4
+#: ../hacks/config/glcells.xml.h:4 ../hacks/config/gleidescope.xml.h:4
+#: ../hacks/config/glforestfire.xml.h:4 ../hacks/config/glhanoi.xml.h:4
+#: ../hacks/config/glitchpeg.xml.h:4 ../hacks/config/glknots.xml.h:4
#: ../hacks/config/glmatrix.xml.h:4 ../hacks/config/glplanet.xml.h:4
#: ../hacks/config/glschool.xml.h:4 ../hacks/config/glslideshow.xml.h:4
#: ../hacks/config/glsnake.xml.h:4 ../hacks/config/gltext.xml.h:4
#: ../hacks/config/goop.xml.h:4 ../hacks/config/grav.xml.h:4
#: ../hacks/config/greynetic.xml.h:4 ../hacks/config/halftone.xml.h:4
-#: ../hacks/config/halo.xml.h:4 ../hacks/config/helix.xml.h:4
-#: ../hacks/config/hexadrop.xml.h:4 ../hacks/config/hexstrut.xml.h:4
-#: ../hacks/config/hopalong.xml.h:4 ../hacks/config/hydrostat.xml.h:4
-#: ../hacks/config/hyperball.xml.h:4 ../hacks/config/hypercube.xml.h:4
-#: ../hacks/config/hypertorus.xml.h:4 ../hacks/config/hypnowheel.xml.h:16
-#: ../hacks/config/ifs.xml.h:4 ../hacks/config/imsmap.xml.h:4
-#: ../hacks/config/interaggregate.xml.h:4 ../hacks/config/interference.xml.h:4
-#: ../hacks/config/intermomentary.xml.h:4 ../hacks/config/jigglypuff.xml.h:13
-#: ../hacks/config/jigsaw.xml.h:4 ../hacks/config/juggle.xml.h:4
-#: ../hacks/config/juggler3d.xml.h:4 ../hacks/config/julia.xml.h:4
-#: ../hacks/config/kaleidescope.xml.h:4 ../hacks/config/kaleidocycle.xml.h:4
-#: ../hacks/config/klein.xml.h:44 ../hacks/config/kumppa.xml.h:4
-#: ../hacks/config/lament.xml.h:4 ../hacks/config/laser.xml.h:4
-#: ../hacks/config/lavalite.xml.h:4 ../hacks/config/lcdscrub.xml.h:4
-#: ../hacks/config/lightning.xml.h:4 ../hacks/config/lisa.xml.h:4
-#: ../hacks/config/lissie.xml.h:4 ../hacks/config/lmorph.xml.h:4
-#: ../hacks/config/lockward.xml.h:4 ../hacks/config/loop.xml.h:4
-#: ../hacks/config/m6502.xml.h:9 ../hacks/config/maze.xml.h:4
+#: ../hacks/config/halo.xml.h:4 ../hacks/config/handsy.xml.h:4
+#: ../hacks/config/helix.xml.h:4 ../hacks/config/hexadrop.xml.h:4
+#: ../hacks/config/hexstrut.xml.h:4 ../hacks/config/hopalong.xml.h:4
+#: ../hacks/config/hydrostat.xml.h:4 ../hacks/config/hyperball.xml.h:4
+#: ../hacks/config/hypercube.xml.h:4 ../hacks/config/hypertorus.xml.h:4
+#: ../hacks/config/hypnowheel.xml.h:16 ../hacks/config/ifs.xml.h:4
+#: ../hacks/config/imsmap.xml.h:4 ../hacks/config/interaggregate.xml.h:4
+#: ../hacks/config/interference.xml.h:4 ../hacks/config/intermomentary.xml.h:4
+#: ../hacks/config/jigglypuff.xml.h:13 ../hacks/config/jigsaw.xml.h:4
+#: ../hacks/config/juggle.xml.h:4 ../hacks/config/juggler3d.xml.h:4
+#: ../hacks/config/julia.xml.h:4 ../hacks/config/kaleidescope.xml.h:4
+#: ../hacks/config/kaleidocycle.xml.h:4 ../hacks/config/klein.xml.h:44
+#: ../hacks/config/kumppa.xml.h:4 ../hacks/config/lament.xml.h:4
+#: ../hacks/config/laser.xml.h:4 ../hacks/config/lavalite.xml.h:4
+#: ../hacks/config/lcdscrub.xml.h:4 ../hacks/config/lightning.xml.h:4
+#: ../hacks/config/lisa.xml.h:4 ../hacks/config/lissie.xml.h:4
+#: ../hacks/config/lmorph.xml.h:4 ../hacks/config/lockward.xml.h:4
+#: ../hacks/config/loop.xml.h:4 ../hacks/config/m6502.xml.h:9
+#: ../hacks/config/maze.xml.h:4 ../hacks/config/maze3d.xml.h:7
#: ../hacks/config/memscroller.xml.h:4 ../hacks/config/menger.xml.h:4
#: ../hacks/config/metaballs.xml.h:4 ../hacks/config/mirrorblob.xml.h:4
#: ../hacks/config/mismunch.xml.h:4 ../hacks/config/moebius.xml.h:4
@@ -1681,17 +1565,18 @@ msgstr "Частота кадров"
#: ../hacks/config/molecule.xml.h:4 ../hacks/config/morph3d.xml.h:4
#: ../hacks/config/mountain.xml.h:4 ../hacks/config/munch.xml.h:4
#: ../hacks/config/nerverot.xml.h:4 ../hacks/config/noof.xml.h:4
-#: ../hacks/config/pacman.xml.h:4 ../hacks/config/penrose.xml.h:4
-#: ../hacks/config/petri.xml.h:4 ../hacks/config/phosphor.xml.h:4
-#: ../hacks/config/photopile.xml.h:17 ../hacks/config/piecewise.xml.h:4
-#: ../hacks/config/pinion.xml.h:4 ../hacks/config/pipes.xml.h:4
-#: ../hacks/config/polyhedra.xml.h:4 ../hacks/config/polyominoes.xml.h:5
-#: ../hacks/config/polytopes.xml.h:26 ../hacks/config/pong.xml.h:12
-#: ../hacks/config/popsquares.xml.h:4 ../hacks/config/projectiveplane.xml.h:37
-#: ../hacks/config/providence.xml.h:4 ../hacks/config/pulsar.xml.h:4
-#: ../hacks/config/pyro.xml.h:13 ../hacks/config/qix.xml.h:4
-#: ../hacks/config/quasicrystal.xml.h:4 ../hacks/config/queens.xml.h:4
-#: ../hacks/config/raverhoop.xml.h:4 ../hacks/config/ripples.xml.h:4
+#: ../hacks/config/pacman.xml.h:4 ../hacks/config/peepers.xml.h:4
+#: ../hacks/config/penrose.xml.h:4 ../hacks/config/petri.xml.h:4
+#: ../hacks/config/phosphor.xml.h:4 ../hacks/config/photopile.xml.h:17
+#: ../hacks/config/piecewise.xml.h:4 ../hacks/config/pinion.xml.h:4
+#: ../hacks/config/pipes.xml.h:4 ../hacks/config/polyhedra.xml.h:4
+#: ../hacks/config/polyominoes.xml.h:5 ../hacks/config/polytopes.xml.h:26
+#: ../hacks/config/pong.xml.h:12 ../hacks/config/popsquares.xml.h:4
+#: ../hacks/config/projectiveplane.xml.h:37 ../hacks/config/providence.xml.h:4
+#: ../hacks/config/pulsar.xml.h:4 ../hacks/config/pyro.xml.h:13
+#: ../hacks/config/qix.xml.h:4 ../hacks/config/quasicrystal.xml.h:4
+#: ../hacks/config/queens.xml.h:4 ../hacks/config/raverhoop.xml.h:4
+#: ../hacks/config/razzledazzle.xml.h:4 ../hacks/config/ripples.xml.h:4
#: ../hacks/config/rocks.xml.h:4 ../hacks/config/romanboy.xml.h:40
#: ../hacks/config/rotor.xml.h:4 ../hacks/config/rotzoomer.xml.h:4
#: ../hacks/config/rubik.xml.h:4 ../hacks/config/rubikblocks.xml.h:4
@@ -1713,14 +1598,14 @@ msgstr "Частота кадров"
#: ../hacks/config/topblock.xml.h:4 ../hacks/config/triangle.xml.h:4
#: ../hacks/config/tronbit.xml.h:4 ../hacks/config/truchet.xml.h:4
#: ../hacks/config/twang.xml.h:4 ../hacks/config/unicrud.xml.h:4
-#: ../hacks/config/unknownpleasures.xml.h:4 ../hacks/config/vigilance.xml.h:4
-#: ../hacks/config/vines.xml.h:4 ../hacks/config/wander.xml.h:4
-#: ../hacks/config/whirlygig.xml.h:6 ../hacks/config/winduprobot.xml.h:4
-#: ../hacks/config/worm.xml.h:4 ../hacks/config/wormhole.xml.h:4
-#: ../hacks/config/xanalogtv.xml.h:5 ../hacks/config/xflame.xml.h:4
-#: ../hacks/config/xlyap.xml.h:4 ../hacks/config/xmatrix.xml.h:17
-#: ../hacks/config/xrayswarm.xml.h:4 ../hacks/config/xspirograph.xml.h:4
-#: ../hacks/config/zoom.xml.h:4
+#: ../hacks/config/unknownpleasures.xml.h:4 ../hacks/config/vfeedback.xml.h:4
+#: ../hacks/config/vigilance.xml.h:4 ../hacks/config/vines.xml.h:4
+#: ../hacks/config/wander.xml.h:4 ../hacks/config/whirlygig.xml.h:6
+#: ../hacks/config/winduprobot.xml.h:4 ../hacks/config/worm.xml.h:4
+#: ../hacks/config/wormhole.xml.h:4 ../hacks/config/xanalogtv.xml.h:6
+#: ../hacks/config/xflame.xml.h:4 ../hacks/config/xlyap.xml.h:4
+#: ../hacks/config/xmatrix.xml.h:17 ../hacks/config/xrayswarm.xml.h:4
+#: ../hacks/config/xspirograph.xml.h:4 ../hacks/config/zoom.xml.h:4
msgid "High"
msgstr "Высокая"
@@ -1749,14 +1634,14 @@ msgstr "Искатели"
#: ../hacks/config/anemotaxis.xml.h:13
msgid ""
"Searches for a source of odor in a turbulent atmosphere. The searcher is "
-"able to sense the odor and determine local instantaneous wind direction. The "
-"goal is to find the source in the shortest mean time. https://en.wikipedia."
-"org/wiki/Anemotaxis Written by Eugene Balkovsky; 2004."
-msgstr ""
+"able to sense the odor and determine local instantaneous wind direction. The"
+" goal is to find the source in the shortest mean time. "
+"https://en.wikipedia.org/wiki/Anemotaxis Written by Eugene Balkovsky; 2004."
+msgstr "Искатели источника запаха в турбулентной атмосфере. Искатель способен почувствовать запах и определить направление ветра. Целью является в кратчайшее время найти источник. https://en.wikipedia.org/wiki/Anemotaxis Автор Евгений Балковский; 2004."
#: ../hacks/config/ant.xml.h:1
msgid "Ant"
-msgstr ""
+msgstr "Муравей"
#. #### -slow
#: ../hacks/config/ant.xml.h:5 ../hacks/config/attraction.xml.h:21
@@ -1819,23 +1704,21 @@ msgstr "Большой"
#: ../hacks/config/ant.xml.h:8
msgid "Sharp turns"
-msgstr ""
+msgstr "Резкие повороты"
#: ../hacks/config/ant.xml.h:9
msgid "Truchet lines"
-msgstr ""
+msgstr "Линии Труше"
#: ../hacks/config/ant.xml.h:10
msgid "Draw eyes"
-msgstr ""
+msgstr "Нарисовать глаза"
#: ../hacks/config/ant.xml.h:11
msgid "Three"
-msgstr ""
+msgstr "Три"
-#.
#. On a 2.93 gHz iMac i7, I get these rates with -delay 0:
-#.
#. detail 3: invisible
#. detail 4: barely visible
#. detail 5: 1000+ fps, looks like noise at -delay 0, ok at -delay 20000
@@ -1847,10 +1730,8 @@ msgstr ""
#. detail 13: ~17 fps
#. detail 14: ~8 fps
#. detail 15: ~2 fps
-#.
#. With the default -delay, CPU load only starts causing the frame rate
#. to drop below 30 fps detail 12 or higher.
-#.
#. #### -color [random]
#: ../hacks/config/ant.xml.h:12 ../hacks/config/apollonian.xml.h:11
#: ../hacks/config/attraction.xml.h:18 ../hacks/config/bouboule.xml.h:9
@@ -1886,35 +1767,35 @@ msgstr "Количество цветов"
#: ../hacks/config/ant.xml.h:14
msgid "Ants count"
-msgstr ""
+msgstr "Подсчёт муравьёв"
#: ../hacks/config/ant.xml.h:15
msgid "Ant size"
-msgstr ""
+msgstr "Размер муравья"
#: ../hacks/config/ant.xml.h:16
msgid "Random cell shape"
-msgstr ""
+msgstr "Случайные формы ячеек"
#: ../hacks/config/ant.xml.h:17
msgid "Three sided cells"
-msgstr ""
+msgstr "Трёхсторонние ячейки"
#: ../hacks/config/ant.xml.h:18
msgid "Four sided cells"
-msgstr ""
+msgstr "Четырёхсторонние ячейки"
#: ../hacks/config/ant.xml.h:19
msgid "Six sided cells"
-msgstr ""
+msgstr "Шестисторонние ячейки"
#: ../hacks/config/ant.xml.h:20
msgid "Nine sided cells"
-msgstr ""
+msgstr "Девятисторонние ячейки"
#: ../hacks/config/ant.xml.h:21
msgid "Twelve sided cells"
-msgstr ""
+msgstr "Двенадцатисторонние ячейки"
#: ../hacks/config/ant.xml.h:24
#, no-c-format
@@ -1922,14 +1803,14 @@ msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 4.22. A cellular automaton that is really a two-dimensional Turing "
"machine: as the heads (\"ants\") walk along the screen, they change pixel "
-"values in their path. Then, as they pass over changed pixels, their behavior "
-"is influenced. https://en.wikipedia.org/wiki/Langton%27s_ant https://en."
-"wikipedia.org/wiki/Turing_machine Written by David Bagley; 1997."
-msgstr ""
+"values in their path. Then, as they pass over changed pixels, their behavior"
+" is influenced. https://en.wikipedia.org/wiki/Langton%27s_ant "
+"https://en.wikipedia.org/wiki/Turing_machine Written by David Bagley; 1997."
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver в версии 4.22. Клеточный автомат, который представляет собой двумерную машину Тьюринга, где головы (\"муравьи\") ходят по экрану, изменяют значения пикселей на своём пути. Затем, когда они проходят через изменённые пиксели, они влияют на их поведение. https://en.wikipedia.org/wiki/Langton%27s_ant https://en.wikipedia.org/wiki/Turing_machine Автор: Дэвид Бэгли; 1997."
#: ../hacks/config/antinspect.xml.h:1
msgid "AntInspect"
-msgstr ""
+msgstr "Муравей обследует"
#: ../hacks/config/antinspect.xml.h:6
msgid "Draw shadows"
@@ -1937,27 +1818,27 @@ msgstr "Прорисовывать тени"
#: ../hacks/config/antinspect.xml.h:7
msgid "Ants move spheres around a circle. Written by Blair Tennessy; 2004."
-msgstr ""
+msgstr "Муравьи катят сферы по кругу. Автор Блэр Теннесси; 2004."
#: ../hacks/config/antmaze.xml.h:1
msgid "AntMaze"
-msgstr ""
+msgstr "Муравьиный лабиринт"
#: ../hacks/config/antmaze.xml.h:6
msgid "Ants walk around a simple maze. Written by Blair Tennessy; 2005."
-msgstr ""
+msgstr "Муравьи гуляют в простом лабиринте. Автор Блэр Теннесси; 2005 год."
#: ../hacks/config/antspotlight.xml.h:1
msgid "AntSpotlight"
-msgstr ""
+msgstr "Муравей-фонарик"
#: ../hacks/config/antspotlight.xml.h:6
msgid "An ant walks over an image. Written by Blair Tennessy; 2003."
-msgstr ""
+msgstr "Муравей ходит по изображению. Автор Блэр Теннесси; 2003 год."
#: ../hacks/config/apollonian.xml.h:1
msgid "Apollonian"
-msgstr ""
+msgstr "Посвященный Аполлону"
#: ../hacks/config/apollonian.xml.h:2 ../hacks/config/tangram.xml.h:13
msgid "Draw labels"
@@ -1970,7 +1851,7 @@ msgstr "Включать альтернативную геометрию"
#. don't know what -count does
#: ../hacks/config/apollonian.xml.h:5 ../hacks/config/tessellimage.xml.h:11
msgid "Shallow"
-msgstr "Низкая"
+msgstr "Мелкая"
#. don't know what -count does
#: ../hacks/config/apollonian.xml.h:7 ../hacks/config/flipflop.xml.h:11
@@ -1981,7 +1862,7 @@ msgstr "Глубина"
#. don't know what -count does
#: ../hacks/config/apollonian.xml.h:9 ../hacks/config/tessellimage.xml.h:13
msgid "Deep"
-msgstr "Высокая"
+msgstr "Глубокая"
#. #### -color [random]
#: ../hacks/config/apollonian.xml.h:10 ../hacks/config/attraction.xml.h:17
@@ -1995,37 +1876,38 @@ msgstr "Высокая"
#: ../hacks/config/flame.xml.h:12 ../hacks/config/flow.xml.h:11
#: ../hacks/config/forest.xml.h:5 ../hacks/config/galaxy.xml.h:9
#: ../hacks/config/grav.xml.h:8 ../hacks/config/halo.xml.h:8
-#: ../hacks/config/hopalong.xml.h:9 ../hacks/config/imsmap.xml.h:11
-#: ../hacks/config/interference.xml.h:15 ../hacks/config/julia.xml.h:11
-#: ../hacks/config/laser.xml.h:9 ../hacks/config/lightning.xml.h:5
-#: ../hacks/config/lisa.xml.h:8 ../hacks/config/lissie.xml.h:8
-#: ../hacks/config/loop.xml.h:8 ../hacks/config/metaballs.xml.h:8
-#: ../hacks/config/moire.xml.h:5 ../hacks/config/moire2.xml.h:5
-#: ../hacks/config/mountain.xml.h:8 ../hacks/config/nerverot.xml.h:11
-#: ../hacks/config/penrose.xml.h:5 ../hacks/config/polyominoes.xml.h:9
-#: ../hacks/config/rd-bomb.xml.h:14 ../hacks/config/rdbomb.xml.h:14
-#: ../hacks/config/rocks.xml.h:14 ../hacks/config/rotor.xml.h:8
-#: ../hacks/config/shadebobs.xml.h:6 ../hacks/config/sierpinski.xml.h:11
-#: ../hacks/config/slip.xml.h:11 ../hacks/config/sphere.xml.h:5
-#: ../hacks/config/spiral.xml.h:9 ../hacks/config/squiral.xml.h:13
-#: ../hacks/config/starfish.xml.h:14 ../hacks/config/strange.xml.h:20
-#: ../hacks/config/swirl.xml.h:8 ../hacks/config/triangle.xml.h:5
-#: ../hacks/config/vines.xml.h:5 ../hacks/config/worm.xml.h:5
+#: ../hacks/config/handsy.xml.h:8 ../hacks/config/hopalong.xml.h:9
+#: ../hacks/config/imsmap.xml.h:11 ../hacks/config/interference.xml.h:15
+#: ../hacks/config/julia.xml.h:11 ../hacks/config/laser.xml.h:9
+#: ../hacks/config/lightning.xml.h:5 ../hacks/config/lisa.xml.h:8
+#: ../hacks/config/lissie.xml.h:8 ../hacks/config/loop.xml.h:8
+#: ../hacks/config/metaballs.xml.h:8 ../hacks/config/moire.xml.h:5
+#: ../hacks/config/moire2.xml.h:5 ../hacks/config/mountain.xml.h:8
+#: ../hacks/config/nerverot.xml.h:11 ../hacks/config/penrose.xml.h:5
+#: ../hacks/config/polyominoes.xml.h:9 ../hacks/config/rd-bomb.xml.h:14
+#: ../hacks/config/rdbomb.xml.h:14 ../hacks/config/rocks.xml.h:14
+#: ../hacks/config/rotor.xml.h:8 ../hacks/config/shadebobs.xml.h:6
+#: ../hacks/config/sierpinski.xml.h:11 ../hacks/config/slip.xml.h:11
+#: ../hacks/config/sphere.xml.h:5 ../hacks/config/spiral.xml.h:9
+#: ../hacks/config/squiral.xml.h:13 ../hacks/config/starfish.xml.h:14
+#: ../hacks/config/strange.xml.h:20 ../hacks/config/swirl.xml.h:8
+#: ../hacks/config/triangle.xml.h:5 ../hacks/config/vines.xml.h:5
+#: ../hacks/config/worm.xml.h:5
msgid "Two"
msgstr "Два"
#: ../hacks/config/apollonian.xml.h:18
#, no-c-format
msgid ""
-"A fractal packing of circles with smaller circles, demonstrating Descartes's "
-"theorem. https://en.wikipedia.org/wiki/Apollonian_gasket https://en."
-"wikipedia.org/wiki/Descartes%27_theorem Written by Allan R. Wilks and David "
-"Bagley; 2002."
-msgstr ""
+"A fractal packing of circles with smaller circles, demonstrating Descartes's"
+" theorem. https://en.wikipedia.org/wiki/Apollonian_gasket "
+"https://en.wikipedia.org/wiki/Descartes%27_theorem Written by Allan R. Wilks"
+" and David Bagley; 2002."
+msgstr "Фрактальная упаковка кругов с меньшими кругами, демонстрирует теорему Декарта. https://en.wikipedia.org/wiki/Apollonian_gasket https://en.wikipedia.org/wiki/Descartes%27_theorem Автор Аллан Р. Уилкса и Дэвид Бэгли; 2002."
#: ../hacks/config/apple2.xml.h:1
msgid "Apple2"
-msgstr ""
+msgstr "Apple2"
#: ../hacks/config/apple2.xml.h:2
msgid "Choose display mode randomly"
@@ -2033,11 +1915,11 @@ msgstr "Случайный выбор режима дисплея"
#: ../hacks/config/apple2.xml.h:3
msgid "Display scrolling text"
-msgstr "Дисплей с прокруткой текста"
+msgstr "Показать прокрутку текста"
#: ../hacks/config/apple2.xml.h:4
msgid "Display images"
-msgstr "Изображения экрана"
+msgstr "Показать изображения"
#: ../hacks/config/apple2.xml.h:5
msgid "Run basic programs"
@@ -2054,11 +1936,9 @@ msgstr "Запуск базовых программ"
msgid "10 seconds"
msgstr "10 секунд"
-#.
#. <number id="eulerpower" type="slider" arg="-eulerpower %"
#. _label="Power" _low-label="Low" _high-label="High"
#. low="0.5" high="3.0" default="1.0"/>
-#.
#: ../hacks/config/apple2.xml.h:7 ../hacks/config/blitspin.xml.h:7
#: ../hacks/config/braid.xml.h:6 ../hacks/config/bsod.xml.h:3
#: ../hacks/config/bumps.xml.h:9 ../hacks/config/cynosure.xml.h:9
@@ -2066,50 +1946,56 @@ msgstr "10 секунд"
#: ../hacks/config/distort.xml.h:6 ../hacks/config/drift.xml.h:6
#: ../hacks/config/eruption.xml.h:20 ../hacks/config/euler2d.xml.h:26
#: ../hacks/config/galaxy.xml.h:7 ../hacks/config/geodesicgears.xml.h:6
-#: ../hacks/config/glsnake.xml.h:6 ../hacks/config/hopalong.xml.h:6
-#: ../hacks/config/laser.xml.h:7 ../hacks/config/menger.xml.h:6
-#: ../hacks/config/metaballs.xml.h:6 ../hacks/config/mismunch.xml.h:6
-#: ../hacks/config/moire.xml.h:3 ../hacks/config/molecule.xml.h:6
-#: ../hacks/config/munch.xml.h:6 ../hacks/config/nerverot.xml.h:6
-#: ../hacks/config/pedal.xml.h:3 ../hacks/config/polyhedra.xml.h:9
-#: ../hacks/config/polyominoes.xml.h:7 ../hacks/config/ripples.xml.h:6
-#: ../hacks/config/rotzoomer.xml.h:6 ../hacks/config/shadebobs.xml.h:14
-#: ../hacks/config/sierpinski3d.xml.h:6 ../hacks/config/slidescreen.xml.h:9
-#: ../hacks/config/spheremonics.xml.h:6 ../hacks/config/spotlight.xml.h:6
-#: ../hacks/config/starfish.xml.h:9 ../hacks/config/substrate.xml.h:6
-#: ../hacks/config/superquadrics.xml.h:10 ../hacks/config/surfaces.xml.h:6
-#: ../hacks/config/tessellimage.xml.h:9 ../hacks/config/twang.xml.h:6
-#: ../hacks/config/vermiculate.xml.h:3 ../hacks/config/vidwhacker.xml.h:3
-#: ../hacks/config/wander.xml.h:7 ../hacks/config/zoom.xml.h:6
+#: ../hacks/config/glitchpeg.xml.h:6 ../hacks/config/glsnake.xml.h:6
+#: ../hacks/config/hopalong.xml.h:6 ../hacks/config/laser.xml.h:7
+#: ../hacks/config/menger.xml.h:6 ../hacks/config/metaballs.xml.h:6
+#: ../hacks/config/mismunch.xml.h:6 ../hacks/config/moire.xml.h:3
+#: ../hacks/config/molecule.xml.h:6 ../hacks/config/munch.xml.h:6
+#: ../hacks/config/nerverot.xml.h:6 ../hacks/config/pedal.xml.h:3
+#: ../hacks/config/polyhedra.xml.h:9 ../hacks/config/polyominoes.xml.h:7
+#: ../hacks/config/ripples.xml.h:6 ../hacks/config/rotzoomer.xml.h:6
+#: ../hacks/config/shadebobs.xml.h:14 ../hacks/config/sierpinski3d.xml.h:6
+#: ../hacks/config/slidescreen.xml.h:9 ../hacks/config/spheremonics.xml.h:6
+#: ../hacks/config/spotlight.xml.h:6 ../hacks/config/starfish.xml.h:9
+#: ../hacks/config/substrate.xml.h:6 ../hacks/config/superquadrics.xml.h:10
+#: ../hacks/config/surfaces.xml.h:6 ../hacks/config/tessellimage.xml.h:9
+#: ../hacks/config/twang.xml.h:6 ../hacks/config/vermiculate.xml.h:3
+#: ../hacks/config/vidwhacker.xml.h:3 ../hacks/config/wander.xml.h:7
+#: ../hacks/config/zoom.xml.h:6
msgid "Duration"
msgstr "Продолжительность"
#: ../hacks/config/apple2.xml.h:8 ../hacks/config/blitspin.xml.h:8
#: ../hacks/config/bumps.xml.h:10 ../hacks/config/decayscreen.xml.h:7
-#: ../hacks/config/distort.xml.h:7 ../hacks/config/ripples.xml.h:7
-#: ../hacks/config/rotzoomer.xml.h:7 ../hacks/config/slidescreen.xml.h:10
-#: ../hacks/config/spotlight.xml.h:7 ../hacks/config/tessellimage.xml.h:10
-#: ../hacks/config/twang.xml.h:7 ../hacks/config/zoom.xml.h:7
+#: ../hacks/config/distort.xml.h:7 ../hacks/config/glitchpeg.xml.h:7
+#: ../hacks/config/ripples.xml.h:7 ../hacks/config/rotzoomer.xml.h:7
+#: ../hacks/config/slidescreen.xml.h:10 ../hacks/config/spotlight.xml.h:7
+#: ../hacks/config/tessellimage.xml.h:10 ../hacks/config/twang.xml.h:7
+#: ../hacks/config/zoom.xml.h:7
msgid "10 minutes"
msgstr "10 минут"
-#: ../hacks/config/apple2.xml.h:11 ../hacks/config/m6502.xml.h:8
-#: ../hacks/config/xanalogtv.xml.h:4
+#: ../hacks/config/apple2.xml.h:11 ../hacks/config/filmleader.xml.h:3
+#: ../hacks/config/m6502.xml.h:8 ../hacks/config/vfeedback.xml.h:3
+#: ../hacks/config/xanalogtv.xml.h:5
msgid "Color Knob"
msgstr "Цвет пикселя"
-#: ../hacks/config/apple2.xml.h:13 ../hacks/config/m6502.xml.h:10
-#: ../hacks/config/xanalogtv.xml.h:6
+#: ../hacks/config/apple2.xml.h:13 ../hacks/config/filmleader.xml.h:5
+#: ../hacks/config/m6502.xml.h:10 ../hacks/config/vfeedback.xml.h:5
+#: ../hacks/config/xanalogtv.xml.h:7
msgid "Tint Knob"
msgstr "Оттенок пикселя"
-#: ../hacks/config/apple2.xml.h:14 ../hacks/config/m6502.xml.h:11
-#: ../hacks/config/pong.xml.h:11 ../hacks/config/xanalogtv.xml.h:7
+#: ../hacks/config/apple2.xml.h:14 ../hacks/config/filmleader.xml.h:7
+#: ../hacks/config/m6502.xml.h:14 ../hacks/config/pong.xml.h:11
+#: ../hacks/config/vfeedback.xml.h:7 ../hacks/config/xanalogtv.xml.h:8
msgid "Brightness Knob"
msgstr "Яркость пикселя"
-#: ../hacks/config/apple2.xml.h:15 ../hacks/config/m6502.xml.h:12
-#: ../hacks/config/pong.xml.h:13 ../hacks/config/xanalogtv.xml.h:8
+#: ../hacks/config/apple2.xml.h:15 ../hacks/config/filmleader.xml.h:8
+#: ../hacks/config/m6502.xml.h:15 ../hacks/config/pong.xml.h:13
+#: ../hacks/config/vfeedback.xml.h:8 ../hacks/config/xanalogtv.xml.h:9
msgid "Contrast Knob"
msgstr "Контраст пикселя"
@@ -2123,13 +2009,14 @@ msgid ""
"and displays them within the limitations of the Apple ][ display hardware. "
"(Six available colors in hi-res mode!) On MacOS and Linux, this program is "
"also a fully-functional VT100 emulator! Run it as an application instead of "
-"as a screen saver and you can use it as a terminal. https://en.wikipedia.org/"
-"wiki/Apple_II_series Written by Trevor Blackwell and Jamie Zawinski; 2003."
-msgstr ""
+"as a screen saver and you can use it as a terminal. "
+"https://en.wikipedia.org/wiki/Apple_II_series Written by Trevor Blackwell "
+"and Jamie Zawinski; 2003."
+msgstr "Компания Apple][+ компьютерное моделирование, во всей своей красе 1979. Он также воспроизводит внешний вид дисплея на цветной телевизор. В «базовом режиме программирования\", в моделировании типов пользователей, в базовой программе, и запускает его. В \"текстовом режиме\", он отображает вывод программы, или содержимое файла, или URL. В \"режиме слайд-шоу\", он выбирает случайные изображения и отображает их в пределах ограничений Apple][аппаратных средств отображения. (Шесть доступных цветов в Hi-Res режиме!) На MacOS и Linux, эта программа имеет также полнофункциональный эмулятор VT100! Запустите его как приложение вместо того, чтобы пользоваться им в качестве экранной заставки, и вы сможете использовать его в качестве терминала. https://en.wikipedia.org/wiki/Apple_II_series Автор Блэквелл и Джейми Завински; 2003."
#: ../hacks/config/atlantis.xml.h:1
msgid "Atlantis"
-msgstr ""
+msgstr "Атлантида"
#: ../hacks/config/atlantis.xml.h:6
msgid "Whale speed"
@@ -2141,7 +2028,7 @@ msgstr "Пугливо"
#: ../hacks/config/atlantis.xml.h:9
msgid "Shark proximity"
-msgstr "Поведение акулы"
+msgstr "Близость акулы"
#: ../hacks/config/atlantis.xml.h:10
msgid "Agressive"
@@ -2166,7 +2053,7 @@ msgstr "Количество акул"
#: ../hacks/config/lisa.xml.h:15 ../hacks/config/lissie.xml.h:13
#: ../hacks/config/skytentacles.xml.h:4
msgid "20"
-msgstr ""
+msgstr "20"
#: ../hacks/config/atlantis.xml.h:14
msgid "Shimmering water"
@@ -2190,44 +2077,45 @@ msgstr "Градиентный фон"
#: ../hacks/config/boing.xml.h:13 ../hacks/config/bouncingcow.xml.h:11
#: ../hacks/config/boxed.xml.h:24 ../hacks/config/cage.xml.h:5
#: ../hacks/config/cityflow.xml.h:16 ../hacks/config/companioncube.xml.h:13
-#: ../hacks/config/crackberg.xml.h:17 ../hacks/config/cube21.xml.h:25
-#: ../hacks/config/cubenetic.xml.h:25 ../hacks/config/cubestack.xml.h:15
-#: ../hacks/config/cubestorm.xml.h:16 ../hacks/config/cubetwist.xml.h:17
-#: ../hacks/config/dangerball.xml.h:13 ../hacks/config/discoball.xml.h:13
-#: ../hacks/config/dnalogo.xml.h:9 ../hacks/config/dymaxionmap.xml.h:13
-#: ../hacks/config/extrusion.xml.h:16 ../hacks/config/flipflop.xml.h:13
-#: ../hacks/config/flyingtoasters.xml.h:13 ../hacks/config/gears.xml.h:13
-#: ../hacks/config/geodesic.xml.h:6 ../hacks/config/geodesicgears.xml.h:10
-#: ../hacks/config/glcells.xml.h:33 ../hacks/config/glforestfire.xml.h:15
-#: ../hacks/config/glhanoi.xml.h:15 ../hacks/config/glknots.xml.h:23
-#: ../hacks/config/glmatrix.xml.h:19 ../hacks/config/glplanet.xml.h:12
-#: ../hacks/config/glschool.xml.h:13 ../hacks/config/glsnake.xml.h:17
-#: ../hacks/config/gltext.xml.h:18 ../hacks/config/hexstrut.xml.h:16
+#: ../hacks/config/crackberg.xml.h:17 ../hacks/config/crumbler.xml.h:14
+#: ../hacks/config/cube21.xml.h:25 ../hacks/config/cubenetic.xml.h:25
+#: ../hacks/config/cubestack.xml.h:15 ../hacks/config/cubestorm.xml.h:19
+#: ../hacks/config/cubetwist.xml.h:17 ../hacks/config/dangerball.xml.h:13
+#: ../hacks/config/discoball.xml.h:13 ../hacks/config/dnalogo.xml.h:8
+#: ../hacks/config/dymaxionmap.xml.h:15 ../hacks/config/extrusion.xml.h:16
+#: ../hacks/config/flipflop.xml.h:13 ../hacks/config/flyingtoasters.xml.h:13
+#: ../hacks/config/gears.xml.h:13 ../hacks/config/geodesic.xml.h:6
+#: ../hacks/config/geodesicgears.xml.h:10 ../hacks/config/glcells.xml.h:33
+#: ../hacks/config/glforestfire.xml.h:15 ../hacks/config/glhanoi.xml.h:15
+#: ../hacks/config/glknots.xml.h:23 ../hacks/config/glmatrix.xml.h:19
+#: ../hacks/config/glplanet.xml.h:12 ../hacks/config/glschool.xml.h:13
+#: ../hacks/config/glsnake.xml.h:17 ../hacks/config/gltext.xml.h:18
+#: ../hacks/config/handsy.xml.h:22 ../hacks/config/hexstrut.xml.h:16
#: ../hacks/config/hilbert.xml.h:21 ../hacks/config/hydrostat.xml.h:28
#: ../hacks/config/hypertorus.xml.h:6 ../hacks/config/jigglypuff.xml.h:9
#: ../hacks/config/kaleidocycle.xml.h:20 ../hacks/config/lament.xml.h:6
#: ../hacks/config/lavalite.xml.h:15 ../hacks/config/menger.xml.h:19
#: ../hacks/config/mirrorblob.xml.h:26 ../hacks/config/moebiusgears.xml.h:13
-#: ../hacks/config/molecule.xml.h:11 ../hacks/config/pinion.xml.h:15
-#: ../hacks/config/pipes.xml.h:21 ../hacks/config/polyhedra.xml.h:166
-#: ../hacks/config/providence.xml.h:6 ../hacks/config/queens.xml.h:5
-#: ../hacks/config/rubikblocks.xml.h:19 ../hacks/config/sballs.xml.h:15
-#: ../hacks/config/sierpinski3d.xml.h:9 ../hacks/config/speedmine.xml.h:16
-#: ../hacks/config/spheremonics.xml.h:21 ../hacks/config/splitflap.xml.h:24
-#: ../hacks/config/sproingies.xml.h:8 ../hacks/config/stonerview.xml.h:5
-#: ../hacks/config/superquadrics.xml.h:12 ../hacks/config/tangram.xml.h:14
-#: ../hacks/config/topblock.xml.h:23 ../hacks/config/tronbit.xml.h:10
-#: ../hacks/config/unknownpleasures.xml.h:13
+#: ../hacks/config/molecule.xml.h:11 ../hacks/config/peepers.xml.h:16
+#: ../hacks/config/pinion.xml.h:15 ../hacks/config/pipes.xml.h:21
+#: ../hacks/config/polyhedra.xml.h:166 ../hacks/config/providence.xml.h:6
+#: ../hacks/config/queens.xml.h:5 ../hacks/config/rubikblocks.xml.h:19
+#: ../hacks/config/sballs.xml.h:15 ../hacks/config/sierpinski3d.xml.h:9
+#: ../hacks/config/speedmine.xml.h:16 ../hacks/config/spheremonics.xml.h:21
+#: ../hacks/config/splitflap.xml.h:24 ../hacks/config/sproingies.xml.h:8
+#: ../hacks/config/stonerview.xml.h:5 ../hacks/config/superquadrics.xml.h:12
+#: ../hacks/config/tangram.xml.h:14 ../hacks/config/topblock.xml.h:23
+#: ../hacks/config/tronbit.xml.h:10 ../hacks/config/unknownpleasures.xml.h:16
msgid "Wireframe"
msgstr "Каркасное изображение"
#: ../hacks/config/atlantis.xml.h:20
msgid "Sharks, dolphins and whales. Written by Mark Kilgard; 1998."
-msgstr ""
+msgstr "Акулы, дельфины и киты. Автор Марк Килгард; 1998."
#: ../hacks/config/attraction.xml.h:1
msgid "Attraction"
-msgstr ""
+msgstr "Тяготение"
#: ../hacks/config/attraction.xml.h:2 ../hacks/config/juggle.xml.h:13
#: ../hacks/config/juggler3d.xml.h:13
@@ -2236,8 +2124,8 @@ msgstr "Мячи"
#: ../hacks/config/attraction.xml.h:3 ../hacks/config/deluxe.xml.h:6
#: ../hacks/config/lmorph.xml.h:12 ../hacks/config/pedal.xml.h:6
-#: ../hacks/config/starfish.xml.h:12 ../hacks/config/surfaces.xml.h:23
-#: ../hacks/config/whirlygig.xml.h:3
+#: ../hacks/config/razzledazzle.xml.h:15 ../hacks/config/starfish.xml.h:12
+#: ../hacks/config/surfaces.xml.h:23 ../hacks/config/whirlygig.xml.h:3
msgid "Lines"
msgstr "Линии"
@@ -2245,7 +2133,7 @@ msgstr "Линии"
msgid "Tails"
msgstr "Хвосты"
-#: ../hacks/config/attraction.xml.h:5
+#: ../hacks/config/attraction.xml.h:5 ../hacks/config/crumbler.xml.h:9
msgid "Polygons"
msgstr "Многоугольники"
@@ -2267,38 +2155,36 @@ msgstr "Игнорировать границы экрана"
#: ../hacks/config/attraction.xml.h:10
msgid "Ball count"
-msgstr "Количество мячей"
+msgstr "Подсчёт мячей"
#: ../hacks/config/attraction.xml.h:12
msgid "Environmental viscosity"
msgstr "Вязкость окружения"
-#.
#. <number id="eulerpower" type="slider" arg="-eulerpower %"
#. _label="Power" _low-label="Low" _high-label="High"
#. low="0.5" high="3.0" default="1.0"/>
-#.
#: ../hacks/config/attraction.xml.h:14 ../hacks/config/binaryring.xml.h:5
#: ../hacks/config/blocktube.xml.h:5 ../hacks/config/braid.xml.h:5
#: ../hacks/config/celtic.xml.h:5 ../hacks/config/cube21.xml.h:21
-#: ../hacks/config/cynosure.xml.h:8 ../hacks/config/drift.xml.h:5
-#: ../hacks/config/eruption.xml.h:19 ../hacks/config/euler2d.xml.h:13
-#: ../hacks/config/fiberlamp.xml.h:8 ../hacks/config/flow.xml.h:13
-#: ../hacks/config/galaxy.xml.h:6 ../hacks/config/glcells.xml.h:5
-#: ../hacks/config/hydrostat.xml.h:19 ../hacks/config/juggle.xml.h:8
-#: ../hacks/config/juggler3d.xml.h:8 ../hacks/config/laser.xml.h:6
-#: ../hacks/config/menger.xml.h:5 ../hacks/config/metaballs.xml.h:5
-#: ../hacks/config/mismunch.xml.h:5 ../hacks/config/munch.xml.h:5
-#: ../hacks/config/nerverot.xml.h:5 ../hacks/config/petri.xml.h:22
-#: ../hacks/config/photopile.xml.h:18 ../hacks/config/pipes.xml.h:8
-#: ../hacks/config/polyominoes.xml.h:6 ../hacks/config/rotor.xml.h:5
-#: ../hacks/config/rubikblocks.xml.h:15 ../hacks/config/shadebobs.xml.h:13
-#: ../hacks/config/sierpinski3d.xml.h:5 ../hacks/config/skytentacles.xml.h:5
-#: ../hacks/config/slidescreen.xml.h:5 ../hacks/config/sonar.xml.h:24
-#: ../hacks/config/spheremonics.xml.h:5 ../hacks/config/substrate.xml.h:5
-#: ../hacks/config/superquadrics.xml.h:9 ../hacks/config/surfaces.xml.h:5
-#: ../hacks/config/vermiculate.xml.h:2 ../hacks/config/wander.xml.h:6
-#: ../hacks/config/whirlwindwarp.xml.h:5
+#: ../hacks/config/cubestorm.xml.h:11 ../hacks/config/cynosure.xml.h:8
+#: ../hacks/config/drift.xml.h:5 ../hacks/config/eruption.xml.h:19
+#: ../hacks/config/euler2d.xml.h:13 ../hacks/config/fiberlamp.xml.h:8
+#: ../hacks/config/flow.xml.h:13 ../hacks/config/galaxy.xml.h:6
+#: ../hacks/config/glcells.xml.h:5 ../hacks/config/hydrostat.xml.h:19
+#: ../hacks/config/juggle.xml.h:8 ../hacks/config/juggler3d.xml.h:8
+#: ../hacks/config/laser.xml.h:6 ../hacks/config/menger.xml.h:5
+#: ../hacks/config/metaballs.xml.h:5 ../hacks/config/mismunch.xml.h:5
+#: ../hacks/config/munch.xml.h:5 ../hacks/config/nerverot.xml.h:5
+#: ../hacks/config/petri.xml.h:22 ../hacks/config/photopile.xml.h:18
+#: ../hacks/config/pipes.xml.h:8 ../hacks/config/polyominoes.xml.h:6
+#: ../hacks/config/rotor.xml.h:5 ../hacks/config/rubikblocks.xml.h:15
+#: ../hacks/config/shadebobs.xml.h:13 ../hacks/config/sierpinski3d.xml.h:5
+#: ../hacks/config/skytentacles.xml.h:5 ../hacks/config/slidescreen.xml.h:5
+#: ../hacks/config/sonar.xml.h:24 ../hacks/config/spheremonics.xml.h:5
+#: ../hacks/config/substrate.xml.h:5 ../hacks/config/superquadrics.xml.h:9
+#: ../hacks/config/surfaces.xml.h:5 ../hacks/config/vermiculate.xml.h:2
+#: ../hacks/config/wander.xml.h:6 ../hacks/config/whirlwindwarp.xml.h:5
msgid "Short"
msgstr "Короткая"
@@ -2308,40 +2194,38 @@ msgstr "Короткая"
msgid "Trail length"
msgstr "Длина следа"
-#.
#. <number id="eulerpower" type="slider" arg="-eulerpower %"
#. _label="Power" _low-label="Low" _high-label="High"
#. low="0.5" high="3.0" default="1.0"/>
-#.
#: ../hacks/config/attraction.xml.h:16 ../hacks/config/binaryring.xml.h:7
#: ../hacks/config/blocktube.xml.h:7 ../hacks/config/braid.xml.h:7
#: ../hacks/config/celtic.xml.h:7 ../hacks/config/cube21.xml.h:23
-#: ../hacks/config/cynosure.xml.h:10 ../hacks/config/drift.xml.h:7
-#: ../hacks/config/eruption.xml.h:21 ../hacks/config/euler2d.xml.h:20
-#: ../hacks/config/fiberlamp.xml.h:10 ../hacks/config/flow.xml.h:15
-#: ../hacks/config/fontglide.xml.h:10 ../hacks/config/galaxy.xml.h:8
-#: ../hacks/config/glcells.xml.h:7 ../hacks/config/hydrostat.xml.h:21
-#: ../hacks/config/juggle.xml.h:10 ../hacks/config/juggler3d.xml.h:10
-#: ../hacks/config/laser.xml.h:8 ../hacks/config/menger.xml.h:7
-#: ../hacks/config/metaballs.xml.h:7 ../hacks/config/mismunch.xml.h:7
-#: ../hacks/config/munch.xml.h:7 ../hacks/config/nerverot.xml.h:7
-#: ../hacks/config/petri.xml.h:24 ../hacks/config/photopile.xml.h:20
-#: ../hacks/config/pipes.xml.h:10 ../hacks/config/polyominoes.xml.h:8
-#: ../hacks/config/raverhoop.xml.h:17 ../hacks/config/rotor.xml.h:7
-#: ../hacks/config/rubikblocks.xml.h:17 ../hacks/config/shadebobs.xml.h:15
-#: ../hacks/config/sierpinski3d.xml.h:7 ../hacks/config/skytentacles.xml.h:7
-#: ../hacks/config/slidescreen.xml.h:7 ../hacks/config/sonar.xml.h:26
-#: ../hacks/config/spheremonics.xml.h:7 ../hacks/config/substrate.xml.h:7
-#: ../hacks/config/superquadrics.xml.h:11 ../hacks/config/surfaces.xml.h:7
-#: ../hacks/config/tangram.xml.h:7 ../hacks/config/vermiculate.xml.h:4
-#: ../hacks/config/wander.xml.h:8 ../hacks/config/whirlwindwarp.xml.h:7
-#: ../hacks/config/xlyap.xml.h:7
+#: ../hacks/config/cubestorm.xml.h:13 ../hacks/config/cynosure.xml.h:10
+#: ../hacks/config/drift.xml.h:7 ../hacks/config/eruption.xml.h:21
+#: ../hacks/config/euler2d.xml.h:20 ../hacks/config/fiberlamp.xml.h:10
+#: ../hacks/config/flow.xml.h:15 ../hacks/config/fontglide.xml.h:10
+#: ../hacks/config/galaxy.xml.h:8 ../hacks/config/glcells.xml.h:7
+#: ../hacks/config/hydrostat.xml.h:21 ../hacks/config/juggle.xml.h:10
+#: ../hacks/config/juggler3d.xml.h:10 ../hacks/config/laser.xml.h:8
+#: ../hacks/config/menger.xml.h:7 ../hacks/config/metaballs.xml.h:7
+#: ../hacks/config/mismunch.xml.h:7 ../hacks/config/munch.xml.h:7
+#: ../hacks/config/nerverot.xml.h:7 ../hacks/config/petri.xml.h:24
+#: ../hacks/config/photopile.xml.h:20 ../hacks/config/pipes.xml.h:10
+#: ../hacks/config/polyominoes.xml.h:8 ../hacks/config/raverhoop.xml.h:17
+#: ../hacks/config/rotor.xml.h:7 ../hacks/config/rubikblocks.xml.h:17
+#: ../hacks/config/shadebobs.xml.h:15 ../hacks/config/sierpinski3d.xml.h:7
+#: ../hacks/config/skytentacles.xml.h:7 ../hacks/config/slidescreen.xml.h:7
+#: ../hacks/config/sonar.xml.h:26 ../hacks/config/spheremonics.xml.h:7
+#: ../hacks/config/substrate.xml.h:7 ../hacks/config/superquadrics.xml.h:11
+#: ../hacks/config/surfaces.xml.h:7 ../hacks/config/tangram.xml.h:7
+#: ../hacks/config/vermiculate.xml.h:4 ../hacks/config/wander.xml.h:8
+#: ../hacks/config/whirlwindwarp.xml.h:7 ../hacks/config/xlyap.xml.h:7
msgid "Long"
msgstr "Длинная"
#: ../hacks/config/attraction.xml.h:20
msgid "Ball mass"
-msgstr "Размер мяча"
+msgstr "Масса мяча"
#: ../hacks/config/attraction.xml.h:22
msgid "Repulsion threshold"
@@ -2366,20 +2250,20 @@ msgstr "Внутрь"
#: ../hacks/config/attraction.xml.h:33
msgid ""
"Points attract each other up to a certain distance, and then begin to repel "
-"each other. The attraction/repulsion is proportional to the distance between "
-"any two particles, similar to the strong and weak nuclear forces. Written by "
-"Jamie Zawinski and John Pezaris; 1992."
-msgstr ""
+"each other. The attraction/repulsion is proportional to the distance between"
+" any two particles, similar to the strong and weak nuclear forces. Written "
+"by Jamie Zawinski and John Pezaris; 1992."
+msgstr "Точки притягивают друг друга до определённого предела, а затем начинают отталкиваться друг от друга. Притяжение/отталкивание пропорционально расстоянию между любыми двумя частицами, похожими на сильные и слабые ядерные силы. Автор Джейми Завински и Джон Пезарис; 1992 год."
#: ../hacks/config/atunnel.xml.h:1
msgid "Atunnel"
-msgstr ""
+msgstr "Гипнотический туннель"
#: ../hacks/config/atunnel.xml.h:5 ../hacks/config/blocktube.xml.h:9
#: ../hacks/config/cubenetic.xml.h:24 ../hacks/config/glmatrix.xml.h:18
#: ../hacks/config/lament.xml.h:5 ../hacks/config/sballs.xml.h:14
msgid "Textured"
-msgstr "Текстуры"
+msgstr "Текстурированный"
#: ../hacks/config/atunnel.xml.h:6 ../hacks/config/boing.xml.h:11
#: ../hacks/config/crackberg.xml.h:12
@@ -2390,15 +2274,15 @@ msgstr "Освещение"
msgid ""
"Zooming through a textured tunnel. Written by Eric Lassauge and Roman "
"Podobedov; 2003."
-msgstr ""
+msgstr "Сквозь текстурированный туннель. Автор Эрик Лассуж и Роман Подобедов; 2003."
#: ../hacks/config/barcode.xml.h:1
msgid "Barcode"
-msgstr ""
+msgstr "Штрих-код"
#: ../hacks/config/barcode.xml.h:5
msgid "Scrolling barcodes"
-msgstr "Движущиеся штрих-коды"
+msgstr "Прокручивающиеся штрих-коды"
#: ../hacks/config/barcode.xml.h:6
msgid "Barcode grid"
@@ -2415,14 +2299,15 @@ msgstr "Часы в виде штрих-кода (24 часа)"
#: ../hacks/config/barcode.xml.h:10
msgid ""
"Colorful scrolling barcodes. CONSUME! The barcodes follow the UPC-A, UPC-E, "
-"EAN-8 or EAN-13 standards. https://en.wikipedia.org/wiki/"
-"Universal_Product_Code https://en.wikipedia.org/wiki/European_Article_Number "
-"Written by Dan Bornstein and Jamie Zawinski; 2003."
-msgstr ""
+"EAN-8 or EAN-13 standards. "
+"https://en.wikipedia.org/wiki/Universal_Product_Code "
+"https://en.wikipedia.org/wiki/European_Article_Number Written by Dan "
+"Bornstein and Jamie Zawinski; 2003."
+msgstr "Красочные прокрутки штрих-кодов. КУШАТЬ ПОДАНО! Штрих-коды стандартов UPC-A, UPC-E, EAN-8 или EAN-13. https://en.wikipedia.org/wiki/Universal_Product_Code https://en.wikipedia.org/wiki/European_Article_Number; Авторы Дэн Борнстейн и Джейми Завински; 2003."
#: ../hacks/config/binaryring.xml.h:1
msgid "BinaryRing"
-msgstr ""
+msgstr "Бинарное кольцо"
#: ../hacks/config/binaryring.xml.h:3
msgid "Growth delay"
@@ -2447,18 +2332,18 @@ msgstr "Много"
#: ../hacks/config/binaryring.xml.h:11
msgid "Fade with colors"
-msgstr "Переход с цветами"
+msgstr "Затухать цветами"
#: ../hacks/config/binaryring.xml.h:12
msgid ""
"A system of path tracing particles evolves continuously from an initial "
"creation, alternating dark and light colors. Written by J. Tarbell and "
"Emilio Del Tessandoro; 2014."
-msgstr ""
+msgstr "Система отслеживания развития путей частиц; чередующихся тёмных и светлых тонов цвета. Авторы Дж. Тарбелл и Эмилио Дел Тессандоро; 2014 год."
#: ../hacks/config/blaster.xml.h:1
msgid "Blaster"
-msgstr ""
+msgstr "Взрыватель"
#: ../hacks/config/blaster.xml.h:5
msgid "Robots"
@@ -2468,20 +2353,20 @@ msgstr "Роботы"
msgid "Lasers"
msgstr "Лазеры"
-#: ../hacks/config/blaster.xml.h:8 ../hacks/config/dymaxionmap.xml.h:12
+#: ../hacks/config/blaster.xml.h:8 ../hacks/config/dymaxionmap.xml.h:11
#: ../hacks/config/glplanet.xml.h:11
msgid "Stars"
-msgstr "Звезды"
+msgstr "Звёзды"
#: ../hacks/config/blaster.xml.h:12
msgid ""
-"Flying space-combat robots (cleverly disguised as colored circles) do battle "
-"in front of a moving star field. Written by Jonathan Lin; 1999."
-msgstr ""
+"Flying space-combat robots (cleverly disguised as colored circles) do battle"
+" in front of a moving star field. Written by Jonathan Lin; 1999."
+msgstr "Пространство летающих боевых роботов (ловко замаскированных под цветными кругами) ведущими бой в космическом пространстве. Автор Джонатан Лин; 1999 год."
#: ../hacks/config/blinkbox.xml.h:1
msgid "BlinkBox"
-msgstr ""
+msgstr "Мерцающий ящик"
#: ../hacks/config/blinkbox.xml.h:6
msgid "Box size"
@@ -2503,15 +2388,15 @@ msgstr "Схлопывание"
msgid ""
"A motion-blurred ball bounces inside a box whose tiles only become visible "
"upon impact. Written by Jeremy English; 2003."
-msgstr ""
+msgstr "Размытое движение мяча внутри ящика, плитки становятся видимыми только при ударе. Автор Джереми Инглиш; 2003."
#: ../hacks/config/blitspin.xml.h:1
msgid "BlitSpin"
-msgstr ""
+msgstr "Выкрутасы"
#: ../hacks/config/blitspin.xml.h:3
msgid "Fuzzy rotation speed"
-msgstr "Скорость неопределенного поворота"
+msgstr "Скорость неопределённого поворота"
#: ../hacks/config/blitspin.xml.h:5
msgid "90 degree rotation speed"
@@ -2525,11 +2410,11 @@ msgid ""
"except that all sub-quadrants of a given size are rotated in parallel. As "
"you watch it, the image appears to dissolve into static and then "
"reconstitute itself, but rotated. Written by Jamie Zawinski; 1992."
-msgstr ""
+msgstr "Многократно поворачивает растровое изображение на 90 градусов с помощью логических операций: растровое изображение делится на квадранты, а квадранты смещаются по часовой стрелке. Затем то же самое будет сделано снова, с постепенно уменьшающимися квадрантами, за исключением суб-квадрантов заданного размера, вращающихся параллельно. Изображение появляется, преобразуется в статическое, а затем восстанавливается, но поворачивается. Автор: Джейми Завински; 1992."
#: ../hacks/config/blocktube.xml.h:1
msgid "BlockTube"
-msgstr ""
+msgstr "Труба блоков"
#: ../hacks/config/blocktube.xml.h:6
msgid "Color hold time"
@@ -2543,11 +2428,11 @@ msgstr "Время изменения цвета"
msgid ""
"A swirling, falling tunnel of reflective slabs. They fade from hue to hue. "
"Written by Lars R. Damerow; 2003."
-msgstr ""
+msgstr "Закрученный туннель из отражательных плит. Они исчезают из оттенка в оттенок. Автор: Ларс Р. Дамеров; 2003."
#: ../hacks/config/boing.xml.h:1
msgid "Boing"
-msgstr ""
+msgstr "Боинг"
#: ../hacks/config/boing.xml.h:2 ../hacks/config/boxed.xml.h:11
#: ../hacks/config/pinion.xml.h:9 ../hacks/config/sonar.xml.h:21
@@ -2589,15 +2474,16 @@ msgstr "Растровые строки"
msgid ""
"A clone of the first graphics demo for the Amiga 1000, which was written by "
"Dale Luck and RJ Mical during a break at the 1984 Consumer Electronics Show "
-"(or so the legend goes.) This looks like the original Amiga demo if you turn "
-"off \"smoothing\" and \"lighting\" and turn on \"scanlines\", and is "
-"somewhat more modern otherwise. https://en.wikipedia.org/wiki/"
-"Amiga#Boing_Ball Written by Jamie Zawinski; 2005."
-msgstr ""
+"(or so the legend goes.) This looks like the original Amiga demo if you turn"
+" off \"smoothing\" and \"lighting\" and turn on \"scanlines\", and is "
+"somewhat more modern otherwise. "
+"https://en.wikipedia.org/wiki/Amiga#Boing_Ball Written by Jamie Zawinski; "
+"2005."
+msgstr "Клон первых графических демо для Amiga 1000, который был написан Дейл Лаком и ЭрДжи Микалом во время перерыва в 1984 выставки бытовой электроники (так гласит легенда.) Это выглядит, как оригинальный демо Amiga, если вы выключите \"сглаживание\" и \"освещение\", а также - несколько более современные, \"растровые строки\". https://en.wikipedia.org/wiki/Amiga#Boing_Ball Автор: Джейми Завински; 2005."
#: ../hacks/config/bouboule.xml.h:1
msgid "Bouboule"
-msgstr ""
+msgstr "Пышный"
#: ../hacks/config/bouboule.xml.h:6
msgid "Number of spots"
@@ -2611,11 +2497,11 @@ msgstr "Разделять красное/синее 3D"
msgid ""
"A deforming balloon with varying-sized spots painted on its invisible "
"surface. Written by Jeremie Petit; 1997."
-msgstr ""
+msgstr "Деформации воздушного шара с разными размерами пятен, нарисованными на его невидимой поверхности. Автор: Жереми Петит; 1997."
#: ../hacks/config/bouncingcow.xml.h:1
msgid "BouncingCow"
-msgstr ""
+msgstr "Прыгающая корова"
#: ../hacks/config/bouncingcow.xml.h:6
msgid "Bounce speed"
@@ -2637,11 +2523,11 @@ msgstr "Стадо"
msgid ""
"A Cow. A Trampoline. Together, they fight crime. Written by Jamie Zawinski; "
"2003."
-msgstr ""
+msgstr "Корова. Батут. Вместе они борются с преступностью. Автор: Джейми Завински; 2003."
#: ../hacks/config/boxed.xml.h:1
msgid "Boxed"
-msgstr ""
+msgstr "В коробке"
#: ../hacks/config/boxed.xml.h:9 ../hacks/config/fluidballs.xml.h:6
msgid "Number of balls"
@@ -2653,7 +2539,7 @@ msgstr "Размер мяча"
#: ../hacks/config/boxed.xml.h:14 ../hacks/config/hopalong.xml.h:14
msgid "Popcorn"
-msgstr "Поп-корн"
+msgstr "Попкорн"
#: ../hacks/config/boxed.xml.h:15
msgid "Explosion force"
@@ -2681,13 +2567,13 @@ msgstr "Полный"
#: ../hacks/config/boxed.xml.h:25
msgid ""
-"A box full of 3D bouncing balls that explode. Written by Sander van Grieken; "
-"2002."
-msgstr ""
+"A box full of 3D bouncing balls that explode. Written by Sander van Grieken;"
+" 2002."
+msgstr "Коробка полна трёхмерными прыгающими шариками, которые ещё и взрываются. Автор Сандер ван Гриекен; 2002."
#: ../hacks/config/boxfit.xml.h:1
msgid "BoxFit"
-msgstr ""
+msgstr "Заполнить коробками"
#: ../hacks/config/boxfit.xml.h:5 ../hacks/config/cityflow.xml.h:6
#: ../hacks/config/cubenetic.xml.h:6
@@ -2720,11 +2606,11 @@ msgstr "Только круги"
#: ../hacks/config/boxfit.xml.h:12
msgid "Color gradient"
-msgstr "Градиент цвета"
+msgstr "Цветной градиент"
#: ../hacks/config/boxfit.xml.h:13
msgid "Grab images"
-msgstr "Захватывать изображения с рабочего стола"
+msgstr "Захватывать изображения"
#: ../hacks/config/boxfit.xml.h:14
msgid "Peek at underlying images"
@@ -2737,11 +2623,11 @@ msgid ""
"image. The objects grow until they touch, then stop. When the screen is "
"full, they shrink away and the process restarts. Written by Jamie Zawinski; "
"2005."
-msgstr ""
+msgstr "Квесты экрана с растущими квадратами или кругами; окрашены в соответствии с горизонтальным или вертикальным градиентом, либо в соответствии с цветами загруженного изображения. Объекты растут, пока они не коснуться друг друга. Когда экран заполняется - включается процесс перезагрузки. Автор Джейми Завински; 2005 год."
#: ../hacks/config/braid.xml.h:1
msgid "Braid"
-msgstr ""
+msgstr "Оплётка"
#: ../hacks/config/braid.xml.h:11
msgid "Number of rings"
@@ -2754,178 +2640,190 @@ msgstr "Толщина линии"
#: ../hacks/config/braid.xml.h:14
msgid "Inter-braided concentric circles. Written by John Neil; 1997."
-msgstr ""
+msgstr "Плетение узора концентрическими кругами. Автор Джон Нил; 1997."
#: ../hacks/config/bsod.xml.h:1
msgid "BSOD"
-msgstr ""
+msgstr "BSOD/Синий экран смерти"
#: ../hacks/config/bsod.xml.h:2 ../hacks/config/carousel.xml.h:8
-#: ../hacks/config/geodesicgears.xml.h:5 ../hacks/config/m6502.xml.h:2
+#: ../hacks/config/geodesicgears.xml.h:5 ../hacks/config/m6502.xml.h:4
#: ../hacks/config/molecule.xml.h:5
msgid "5 seconds"
msgstr "5 секунд"
#: ../hacks/config/bsod.xml.h:4 ../hacks/config/geodesicgears.xml.h:7
-#: ../hacks/config/m6502.xml.h:4 ../hacks/config/molecule.xml.h:7
+#: ../hacks/config/m6502.xml.h:6 ../hacks/config/molecule.xml.h:7
#: ../hacks/config/vidwhacker.xml.h:4
msgid "2 minutes"
msgstr "2 минуты"
#: ../hacks/config/bsod.xml.h:6
msgid "Windows 3.1"
-msgstr ""
+msgstr "Windows 3.1"
#: ../hacks/config/bsod.xml.h:7
msgid "Windows NT"
-msgstr ""
+msgstr "Windows NT"
#: ../hacks/config/bsod.xml.h:8
-msgid "Windows 2000"
-msgstr ""
+msgid "Windows 2000 "
+msgstr "Windows 2000 "
#: ../hacks/config/bsod.xml.h:9
-msgid "Windows 10"
-msgstr ""
+msgid "Windows 10 "
+msgstr "Windows 10 "
#: ../hacks/config/bsod.xml.h:10
msgid "MS-DOS"
-msgstr ""
+msgstr "MS-DOS"
#: ../hacks/config/bsod.xml.h:11
msgid "AmigaDOS"
-msgstr ""
+msgstr "AmigaDOS"
#: ../hacks/config/bsod.xml.h:12
msgid "GLaDOS"
-msgstr ""
+msgstr "GLaDOS"
#: ../hacks/config/bsod.xml.h:13
msgid "Android"
-msgstr ""
+msgstr "Андроид"
#: ../hacks/config/bsod.xml.h:14
msgid "Apple ]["
-msgstr ""
+msgstr "Apple ]["
#: ../hacks/config/bsod.xml.h:15
-msgid "VMware"
-msgstr ""
+msgid "Ransomware"
+msgstr "Ransomware"
#: ../hacks/config/bsod.xml.h:16
msgid "NVidia"
-msgstr ""
+msgstr "NVidia"
#: ../hacks/config/bsod.xml.h:17
msgid "OS/2"
-msgstr ""
+msgstr "OS/2"
#: ../hacks/config/bsod.xml.h:18
msgid "Sad Mac"
-msgstr ""
+msgstr "Sad Mac"
#: ../hacks/config/bsod.xml.h:19
msgid "Mac bomb"
-msgstr ""
+msgstr "Mac bomb"
#: ../hacks/config/bsod.xml.h:20
-msgid "MacsBug"
-msgstr ""
+msgid "VMware"
+msgstr "VMware"
#: ../hacks/config/bsod.xml.h:21
-msgid "Atari"
-msgstr ""
+msgid "MacsBug"
+msgstr "MacsBug"
#: ../hacks/config/bsod.xml.h:22
-msgid "MacOS X"
-msgstr ""
+msgid "Atari"
+msgstr "Atari"
#: ../hacks/config/bsod.xml.h:23
-msgid "OS/390"
-msgstr ""
+msgid "MacOS X"
+msgstr "MacOS X"
#: ../hacks/config/bsod.xml.h:24
-msgid "VMS"
-msgstr ""
+msgid "OS/390"
+msgstr "OS/390"
#: ../hacks/config/bsod.xml.h:25
-msgid "HVX/GCOS6"
-msgstr ""
+msgid "Encom"
+msgstr "Encom"
#: ../hacks/config/bsod.xml.h:26
-msgid "NCD X Terminal "
-msgstr ""
+msgid "VMS"
+msgstr "VMS"
#: ../hacks/config/bsod.xml.h:27
-msgid "ATM"
-msgstr ""
+msgid "HVX/GCOS6"
+msgstr "HVX/GCOS6"
#: ../hacks/config/bsod.xml.h:28
-msgid "BSD"
-msgstr ""
+msgid "NCD X Terminal "
+msgstr "NCD X Терминал "
#: ../hacks/config/bsod.xml.h:29
-msgid "Linux (fsck)"
-msgstr ""
+msgid "ATM"
+msgstr "ATM"
#: ../hacks/config/bsod.xml.h:30
-msgid "Linux (sparc)"
-msgstr ""
+msgid "DVD"
+msgstr "DVD"
#: ../hacks/config/bsod.xml.h:31
-msgid "Linux (hppa)"
-msgstr ""
+msgid "BSD"
+msgstr "BSD"
#: ../hacks/config/bsod.xml.h:32
-msgid "Solaris"
-msgstr ""
+msgid "Linux (fsck)"
+msgstr "Linux (fsck)"
#: ../hacks/config/bsod.xml.h:33
-msgid "SCO"
-msgstr ""
+msgid "Linux (sparc)"
+msgstr "Linux (sparc)"
#: ../hacks/config/bsod.xml.h:34
-msgid "HPUX"
-msgstr ""
+msgid "Linux (hppa)"
+msgstr "Linux (hppa)"
#: ../hacks/config/bsod.xml.h:35
+msgid "Solaris"
+msgstr "Solaris"
+
+#: ../hacks/config/bsod.xml.h:36
+msgid "SCO"
+msgstr "SCO"
+
+#: ../hacks/config/bsod.xml.h:37
+msgid "HPUX"
+msgstr "HPUX"
+
+#: ../hacks/config/bsod.xml.h:38
msgid "Tru64"
-msgstr ""
+msgstr "Tru64"
-#.
#. <hgroup>
#. <vgroup>
#. <number id="tvcolor" type="slider" arg="-tv-color %"
#. _label="Color Knob" _low-label="Low" _high-label="High"
-#. low="0" high="1000" default="70"/>
+#. low="0" high="400" default="70"/>
#. <number id="tvtint" type="slider" arg="-tv-tint %"
#. _label="Tint Knob" _low-label="Low" _high-label="High"
-#. low="0" high="100" default="5"/>
+#. low="0" high="360" default="5"/>
#. </vgroup>
#. <vgroup>
#. <number id="tvbrightness" type="slider" arg="-tv-brightness %"
#. _label="Brightness Knob" _low-label="Low" _high-label="High"
-#. low="0" high="200" default="150"/>
+#. low="-75.0" high="100.0" default="3.0"/>
#. <number id="tvcontrast" type="slider" arg="-tv-contrast %"
#. _label="Contrast Knob" _low-label="Low" _high-label="High"
-#. low="0" high="1500" default="1000"/>
+#. low="0" high="500" default="150"/>
#. </vgroup>
#. </hgroup>
-#.
-#: ../hacks/config/bsod.xml.h:57
+#: ../hacks/config/bsod.xml.h:60
#, no-c-format
msgid ""
"BSOD stands for \"Blue Screen of Death\". The finest in personal computer "
-"emulation, BSOD simulates popular screen savers from a number of less robust "
-"operating systems. https://en.wikipedia.org/wiki/Blue_Screen_of_Death "
-"https://en.wikipedia.org/wiki/Screen_of_death https://en.wikipedia.org/wiki/"
-"Guru_Meditation https://en.wikipedia.org/wiki/Row_of_Bombs https://en."
-"wikipedia.org/wiki/Bomb_%28symbol%29 Written by Jamie Zawinski; 1998."
-msgstr ""
+"emulation, BSOD simulates popular screen savers from a number of less robust"
+" operating systems. https://en.wikipedia.org/wiki/Blue_Screen_of_Death "
+"https://en.wikipedia.org/wiki/Screen_of_death "
+"https://en.wikipedia.org/wiki/Guru_Meditation "
+"https://en.wikipedia.org/wiki/Row_of_Bombs "
+"https://en.wikipedia.org/wiki/Bomb_%28symbol%29 Written by Jamie Zawinski; "
+"1998."
+msgstr "BSOD означает \"синий экран смерти\". Тончайшая в персональном компьютере эмуляция. BSOD имитирует популярные экранные заставки из ряда менее мощных операционных систем. https://en.wikipedia.org/wiki/Blue_Screen_of_Death https://en.wikipedia.org/wiki/Screen_of_death https://en.wikipedia.org/wiki/Guru_Meditation https://en.wikipedia.org/wiki / Row_of_Bombs https://en.wikipedia.org/wiki/Bomb_%28symbol%29 Автор Джейми Завински; 1998."
#: ../hacks/config/bubble3d.xml.h:1
msgid "Bubble3D"
-msgstr ""
+msgstr "3D пузыри"
#: ../hacks/config/bubble3d.xml.h:5
msgid "Transparent bubbles"
@@ -2945,7 +2843,7 @@ msgstr "Янтарный"
#: ../hacks/config/bubble3d.xml.h:8 ../hacks/config/fuzzyflakes.xml.h:16
#: ../hacks/config/phosphor.xml.h:9
msgid "Green"
-msgstr "Зеленый"
+msgstr "Зелёный"
#: ../hacks/config/bubble3d.xml.h:9 ../hacks/config/fuzzyflakes.xml.h:18
msgid "Blue"
@@ -2960,35 +2858,35 @@ msgstr "Белый"
msgid ""
"Rising, undulating 3D bubbles, with transparency and specular reflections. "
"Written by Richard Jones; 1998."
-msgstr ""
+msgstr "Растущие, волнообразные 3D пузыри; с прозрачной и зеркальной поверхностью. Автор Ричард Джонс; 1998."
#: ../hacks/config/bubbles.xml.h:1
msgid "Bubbles"
-msgstr ""
+msgstr "Пузыри"
#: ../hacks/config/bubbles.xml.h:5
msgid "Draw circles instead of bubble images"
-msgstr ""
+msgstr "Рисовать круги вместо изображений пузырей"
#: ../hacks/config/bubbles.xml.h:6
msgid "Don't hide bubbles when they pop"
-msgstr ""
+msgstr "Не скрывать пузыри, когда они лопаются"
#: ../hacks/config/bubbles.xml.h:7
msgid "Leave trails"
-msgstr ""
+msgstr "Оставить следы"
#: ../hacks/config/bubbles.xml.h:8
msgid "Bubbles rise"
-msgstr ""
+msgstr "Растущие пузыри"
#: ../hacks/config/bubbles.xml.h:9
msgid "Bubbles float"
-msgstr ""
+msgstr "Плавающие пузыри"
#: ../hacks/config/bubbles.xml.h:10
msgid "Bubbles fall"
-msgstr ""
+msgstr "Падающие пузыри"
#: ../hacks/config/bubbles.xml.h:12
msgid ""
@@ -2997,32 +2895,32 @@ msgid ""
"water boils: small bubbles appear, and as they get closer to each other, "
"they combine to form larger bubbles, which eventually pop. Written by James "
"Macnicol; 1996."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver в версии 5.08. Она имитирует образование пузырьков; т.е. когда вода закипит - появляются мелкие пузырьки, ближайшие друг к другу сливаются и образуются большие пузыри, которые в конце концов лопаются. Автор Джеймс Макникол; 1996 год."
#: ../hacks/config/bumps.xml.h:1 ../hacks/config/mirrorblob.xml.h:15
msgid "Bumps"
-msgstr ""
+msgstr "Выпуклости"
#: ../hacks/config/bumps.xml.h:12
msgid ""
"A spotlight roams across an embossed version of a loaded image. Written by "
"Shane Smit; 1999."
-msgstr ""
+msgstr "Прожектор (световое пятно) бродит по рельефной версии загруженного изображения. Автор Шейн Смит; 1999 год."
#: ../hacks/config/cage.xml.h:1
msgid "Cage"
-msgstr ""
+msgstr "Сруб"
#: ../hacks/config/cage.xml.h:7
msgid ""
-"Escher's \"Impossible Cage\", a 3d analog of a moebius strip, and rotates it "
-"in three dimensions. https://en.wikipedia.org/wiki/Maurits_Cornelis_Escher "
+"Escher's \"Impossible Cage\", a 3d analog of a moebius strip, and rotates it"
+" in three dimensions. https://en.wikipedia.org/wiki/Maurits_Cornelis_Escher "
"Written by Marcelo Vianna; 1998."
-msgstr ""
+msgstr "\"Невероятный сруб\" Эшера, 3D-аналог ленты Мёбиуса; её вращание в трёх измерениях. https://en.wikipedia.org/wiki/Maurits_Cornelis_Escher Автор Марсело Вианна; 1998."
#: ../hacks/config/carousel.xml.h:1
msgid "Carousel"
-msgstr ""
+msgstr "Карусель"
#: ../hacks/config/carousel.xml.h:6 ../hacks/config/ccurve.xml.h:6
#: ../hacks/config/cubestack.xml.h:6 ../hacks/config/cubetwist.xml.h:6
@@ -3068,8 +2966,8 @@ msgstr "Не наклонять"
msgid "Zoom in/out"
msgstr "Увеличивать/уменьшать"
-#: ../hacks/config/carousel.xml.h:17 ../hacks/config/glslideshow.xml.h:19
-#: ../hacks/config/photopile.xml.h:21
+#: ../hacks/config/carousel.xml.h:17 ../hacks/config/esper.xml.h:8
+#: ../hacks/config/glslideshow.xml.h:19 ../hacks/config/photopile.xml.h:21
msgid "Show file names"
msgstr "Показывать имена файлов"
@@ -3077,13 +2975,13 @@ msgstr "Показывать имена файлов"
msgid ""
"Loads several random images, and displays them flying in a circular "
"formation. The formation changes speed and direction randomly, and images "
-"periodically drop out to be replaced by new ones. Written by Jamie Zawinski; "
-"2005."
-msgstr ""
+"periodically drop out to be replaced by new ones. Written by Jamie Zawinski;"
+" 2005."
+msgstr "Загрузка нескольких случайных изображений, отображение их полёта в круговом пласте. Образование изменяет скорость и направление случайным образом; изображения периодически заменяются новыми. Автор: Джейми Завински; 2005 год."
#: ../hacks/config/ccurve.xml.h:1
msgid "CCurve"
-msgstr ""
+msgstr "С-кривая"
#: ../hacks/config/ccurve.xml.h:3
msgid "Change image every"
@@ -3098,8 +2996,9 @@ msgstr "30 секунд"
#: ../hacks/config/ccurve.xml.h:9 ../hacks/config/coral.xml.h:9
#: ../hacks/config/imsmap.xml.h:9 ../hacks/config/kumppa.xml.h:5
#: ../hacks/config/qix.xml.h:9 ../hacks/config/quasicrystal.xml.h:8
-#: ../hacks/config/squiral.xml.h:11 ../hacks/config/superquadrics.xml.h:8
-#: ../hacks/config/wander.xml.h:5 ../hacks/config/xmatrix.xml.h:19
+#: ../hacks/config/razzledazzle.xml.h:12 ../hacks/config/squiral.xml.h:11
+#: ../hacks/config/superquadrics.xml.h:8 ../hacks/config/wander.xml.h:5
+#: ../hacks/config/xmatrix.xml.h:19
msgid "Density"
msgstr "Плотность"
@@ -3107,11 +3006,11 @@ msgstr "Плотность"
msgid ""
"Generates self-similar linear fractals, including the classic \"C Curve\". "
"https://en.wikipedia.org/wiki/Levy_C_curve Written by Rick Campbell; 1999."
-msgstr ""
+msgstr "Создаёт подобие линейных фракталов, в том числе классической \"C-кривой\". https://en.wikipedia.org/wiki/Levy_C_curve Автор Рик Кэмпбелл; 1999 год."
#: ../hacks/config/celtic.xml.h:1
msgid "Celtic"
-msgstr ""
+msgstr "Кельтские узлы"
#: ../hacks/config/celtic.xml.h:8
msgid "Draw graph"
@@ -3119,14 +3018,15 @@ msgstr "Прорисовывать граф"
#: ../hacks/config/celtic.xml.h:10
msgid ""
-"Repeatedly draws random Celtic cross-stitch patterns. https://en.wikipedia."
-"org/wiki/Celtic_knot https://en.wikipedia.org/wiki/Knots_and_graphs Written "
-"by Max Froumentin; 2005."
-msgstr ""
+"Repeatedly draws random Celtic cross-stitch patterns. "
+"https://en.wikipedia.org/wiki/Celtic_knot "
+"https://en.wikipedia.org/wiki/Knots_and_graphs Written by Max Froumentin; "
+"2005."
+msgstr "Многократно рисует случайные кельтские узоры, вышивки крестом. https://en.wikipedia.org/wiki/Celtic_knot https://en.wikipedia.org/wiki/Knots_and_graphs Автор Макс Фраументин; 2005 год."
#: ../hacks/config/circuit.xml.h:1
msgid "Circuit"
-msgstr ""
+msgstr "Радиодеталь"
#: ../hacks/config/circuit.xml.h:5 ../hacks/config/hydrostat.xml.h:8
#: ../hacks/config/mismunch.xml.h:8 ../hacks/config/mountain.xml.h:5
@@ -3146,19 +3046,19 @@ msgid "Rotation speed"
msgstr "Скорость вращения"
#: ../hacks/config/circuit.xml.h:11 ../hacks/config/companioncube.xml.h:11
-#: ../hacks/config/cube21.xml.h:19 ../hacks/config/cubestorm.xml.h:15
-#: ../hacks/config/cubetwist.xml.h:16 ../hacks/config/dangerball.xml.h:12
-#: ../hacks/config/discoball.xml.h:12 ../hacks/config/energystream.xml.h:6
-#: ../hacks/config/engine.xml.h:18 ../hacks/config/flipflop.xml.h:6
-#: ../hacks/config/gears.xml.h:12 ../hacks/config/geodesic.xml.h:9
-#: ../hacks/config/geodesicgears.xml.h:12 ../hacks/config/hexstrut.xml.h:15
-#: ../hacks/config/hilbert.xml.h:19 ../hacks/config/moebiusgears.xml.h:11
-#: ../hacks/config/polyhedra.xml.h:164 ../hacks/config/raverhoop.xml.h:19
-#: ../hacks/config/rubikblocks.xml.h:13 ../hacks/config/splodesic.xml.h:10
-#: ../hacks/config/surfaces.xml.h:26 ../hacks/config/tronbit.xml.h:8
-#: ../hacks/config/unicrud.xml.h:9
+#: ../hacks/config/crumbler.xml.h:13 ../hacks/config/cube21.xml.h:19
+#: ../hacks/config/cubestorm.xml.h:18 ../hacks/config/cubetwist.xml.h:16
+#: ../hacks/config/dangerball.xml.h:12 ../hacks/config/discoball.xml.h:12
+#: ../hacks/config/energystream.xml.h:6 ../hacks/config/engine.xml.h:18
+#: ../hacks/config/flipflop.xml.h:6 ../hacks/config/gears.xml.h:12
+#: ../hacks/config/geodesic.xml.h:9 ../hacks/config/geodesicgears.xml.h:12
+#: ../hacks/config/hexstrut.xml.h:15 ../hacks/config/hilbert.xml.h:19
+#: ../hacks/config/moebiusgears.xml.h:11 ../hacks/config/polyhedra.xml.h:164
+#: ../hacks/config/raverhoop.xml.h:19 ../hacks/config/rubikblocks.xml.h:13
+#: ../hacks/config/splodesic.xml.h:10 ../hacks/config/surfaces.xml.h:26
+#: ../hacks/config/tronbit.xml.h:8 ../hacks/config/unicrud.xml.h:9
msgid "Spin"
-msgstr "Вращение"
+msgstr "Кручение"
#: ../hacks/config/circuit.xml.h:12
msgid "Flat coloring"
@@ -3170,11 +3070,11 @@ msgstr "Направленное освещение"
#: ../hacks/config/circuit.xml.h:15
msgid "Electronic components float around. Written by Ben Buxton; 2001."
-msgstr ""
+msgstr "Плавающие электронные компоненты. Автор Бен Бакстон; 2001 год."
#: ../hacks/config/cityflow.xml.h:1
msgid "Cityflow"
-msgstr ""
+msgstr "Городской поток"
#: ../hacks/config/cityflow.xml.h:8
msgid "Skew"
@@ -3195,13 +3095,13 @@ msgstr "Сложность волны"
#: ../hacks/config/cityflow.xml.h:18
msgid ""
-"Waves move across a sea of boxes. The city swells. The walls are closing in. "
-"Written by Jamie Zawinski; 2014."
-msgstr ""
+"Waves move across a sea of boxes. The city swells. The walls are closing in."
+" Written by Jamie Zawinski; 2014."
+msgstr "Волны движутся по морю коробок. Город раздувается. Стены закрываются. Автор Джейми Завински. 2014."
#: ../hacks/config/cloudlife.xml.h:1
msgid "CloudLife"
-msgstr ""
+msgstr "Жизнь облака"
#: ../hacks/config/cloudlife.xml.h:5
msgid "Young"
@@ -3228,17 +3128,19 @@ msgstr "Размер ячейки"
#, no-c-format
msgid ""
"Generates cloud-like formations based on a variant of Conway's Life. The "
-"difference is that cells have a maximum age, after which they count as 3 for "
-"populating the next generation. This makes long-lived formations explode "
-"instead of just sitting there. https://en.wikipedia.org/wiki/Conway"
-"%27s_Game_of_Life Written by Don Marti; 2003."
-msgstr ""
+"difference is that cells have a maximum age, after which they count as 3 for"
+" populating the next generation. This makes long-lived formations explode "
+"instead of just sitting there. "
+"https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life Written by Don Marti; "
+"2003."
+msgstr "Генерирует облачные образования на основе варианта \"жизни\" Конвея. Разница заключается в том, что клетки имеют максимальный возраст, после чего им на смену приходит следующее поколение. Долгоживущие образования взрываются вместо того, чтобы просто исчезнуть. https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life Автор Дон Марти; 2003."
#: ../hacks/config/companioncube.xml.h:1
msgid "CompanionCube"
-msgstr ""
+msgstr "Куб-компаньон"
#: ../hacks/config/companioncube.xml.h:6 ../hacks/config/distort.xml.h:17
+#: ../hacks/config/peepers.xml.h:11
msgid "Bounce"
msgstr "Прыжок"
@@ -3251,23 +3153,24 @@ msgstr "Прыжок"
#: ../hacks/config/raverhoop.xml.h:5 ../hacks/config/skytentacles.xml.h:2
#: ../hacks/config/strange.xml.h:9
msgid "1"
-msgstr ""
+msgstr "1"
#: ../hacks/config/companioncube.xml.h:9
msgid "Number of cubes"
msgstr "Количество кубов"
#. #### -no-optimize
-#: ../hacks/config/companioncube.xml.h:12 ../hacks/config/cube21.xml.h:20
-#: ../hacks/config/cubenetic.xml.h:8 ../hacks/config/cubestack.xml.h:14
-#: ../hacks/config/cubestorm.xml.h:14 ../hacks/config/cubetwist.xml.h:15
-#: ../hacks/config/dangerball.xml.h:11 ../hacks/config/discoball.xml.h:11
-#: ../hacks/config/dymaxionmap.xml.h:10 ../hacks/config/energystream.xml.h:5
-#: ../hacks/config/engine.xml.h:17 ../hacks/config/gears.xml.h:11
-#: ../hacks/config/geodesic.xml.h:8 ../hacks/config/geodesicgears.xml.h:11
-#: ../hacks/config/glblur.xml.h:8 ../hacks/config/glforestfire.xml.h:11
-#: ../hacks/config/glknots.xml.h:22 ../hacks/config/glplanet.xml.h:8
-#: ../hacks/config/gltext.xml.h:9 ../hacks/config/hexstrut.xml.h:14
+#: ../hacks/config/companioncube.xml.h:12 ../hacks/config/crumbler.xml.h:12
+#: ../hacks/config/cube21.xml.h:20 ../hacks/config/cubenetic.xml.h:8
+#: ../hacks/config/cubestack.xml.h:14 ../hacks/config/cubestorm.xml.h:17
+#: ../hacks/config/cubetwist.xml.h:15 ../hacks/config/dangerball.xml.h:11
+#: ../hacks/config/discoball.xml.h:11 ../hacks/config/dymaxionmap.xml.h:13
+#: ../hacks/config/energystream.xml.h:5 ../hacks/config/engine.xml.h:17
+#: ../hacks/config/gears.xml.h:11 ../hacks/config/geodesic.xml.h:8
+#: ../hacks/config/geodesicgears.xml.h:11 ../hacks/config/glblur.xml.h:8
+#: ../hacks/config/glforestfire.xml.h:11 ../hacks/config/glknots.xml.h:22
+#: ../hacks/config/glplanet.xml.h:8 ../hacks/config/gltext.xml.h:9
+#: ../hacks/config/handsy.xml.h:11 ../hacks/config/hexstrut.xml.h:14
#: ../hacks/config/hilbert.xml.h:18 ../hacks/config/hypnowheel.xml.h:6
#: ../hacks/config/kaleidocycle.xml.h:19 ../hacks/config/lavalite.xml.h:14
#: ../hacks/config/menger.xml.h:10 ../hacks/config/moebiusgears.xml.h:10
@@ -3278,40 +3181,40 @@ msgstr "Количество кубов"
#: ../hacks/config/tronbit.xml.h:9 ../hacks/config/unicrud.xml.h:8
#: ../hacks/config/wander.xml.h:1
msgid "Wander"
-msgstr "Перемещение"
+msgstr "Блуждание"
#: ../hacks/config/companioncube.xml.h:16
#, no-c-format
msgid ""
"The symptoms most commonly produced by Enrichment Center testing are "
-"superstition, perceiving inanimate objects as alive, and hallucinations. The "
-"Enrichment Center reminds you that the weighted companion cube will never "
+"superstition, perceiving inanimate objects as alive, and hallucinations. The"
+" Enrichment Center reminds you that the weighted companion cube will never "
"threaten to stab you and, in fact, cannot speak. In the event that the "
"Weighted Companion Cube does speak, the Enrichment Center urges you to "
"disregard its advice. https://en.wikipedia.org/wiki/Portal_%28video_game%29 "
"Written by Jamie Zawinski; 2011."
-msgstr ""
+msgstr "Тестирования Центра по обогащению показывают, что данные симптомы чаще всего вызываются галлюцинациями и являются суевериями: восприятие неодушевленных предметов как живых и т.д. Центр по обогащению напоминает вам, что компаньон- куб никогда не собирается ударить вас и, по сути, не может говорить. В том случае, если взвешенный куб-компаньон действительно заговорит, Центр по обогащению рекомендует вам игнорировать его советы. https://en.wikipedia.org/wiki/Portal_%28video_game%29 Автор: Джейми Завински; 2011."
#: ../hacks/config/compass.xml.h:1
msgid "Compass"
-msgstr ""
+msgstr "Компас"
#: ../hacks/config/compass.xml.h:6
msgid ""
"A compass, with all elements spinning about randomly, for that \"lost and "
"nauseous\" feeling. Written by Jamie Zawinski; 1999."
-msgstr ""
+msgstr "Компас, со всеми, вращающимися в случайном порядке элементами; \"потерянное и тошнотворное\" чувство. Автор: Джейми Завински; 1999."
#: ../hacks/config/coral.xml.h:1
msgid "Coral"
-msgstr ""
+msgstr "Коралл"
#: ../hacks/config/coral.xml.h:5 ../hacks/config/deco.xml.h:2
-#: ../hacks/config/epicycle.xml.h:8 ../hacks/config/glslideshow.xml.h:13
-#: ../hacks/config/helix.xml.h:5 ../hacks/config/moire.xml.h:2
-#: ../hacks/config/pedal.xml.h:2 ../hacks/config/polyhedra.xml.h:8
-#: ../hacks/config/rorschach.xml.h:8 ../hacks/config/starfish.xml.h:8
-#: ../hacks/config/xspirograph.xml.h:5
+#: ../hacks/config/epicycle.xml.h:8 ../hacks/config/glitchpeg.xml.h:5
+#: ../hacks/config/glslideshow.xml.h:13 ../hacks/config/helix.xml.h:5
+#: ../hacks/config/moire.xml.h:2 ../hacks/config/pedal.xml.h:2
+#: ../hacks/config/polyhedra.xml.h:8 ../hacks/config/rorschach.xml.h:8
+#: ../hacks/config/starfish.xml.h:8 ../hacks/config/xspirograph.xml.h:5
msgid "1 second"
msgstr "1 секунда"
@@ -3320,33 +3223,34 @@ msgstr "1 секунда"
#: ../hacks/config/glmatrix.xml.h:5 ../hacks/config/imsmap.xml.h:8
#: ../hacks/config/lavalite.xml.h:5 ../hacks/config/pyro.xml.h:5
#: ../hacks/config/qix.xml.h:8 ../hacks/config/raverhoop.xml.h:8
-#: ../hacks/config/squiral.xml.h:10 ../hacks/config/xmatrix.xml.h:18
+#: ../hacks/config/razzledazzle.xml.h:11 ../hacks/config/squiral.xml.h:10
+#: ../hacks/config/xmatrix.xml.h:18
msgid "Sparse"
-msgstr "Редко"
+msgstr "Разбросанно"
#: ../hacks/config/coral.xml.h:10 ../hacks/config/fireworkx.xml.h:5
#: ../hacks/config/gflux.xml.h:10 ../hacks/config/glblur.xml.h:7
#: ../hacks/config/glmatrix.xml.h:7 ../hacks/config/imsmap.xml.h:10
#: ../hacks/config/lavalite.xml.h:7 ../hacks/config/pyro.xml.h:7
#: ../hacks/config/qix.xml.h:10 ../hacks/config/raverhoop.xml.h:10
-#: ../hacks/config/squiral.xml.h:12
+#: ../hacks/config/razzledazzle.xml.h:13 ../hacks/config/squiral.xml.h:12
msgid "Dense"
msgstr "Плотно"
#: ../hacks/config/coral.xml.h:12 ../hacks/config/glcells.xml.h:29
#: ../hacks/config/squiral.xml.h:6
msgid "Seeds"
-msgstr "Зерна"
+msgstr "Зёрна"
#: ../hacks/config/coral.xml.h:15
msgid ""
-"Simulates coral growth, albeit somewhat slowly. Written by Frederick Roeber; "
-"1997."
-msgstr ""
+"Simulates coral growth, albeit somewhat slowly. Written by Frederick Roeber;"
+" 1997."
+msgstr "Имитация роста кораллов, хотя немного и медленно. Автор Фредерик Роебер; 1997 год."
#: ../hacks/config/crackberg.xml.h:1
msgid "Crackberg"
-msgstr ""
+msgstr "Блуждание"
#: ../hacks/config/crackberg.xml.h:5
msgid "Mouse hole"
@@ -3362,7 +3266,7 @@ msgstr "Орлиное гнездо"
#: ../hacks/config/crackberg.xml.h:9
msgid "Subdivisions"
-msgstr "Разделения"
+msgstr "Подразделения"
#: ../hacks/config/crackberg.xml.h:10
msgid "Hurt me"
@@ -3400,7 +3304,7 @@ msgstr "Окрашивание (земля)"
#: ../hacks/config/crackberg.xml.h:21
msgid "Icy coloration"
-msgstr "Окрашивание (лед)"
+msgstr "Окрашивание (лёд)"
#: ../hacks/config/crackberg.xml.h:22
msgid "Swampy coloration"
@@ -3412,14 +3316,14 @@ msgstr "Окрашивание (извержение)"
#: ../hacks/config/crackberg.xml.h:24
msgid ""
-"Flies through height maps, optionally animating the creation and destruction "
-"of generated tiles; tiles `grow' into place. Written by Matus Telgarsky; "
+"Flies through height maps, optionally animating the creation and destruction"
+" of generated tiles; tiles `grow' into place. Written by Matus Telgarsky; "
"2005."
-msgstr ""
+msgstr "Пролетая через карты высот, при необходимости можно анимировать создание и уничтожение плиток; плитки могут `расти'. Автор: Матус Телгарский; 2005."
#: ../hacks/config/critical.xml.h:1
msgid "Critical"
-msgstr ""
+msgstr "Критический"
#: ../hacks/config/critical.xml.h:9
msgid ""
@@ -3427,11 +3331,27 @@ msgid ""
"version 5.08. Draws a system of self-organizing lines. It starts out as "
"random squiggles, but after a few iterations, order begins to appear. "
"Written by Martin Pool; 1999."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Рисует систему самоорганизующихся линий. Она начинается как случайные закорючки, но после нескольких итераций, начинает появляться порядок. Автор Мартин Пул; 1999."
+
+#: ../hacks/config/crumbler.xml.h:1
+msgid "Crumbler"
+msgstr "Крошитель"
+
+#: ../hacks/config/crumbler.xml.h:11
+msgid "Fractures"
+msgstr "Переломы"
+
+#: ../hacks/config/crumbler.xml.h:16
+msgid ""
+"Randomly subdivides a ball into voronoi chunks, then further subdivides one "
+"of the remaining pieces. https://en.wikipedia.org/wiki/Voronoi_diagram "
+"https://en.wikipedia.org/wiki/Convex_hull "
+"https://en.wikipedia.org/wiki/Quickhull Written by Jamie Zawinski; 2018."
+msgstr "Случайно разделяет шар на куски Вороного, затем дополнительно делит одну из оставшихся фигур. https://en.wikipedia.org/wiki/Voronoi_diagram https://en.wikipedia.org/wiki/Convex_hull https://en.wikipedia.org/wiki/Quickhull Автор: Джейми Завински; 2018."
#: ../hacks/config/crystal.xml.h:1
msgid "Crystal"
-msgstr ""
+msgstr "Кристалл"
#. #### -shift (color cycling)
#: ../hacks/config/crystal.xml.h:9
@@ -3461,13 +3381,13 @@ msgstr "В центре экрана"
#: ../hacks/config/crystal.xml.h:16
msgid ""
"Moving polygons, similar to a kaleidoscope. See also the \"Kaleidescope\" "
-"and \"GLeidescope\" screen savers. https://en.wikipedia.org/wiki/"
-"Kaleidoscope Written by Jouk Jansen; 1998."
-msgstr ""
+"and \"GLeidescope\" screen savers. "
+"https://en.wikipedia.org/wiki/Kaleidoscope Written by Jouk Jansen; 1998."
+msgstr "Перемещаемые многоугольники, похожие на калейдоскоп. Смотрите также хранители экрана \"Калейдоскоп\" и \"GL-лейдоскоп\". https://en.wikipedia.org/wiki/Kaleidoscope Автор Жук Янсен; 1998."
#: ../hacks/config/cube21.xml.h:1
msgid "Cube21"
-msgstr ""
+msgstr "Кубик21"
#: ../hacks/config/cube21.xml.h:6 ../hacks/config/rubikblocks.xml.h:6
msgid "Cube size"
@@ -3514,102 +3434,110 @@ msgstr "Контуры"
#: ../hacks/config/cube21.xml.h:28
#, no-c-format
msgid ""
-"The \"Cube 21\" Rubik-like puzzle, also known as \"Square-1\". The rotations "
-"are chosen randomly. See also the \"Rubik\", \"RubikBlocks\" and \"GLSnake\" "
-"screen savers. https://en.wikipedia.org/wiki/Square_One_%28puzzle%29 Written "
-"by Vasek Potocek; 2005."
-msgstr ""
+"The \"Cube 21\" Rubik-like puzzle, also known as \"Square-1\". The rotations"
+" are chosen randomly. See also the \"Rubik\", \"RubikBlocks\" and "
+"\"GLSnake\" screen savers. "
+"https://en.wikipedia.org/wiki/Square_One_%28puzzle%29 Written by Vasek "
+"Potocek; 2005."
+msgstr "\"Куб 21\" Рубик-подобная головоломка, также известная как \"Квадрат-1\". Повороты выбираются случайным образом. Смотрите также хранители экрана \"Рубик\", \"Блоки Рубика\" и \"GL-змейка\". https://en.wikipedia.org/wiki/Square_One_%28puzzle%29 Автор Васек Поточек; 2005 год."
#: ../hacks/config/cubenetic.xml.h:1
msgid "Cubenetic"
-msgstr ""
+msgstr "Кубизм"
#: ../hacks/config/cubenetic.xml.h:9 ../hacks/config/glblur.xml.h:9
#: ../hacks/config/glknots.xml.h:8 ../hacks/config/gltext.xml.h:10
-#: ../hacks/config/kaleidocycle.xml.h:11 ../hacks/config/menger.xml.h:11
-#: ../hacks/config/molecule.xml.h:17 ../hacks/config/spheremonics.xml.h:10
-#: ../hacks/config/splitflap.xml.h:15
+#: ../hacks/config/handsy.xml.h:12 ../hacks/config/kaleidocycle.xml.h:11
+#: ../hacks/config/menger.xml.h:11 ../hacks/config/molecule.xml.h:17
+#: ../hacks/config/spheremonics.xml.h:10 ../hacks/config/splitflap.xml.h:15
msgid "Don't rotate"
msgstr "Не вращать"
#: ../hacks/config/cubenetic.xml.h:10 ../hacks/config/glblur.xml.h:10
#: ../hacks/config/glknots.xml.h:9 ../hacks/config/gltext.xml.h:11
-#: ../hacks/config/kaleidocycle.xml.h:12 ../hacks/config/lavalite.xml.h:23
-#: ../hacks/config/menger.xml.h:12 ../hacks/config/molecule.xml.h:18
-#: ../hacks/config/spheremonics.xml.h:11 ../hacks/config/splitflap.xml.h:16
+#: ../hacks/config/handsy.xml.h:13 ../hacks/config/kaleidocycle.xml.h:12
+#: ../hacks/config/lavalite.xml.h:23 ../hacks/config/menger.xml.h:12
+#: ../hacks/config/molecule.xml.h:18 ../hacks/config/spheremonics.xml.h:11
+#: ../hacks/config/splitflap.xml.h:16
msgid "Rotate around X axis"
msgstr "Вращать вокруг оси X"
#: ../hacks/config/cubenetic.xml.h:11 ../hacks/config/glblur.xml.h:11
#: ../hacks/config/glknots.xml.h:10 ../hacks/config/gltext.xml.h:12
-#: ../hacks/config/kaleidocycle.xml.h:13 ../hacks/config/lavalite.xml.h:24
-#: ../hacks/config/menger.xml.h:13 ../hacks/config/molecule.xml.h:19
-#: ../hacks/config/spheremonics.xml.h:12 ../hacks/config/splitflap.xml.h:17
+#: ../hacks/config/handsy.xml.h:14 ../hacks/config/kaleidocycle.xml.h:13
+#: ../hacks/config/lavalite.xml.h:24 ../hacks/config/menger.xml.h:13
+#: ../hacks/config/molecule.xml.h:19 ../hacks/config/spheremonics.xml.h:12
+#: ../hacks/config/splitflap.xml.h:17
msgid "Rotate around Y axis"
msgstr "Вращать вокруг оси Y"
#: ../hacks/config/cubenetic.xml.h:12 ../hacks/config/glblur.xml.h:12
#: ../hacks/config/glknots.xml.h:11 ../hacks/config/gltext.xml.h:13
-#: ../hacks/config/kaleidocycle.xml.h:14 ../hacks/config/lavalite.xml.h:25
-#: ../hacks/config/menger.xml.h:14 ../hacks/config/molecule.xml.h:20
-#: ../hacks/config/spheremonics.xml.h:13 ../hacks/config/splitflap.xml.h:18
+#: ../hacks/config/handsy.xml.h:15 ../hacks/config/kaleidocycle.xml.h:14
+#: ../hacks/config/lavalite.xml.h:25 ../hacks/config/menger.xml.h:14
+#: ../hacks/config/molecule.xml.h:20 ../hacks/config/spheremonics.xml.h:13
+#: ../hacks/config/splitflap.xml.h:18
msgid "Rotate around Z axis"
msgstr "Вращать вокруг оси Z"
#: ../hacks/config/cubenetic.xml.h:13 ../hacks/config/glblur.xml.h:13
#: ../hacks/config/glknots.xml.h:12 ../hacks/config/gltext.xml.h:14
-#: ../hacks/config/kaleidocycle.xml.h:15 ../hacks/config/lavalite.xml.h:26
-#: ../hacks/config/menger.xml.h:15 ../hacks/config/molecule.xml.h:21
-#: ../hacks/config/spheremonics.xml.h:14 ../hacks/config/splitflap.xml.h:19
+#: ../hacks/config/handsy.xml.h:16 ../hacks/config/kaleidocycle.xml.h:15
+#: ../hacks/config/lavalite.xml.h:26 ../hacks/config/menger.xml.h:15
+#: ../hacks/config/molecule.xml.h:21 ../hacks/config/spheremonics.xml.h:14
+#: ../hacks/config/splitflap.xml.h:19
msgid "Rotate around X and Y axes"
msgstr "Вращать вокруг осей X и Y"
#: ../hacks/config/cubenetic.xml.h:14 ../hacks/config/glblur.xml.h:14
#: ../hacks/config/glknots.xml.h:13 ../hacks/config/gltext.xml.h:15
-#: ../hacks/config/kaleidocycle.xml.h:16 ../hacks/config/lavalite.xml.h:27
-#: ../hacks/config/menger.xml.h:16 ../hacks/config/molecule.xml.h:22
-#: ../hacks/config/spheremonics.xml.h:15 ../hacks/config/splitflap.xml.h:20
+#: ../hacks/config/handsy.xml.h:17 ../hacks/config/kaleidocycle.xml.h:16
+#: ../hacks/config/lavalite.xml.h:27 ../hacks/config/menger.xml.h:16
+#: ../hacks/config/molecule.xml.h:22 ../hacks/config/spheremonics.xml.h:15
+#: ../hacks/config/splitflap.xml.h:20
msgid "Rotate around X and Z axes"
msgstr "Вращать вокруг осей X и Z"
#: ../hacks/config/cubenetic.xml.h:15 ../hacks/config/glblur.xml.h:15
#: ../hacks/config/glknots.xml.h:14 ../hacks/config/gltext.xml.h:16
-#: ../hacks/config/kaleidocycle.xml.h:17 ../hacks/config/lavalite.xml.h:28
-#: ../hacks/config/menger.xml.h:17 ../hacks/config/molecule.xml.h:23
-#: ../hacks/config/spheremonics.xml.h:16 ../hacks/config/splitflap.xml.h:21
+#: ../hacks/config/handsy.xml.h:18 ../hacks/config/kaleidocycle.xml.h:17
+#: ../hacks/config/lavalite.xml.h:28 ../hacks/config/menger.xml.h:17
+#: ../hacks/config/molecule.xml.h:23 ../hacks/config/spheremonics.xml.h:16
+#: ../hacks/config/splitflap.xml.h:21
msgid "Rotate around Y and Z axes"
msgstr "Вращать вокруг осей Y и Z"
#: ../hacks/config/cubenetic.xml.h:16 ../hacks/config/glblur.xml.h:16
#: ../hacks/config/glknots.xml.h:15 ../hacks/config/gltext.xml.h:17
-#: ../hacks/config/kaleidocycle.xml.h:18 ../hacks/config/lavalite.xml.h:29
-#: ../hacks/config/menger.xml.h:18 ../hacks/config/molecule.xml.h:24
-#: ../hacks/config/spheremonics.xml.h:17 ../hacks/config/splitflap.xml.h:22
+#: ../hacks/config/handsy.xml.h:19 ../hacks/config/kaleidocycle.xml.h:18
+#: ../hacks/config/lavalite.xml.h:29 ../hacks/config/menger.xml.h:18
+#: ../hacks/config/molecule.xml.h:24 ../hacks/config/spheremonics.xml.h:17
+#: ../hacks/config/splitflap.xml.h:22
msgid "Rotate around all three axes"
-msgstr "Вращать вокруг всех трех осей"
+msgstr "Вращать вокруг всех трёх осей"
#: ../hacks/config/cubenetic.xml.h:18
msgid "Surface pattern speed"
-msgstr "Скорость паттерна поверхности"
+msgstr "Скорость узора поверхности"
#: ../hacks/config/cubenetic.xml.h:21
msgid "Surface pattern overlap"
-msgstr "Разброс паттерна поверхности"
+msgstr "Разброс узора поверхности"
#: ../hacks/config/cubenetic.xml.h:23
msgid "Surface pattern complexity"
-msgstr "Сложность паттерна поверхности"
+msgstr "Сложность узора поверхности"
#: ../hacks/config/cubenetic.xml.h:27
msgid ""
"A cubist Lavalite, sort of. A pulsating set of overlapping boxes with ever-"
"changing blobby patterns undulating across their surfaces. Written by Jamie "
"Zawinski; 2002."
-msgstr ""
+msgstr "Кубистическая лавовая лампа. Пульсирующий набор коробок с постоянно меняющимися волнообразными узорами сгустков по их поверхностям. Автор Джейми Завински; 2002 год."
#: ../hacks/config/cubestack.xml.h:1
msgid "CubeStack"
-msgstr ""
+msgstr "Стопка кубиков"
#: ../hacks/config/cubestack.xml.h:11 ../hacks/config/hypertorus.xml.h:8
#: ../hacks/config/qix.xml.h:21 ../hacks/config/webcollage.xml.h:8
@@ -3618,7 +3546,7 @@ msgstr "Прозрачный"
#: ../hacks/config/cubestack.xml.h:12
msgid "Opacity"
-msgstr "ПРозрачность"
+msgstr "Прозрачность"
#: ../hacks/config/cubestack.xml.h:13 ../hacks/config/mirrorblob.xml.h:19
#: ../hacks/config/webcollage.xml.h:10
@@ -3627,31 +3555,36 @@ msgstr "Непрозрачный"
#: ../hacks/config/cubestack.xml.h:17
msgid ""
-"An endless stack of unfolding, translucent cubes. Written by Jamie Zawinski; "
-"2016."
-msgstr ""
+"An endless stack of unfolding, translucent cubes. Written by Jamie Zawinski;"
+" 2016."
+msgstr "Бесконечная стопка разворачивающихся полупрозрачных кубиков. Автор Джейми Завински; 2016."
#: ../hacks/config/cubestorm.xml.h:1
msgid "CubeStorm"
-msgstr ""
+msgstr "Кубический вихрь"
#: ../hacks/config/cubestorm.xml.h:9
msgid "Cubes"
msgstr "Кубы"
-#: ../hacks/config/cubestorm.xml.h:12
+#: ../hacks/config/cubestorm.xml.h:12 ../hacks/config/rotor.xml.h:6
+#: ../hacks/config/skytentacles.xml.h:6 ../hacks/config/wander.xml.h:9
+msgid "Length"
+msgstr "Длина"
+
+#: ../hacks/config/cubestorm.xml.h:15
msgid "Struts"
-msgstr "Распорки"
+msgstr "Стойки"
-#: ../hacks/config/cubestorm.xml.h:18
+#: ../hacks/config/cubestorm.xml.h:21
msgid ""
-"Boxes change shape and intersect each other, filling space. Written by Jamie "
-"Zawinski; 2003."
-msgstr ""
+"Boxes change shape and intersect each other, filling space. Written by Jamie"
+" Zawinski; 2003."
+msgstr "Коробки, изменяя форму, пересекаются друг с другом, заполняя пространство. Автор Джейми Завински; 2003."
#: ../hacks/config/cubetwist.xml.h:1
msgid "CubeTwist"
-msgstr ""
+msgstr "Вложенные кубики"
#: ../hacks/config/cubetwist.xml.h:11 ../hacks/config/glsnake.xml.h:8
msgid "Tight"
@@ -3669,11 +3602,11 @@ msgstr "Широкое"
msgid ""
"A series of nested cubes rotate and slide recursively. Written by Jamie "
"Zawinski; 2016."
-msgstr ""
+msgstr "Серия вложенных кубиков вращается и скользит рекурсивно. Автор Джейми Завински; 2016."
#: ../hacks/config/cubicgrid.xml.h:1
msgid "CubicGrid"
-msgstr ""
+msgstr "Кубическая сеть"
#: ../hacks/config/cubicgrid.xml.h:8
msgid "Close"
@@ -3689,11 +3622,11 @@ msgstr "Большие точки"
#: ../hacks/config/cubicgrid.xml.h:13
msgid "A rotating lattice of colored points. Written by Vasek Potocek; 2007."
-msgstr ""
+msgstr "Вращающаяся решетка цветных точек. Автор Васек Поточек; 2007 год."
#: ../hacks/config/cwaves.xml.h:1
msgid "CWaves"
-msgstr ""
+msgstr "С-волны"
#: ../hacks/config/cwaves.xml.h:5 ../hacks/config/flame.xml.h:11
#: ../hacks/config/jigglypuff.xml.h:21 ../hacks/config/tessellimage.xml.h:12
@@ -3702,7 +3635,7 @@ msgstr "Сложность"
#: ../hacks/config/cwaves.xml.h:6
msgid "Rough"
-msgstr "Жесткий"
+msgstr "Жёсткий"
#: ../hacks/config/cwaves.xml.h:7
msgid "Color transitions"
@@ -3718,21 +3651,21 @@ msgstr "Мягкий"
msgid ""
"A field of sinusoidal colors languidly scrolls. It's relaxing. Written by "
"Jamie Zawinski; 2007."
-msgstr ""
+msgstr "Поле синусоидальных цветов вяло прокручивается. Это расслабляет. Автор Джейми Завински; 2007."
#: ../hacks/config/cynosure.xml.h:1
msgid "Cynosure"
-msgstr ""
+msgstr "Центр внимания"
#: ../hacks/config/cynosure.xml.h:12
msgid ""
"Random dropshadowed rectangles pop onto the screen in lockstep. Written by "
"Ozymandias G. Desiderata, Jamie Zawinski, and Stephen Linhart; 1998."
-msgstr ""
+msgstr "Случайное падение тени прямоугольниками на экран. Автор: Озимандиас Г. Десидеката, Джейми Завински, и Стивен Линхартом; 1998."
#: ../hacks/config/dangerball.xml.h:1
msgid "DangerBall"
-msgstr ""
+msgstr "Опасный шар"
#: ../hacks/config/dangerball.xml.h:6
msgid "Spike growth"
@@ -3748,11 +3681,11 @@ msgstr "Ой!"
#: ../hacks/config/dangerball.xml.h:15
msgid "A spiky ball. Ouch! Written by Jamie Zawinski; 2001."
-msgstr ""
+msgstr "Колючий мяч. Ой! Автор Джейми Завински; 2001 год."
#: ../hacks/config/decayscreen.xml.h:1
msgid "DecayScreen"
-msgstr ""
+msgstr "Разрушение экрана"
#: ../hacks/config/decayscreen.xml.h:8
msgid "Random melt style"
@@ -3812,18 +3745,18 @@ msgstr "Равномерное растворение"
#: ../hacks/config/decayscreen.xml.h:22
msgid "Fuzzy melt"
-msgstr "Медленное растворение"
+msgstr "Нечёткое растворение"
#: ../hacks/config/decayscreen.xml.h:24
msgid ""
"Melts an image in various ways. Warning, if the effect continues after the "
"screen saver is off, seek medical attention. Written by David Wald, Vivek "
"Khera, Jamie Zawinski, and Vince Levey; 1993."
-msgstr ""
+msgstr "Плавление различными методами. Предупреждение, если эффект продолжается и после выключения заставки, обратитесь к врачу. Автор Дэвид Уолд, Вивек Кхера, Джейми Завински, и Винс Леви; 1993 год."
#: ../hacks/config/deco.xml.h:1
msgid "Deco"
-msgstr ""
+msgstr "Деку"
#: ../hacks/config/deco.xml.h:8
msgid "Minimum width"
@@ -3854,11 +3787,11 @@ msgid ""
"Subdivides and colors rectangles randomly, for a Mondrian-esque effect. "
"https://en.wikipedia.org/wiki/Piet_Mondrian#Paris_1919.E2.80.931938 Written "
"by Jamie Zawinski and Michael Bayne; 1997."
-msgstr ""
+msgstr "Разделяет цвета прямоугольников случайным образом, для Мондриана-подобного эффекта. https://en.wikipedia.org/wiki/Piet_Mondrian#Paris_1919.E2.80.931938 Автор Джейми Завински и Майкл Бейн; 1997."
#: ../hacks/config/deluxe.xml.h:1
msgid "Deluxe"
-msgstr ""
+msgstr "Роскошный"
#: ../hacks/config/deluxe.xml.h:9
msgid "Shapes"
@@ -3871,17 +3804,17 @@ msgstr "Прозрачность"
#: ../hacks/config/deluxe.xml.h:17
msgid "Pulsing stars, circles, and lines. Written by Jamie Zawinski; 1999."
-msgstr ""
+msgstr "Пульсирующие звёзды, круги и линии. Автор Джейми Завински; 1999 год."
#: ../hacks/config/demon.xml.h:1
msgid "Demon"
-msgstr ""
+msgstr "Демон"
#: ../hacks/config/demon.xml.h:5 ../hacks/config/gears.xml.h:8
#: ../hacks/config/glhanoi.xml.h:5 ../hacks/config/interference.xml.h:18
#: ../hacks/config/voronoi.xml.h:8
msgid "0"
-msgstr ""
+msgstr "0"
#: ../hacks/config/demon.xml.h:6
msgid "States"
@@ -3891,31 +3824,32 @@ msgstr "Состояния"
#, no-c-format
msgid ""
"A cellular automaton that starts with a random field, and organizes it into "
-"stripes and spirals. https://en.wikipedia.org/wiki/Maxwell%27s_demon Written "
-"by David Bagley; 1999."
-msgstr ""
+"stripes and spirals. https://en.wikipedia.org/wiki/Maxwell%27s_demon Written"
+" by David Bagley; 1999."
+msgstr "Клеточный автомат, который начинается случайным полем, и делит его на полосы и спирали. https://en.wikipedia.org/wiki/Maxwell%27s_demon Автор Дэвид Бэгли; 1999 год."
#: ../hacks/config/discoball.xml.h:1
msgid "Discoball"
-msgstr ""
+msgstr "Диско-шар"
#: ../hacks/config/discoball.xml.h:15
-msgid "A dusty, dented disco ball. Woop woop. Written by Jamie Zawinski; 2016."
-msgstr ""
+msgid ""
+"A dusty, dented disco ball. Woop woop. Written by Jamie Zawinski; 2016."
+msgstr "Пыльный, помятый диско-шар. Вууп-вууп. Автор Джейми Завински; 2016."
#: ../hacks/config/discrete.xml.h:1
msgid "Discrete"
-msgstr ""
+msgstr "Дискретный"
#: ../hacks/config/discrete.xml.h:12
msgid ""
"Discrete map fractal systems, including variants of Hopalong, Julia, and "
"others. Written by Tim Auckland; 1998."
-msgstr ""
+msgstr "Дискретная карта фрактальных систем, в том числе вариантов Хопалонг и других. Автор Тим Окленд; 1998."
#: ../hacks/config/distort.xml.h:1
msgid "Distort"
-msgstr ""
+msgstr "Искажение"
#. #### -slow
#: ../hacks/config/distort.xml.h:11
@@ -3940,11 +3874,11 @@ msgstr "Отражение"
#: ../hacks/config/distort.xml.h:19
msgid "Magnify"
-msgstr "Увеличение"
+msgstr "Лупа"
#: ../hacks/config/distort.xml.h:20
msgid "Black hole"
-msgstr "Черная дыра"
+msgstr "Чёрная дыра"
#: ../hacks/config/distort.xml.h:21
msgid "Vortex"
@@ -3954,76 +3888,95 @@ msgstr "Вихрь"
msgid ""
"Wandering lenses distort the screen image in various ways. Written by Jonas "
"Munsin; 1998."
-msgstr ""
+msgstr "Блуждающие линзы искажают изображение на экране разными способами. Автор Джонас Мунсин; 1998 год."
#: ../hacks/config/dnalogo.xml.h:1
msgid "DNA Logo"
-msgstr ""
+msgstr "Логотип DNA"
#: ../hacks/config/dnalogo.xml.h:3
msgid "Frame Rate"
-msgstr ""
+msgstr "Частота кадров"
#: ../hacks/config/dnalogo.xml.h:5
msgid "DNA Lounge logo"
-msgstr ""
+msgstr "Логотип зала DNA"
#: ../hacks/config/dnalogo.xml.h:6
msgid "DNA Pizza logo"
-msgstr ""
+msgstr "Логотип пиццы DNA"
#: ../hacks/config/dnalogo.xml.h:7
msgid "DNA Lounge and DNA Pizza logos"
-msgstr ""
-
-#: ../hacks/config/dnalogo.xml.h:8
-msgid "Codeword logo"
-msgstr ""
+msgstr "Логотипы зала и пиццы DNA"
-#: ../hacks/config/dnalogo.xml.h:11
+#: ../hacks/config/dnalogo.xml.h:10
msgid ""
-"DNA Lounge Restaurant -- Bar -- Nightclub -- Cafe -- Est. 1985. 375 Eleventh "
-"Street San Francisco, CA 94103 Codeword Restaurant -- Bar -- Nightclub -- "
-"Cafe -- Est. 2015. 917 Folsom Street San Francisco, CA 94107 https://www."
-"dnalounge.com/ http://www.dnapizza.com/ https://www.codeword-sf.com/ Written "
-"by Jamie Zawinski; 2001."
-msgstr ""
+"DNA Lounge Restaurant -- Bar -- Nightclub -- Cafe -- Est. 1985. 375 Eleventh"
+" Street San Francisco, CA 94103 Codeword Restaurant -- Bar -- Nightclub -- "
+"Cafe -- Est. 2015. 917 Folsom Street San Francisco, CA 94107 "
+"https://www.dnalounge.com/ http://www.dnapizza.com/ https://www.codeword-"
+"sf.com/ Written by Jamie Zawinski; 2001."
+msgstr "DNA Зал Ресторан - Бар - Ночной клуб - Кафе - Восток.1985. Сан-Франциско, Калифорния, Одиннадцатая улица, 375, 94103; Кодовый ресторан -- Бар -- Ночной клуб -- Кафе -- Восток.2015. Сан-Франциско, Калифорния, улица Фолса, 917, 94107 https://www.dnalounge.com/ http://www.dnapizza.com/ https://www.codeword-sf.com/ Автор Джейми Завински; 2001 год."
#: ../hacks/config/drift.xml.h:1
msgid "Drift"
-msgstr ""
+msgstr "Дрейф"
#: ../hacks/config/drift.xml.h:12
msgid ""
"Drifting recursive fractal cosmic flames. Written by Scott Draves; 1997."
-msgstr ""
+msgstr "Дрейфование рекурсивного фрактального космического пламени. Автор Скотт Дрейвес; 1997."
#: ../hacks/config/dymaxionmap.xml.h:1
msgid "DymaxionMap"
-msgstr ""
+msgstr "Карта Димаксиона"
+
+#: ../hacks/config/dymaxionmap.xml.h:8
+msgid "Flat map"
+msgstr "Плоская карта"
-#. #### -no-texture
#: ../hacks/config/dymaxionmap.xml.h:9
-msgid "Image file"
-msgstr "Файл изображения"
+msgid "Satellite map"
+msgstr "Спутниковая карта"
+
+#: ../hacks/config/dymaxionmap.xml.h:10
+msgid "Day / night smoothness"
+msgstr "Гладкость дня / ночи"
-#: ../hacks/config/dymaxionmap.xml.h:11 ../hacks/config/glplanet.xml.h:10
+#: ../hacks/config/dymaxionmap.xml.h:12
+msgid "Lat / Long"
+msgstr "Широта / долгота"
+
+#: ../hacks/config/dymaxionmap.xml.h:14 ../hacks/config/glplanet.xml.h:10
#: ../hacks/config/moebiusgears.xml.h:12
msgid "Roll"
-msgstr "Поворачивать"
+msgstr "Катиться"
-#: ../hacks/config/dymaxionmap.xml.h:15
+#: ../hacks/config/dymaxionmap.xml.h:18
+#, no-c-format
msgid ""
"Buckminster Fuller's map of the Earth projected onto the surface of an "
"unfolded icosahedron. It depicts the Earth's continents as one island, or "
-"nearly contiguous land masses. https://en.wikipedia.org/wiki/Dymaxion_map "
-"https://en.wikipedia.org/wiki/Buckminster_Fuller Written by Jamie Zawinski; "
-"2016."
-msgstr ""
+"nearly contiguous land masses. This screen saver animates the progression of"
+" the dusk terminator across the flattened globe. It includes both satellite "
+"and flat-colored map imagery, and can load and convert other "
+"Equirectangular-projected maps. \"Dymaxion Map\" and \"The Fuller Projection"
+" Map\" are trademarks of The Buckminster Fuller Institute. The original "
+"Dymaxion Map image is copyright 1982 by The Buckminster Fuller Institute. "
+"(This program does not use their imagery, only similar trigonometry.) The "
+"Dymaxion Map was covered by now-expired US Patent 2,393,676 (Richard "
+"Buckminster Fuller, 1946). https://en.wikipedia.org/wiki/Dymaxion_map "
+"https://en.wikipedia.org/wiki/Buckminster_Fuller "
+"https://en.wikipedia.org/wiki/List_of_map_projections "
+"https://en.wikipedia.org/wiki/Cahill%E2%80%93Keyes_projection "
+"https://en.wikipedia.org/wiki/Waterman_butterfly_projection Written by Jamie"
+" Zawinski; 2016."
+msgstr "Карта Земли Бакминстера Фуллера проецируется на поверхность развёрнутого икосаэдра. На нём изображены континенты Земли как один остров или почти смежные массивы суши. Эта заставка анимирует продвижение сумеречного терминатора по сплющенному земному шару. Она включает в себя как спутниковые, так и плоские изображения карт, и может загружать и преобразовывать другие карты с прямой проекцией. «Карта Димаксиона» и «Карта проекции Фуллера» являются товарными знаками Института Бакминстера Фуллера. Оригинальное изображение Карты Димаксиона является собственностью Института Бакминстера Фуллера, 1982 год. (Эта программа не использует их изображения, только похожую тригонометрию.) Карта Димаксиона была защищена патентом США №2393676, срок действия которого истёк (Ричард Бакминстер Фуллер, 1946). https://en.wikipedia.org/wiki/Dymaxion_map https://en.wikipedia.org/wiki/Buckminster_Fuller https://en.wikipedia.org/wiki/List_of_map_projections https://en.wikipedia.org/wiki/Cahill%E2%80%93Keyes_projection https://en.wikipedia.org/wiki/Waterman_butterfly_projection Автор Джейми Завински; 2016."
#: ../hacks/config/endgame.xml.h:1
msgid "Endgame"
-msgstr ""
+msgstr "Эндшпиль"
#: ../hacks/config/endgame.xml.h:5
msgid "Low resolution chess pieces"
@@ -4032,24 +3985,24 @@ msgstr "Шахматные фигуры в низком разрешении"
#: ../hacks/config/endgame.xml.h:7
msgid ""
"Black slips out of three mating nets, but the fourth one holds him tight! A "
-"brilliant composition! See also the \"Queens\" screen saver. https://en."
-"wikipedia.org/wiki/Chess_endgame Written by Blair Tennessy and Jamie "
-"Zawinski; 2002."
-msgstr ""
+"brilliant composition! See also the \"Queens\" screen saver. "
+"https://en.wikipedia.org/wiki/Chess_endgame Written by Blair Tennessy and "
+"Jamie Zawinski; 2002."
+msgstr "Чёрный король выскальзывает из трёх сопряжённых сетей, но четвёртая держит его крепко! Блестящая комбинация! Смотрите также хранитель экрана \"Ферзи\". https://en.wikipedia.org/wiki/Chess_endgame Автор Блэр Теннесси и Джейми Завински; 2002."
#: ../hacks/config/energystream.xml.h:1
msgid "EnergyStream"
-msgstr ""
+msgstr "Энергетический поток"
#: ../hacks/config/energystream.xml.h:8
msgid ""
"A flow of particles which form an energy stream. Written by Eugene "
"Sandulenko and Konrad \"Yoghurt\" Zagorowicz; 2016."
-msgstr ""
+msgstr "Поток частиц, которые образуют поток энергии. Автор Евгений Сандуленко и Конрад \"Йогурт\" Загорович; 2016."
#: ../hacks/config/engine.xml.h:1
msgid "Engine"
-msgstr ""
+msgstr "Двигатель"
#: ../hacks/config/engine.xml.h:5
msgid "Random engine"
@@ -4057,11 +4010,11 @@ msgstr "Случайный двигатель"
#: ../hacks/config/engine.xml.h:6
msgid "Honda Insight (3 cylinders)"
-msgstr "Honda Insight (3 цилиндра)"
+msgstr "Honda Insight/Хонда Инсайт (3 цилиндра)"
#: ../hacks/config/engine.xml.h:7
msgid "BMW M3 (4 cylinders)"
-msgstr "BMW M3 (4 цилиндра)"
+msgstr "BMW/БМВ M3 (4 цилиндра)"
#: ../hacks/config/engine.xml.h:8
msgid "VW Beetle (4 cylinders, flat)"
@@ -4069,11 +4022,11 @@ msgstr "VW Beetle (4 цилиндра, расположенных горизон
#: ../hacks/config/engine.xml.h:9
msgid "Audi Quattro (5 cylinders)"
-msgstr "Audi Quattro (5 цилиндров)"
+msgstr "Audi Quattro/Ауди Кватро (5 цилиндров)"
#: ../hacks/config/engine.xml.h:10
msgid "BMW M5 (6 cylinders)"
-msgstr "BMW M5 (6 цилиндров)"
+msgstr "BMW/БМВ M5 (6 цилиндров)"
#: ../hacks/config/engine.xml.h:11
msgid "Subaru XT (6 cylinders, V)"
@@ -4101,14 +4054,14 @@ msgstr "Показывать название двигателя"
#: ../hacks/config/engine.xml.h:20
msgid ""
-"Internal combusion engines. https://en.wikipedia.org/wiki/"
-"Internal_combustion_engine#Operation Written by Ben Buxton, Ed Beroset and "
-"Jamie Zawinski; 2001."
-msgstr ""
+"Internal combusion engines. "
+"https://en.wikipedia.org/wiki/Internal_combustion_engine#Operation Written "
+"by Ben Buxton, Ed Beroset and Jamie Zawinski; 2001."
+msgstr "Двигатели внутреннего сгорания. https://en.wikipedia.org/wiki/Internal_combustion_engine#Operation Автор Бен Бакстон, Эд Беросет и Джейми Завински; 2001 год."
#: ../hacks/config/epicycle.xml.h:1
msgid "Epicycle"
-msgstr ""
+msgstr "Эпицикл"
#: ../hacks/config/epicycle.xml.h:12
msgid "Harmonics"
@@ -4116,15 +4069,16 @@ msgstr "Гармоники"
#: ../hacks/config/epicycle.xml.h:15
msgid ""
-"A pre-heliocentric model of planetary motion. This draws the path traced out "
-"by a point on the edge of a circle. That circle rotates around a point on "
-"the rim of another circle, and so on, several times. https://en.wikipedia."
-"org/wiki/Deferent_and_epicycle Written by James Youngman; 1998."
-msgstr ""
+"A pre-heliocentric model of planetary motion. This draws the path traced out"
+" by a point on the edge of a circle. That circle rotates around a point on "
+"the rim of another circle, and so on, several times. "
+"https://en.wikipedia.org/wiki/Deferent_and_epicycle Written by James "
+"Youngman; 1998."
+msgstr "Гелиоцентрическая модель движения планет. Показывает путь, проходимый точкой по краю круга. Этот круг вращается вокруг точки на ободе другого круга, и так далее, несколько раз. https://en.wikipedia.org/wiki/Deferent_and_epicycle Автор Джеймс Янгмэн; 1998."
#: ../hacks/config/eruption.xml.h:1
msgid "Eruption"
-msgstr ""
+msgstr "Извержение"
#: ../hacks/config/eruption.xml.h:8
msgid "Little"
@@ -4132,7 +4086,7 @@ msgstr "Мало"
#: ../hacks/config/eruption.xml.h:11
msgid "Cooling factor"
-msgstr "Фактор охлаждения"
+msgstr "Коэффициент охлаждения"
#: ../hacks/config/eruption.xml.h:13
msgid "Pleasant"
@@ -4164,11 +4118,26 @@ msgstr "Положительная"
msgid ""
"Exploding fireworks. See also the \"Fireworkx\", \"XFlame\" and \"Pyro\" "
"screen savers. Written by W.P. van Paassen; 2003."
-msgstr ""
+msgstr "Взрыв фейерверков. Смотрите также хранители экрана: \"Фейерверк\", \"Х-пламя\" и \"Пирозапал\". Автор В.П. ван Паассен; 2003 год."
+
+#: ../hacks/config/esper.xml.h:1
+msgid "Esper"
+msgstr "Эспер"
+
+#: ../hacks/config/esper.xml.h:10
+msgid ""
+"\"Enhance 224 to 176. Pull out track right. Center in pull back. Pull back. "
+"Wait a minute. Go right. Stop. Enhance 57 19. Track 45 left. Gimme a "
+"hardcopy right there.\" The Esper Machine was a voice-controlled forensic "
+"device used by LAPD in 2019, as documented in the 1982 film, Blade Runner. "
+"It was capable of enhancing photographs to an extreme degree, including "
+"reconstructing different viewpoints within the space from the reflections on"
+" various objects in the photograph. Written by Jamie Zawinski; 2017."
+msgstr "«Повысьте число от 224 до 176. Вытяните дорожку вправо. Сосредоточьтесь сзади. Потяните назад. Подождите минуту. Идите направо. Стоп. Повысьте 57 19. Проследуйте 45 влево. Машина Эспера представляла собой судебно-медицинское устройство с голосовым управлением, которое LAPD использовало в 2019 году, как это зафиксировано в фильме 1982 года «Бегущий по лезвию». Она была способна улучшить фотографии в экстремальной степени, в том числе реконструировать различные точки обзора в пространстве по отражениям от различных объектов на фотографии. Автор Джейми Завински; 2017."
#: ../hacks/config/euler2d.xml.h:1
msgid "Euler2D"
-msgstr ""
+msgstr "Эйлер 2D"
#: ../hacks/config/euler2d.xml.h:6 ../hacks/config/whirlwindwarp.xml.h:3
msgid "Particles"
@@ -4177,14 +4146,15 @@ msgstr "Частицы"
#: ../hacks/config/euler2d.xml.h:31
#, no-c-format
msgid ""
-"Simulates two dimensional incompressible inviscid fluid flow. https://en."
-"wikipedia.org/wiki/Euler_equations_%28fluid_dynamics%29 https://en.wikipedia."
-"org/wiki/Inviscid_flow Written by Stephen Montgomery-Smith; 2002."
-msgstr ""
+"Simulates two dimensional incompressible inviscid fluid flow. "
+"https://en.wikipedia.org/wiki/Euler_equations_%28fluid_dynamics%29 "
+"https://en.wikipedia.org/wiki/Inviscid_flow Written by Stephen Montgomery-"
+"Smith; 2002."
+msgstr "Имитируется двумерный несжимаемый поток невязкой жидкости. https://en.wikipedia.org/wiki/Euler_equations_%28fluid_dynamics%29 https://en.wikipedia.org/wiki/Inviscid_flow Автор Стивен Монтгомери-Смит; 2002 год."
#: ../hacks/config/extrusion.xml.h:1
msgid "Extrusion"
-msgstr ""
+msgstr "Экструзия"
#: ../hacks/config/extrusion.xml.h:5 ../hacks/config/morph3d.xml.h:5
#: ../hacks/config/polytopes.xml.h:5
@@ -4205,7 +4175,7 @@ msgstr "Спираль 4"
#: ../hacks/config/extrusion.xml.h:9
msgid "Join offset"
-msgstr "Смещение"
+msgstr "Смещение присоединения"
#: ../hacks/config/extrusion.xml.h:10
msgid "Screw"
@@ -4229,13 +4199,13 @@ msgstr "Использовать освещение"
#: ../hacks/config/extrusion.xml.h:18
msgid ""
-"Various extruded shapes twist and turn inside out. Written by Linas Vepstas, "
-"David Konerding, and Jamie Zawinski; 1999."
-msgstr ""
+"Various extruded shapes twist and turn inside out. Written by Linas Vepstas,"
+" David Konerding, and Jamie Zawinski; 1999."
+msgstr "Различные формы прессуются, закручиваются и выворачиваются наизнанку. Автор Линас Вепстас, Дэвид Конердинг и Джейми Завински; 1999 год."
#: ../hacks/config/fadeplot.xml.h:1
msgid "FadePlot"
-msgstr ""
+msgstr "Сюжет увядания"
#: ../hacks/config/fadeplot.xml.h:9 ../hacks/config/lcdscrub.xml.h:6
#: ../hacks/config/spiral.xml.h:8
@@ -4246,11 +4216,11 @@ msgstr "Циклы"
msgid ""
"A waving ribbon follows a sinusoidal path. Written by Bas van Gaalen and "
"Charles Vidal; 1997."
-msgstr ""
+msgstr "Развевающиеся ленты следуют синусоидальному пути. Автор: Бас ван Гаален и Чарльз Видал; 1997."
#: ../hacks/config/fiberlamp.xml.h:1
msgid "Fiberlamp"
-msgstr ""
+msgstr "Оптиковолоконная лампа"
#: ../hacks/config/fiberlamp.xml.h:6
msgid "Fibers"
@@ -4262,11 +4232,27 @@ msgstr "Время между ударами"
#: ../hacks/config/fiberlamp.xml.h:12
msgid "A fiber-optic lamp. Groovy. Written by Tim Auckland; 2005."
-msgstr ""
+msgstr "Оптиковолоконная лампа. Прикольная. Автор Тим Окленд; 2005 год."
+
+#: ../hacks/config/filmleader.xml.h:1
+msgid "FilmLeader"
+msgstr "Кинематографический лидер"
+
+#: ../hacks/config/filmleader.xml.h:6 ../hacks/config/pong.xml.h:6
+#: ../hacks/config/unknownpleasures.xml.h:13 ../hacks/config/vfeedback.xml.h:6
+msgid "Noise"
+msgstr "Шум"
+
+#: ../hacks/config/filmleader.xml.h:10
+msgid ""
+"Displays a looping countdown based on the SMPTE Universal Film leader on a "
+"simulation of an old analog television. "
+"https://en.wikipedia.org/wiki/Film_leader Written by Jamie Zawinski; 2018."
+msgstr "Отображает обратный отсчёт цикла на основе универсального кинематографического лидера SMPTE при моделировании старого аналогового телевидения. https://en.wikipedia.org/wiki/Film_leader Автор Джейми Завински; 2018."
#: ../hacks/config/fireworkx.xml.h:1
msgid "Fireworkx"
-msgstr ""
+msgstr "Фейерверк"
#: ../hacks/config/fireworkx.xml.h:6 ../hacks/config/lavalite.xml.h:6
msgid "Activity"
@@ -4284,15 +4270,15 @@ msgstr "Запускать фейерверки вверх"
msgid ""
"Exploding fireworks. See also the \"Eruption\", \"XFlame\" and \"Pyro\" "
"screen savers. Written by Rony B Chandran; 2004."
-msgstr ""
+msgstr "Взрыв фейерверков. Смотрите также хранители экрана \"Извержение\", \"Х-пламя\" и \"Пирозапал\". Автор Рони Б Чандран; 2004."
#: ../hacks/config/flag.xml.h:1
msgid "Flag"
-msgstr ""
+msgstr "Флаг"
#: ../hacks/config/flag.xml.h:2
msgid "Text for flag"
-msgstr ""
+msgstr "Текст для флага"
#: ../hacks/config/flag.xml.h:14
msgid ""
@@ -4301,11 +4287,11 @@ msgid ""
"around the screen. The flag can contain arbitrary text and images. By "
"default, it displays either the current system name and OS type, or a "
"picture of \"Bob\". Written by Charles Vidal and Jamie Zawinski; 1997."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Рисует развевающийся цветной флаг, который извивается вокруг экрана. Флаг может содержать произвольный текст и изображения. По умолчанию, он отображает либо текущее системное имя и тип ОС, либо изображение Боба. Автор Чарльз Видал и Джейми Завински; 1997."
#: ../hacks/config/flame.xml.h:1
msgid "Flame"
-msgstr ""
+msgstr "Пламя"
#: ../hacks/config/flame.xml.h:9
msgid "Number of fractals"
@@ -4313,11 +4299,11 @@ msgstr "Количество фракталов"
#: ../hacks/config/flame.xml.h:15
msgid "Iterative fractals. Written by Scott Draves; 1993."
-msgstr ""
+msgstr "Итерационные фракталы. Автор Скотт Дрейвес; 1993 год."
#: ../hacks/config/flipflop.xml.h:1
msgid "FlipFlop"
-msgstr ""
+msgstr "Резкий поворот"
#: ../hacks/config/flipflop.xml.h:5
msgid "Stopped"
@@ -4347,11 +4333,11 @@ msgstr "Загружать изображение"
msgid ""
"Colored tiles swap with each other. Written by Kevin Ogden and Sergio "
"Gutierrez; 2003."
-msgstr ""
+msgstr "Цветные плитки меняются друг с другом. Автор Кевин Огден и Серхио Гутьеррес; 2003 год."
#: ../hacks/config/flipscreen3d.xml.h:1
msgid "FlipScreen3D"
-msgstr ""
+msgstr "3D кувырок экрана"
#: ../hacks/config/flipscreen3d.xml.h:5 ../hacks/config/gleidescope.xml.h:12
#: ../hacks/config/glplanet.xml.h:9 ../hacks/config/ifs.xml.h:67
@@ -4362,11 +4348,11 @@ msgstr "Поворачивать"
#: ../hacks/config/flipscreen3d.xml.h:7
msgid ""
"Spins and deforms an image. Written by Ben Buxton and Jamie Zawinski; 2001."
-msgstr ""
+msgstr "Закручивает и деформирует изображение. Автор Бен Бакстон и Джейми Завински; 2001 год."
#: ../hacks/config/fliptext.xml.h:1
msgid "FlipText"
-msgstr ""
+msgstr "Кувыркающийся текст"
#: ../hacks/config/fliptext.xml.h:8
msgid "Random text alignment"
@@ -4386,7 +4372,7 @@ msgstr "Выравнивание по правому краю"
#: ../hacks/config/fliptext.xml.h:12 ../hacks/config/starwars.xml.h:17
msgid "Font point size"
-msgstr "Размер шрифта"
+msgstr "Размер шрифта точки"
#: ../hacks/config/fliptext.xml.h:13
msgid "Text columns"
@@ -4400,11 +4386,11 @@ msgstr "Строки текста"
msgid ""
"Successive pages of text flip in and out in a soothing 3D pattern. Written "
"by Jamie Zawinski; 2005."
-msgstr ""
+msgstr "Кувыркание текста и выход в успокаивающий 3D узор. Автор: Джейми Завински; 2005."
#: ../hacks/config/flow.xml.h:1
msgid "Flow"
-msgstr ""
+msgstr "Поток"
#: ../hacks/config/flow.xml.h:6 ../hacks/config/galaxy.xml.h:5
#: ../hacks/config/glforestfire.xml.h:6 ../hacks/config/julia.xml.h:6
@@ -4450,15 +4436,15 @@ msgid ""
"Birkhoff and Duffing, and can discover entirely new attractors by itself. "
"https://en.wikipedia.org/wiki/Attractor#Strange_attractor Written by Tim "
"Auckland; 1998."
-msgstr ""
+msgstr "Странные аттракторы формируются в 3D потоки дифференциального фазового пространства. Особенности популярных аттракторов, описанные Лоренцом, Ресслером, Биркгофом и Дюффингом, могут открыть совершенно новые аттракторы. https://en.wikipedia.org/wiki/Attractor#Strange_attractor Автор: Тим Окленд; 1998."
#: ../hacks/config/fluidballs.xml.h:1
msgid "FluidBalls"
-msgstr ""
+msgstr "Текучие шарики"
#: ../hacks/config/fluidballs.xml.h:11
msgid " Freefall"
-msgstr "Свободное падение"
+msgstr " Свободное падение"
#: ../hacks/config/fluidballs.xml.h:13
msgid "Jupiter"
@@ -4482,7 +4468,7 @@ msgstr "Глина"
#: ../hacks/config/fluidballs.xml.h:18 ../hacks/config/twang.xml.h:11
msgid "Friction"
-msgstr "Взаимодействие"
+msgstr "Трение"
#: ../hacks/config/fluidballs.xml.h:19
msgid "Rubber"
@@ -4500,14 +4486,14 @@ msgstr "Трясти коробку"
msgid ""
"Models the physics of bouncing balls, or of particles in a gas or fluid, "
"depending on the settings. If \"Shake Box\" is selected, then every now and "
-"then, the box will be rotated, changing which direction is down (in order to "
-"keep the settled balls in motion.) Written by Peter Birtles and Jamie "
+"then, the box will be rotated, changing which direction is down (in order to"
+" keep the settled balls in motion.) Written by Peter Birtles and Jamie "
"Zawinski; 2002."
-msgstr ""
+msgstr "В зависимости от настроек представлена физическая модель прыгающих шариков, или частиц в газе, или жидкости, . Если выбран режим \"Встряхнуть ящик\", то каждый раз ящик будет переворачиваться, меняя направление верх-вниз (для того, чтобы сохранить шары в движении). Авторы: Питер Бертлз и Джейми Завински; 2002 год."
#: ../hacks/config/flurry.xml.h:1
msgid "Flurry"
-msgstr ""
+msgstr "Шквал"
#: ../hacks/config/flurry.xml.h:3
msgid "Classic"
@@ -4515,7 +4501,7 @@ msgstr "Классический"
#: ../hacks/config/flurry.xml.h:4
msgid "RGB"
-msgstr ""
+msgstr "RGB"
#: ../hacks/config/flurry.xml.h:5
msgid "Fire"
@@ -4537,15 +4523,15 @@ msgstr "Безумный"
msgid ""
"A colourful star(fish)like flurry of particles. Written by Calum Robinson "
"and Tobias Sargeant; 2002."
-msgstr ""
+msgstr "Красочная звезда (рыба), похожая на поток частиц. Автор Калум Робинсон и Тобиас Сарджант; 2002."
#: ../hacks/config/flyingtoasters.xml.h:1
msgid "FlyingToasters"
-msgstr ""
+msgstr "Летающие тостеры"
#: ../hacks/config/flyingtoasters.xml.h:6
msgid "Air speed"
-msgstr "Скорость"
+msgstr "Скорость воздуха"
#: ../hacks/config/flyingtoasters.xml.h:9
msgid "Number of toasters"
@@ -4557,7 +4543,7 @@ msgstr "Рой"
#: ../hacks/config/flyingtoasters.xml.h:11
msgid "Number of slices"
-msgstr "Количество кусков хлеба"
+msgstr "Количество срезов"
#: ../hacks/config/flyingtoasters.xml.h:12 ../hacks/config/jigglypuff.xml.h:6
#: ../hacks/config/winduprobot.xml.h:20
@@ -4567,24 +4553,24 @@ msgstr "Хром"
#: ../hacks/config/flyingtoasters.xml.h:16
#, no-c-format
msgid ""
-"A fleet of 3d space-age jet-powered flying toasters (and toast!) Inspired by "
-"the ancient Berkeley Systems After Dark flying toasters. https://en."
-"wikipedia.org/wiki/After_Dark_%28software%29#Flying_Toasters Written by "
-"Jamie Zawinski and Devon Dossett; 2003."
-msgstr ""
+"A fleet of 3d space-age jet-powered flying toasters (and toast!) Inspired by"
+" the ancient Berkeley Systems After Dark flying toasters. "
+"https://en.wikipedia.org/wiki/After_Dark_%28software%29#Flying_Toasters "
+"Written by Jamie Zawinski and Devon Dossett; 2003."
+msgstr "Флот 3d космической эры реактивных летающих тостеров (и тостов!). https://en.wikipedia.org/wiki/After_Dark_%28software%29#Flying_Toasters. Авторы: Джейми Завински и Девон Доссетт; 2003."
#: ../hacks/config/fontglide.xml.h:1
msgid "FontGlide"
-msgstr ""
+msgstr "Скольжение шрифта"
#: ../hacks/config/fontglide.xml.h:8 ../hacks/config/raverhoop.xml.h:15
#: ../hacks/config/tangram.xml.h:5 ../hacks/config/xlyap.xml.h:5
msgid "Brief"
-msgstr "Короткая"
+msgstr "Кратко"
#: ../hacks/config/fontglide.xml.h:9
msgid "Page linger"
-msgstr "Длина страницы"
+msgstr "Задержка страницы"
#: ../hacks/config/fontglide.xml.h:11
msgid "Pages of text"
@@ -4596,7 +4582,7 @@ msgstr "Горизонтальная прокрутка текста"
#: ../hacks/config/fontglide.xml.h:13
msgid "Random display style"
-msgstr "Случальный стиль отображения"
+msgstr "Случайный стиль отображения"
#: ../hacks/config/fontglide.xml.h:14
msgid "Font border thickness"
@@ -4608,24 +4594,24 @@ msgstr "Следы испарения"
#: ../hacks/config/fontglide.xml.h:17
msgid ""
-"Puts text on the screen using large characters that glide in from the edges, "
-"assemble, then disperse. Alternately, it can simply scroll whole sentences "
+"Puts text on the screen using large characters that glide in from the edges,"
+" assemble, then disperse. Alternately, it can simply scroll whole sentences "
"from right to left. Written by Jamie Zawinski; 2003."
-msgstr ""
+msgstr "Помещает текст на экран, используя большие символы, которые скользят от краёв, собираются, а потом расходятся. С другой стороны, можно просто прокручивать целые предложения справа налево. Автор: Джейми Завински; 2003."
#: ../hacks/config/forest.xml.h:1 ../hacks/config/glforestfire.xml.h:10
msgid "Forest"
-msgstr ""
+msgstr "Лес"
#: ../hacks/config/forest.xml.h:9
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.08. Fractal trees. Written by Peter Baumung; 1997."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Фрактальные деревья. Автор Питер Баумунг; 1997 год."
#: ../hacks/config/fuzzyflakes.xml.h:1
msgid "FuzzyFlakes"
-msgstr ""
+msgstr "Пушистые хлопья"
#: ../hacks/config/fuzzyflakes.xml.h:9 ../hacks/config/hypnowheel.xml.h:10
#: ../hacks/config/xspirograph.xml.h:8
@@ -4646,7 +4632,7 @@ msgstr "Розовый"
#: ../hacks/config/fuzzyflakes.xml.h:15
msgid "Yellow"
-msgstr "Желтый"
+msgstr "Жёлтый"
#: ../hacks/config/fuzzyflakes.xml.h:17
msgid "Cyan"
@@ -4662,13 +4648,13 @@ msgstr "Толщина границ"
#: ../hacks/config/fuzzyflakes.xml.h:28
msgid ""
-"Falling colored snowflake/flower shapes. https://en.wikipedia.org/wiki/"
-"Snowflake Written by Barry Dmytro; 2004."
-msgstr ""
+"Falling colored snowflake/flower shapes. "
+"https://en.wikipedia.org/wiki/Snowflake Written by Barry Dmytro; 2004."
+msgstr "Падение цветных снежинок/цветов. https://en.wikipedia.org/wiki/Snowflake Автор Барри Дмитро; 2004."
#: ../hacks/config/galaxy.xml.h:1
msgid "Galaxy"
-msgstr ""
+msgstr "Галактика"
#: ../hacks/config/galaxy.xml.h:12
msgid "Rotate viewpoint"
@@ -4678,26 +4664,27 @@ msgstr "Поворачивать точку обзора"
msgid ""
"Spinning galaxies collide. Written by Uli Siegmund, Harald Backert, and "
"Hubert Feyrer; 1997."
-msgstr ""
+msgstr "Вращающиеся галактики сталкиваются. Автор: Ули Зигмунд, Гарольд Бейкер, и Хьюберт Фейрер; 1997."
#: ../hacks/config/gears.xml.h:1
msgid "Gears"
-msgstr ""
+msgstr "Шестерёнки"
#: ../hacks/config/gears.xml.h:9
msgid "Gear count"
-msgstr "Количество шестеренок"
+msgstr "Количество шестерёнок"
#: ../hacks/config/gears.xml.h:15
msgid ""
"Interlocking gears. See also the \"Pinion\" and \"MoebiusGears\" screen "
-"savers. https://en.wikipedia.org/wiki/Involute_gear https://en.wikipedia.org/"
-"wiki/Epicyclic_gearing Written by Jamie Zawinski; 2007."
-msgstr ""
+"savers. https://en.wikipedia.org/wiki/Involute_gear "
+"https://en.wikipedia.org/wiki/Epicyclic_gearing Written by Jamie Zawinski; "
+"2007."
+msgstr "Переплетение шестерёнок. Смотрите также хранители экрана: \"Круглая шестерёнка\" и \"Шестерёнки Мебиуса\". https://en.wikipedia.org/wiki/Involute_gear https://en.wikipedia.org/wiki/Epicyclic_gearing Автор Джейми Завински; 2007 год."
#: ../hacks/config/geodesic.xml.h:1
msgid "Geodesic"
-msgstr ""
+msgstr "Геодезический"
#: ../hacks/config/geodesic.xml.h:2
msgid "Mesh faces"
@@ -4709,11 +4696,11 @@ msgstr "Сплошная поверхность"
#: ../hacks/config/geodesic.xml.h:4
msgid "Stellated faces"
-msgstr "Звездообразная поверхность"
+msgstr "Звёздообразная поверхность"
#: ../hacks/config/geodesic.xml.h:5
msgid "Inverse Stellated"
-msgstr "Вывернутая звездообразная поверхность"
+msgstr "Вывернутая звёздообразная поверхность"
#: ../hacks/config/geodesic.xml.h:7
msgid "Random face style"
@@ -4722,7 +4709,7 @@ msgstr "Случайный стиль поверхности"
#: ../hacks/config/geodesic.xml.h:19 ../hacks/config/kaleidocycle.xml.h:5
#: ../hacks/config/strange.xml.h:11
msgid "8"
-msgstr ""
+msgstr "8"
#: ../hacks/config/geodesic.xml.h:20
msgid ""
@@ -4730,35 +4717,37 @@ msgid ""
"sphere is an icosohedron whose equilateral faces are sub-divided into non-"
"equilateral triangles to more closely approximate a sphere. The animation "
"shows the equilateral triangles subdivided into four coplanar equilateral "
-"triangles; and then inflated outward, causing the sub-triangles to no longer "
-"be equilateral, but to more closely approximate the surface of a sphere. "
-"https://en.wikipedia.org/wiki/Geodesic_dome https://en.wikipedia.org/wiki/"
-"Buckminster_Fuller Written by Jamie Zawinski; 2013."
-msgstr ""
+"triangles; and then inflated outward, causing the sub-triangles to no longer"
+" be equilateral, but to more closely approximate the surface of a sphere. "
+"https://en.wikipedia.org/wiki/Geodesic_dome "
+"https://en.wikipedia.org/wiki/Buckminster_Fuller Written by Jamie Zawinski; "
+"2013."
+msgstr "Геодезическая сфера является икосаэдром, чьи равносторонние грани подразделяются на неравносторонние треугольники, более приближающие сферу. Анимация показывает как равносторонний треугольник разделяется на четыре копланарных равносторонних, а затем раздувается наружу, в результате чего субтреугольники становятся больше не равносторонними, но более близко расположенными к поверхности сферы. https://en.wikipedia.org/wiki/Geodesic_dome https://en.wikipedia.org/wiki/Buckminster_Fuller Автор: Джейми Завински; 2013."
#: ../hacks/config/geodesicgears.xml.h:1
msgid "GeodesicGears"
-msgstr ""
+msgstr "Геодезические шестерёнки"
#: ../hacks/config/geodesicgears.xml.h:8
msgid "Describe gears"
-msgstr "Описание шестеренок"
+msgstr "Описание шестерёнок"
#: ../hacks/config/geodesicgears.xml.h:9
msgid "Number gears"
-msgstr "Количество шестеренок"
+msgstr "Количество шестерёнок"
#: ../hacks/config/geodesicgears.xml.h:14
msgid ""
-"A set of meshed gears arranged on the surface of a sphere. https://en."
-"wikipedia.org/wiki/Geodesic_dome https://en.wikipedia.org/wiki/Involute_gear "
+"A set of meshed gears arranged on the surface of a sphere. "
+"https://en.wikipedia.org/wiki/Geodesic_dome "
+"https://en.wikipedia.org/wiki/Involute_gear "
"https://en.wikipedia.org/wiki/Buckminster_Fuller Written by Jamie Zawinski; "
"2014."
-msgstr ""
+msgstr "Набор зацепленных зубчатых шестерёнок, расположенных на поверхности сферы. https://en.wikipedia.org/wiki/Geodesic_dome https://en.wikipedia.org/wiki/Involute_gear https://en.wikipedia.org/wiki/Buckminster_Fuller Автор Джейми Завински; 2014."
#: ../hacks/config/gflux.xml.h:1
msgid "GFlux"
-msgstr ""
+msgstr "G-поток"
#: ../hacks/config/gflux.xml.h:9
msgid "Mesh density"
@@ -4772,11 +4761,11 @@ msgstr "Волны"
#: ../hacks/config/hilbert.xml.h:14 ../hacks/config/lavalite.xml.h:10
#: ../hacks/config/strange.xml.h:19
msgid "10"
-msgstr ""
+msgstr "10"
#: ../hacks/config/gflux.xml.h:14
msgid "Wire mesh"
-msgstr "Ячейки"
+msgstr "Проволочная сетка"
#: ../hacks/config/gflux.xml.h:15
msgid "Flat lighting"
@@ -4792,11 +4781,11 @@ msgstr "Изображение"
#: ../hacks/config/gflux.xml.h:20
msgid "Undulating waves on a rotating grid. Written by Josiah Pease; 2000."
-msgstr ""
+msgstr "Волны на вращающейся сетке. Автор Джозайи Пиз; 2000."
#: ../hacks/config/glblur.xml.h:1
msgid "GLBlur"
-msgstr ""
+msgstr "GL-размытие"
#: ../hacks/config/glblur.xml.h:6
msgid "Blur smoothness"
@@ -4810,11 +4799,11 @@ msgid ""
"onto the frame buffer. As such, it's quite GPU-intensive: if you don't have "
"a very good graphics card, it will hurt your machine bad. Written by Jamie "
"Zawinski; 2002."
-msgstr ""
+msgstr "Эффекты от следов движущегося объекта. Это делается путём визуализации сцены в небольшую текстуру, а затем повторной визуализации, дополненной прозрачной текстурой в буфере кадра. Таким образом, это довольно GPU интенсивно: если у вас не очень хорошая видеокарта, то это плохо. Автор: Джейми Завински; 2002."
#: ../hacks/config/glcells.xml.h:1
msgid "GLCells"
-msgstr ""
+msgstr "GL-клетки"
#: ../hacks/config/glcells.xml.h:9
msgid "Max cells"
@@ -4850,7 +4839,7 @@ msgstr "Голодный"
#: ../hacks/config/glcells.xml.h:20
msgid "Min food"
-msgstr "Минимум поедаемых клеток"
+msgstr "Минимум пищи"
#: ../hacks/config/glcells.xml.h:21
msgid "Gorge"
@@ -4858,7 +4847,7 @@ msgstr "Сыт по горло"
#: ../hacks/config/glcells.xml.h:22
msgid "Max food"
-msgstr "Максимум поедаемых клеток"
+msgstr "Максимум пищи"
#: ../hacks/config/glcells.xml.h:23
msgid "Quick"
@@ -4874,21 +4863,21 @@ msgstr "Минимальное расстояние"
#: ../hacks/config/glcells.xml.h:30
msgid "15"
-msgstr ""
+msgstr "15"
#: ../hacks/config/glcells.xml.h:31
msgid "Keep dead cells"
-msgstr "Сохранять мертвые клетки"
+msgstr "Сохранять мёртвые клетки"
#: ../hacks/config/glcells.xml.h:34
msgid ""
"Cells growing, dividing and dying on your screen. Microscopic pathos. "
"Written by Matthias Toussaint; 2007."
-msgstr ""
+msgstr "Клетки растут, делятся и умирают на экране. Микроскопический пафос. Автор Матиас Туссен; 2007 год."
#: ../hacks/config/gleidescope.xml.h:1
msgid "Gleidescope"
-msgstr ""
+msgstr "GL-лейдоскоп"
#: ../hacks/config/gleidescope.xml.h:6
msgid "Size of tube"
@@ -4896,7 +4885,7 @@ msgstr "Размер трубы"
#: ../hacks/config/gleidescope.xml.h:9
msgid "Image duration"
-msgstr "Продолжительность перехода"
+msgstr "Продолжительность изображения"
#: ../hacks/config/gleidescope.xml.h:10 ../hacks/config/glslideshow.xml.h:7
msgid "5 minutes"
@@ -4914,53 +4903,53 @@ msgstr "Масштабировать"
#: ../hacks/config/gleidescope.xml.h:15
msgid ""
-"A kaleidoscope that operates on a loaded image. https://en.wikipedia.org/"
-"wiki/Kaleidoscope Written by Andrew Dean; 2003."
-msgstr ""
+"A kaleidoscope that operates on a loaded image. "
+"https://en.wikipedia.org/wiki/Kaleidoscope Written by Andrew Dean; 2003."
+msgstr "Калейдоскоп, который работает на загруженном изображении. https://en.wikipedia.org/wiki/Kaleidoscope Автор Эндрю Дин; 2003 год."
#: ../hacks/config/glforestfire.xml.h:1
msgid "GLForestFire"
-msgstr ""
+msgstr "GL-лесные пожары"
#: ../hacks/config/glforestfire.xml.h:5
msgid "Rain"
-msgstr ""
+msgstr "Дождь"
#: ../hacks/config/glforestfire.xml.h:7
msgid "Huge fire"
-msgstr ""
+msgstr "Огромное пожарище"
#: ../hacks/config/glforestfire.xml.h:8
msgid "Desert"
-msgstr ""
+msgstr "Пустыня"
#: ../hacks/config/glforestfire.xml.h:9
msgid "Number of trees"
-msgstr ""
+msgstr "Количество деревьев"
#: ../hacks/config/glforestfire.xml.h:12
msgid "Textures"
-msgstr ""
+msgstr "Текстуры"
#: ../hacks/config/glforestfire.xml.h:13
msgid "Shadows"
-msgstr ""
+msgstr "Тени"
#: ../hacks/config/glforestfire.xml.h:14 ../hacks/config/glmatrix.xml.h:15
#: ../hacks/config/glschool.xml.h:14
msgid "Fog"
-msgstr ""
+msgstr "Туман"
#: ../hacks/config/glforestfire.xml.h:17
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.08. Draws an animation of sprinkling fire-like 3D triangles in a "
"landscape filled with trees. Written by Eric Lassauge; 2002."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Рисует анимацию: 3D треугольники, пейзаж, наполненный деревьями. Автор: Эрик Лассуж; 2002."
#: ../hacks/config/glhanoi.xml.h:1
msgid "GLHanoi"
-msgstr ""
+msgstr "GL-ханой"
#: ../hacks/config/glhanoi.xml.h:6
msgid "Number of disks"
@@ -4968,7 +4957,7 @@ msgstr "Количество дисков"
#: ../hacks/config/glhanoi.xml.h:7
msgid "31"
-msgstr ""
+msgstr "31"
#: ../hacks/config/glhanoi.xml.h:8
msgid "Number of poles"
@@ -4993,17 +4982,33 @@ msgstr "Включить освещение"
#: ../hacks/config/glhanoi.xml.h:18
msgid ""
"Solves the Towers of Hanoi puzzle. Move N disks from one pole to another, "
-"one disk at a time, with no disk ever resting on a disk smaller than itself. "
-"https://en.wikipedia.org/wiki/Tower_of_Hanoi Written by Dave Atkinson; 2005."
-msgstr ""
+"one disk at a time, with no disk ever resting on a disk smaller than itself."
+" https://en.wikipedia.org/wiki/Tower_of_Hanoi Written by Dave Atkinson; "
+"2005."
+msgstr "Решает головоломку Ханойских башен. Перемещение N дисков от одного полюса к другому, один диск за один раз. https://en.wikipedia.org/wiki/Tower_of_Hanoi Автор: Дэйв Аткинсон; 2005."
+
+#: ../hacks/config/glitchpeg.xml.h:1
+msgid "GlitchPEG"
+msgstr "GlitchPEG"
+
+#: ../hacks/config/glitchpeg.xml.h:8
+msgid "Glitchiness"
+msgstr "Глюкавость"
+
+#: ../hacks/config/glitchpeg.xml.h:9
+msgid ""
+"Loads an image, corrupts it, and then displays the corrupted version, "
+"several times a second. After a while, finds a new image to corrupt. Written"
+" by Jamie Zawinski; 2018."
+msgstr "Загружает изображение, повреждает его, а затем отображает повреждённую версию несколько раз в секунду. Через некоторое время находит новое изображение для повреждения. Автор Джейми Завински; 2018."
#: ../hacks/config/glknots.xml.h:1
msgid "GLKnots"
-msgstr ""
+msgstr "GL-узлы"
#: ../hacks/config/glknots.xml.h:16
msgid "Segmented"
-msgstr "Пиксельный"
+msgstr "Сегментированный"
#: ../hacks/config/glknots.xml.h:17 ../hacks/config/jigsaw.xml.h:12
#: ../hacks/config/lavalite.xml.h:11 ../hacks/config/mirrorblob.xml.h:14
@@ -5014,25 +5019,25 @@ msgstr "Разрешение"
#: ../hacks/config/glknots.xml.h:25
msgid ""
-"Generates some twisting 3d knot patterns. Spins 'em around. https://en."
-"wikipedia.org/wiki/Knot_theory Written by Jamie Zawinski; 2003."
-msgstr ""
+"Generates some twisting 3d knot patterns. Spins 'em around. "
+"https://en.wikipedia.org/wiki/Knot_theory Written by Jamie Zawinski; 2003."
+msgstr "Создаёт несколько 3d узоров скрученных узлов. Разностороннее вращение. https://en.wikipedia.org/wiki/Knot_theory Автор Джейми Завински; 2003."
#: ../hacks/config/glmatrix.xml.h:1
msgid "GLMatrix"
-msgstr ""
+msgstr "GL-матрица"
#: ../hacks/config/glmatrix.xml.h:6
msgid "Glyph density"
-msgstr "Плотность иероглифов"
+msgstr "Плотность глифов"
#: ../hacks/config/glmatrix.xml.h:9
msgid "Glyph speed"
-msgstr "Скорость иероглифов"
+msgstr "Скорость глифов"
#: ../hacks/config/glmatrix.xml.h:11 ../hacks/config/xmatrix.xml.h:4
msgid "Matrix encoding"
-msgstr "Кодировка Матрицы"
+msgstr "Кодировка матрицы"
#: ../hacks/config/glmatrix.xml.h:12 ../hacks/config/xmatrix.xml.h:5
msgid "Binary encoding"
@@ -5052,15 +5057,16 @@ msgstr "Панорамирование"
#: ../hacks/config/glmatrix.xml.h:21
msgid ""
-"The 3D \"digital rain\" effect, as seen in the title sequence of \"The Matrix"
-"\". See also \"xmatrix\" for a 2D rendering of the similar effect that "
-"appeared on the computer monitors actually *in* the movie. https://en."
-"wikipedia.org/wiki/Matrix_digital_rain Written by Jamie Zawinski; 2003."
-msgstr ""
+"The 3D \"digital rain\" effect, as seen in the title sequence of \"The "
+"Matrix\". See also \"xmatrix\" for a 2D rendering of the similar effect that"
+" appeared on the computer monitors actually *in* the movie. "
+"https://en.wikipedia.org/wiki/Matrix_digital_rain Written by Jamie Zawinski;"
+" 2003."
+msgstr "Эффект 3D \"цифровой дождь\", как это видно из заголовка последовательности \"Матрица\". Смотрите также \"x-матрица\" для 2D-визуализации аналогичного эффекта, который появился на компьютерных мониторах. https://en.wikipedia.org/wiki/Matrix_digital_rain Автор: Джейми Завински; 2003."
#: ../hacks/config/glplanet.xml.h:1
msgid "GLPlanet"
-msgstr ""
+msgstr "GL-планета"
#. #### -no-texture
#: ../hacks/config/glplanet.xml.h:6
@@ -5073,14 +5079,16 @@ msgstr "Ночное изображение"
#: ../hacks/config/glplanet.xml.h:14
msgid ""
-"The Earth, bouncing around in space. If you would like it to display a "
-"different planet, the texture maps that come with \"ssystem\" work well. "
-"Written by David Konerding and Jamie Zawinski; 1998."
-msgstr ""
+"The Earth, bouncing around in space, rendered with satellite imagery of the "
+"planet in both sunlight and darkness. If you would like it to display a "
+"different planet, any pair of Equirectangular-projected maps will work. The "
+"maps that come with \"ssystem\" work well. Written by David Konerding and "
+"Jamie Zawinski; 1998."
+msgstr "Земля, подпрыгивая в космосе, представлена спутниковыми изображениями планеты как в солнечном свете, так и в темноте. Если вы хотите, чтобы отображалась другая планета, подойдёт любая пара карт, спроецированных на равный угол. Карты, которые идут с \"системой\", работают хорошо. Авторы Дэвид Конердинг и Джейми Завински; 1998."
#: ../hacks/config/glschool.xml.h:1
msgid "GLSchool"
-msgstr ""
+msgstr "GL-стая"
#: ../hacks/config/glschool.xml.h:6
msgid "Fish count"
@@ -5111,16 +5119,16 @@ msgid ""
"A school of fish, using the classic \"Boids\" algorithm by Craig Reynolds. "
"https://en.wikipedia.org/wiki/Boids Written by David C. Lambert and Jamie "
"Zawinski; 2006."
-msgstr ""
+msgstr "Стая рыбы; используется классический алгоритм \"Boids\" от Крейг Рейнольдса. https://en.wikipedia.org/wiki/Boids Автор Дэвид С. Ламберт и Джейми Завински; 2006."
#: ../hacks/config/glslideshow.xml.h:1
msgid "GLSlideshow"
-msgstr ""
+msgstr "GL-слайд-шоу"
#: ../hacks/config/glslideshow.xml.h:9
#, no-c-format
msgid "50%"
-msgstr ""
+msgstr "50%"
#: ../hacks/config/glslideshow.xml.h:10
msgid "Always show at least this much of the image"
@@ -5130,7 +5138,7 @@ msgstr "Всегда показывать минимум такую часть
#: ../hacks/config/rdbomb.xml.h:10 ../hacks/config/substrate.xml.h:15
#, no-c-format
msgid "100%"
-msgstr ""
+msgstr "100%"
#: ../hacks/config/glslideshow.xml.h:14
msgid "Pan/zoom duration"
@@ -5138,18 +5146,18 @@ msgstr "Продолжительность панорамирования/мас
#: ../hacks/config/glslideshow.xml.h:17
msgid "Crossfade duration"
-msgstr "Продолжительность проявления"
+msgstr "Продолжительность кроссфейда"
#: ../hacks/config/glslideshow.xml.h:21
msgid ""
"Loads a random sequence of images and smoothly scans and zooms around in "
"each, fading from pan to pan. Written by Jamie Zawinski and Mike Oliphant; "
"2003."
-msgstr ""
+msgstr "Загружает случайную последовательность изображений и плавно сканирует и масштабирует каждое, затухая от панорамы к панораме. Авторы: Джейми Завински и Майк Олифантом; 2003."
#: ../hacks/config/glsnake.xml.h:1
msgid "GLSnake"
-msgstr ""
+msgstr "GL-змейка"
#: ../hacks/config/glsnake.xml.h:9
msgid "Packing"
@@ -5181,11 +5189,11 @@ msgid ""
"The \"Rubik's Snake\" puzzle. See also the \"Rubik\" and \"Cube21\" screen "
"savers. https://en.wikipedia.org/wiki/Rubik%27s_Snake Written by Jamie "
"Wilkinson, Andrew Bennetts, and Peter Aylett; 2002."
-msgstr ""
+msgstr "Головоломка \"Змейка Рубика\". Смотрите также хранители экрана \"Рубик\" и \"Кубик21\". https://en.wikipedia.org/wiki/Rubik%27s_Snake Авторы: Джейми Уилкинсон, Эндрю Беннетс, и Питер Айлетт; 2002."
#: ../hacks/config/gltext.xml.h:1
msgid "GLText"
-msgstr ""
+msgstr "GL-текст"
#: ../hacks/config/gltext.xml.h:5
msgid "Display system information"
@@ -5195,11 +5203,13 @@ msgstr "Показать информацию о версии системы"
msgid "Display date and time"
msgstr "Показать дату и время"
-#: ../hacks/config/gltext.xml.h:7 ../hacks/config/splitflap.xml.h:13
+#: ../hacks/config/gltext.xml.h:7 ../hacks/config/handsy.xml.h:20
+#: ../hacks/config/splitflap.xml.h:13
msgid "Always face front"
msgstr "Всегда показывать спереди"
-#: ../hacks/config/gltext.xml.h:8 ../hacks/config/splitflap.xml.h:14
+#: ../hacks/config/gltext.xml.h:8 ../hacks/config/handsy.xml.h:21
+#: ../hacks/config/splitflap.xml.h:14
msgid "Spin all the way around"
msgstr "Вращать во все стороны"
@@ -5208,11 +5218,11 @@ msgid ""
"Displays a few lines of text spinning around in a solid 3D font. The text "
"can use strftime() escape codes to display the current date and time. "
"Written by Jamie Zawinski; 2001."
-msgstr ""
+msgstr "Отображает несколько строк текста 3D шрифтом; может также отображать текущую дату и время. Автор: Джейми Завински; 2001 год."
#: ../hacks/config/goop.xml.h:1
msgid "Goop"
-msgstr ""
+msgstr "Гадость"
#: ../hacks/config/goop.xml.h:9
msgid "Blobs"
@@ -5240,11 +5250,11 @@ msgstr "Сгустки XOR"
#: ../hacks/config/goop.xml.h:17
msgid "Additive colors (transmitted light)"
-msgstr "Добавление цветов (пропущенный свет)"
+msgstr "Аддитивные цвета (пропущенный свет)"
#: ../hacks/config/goop.xml.h:18
msgid "Subtractive colors (reflected light)"
-msgstr "Вычитание цветов (отраженный свет)"
+msgstr "Субтрактивные цвета (отражённый свет)"
#: ../hacks/config/goop.xml.h:19
msgid ""
@@ -5254,11 +5264,11 @@ msgid ""
"from a mouse pad I had once, which achieved the same kind of effect in real "
"life by having several layers of plastic with colored oil between them. "
"Written by Jamie Zawinski; 1997."
-msgstr ""
+msgstr "Амебовидные сгустки изменяют форму и бродят по экрану. Они полупрозрачны, а поэтому вы можете видеть нижние сгустки через верхние, и, когда это происходит, их цвета сливаются. У меня есть идея для создания коврика для мыши, чтобы достигнуть такой же эффект в реальной жизни, нужно иметь всего лишь несколько листов пластика с цветным маслом между ними. Автор Джейми Завински; 1997 год."
#: ../hacks/config/grav.xml.h:1
msgid "Grav"
-msgstr ""
+msgstr "Гравитон"
#: ../hacks/config/grav.xml.h:6
msgid "Number of objects"
@@ -5266,39 +5276,39 @@ msgstr "Количество объектов"
#: ../hacks/config/grav.xml.h:10
msgid "Orbital decay"
-msgstr "Орбитальное притяжение"
+msgstr "Орбитальное угасание"
#: ../hacks/config/grav.xml.h:11
msgid "Object trails"
-msgstr "Количество объектов"
+msgstr "Следы объектов"
#: ../hacks/config/grav.xml.h:13
msgid ""
"An orbital simulation. With trails enabled, it looks kind of like a cloud-"
"chamber photograph. Written by Greg Bowering; 1997."
-msgstr ""
+msgstr "Орбитальное моделирование. С включенной функцией трассы, это выглядит вроде как фотография. Автор: Грег Боуэринг; 1997."
#: ../hacks/config/greynetic.xml.h:1
msgid "Greynetic"
-msgstr ""
+msgstr "Грейнетик"
#: ../hacks/config/greynetic.xml.h:5
msgid "Grey"
-msgstr "Серость"
+msgstr "Серый"
#: ../hacks/config/greynetic.xml.h:7
msgid ""
"Colored, stippled and transparent rectangles. Written by Jamie Zawinski; "
"1992."
-msgstr ""
+msgstr "Цветные, прозрачные и заштриховнные прямоугольники. Автор Джейми Завински; 1992 год."
#: ../hacks/config/halftone.xml.h:1
msgid "Halftone"
-msgstr ""
+msgstr "Полутон"
#: ../hacks/config/halftone.xml.h:6
msgid "Gravity points"
-msgstr "Очки притяжения"
+msgstr "Точки притяжения"
#: ../hacks/config/halftone.xml.h:9
msgid "Dot size"
@@ -5310,7 +5320,7 @@ msgstr "Большой"
#: ../hacks/config/halftone.xml.h:11
msgid "Dot fill factor"
-msgstr "Фактор заполнения точек"
+msgstr "Степень заполнения точками"
#: ../hacks/config/halftone.xml.h:13
msgid "Minimum speed"
@@ -5335,11 +5345,11 @@ msgid ""
"calculated from a set of moving mass points. View it from a distance for "
"best effect. https://en.wikipedia.org/wiki/Halftone Written by Peter Jaric; "
"2002."
-msgstr ""
+msgstr "Узор полутоновой точки в движении. Рисует силы тяжести в каждой точке на экране сквозь полутоновый узор. Сила тяжести рассчитывается из множества движущихся материальных точек. Рассмотрите это с расстояния для достижения наилучшего эффекта. https://en.wikipedia.org/wiki/Halftone Автор: Питер Джарик; 2002."
#: ../hacks/config/halo.xml.h:1
msgid "Halo"
-msgstr ""
+msgstr "Гало"
#: ../hacks/config/halo.xml.h:6
msgid "Number of circles"
@@ -5351,11 +5361,11 @@ msgstr "Случайный режим"
#: ../hacks/config/halo.xml.h:11
msgid "Seuss mode"
-msgstr "Режим Seuss"
+msgstr "Режим Сьюз"
#: ../hacks/config/halo.xml.h:12
msgid "Ramp mode"
-msgstr "Режим Ramp"
+msgstr "Режим уклона"
#: ../hacks/config/halo.xml.h:13
msgid "Animate circles"
@@ -5365,19 +5375,33 @@ msgstr "Анимировать круги"
msgid ""
"Circular interference patterns. https://en.wikipedia.org/wiki/Moire_pattern "
"Written by Jamie Zawinski; 1993."
-msgstr ""
+msgstr "Круговая интерференция узоров. https://en.wikipedia.org/wiki/Moire_pattern Автор: Джейми Завински; 1993 год."
+
+#: ../hacks/config/handsy.xml.h:1
+msgid "Handsy"
+msgstr "Распускать руки"
+
+#: ../hacks/config/handsy.xml.h:9
+msgid "Number of hands"
+msgstr "Количество рук"
+
+#: ../hacks/config/handsy.xml.h:24
+msgid ""
+"A set of robotic hands communicate non-verbally. Written by Jamie Zawinski; "
+"2018."
+msgstr "Набор роботизированных рук общается невербально. Автор Джейми Завински; 2018."
#: ../hacks/config/helix.xml.h:1
msgid "Helix"
-msgstr ""
+msgstr "Спираль"
#: ../hacks/config/helix.xml.h:9
msgid "Spirally string-art-ish patterns. Written by Jamie Zawinski; 1992."
-msgstr ""
+msgstr "Художественные спирально-строковые узоры. Автор Джейми Завински; 1992 год."
#: ../hacks/config/hexadrop.xml.h:1
msgid "Hexadrop"
-msgstr ""
+msgstr "Гексападение"
#: ../hacks/config/hexadrop.xml.h:9 ../hacks/config/penrose.xml.h:9
#: ../hacks/config/twang.xml.h:15
@@ -5386,7 +5410,7 @@ msgstr "Размер плитки"
#: ../hacks/config/hexadrop.xml.h:11 ../hacks/config/klein.xml.h:2
msgid "Random shape"
-msgstr "Случайные фигуры"
+msgstr "Случайная фигура"
#: ../hacks/config/hexadrop.xml.h:12
msgid "Triangles"
@@ -5398,7 +5422,7 @@ msgstr "Квадраты"
#: ../hacks/config/hexadrop.xml.h:14
msgid "Hexagons"
-msgstr "Шестиугольники"
+msgstr "Шестигранники"
#: ../hacks/config/hexadrop.xml.h:15
msgid "Octagons"
@@ -5430,18 +5454,18 @@ msgstr "Не синхронизировано"
#: ../hacks/config/hexadrop.xml.h:23
msgid ""
-"A grid of hexagons or other shapes, with tiles dropping out. https://en."
-"wikipedia.org/wiki/Tiling_by_regular_polygons Written by Jamie Zawinski; "
-"2013."
-msgstr ""
+"A grid of hexagons or other shapes, with tiles dropping out. "
+"https://en.wikipedia.org/wiki/Tiling_by_regular_polygons Written by Jamie "
+"Zawinski; 2013."
+msgstr "Сетка из шестигранников или других форм с выпадающими плитками. https://en.wikipedia.org/wiki/Tiling_by_regular_polygons Автор: Джейми Завински; 2013."
#: ../hacks/config/hexstrut.xml.h:1
msgid "Hexstrut"
-msgstr ""
+msgstr "Шестигранная стойка"
#: ../hacks/config/hexstrut.xml.h:9
msgid "Hexagon Size"
-msgstr "Размер шестиугольников"
+msgstr "Размер шестигранников"
#: ../hacks/config/hexstrut.xml.h:12
msgid "Line Thickness"
@@ -5452,11 +5476,11 @@ msgid ""
"A grid of hexagons composed of rotating Y-shaped struts. Waves of rotation "
"and color changes randomly propagate across the plane. Written by Jamie "
"Zawinski; 2016."
-msgstr ""
+msgstr "Сетка из шестигранников, состоящая из вращающихся Y-образных стоек. Волны вращения и изменения цвета случайным образом распространяются по плоскости. Автор Джейми Завински; 2016."
#: ../hacks/config/hilbert.xml.h:1
msgid "Hilbert"
-msgstr ""
+msgstr "Гильберт"
#: ../hacks/config/hilbert.xml.h:2
msgid "2D or 3D"
@@ -5464,11 +5488,11 @@ msgstr "2D или 3D"
#: ../hacks/config/hilbert.xml.h:3
msgid "2D"
-msgstr ""
+msgstr "2D"
#: ../hacks/config/hilbert.xml.h:4
msgid "3D"
-msgstr ""
+msgstr "3D"
#: ../hacks/config/hilbert.xml.h:5
msgid "Open or closed paths"
@@ -5482,9 +5506,7 @@ msgstr "Закрытые"
msgid "Open"
msgstr "Открытые"
-#.
#. On a 2.93 gHz iMac i7, I get these rates with -delay 0:
-#.
#. detail 3: invisible
#. detail 4: barely visible
#. detail 5: 1000+ fps, looks like noise at -delay 0, ok at -delay 20000
@@ -5496,14 +5518,12 @@ msgstr "Открытые"
#. detail 13: ~17 fps
#. detail 14: ~8 fps
#. detail 15: ~2 fps
-#.
#. With the default -delay, CPU load only starts causing the frame rate
#. to drop below 30 fps detail 12 or higher.
-#.
#: ../hacks/config/hilbert.xml.h:12 ../hacks/config/hypnowheel.xml.h:12
#: ../hacks/config/ifs.xml.h:23
msgid "2"
-msgstr ""
+msgstr "2"
#: ../hacks/config/hilbert.xml.h:13
msgid "Recursion levels"
@@ -5519,67 +5539,67 @@ msgid ""
"close together along the curve are also close together in space. The "
"converse is often, but not always, true. The coloration reflects this. "
"https://en.wikipedia.org/wiki/Hilbert_curve Written by Jamie Zawinski; 2011."
-msgstr ""
+msgstr "Рекурсивная кривая Гильберта, заполняющая пространство, оба варианта 2D и 3D. Она постепенно увеличивает рост и рекурсию на максимальную глубину, а затем уменьшает его. Путь Гильберта представляет собой одну непрерывную линию, которая может заполнить объём, не пересекаясь. В структуре данных пути Гильберта полезны, так как сохраняют точки , которые находятся близко друг к другу вдоль кривой, а также в пространстве. Обратное случается часто, но не всегда, правда. https://en.wikipedia.org/wiki/Hilbert_curve Автор: Джейми Завински; 2011."
#: ../hacks/config/hopalong.xml.h:1
msgid "Hopalong"
-msgstr ""
+msgstr "Хопалонг"
#: ../hacks/config/hopalong.xml.h:8 ../hacks/config/interference.xml.h:17
#: ../hacks/config/qix.xml.h:11 ../hacks/config/wander.xml.h:10
msgid "Color contrast"
-msgstr "Контраст цветов"
+msgstr "Цветовой контраст"
#: ../hacks/config/hopalong.xml.h:12
msgid "Sine"
-msgstr ""
+msgstr "Синус"
#: ../hacks/config/hopalong.xml.h:13
msgid "Martin"
-msgstr ""
+msgstr "Мартин"
#: ../hacks/config/hopalong.xml.h:15
msgid "Jong"
-msgstr ""
+msgstr "Йонг"
#: ../hacks/config/hopalong.xml.h:16
msgid "RR"
-msgstr ""
+msgstr "RR"
#: ../hacks/config/hopalong.xml.h:17
msgid "EJK1"
-msgstr ""
+msgstr "EJK1"
#: ../hacks/config/hopalong.xml.h:18
msgid "EJK2"
-msgstr ""
+msgstr "EJK2"
#: ../hacks/config/hopalong.xml.h:19
msgid "EJK3"
-msgstr ""
+msgstr "EJK3"
#: ../hacks/config/hopalong.xml.h:20
msgid "EJK4"
-msgstr ""
+msgstr "EJK4"
#: ../hacks/config/hopalong.xml.h:21
msgid "EJK5"
-msgstr ""
+msgstr "EJK5"
#: ../hacks/config/hopalong.xml.h:22
msgid "EJK6"
-msgstr ""
+msgstr "EJK6"
#: ../hacks/config/hopalong.xml.h:24
msgid ""
-"Lacy fractal patterns based on iteration in the imaginary plane, from a 1986 "
-"Scientific American article. See also the \"Discrete\" screen saver. Written "
-"by Patrick Naughton; 1992."
-msgstr ""
+"Lacy fractal patterns based on iteration in the imaginary plane, from a 1986"
+" Scientific American article. See also the \"Discrete\" screen saver. "
+"Written by Patrick Naughton; 1992."
+msgstr "Кружевные узоры фракталов на основе итерации в воображаемой плоскости; статья в \"Scientific American/Учёный американец\", 1986 г. Смотрите также хранитель экрана \"Дискретный\". Автор: Патрик Нотон; 1992 год."
#: ../hacks/config/hydrostat.xml.h:1
msgid "Hydrostat"
-msgstr ""
+msgstr "Гидростат"
#: ../hacks/config/hydrostat.xml.h:9
msgid "Number of squid"
@@ -5620,56 +5640,57 @@ msgstr "Пульсация"
#: ../hacks/config/hydrostat.xml.h:30
msgid ""
"Wiggly squid or jellyfish with many tentacles. A muscular hydrostat is a "
-"biological structure used to move its host about, consisting of muscles with "
-"no skeletal support. It performs its hydraulic movement without fluid in a "
-"separate compartment, as in a hydrostatic skeleton. https://en.wikipedia.org/"
-"wiki/Muscular_hydrostat Written by Justin Windle and Jamie Zawinski; 2016."
-msgstr ""
+"biological structure used to move its host about, consisting of muscles with"
+" no skeletal support. It performs its hydraulic movement without fluid in a "
+"separate compartment, as in a hydrostatic skeleton. "
+"https://en.wikipedia.org/wiki/Muscular_hydrostat Written by Justin Windle "
+"and Jamie Zawinski; 2016."
+msgstr "Вьющиеся кальмары или медузы со многими щупальцами. Мышечный гидростат - это биологическая структура, используемая для перемещения своего организма, состоящая из мышц без скелетной поддержки. Он выполняет свое гидравлическое движение без жидкости в отдельном отсеке, как в гидростатическом каркасе. https://en.wikipedia.org/wiki/Muscular_hydrostat Автор Джастин Уиндл и Джейми Завински; 2016."
#: ../hacks/config/hyperball.xml.h:1
msgid "HyperBall"
-msgstr ""
+msgstr "Гипершар"
#: ../hacks/config/hyperball.xml.h:10 ../hacks/config/hypercube.xml.h:10
msgid "XW rotation"
-msgstr ""
+msgstr "XW вращение"
#: ../hacks/config/hyperball.xml.h:12 ../hacks/config/hypercube.xml.h:12
msgid "XY rotation"
-msgstr ""
+msgstr "XY вращение"
#: ../hacks/config/hyperball.xml.h:13 ../hacks/config/hypercube.xml.h:13
msgid "XZ rotation"
-msgstr ""
+msgstr "XZ вращение"
#: ../hacks/config/hyperball.xml.h:14 ../hacks/config/hypercube.xml.h:14
msgid "YW rotation"
-msgstr ""
+msgstr "YW вращения"
#: ../hacks/config/hyperball.xml.h:15 ../hacks/config/hypercube.xml.h:15
msgid "YZ rotation"
-msgstr ""
+msgstr "YZ вращение"
#: ../hacks/config/hyperball.xml.h:16 ../hacks/config/hypercube.xml.h:16
msgid "ZW rotation"
-msgstr ""
+msgstr "ZW вращение"
#: ../hacks/config/hyperball.xml.h:17
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.10. It has been replaced by the more general \"Polytopes\" screen "
-"saver, which can display this object as well as others. The Polytopes \"120-"
-"cell\" object corresponds to this one. Hyperball is to hypercube as "
-"dodecahedron is to cube: this displays a 2D projection of the sequence of 3D "
-"objects which are the projections of the 4D analog to the dodecahedron. "
-"Technically, it is a \"120 cell polytope\". https://en.wikipedia.org/wiki/"
-"Hypercube https://en.wikipedia.org/wiki/Regular_polytope Written by Joe "
-"Keane; 2000."
-msgstr ""
+"saver, which can display this object as well as others. The Polytopes "
+"\"120-cell\" object corresponds to this one. Hyperball is to hypercube as "
+"dodecahedron is to cube: this displays a 2D projection of the sequence of 3D"
+" objects which are the projections of the 4D analog to the dodecahedron. "
+"Technically, it is a \"120 cell polytope\". "
+"https://en.wikipedia.org/wiki/Hypercube "
+"https://en.wikipedia.org/wiki/Regular_polytope Written by Joe Keane; 2000."
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.10. Она была заменена более общим \"многогранником\" экранной заставки, который может отображать этот объект, а также другие. Гипершар является гиперкубом, как двенадцатигранник в кубе: отображает 2D проекцию последовательности 3D-объектов, которые являются проекциями аналога 4D двенадцатигранника. С технической точки зрения это \"120-ти клеточный многогранник\". https://en.wikipedia.org/wiki/Hypercube https://en.wikipedia.org/wiki/Regular_polytope Автор: Джо Кин; 2000."
#: ../hacks/config/hypercube.xml.h:1
msgid "HyperCube"
-msgstr ""
+msgstr "Гиперкуб"
#: ../hacks/config/hypercube.xml.h:17
msgid ""
@@ -5679,17 +5700,18 @@ msgid ""
"projections of the sequence of 3D objects which are the projections of the "
"4D analog to the cube: as a square is composed of four lines, each touching "
"two others; and a cube is composed of six squares, each touching four "
-"others; a hypercube is composed of eight cubes, each touching six others. To "
-"make it easier to visualize the rotation, it uses a different color for the "
-"edges of each face. Don't think about it too long, or your brain will melt. "
-"https://en.wikipedia.org/wiki/Hypercube https://en.wikipedia.org/wiki/"
-"Tesseract https://en.wikipedia.org/wiki/Regular_polytope Written by Joe "
-"Keane, Fritz Mueller, and Jamie Zawinski; 1992."
-msgstr ""
+"others; a hypercube is composed of eight cubes, each touching six others. To"
+" make it easier to visualize the rotation, it uses a different color for the"
+" edges of each face. Don't think about it too long, or your brain will melt."
+" https://en.wikipedia.org/wiki/Hypercube "
+"https://en.wikipedia.org/wiki/Tesseract "
+"https://en.wikipedia.org/wiki/Regular_polytope Written by Joe Keane, Fritz "
+"Mueller, and Jamie Zawinski; 1992."
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.10. Она была заменена более общим \"многогранником\" экранной заставки, который может отображать этот объект, а также - другие. Он отображает 2D проекции последовательности 3D-объектов, которые являются проекцией аналога 4D куба; квадрат состоит из четырёх линий, каждая из которых касается двух других; куб состоит из шести квадратов, каждый из которых касается четырех других; гиперкуб состоит из восьми кубов, каждый из которых прикасается к шести другим. Для того, чтобы сделать его легче, визуализировать вращение, используется разный цвет для краёв каждой грани. Не думайте об этом слишком долго, или ваш мозг начнет таять. https://en.wikipedia.org/wiki/Hypercube https://en.wikipedia.org/wiki/Tesseract https://en.wikipedia.org/wiki/Regular_polytope Авторы: Джо Кин, Фриц Мюллер, и Джейми Завински; 1992."
#: ../hacks/config/hypertorus.xml.h:1
msgid "Hypertorus"
-msgstr ""
+msgstr "Гиперторы"
#: ../hacks/config/hypertorus.xml.h:7 ../hacks/config/mismunch.xml.h:12
#: ../hacks/config/munch.xml.h:15 ../hacks/config/winduprobot.xml.h:16
@@ -5732,7 +5754,7 @@ msgstr "Двусторонний"
#: ../hacks/config/hypertorus.xml.h:17
msgid "Color wheel"
-msgstr "Цветное колесо"
+msgstr "Цветовой круг"
#: ../hacks/config/hypertorus.xml.h:18 ../hacks/config/klein.xml.h:23
#: ../hacks/config/polytopes.xml.h:14 ../hacks/config/projectiveplane.xml.h:16
@@ -5757,7 +5779,7 @@ msgstr "Ортографическое 4D"
#: ../hacks/config/hypertorus.xml.h:22 ../hacks/config/klein.xml.h:28
#: ../hacks/config/polytopes.xml.h:19 ../hacks/config/romanboy.xml.h:29
msgid "-4.0"
-msgstr ""
+msgstr "-4.0"
#: ../hacks/config/hypertorus.xml.h:23 ../hacks/config/klein.xml.h:29
#: ../hacks/config/polytopes.xml.h:20
@@ -5767,7 +5789,7 @@ msgstr "Скорость вращения WX"
#: ../hacks/config/hypertorus.xml.h:24 ../hacks/config/klein.xml.h:30
#: ../hacks/config/polytopes.xml.h:21 ../hacks/config/romanboy.xml.h:31
msgid "4.0"
-msgstr ""
+msgstr "4.0"
#: ../hacks/config/hypertorus.xml.h:25 ../hacks/config/klein.xml.h:31
#: ../hacks/config/polytopes.xml.h:22
@@ -5799,37 +5821,38 @@ msgid ""
"A Clifford Torus: a torus lying on the \"surface\" of a 4D hypersphere. "
"Inspired by Thomas Banchoff's book \"Beyond the Third Dimension: Geometry, "
"Computer Graphics, and Higher Dimensions\", Scientific American Library, "
-"1990. https://en.wikipedia.org/wiki/N-sphere https://en.wikipedia.org/wiki/"
-"Clifford_torus https://en.wikipedia.org/wiki/Regular_polytope Written by "
-"Carsten Steger; 2003."
-msgstr ""
+"1990. https://en.wikipedia.org/wiki/N-sphere "
+"https://en.wikipedia.org/wiki/Clifford_torus "
+"https://en.wikipedia.org/wiki/Regular_polytope Written by Carsten Steger; "
+"2003."
+msgstr "Тор Клиффорда: тор лежит на \"поверхности\" гиперсферы 4D. Вдохновлённый книгой Томаса Банхофа \"За пределами третьего измерения: Геометрия, компьютерная графика, и более высокие измерения\", Научно-американская библиотека, 1990. https://en.wikipedia.org/wiki/N-sphere https://en.wikipedia.org/wiki/Clifford_torus https://en.wikipedia.org/wiki/Regular_polytope. Автор: Карстен Штегер; 2003."
#: ../hacks/config/hypnowheel.xml.h:1
msgid "Hypnowheel"
-msgstr ""
+msgstr "Гипно-колесо"
#: ../hacks/config/hypnowheel.xml.h:7
msgid "Symmetric twisting"
-msgstr "Симметричное вращение"
+msgstr "Симметричное кручение"
#: ../hacks/config/hypnowheel.xml.h:11 ../hacks/config/intermomentary.xml.h:5
msgid "50"
-msgstr ""
+msgstr "50"
#: ../hacks/config/hypnowheel.xml.h:15
msgid "Twistiness"
-msgstr "Наклон"
+msgstr "Скрученность"
#: ../hacks/config/hypnowheel.xml.h:17
msgid ""
"A overlapping, translucent spiral patterns. The tightness of their spirals "
"fluctuates in and out. https://en.wikipedia.org/wiki/Moire_pattern Written "
"by Jamie Zawinski; 2008."
-msgstr ""
+msgstr "Перекрываемые полупрозрачные спиральные узоры. В течение времени количество их меняется. https://en.wikipedia.org/wiki/Moire_pattern Автор Джейми Завински; 2008."
#: ../hacks/config/ifs.xml.h:1
msgid "IFS"
-msgstr ""
+msgstr "Система итерируемых функций"
#: ../hacks/config/ifs.xml.h:24
msgid "Number of functions"
@@ -5837,7 +5860,7 @@ msgstr "Количество функций"
#: ../hacks/config/ifs.xml.h:25
msgid "6"
-msgstr ""
+msgstr "6"
#: ../hacks/config/ifs.xml.h:26
msgid "Detail"
@@ -5853,15 +5876,15 @@ msgstr "Масштаб"
#: ../hacks/config/ifs.xml.h:69
msgid ""
-"Clouds of iterated function systems spin and collide. Note that the \"Detail"
-"\" parameter is exponential. Number of points drawn is functions^detail. "
-"https://en.wikipedia.org/wiki/Iterated_function_system Written by Chris Le "
-"Sueur and Robby Griffin; 1997."
-msgstr ""
+"Clouds of iterated function systems spin and collide. Note that the "
+"\"Detail\" parameter is exponential. Number of points drawn is "
+"functions^detail. https://en.wikipedia.org/wiki/Iterated_function_system "
+"Written by Chris Le Sueur and Robby Griffin; 1997."
+msgstr "Облака вращаются и сталкиваются. Обратите внимание, что параметр \"Деталь\" является экспоненциальным. https://en.wikipedia.org/wiki/Iterated_function_system Автор: Крис Ле Сюэр и Робби Гриффин; 1997."
#: ../hacks/config/imsmap.xml.h:1
msgid "IMSMap"
-msgstr ""
+msgstr "IMS-карта"
#: ../hacks/config/imsmap.xml.h:5
msgid "1 Second"
@@ -5890,11 +5913,11 @@ msgid ""
"them, and give it a value which is the average of the other four, plus some "
"small random offset. Coloration is done based on elevation. Written by "
"Juergen Nickelsen and Jamie Zawinski; 1992."
-msgstr ""
+msgstr "Облакоподобные узоры. Идея заключается в том, чтобы взять четыре точки на краю изображения и присвоить каждой случайное \"возвышение\". Затем найти точку между ними и придать ей значение, которое составляет среднее от остальных четырёх, плюс некоторое малое случайное смещение. Окрашивание производится на основании высоты. Авторы: Юрген Никельсен и Джейми Завински; 1992."
#: ../hacks/config/interaggregate.xml.h:1
msgid "Interaggregate"
-msgstr ""
+msgstr "Интерактивное скопление"
#: ../hacks/config/interaggregate.xml.h:6
#: ../hacks/config/intermomentary.xml.h:6
@@ -5909,11 +5932,11 @@ msgid ""
"intersections of the circles as well as the aggregate intersections of the "
"circles. Though actually it doesn't look like circles at all! Written by "
"Casey Reas, William Ngan, Robert Hodgin, and Jamie Zawinski; 2004."
-msgstr ""
+msgstr "Бледные карандаш-подобные писальщики медленно заполняют экран. Поверхность заполнена ста кругами средних и малых размеров. Каждый круг имеет свой размер и направление, но движется в медленном темпе. Отображает мгновенные пересечения окружностей, а также совокупные пересечения окружностей. Хотя на самом деле это так не выглядит! Авторы: Кейси Рис, Уильям Нган, Роберт Ходгин и Джейми Завински; 2004."
#: ../hacks/config/interference.xml.h:1
msgid "Interference"
-msgstr ""
+msgstr "Интерференция"
#: ../hacks/config/interference.xml.h:9
msgid "Wave size"
@@ -5933,21 +5956,21 @@ msgstr "Оттенок"
#: ../hacks/config/interference.xml.h:20
msgid "360"
-msgstr ""
+msgstr "360"
#: ../hacks/config/interference.xml.h:22
msgid ""
"Color field based on computing decaying sinusoidal waves. Written by Hannu "
"Mallat; 1998."
-msgstr ""
+msgstr "Цвет поля на основе вычисления угасающей синусоидальной волны. Автор: Ханну Маллат; 1998."
#: ../hacks/config/intermomentary.xml.h:1
msgid "Intermomentary"
-msgstr ""
+msgstr "Межмоментный"
#: ../hacks/config/intermomentary.xml.h:7
msgid "400"
-msgstr ""
+msgstr "400"
#: ../hacks/config/intermomentary.xml.h:9
msgid ""
@@ -5959,12 +5982,13 @@ msgid ""
"some arbitrary size. Circles are drawn with small moving points along the "
"perimeter. The intersections are rendered as glowing orbs. Glowing orbs are "
"rendered only when a perimeter point moves past the intersection point. "
-"Written by Casey Reas, William Ngan, Robert Hodgin, and Jamie Zawinski; 2004."
-msgstr ""
+"Written by Casey Reas, William Ngan, Robert Hodgin, and Jamie Zawinski; "
+"2004."
+msgstr "Мигающие точки взаимодействуют друг с другом по кругу. Поверхность заполнена ста кругами средних и малых размеров. Каждый круг имеет свой размер и направление, но движется в медленном темпе. Отображает мгновенные пересечения окружностей, а также совокупные пересечения окружностей. Круги начинаются с радиуса 1 пиксель и медленно увеличиваются до некоторого произвольного размера. Круги рисуются небольшими движущимися точками по периметру. Пересечения отображаются в виде светящихся шаров. Светящимися шары становятся только тогда, когда точка периметра проходит мимо точки пересечения. Авторы: Кейси Рис, Уильям Нган, Роберт Ходгин и Джейми Завински; 2004."
#: ../hacks/config/jigglypuff.xml.h:1
msgid "JigglyPuff"
-msgstr ""
+msgstr "Джигглипуф"
#: ../hacks/config/jigglypuff.xml.h:2
msgid "Randomize almost everything"
@@ -5976,7 +6000,7 @@ msgstr "Цикл"
#: ../hacks/config/jigglypuff.xml.h:4
msgid "Flower box"
-msgstr "Коробка цветов"
+msgstr "Цветочный ящик"
#: ../hacks/config/jigglypuff.xml.h:5
msgid "Clown barf"
@@ -5989,7 +6013,7 @@ msgstr "Сфера"
#: ../hacks/config/jigglypuff.xml.h:8 ../hacks/config/morph3d.xml.h:6
#: ../hacks/config/polyhedra.xml.h:22 ../hacks/config/sballs.xml.h:6
msgid "Tetrahedron"
-msgstr "Тетраэдр"
+msgstr "Четырёхгранник"
#: ../hacks/config/jigglypuff.xml.h:17
msgid "Inertial damping"
@@ -6013,7 +6037,7 @@ msgstr "Поведение вершин"
#: ../hacks/config/jigglypuff.xml.h:25
msgid "Collapse"
-msgstr "Сжатие"
+msgstr "Крах"
#: ../hacks/config/jigglypuff.xml.h:26
msgid "Spookiness"
@@ -6028,15 +6052,15 @@ msgid ""
"Quasi-spherical objects are distorted. You have a tetrahedron with "
"tesselated faces. The vertices on these faces have forces on them: one "
"proportional to the distance from the surface of a sphere; and one "
-"proportional to the distance from the neighbors. They also have inertia. The "
-"resulting effect can range from a shape that does nothing, to a frenetic "
+"proportional to the distance from the neighbors. They also have inertia. The"
+" resulting effect can range from a shape that does nothing, to a frenetic "
"polygon storm. Somewhere in between there it usually manifests as a blob "
"that jiggles in a kind of disturbing manner. Written by Keith Macleod; 2003."
-msgstr ""
+msgstr "Квазисферические объекты искажаются. У вас есть четырёхгранник с мозаичными гранями. Вершины этих граней имеют усилия: одно - пропорционально расстоянию от поверхности сферы, другое - пропорционально расстоянию от соседей. Четырёхгранник также обладает инерцией. Полученный эффект может варьироваться от формы. Обычно проявляется в виде сгустка, который покачивается, своего рода, тревожным образом. Автор: Кейт Маклеод; 2003."
#: ../hacks/config/jigsaw.xml.h:1
msgid "Jigsaw"
-msgstr ""
+msgstr "Пазл"
#: ../hacks/config/jigsaw.xml.h:9
msgid "Puzzle pieces"
@@ -6044,7 +6068,7 @@ msgstr "Кусочки пазла"
#: ../hacks/config/jigsaw.xml.h:11
msgid "Chunky"
-msgstr "Жесткий"
+msgstr "Коренастый"
#: ../hacks/config/jigsaw.xml.h:14 ../hacks/config/sonar.xml.h:33
msgid "Tilt"
@@ -6052,14 +6076,14 @@ msgstr "Наклон"
#: ../hacks/config/jigsaw.xml.h:16
msgid ""
-"Carves an image up into a jigsaw puzzle, shuffles it, and solves it. https://"
-"en.wikipedia.org/wiki/Jigsaw_puzzle https://en.wikipedia.org/wiki/"
-"Tessellation Written by Jamie Zawinski; 1997."
-msgstr ""
+"Carves an image up into a jigsaw puzzle, shuffles it, and solves it. "
+"https://en.wikipedia.org/wiki/Jigsaw_puzzle "
+"https://en.wikipedia.org/wiki/Tessellation Written by Jamie Zawinski; 1997."
+msgstr "Дробит изображение в головоломку, перемешивает его, и решает её. https://en.wikipedia.org/wiki/Jigsaw_puzzle https://en.wikipedia.org/wiki/Tessellation Автор: Джейми Завински; 1997."
#: ../hacks/config/juggle.xml.h:1
msgid "Juggle"
-msgstr ""
+msgstr "Жонглирование"
#: ../hacks/config/juggle.xml.h:9 ../hacks/config/juggler3d.xml.h:9
msgid "Performance length"
@@ -6088,33 +6112,33 @@ msgstr "Шары для боулинга"
#: ../hacks/config/juggle.xml.h:19 ../hacks/config/juggler3d.xml.h:19
msgid "Print Cambridge juggling pattern descriptions"
-msgstr "Выводить кембриджские описания паттернов жонглирования"
+msgstr "Выводить кембриджские описания шаблонов жонглирования"
#: ../hacks/config/juggle.xml.h:20 ../hacks/config/juggler3d.xml.h:20
msgid "Juggle this pattern"
-msgstr "Жонглировать этим паттерном"
+msgstr "Жонглировать этим шаблоном"
#: ../hacks/config/juggle.xml.h:22
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.09. It has been replaced by the \"Juggler3D\" screen saver. "
"Written by Tim Auckland; 2002."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.09. Она была заменена на \"3D-жонглирование\". Автор: Тим Окленд; 2002."
#: ../hacks/config/juggler3d.xml.h:1
msgid "Juggler3D"
-msgstr ""
+msgstr "3D-жонглирование"
#: ../hacks/config/juggler3d.xml.h:22
msgid ""
"A 3D juggling stick-man, with Cambridge juggling pattern notation used to "
"describe the patterns he juggles. https://en.wikipedia.org/wiki/Siteswap "
"Written by Tim Auckland and Jamie Zawinski; 2002."
-msgstr ""
+msgstr "3D жонглирующий человечек с описанием кембриджского шаблона жонглирования, используемой для описания шаблонов, которыми он жонглирует. https://en.wikipedia.org/wiki/Siteswap Авторы: Тим Окленде и Джейми Завински; 2002."
#: ../hacks/config/julia.xml.h:1
msgid "Julia"
-msgstr ""
+msgstr "Жюлиа"
#: ../hacks/config/julia.xml.h:9 ../hacks/config/rorschach.xml.h:3
msgid "Iterations"
@@ -6124,13 +6148,13 @@ msgstr "Итерации"
msgid ""
"The Julia set is a close relative of the Mandelbrot set. The small moving "
"dot indicates the control point from which the rest of the image was "
-"generated. See also the \"Discrete\" screen saver. https://en.wikipedia.org/"
-"wiki/Julia_set Written by Sean McCullough; 1997."
-msgstr ""
+"generated. See also the \"Discrete\" screen saver. "
+"https://en.wikipedia.org/wiki/Julia_set Written by Sean McCullough; 1997."
+msgstr "Множество Жюлиа является близким родственником множества Мандельброта. Небольшое перемещение точки указывает на контрольную точку, из которой была сгенерирована остальная часть изображения. Смотрите также хранитель экрана \"Дискретный\". https://en.wikipedia.org/wiki/Julia_set Автор: Шон Маккалоу; 1997."
#: ../hacks/config/kaleidescope.xml.h:1
msgid "Kaleidescope"
-msgstr ""
+msgstr "Калейдоскоп"
#: ../hacks/config/kaleidescope.xml.h:6 ../hacks/config/qix.xml.h:6
msgid "Segments"
@@ -6138,7 +6162,7 @@ msgstr "Сегменты"
#: ../hacks/config/kaleidescope.xml.h:8
msgid "3"
-msgstr ""
+msgstr "3"
#: ../hacks/config/kaleidescope.xml.h:9 ../hacks/config/quasicrystal.xml.h:12
msgid "Symmetry"
@@ -6146,7 +6170,7 @@ msgstr "Симметрия"
#: ../hacks/config/kaleidescope.xml.h:10
msgid "32"
-msgstr ""
+msgstr "32"
#: ../hacks/config/kaleidescope.xml.h:11
msgid "Trails"
@@ -6157,29 +6181,29 @@ msgid ""
"A simple kaleidoscope made of line segments. See \"GLeidescope\" for a more "
"sophisticated take. https://en.wikipedia.org/wiki/Kaleidoscope Written by "
"Ron Tapia; 1997."
-msgstr ""
+msgstr "Простой калейдоскоп из отрезков. Более сложный - смотрите \"GL-лейдоскоп\" . https://en.wikipedia.org/wiki/Kaleidoscope Автор: Рон Тапиа; 1997."
#: ../hacks/config/kaleidocycle.xml.h:1
msgid "Kaleidocycle"
-msgstr ""
+msgstr "Калейдоцикл"
#: ../hacks/config/kaleidocycle.xml.h:7 ../hacks/config/raverhoop.xml.h:7
msgid "64"
-msgstr ""
+msgstr "64"
#: ../hacks/config/kaleidocycle.xml.h:22
msgid ""
"Draw a ring composed of tetrahedra connected at the edges that twists and "
-"rotates toroidally. When a series of tetrahedra are joined at the edges in a "
-"loop, it is possible for them to rotate continously through the center "
+"rotates toroidally. When a series of tetrahedra are joined at the edges in a"
+" loop, it is possible for them to rotate continously through the center "
"without deforming. This only works with an even number of tetrahedra, and "
"there must be eight or more, or they don't fit. Written by Jamie Zawinski; "
"2013."
-msgstr ""
+msgstr "Рисует кольцо, состоящее из тетраэдров, соединённых по краям, которые крутятся и вращаются тороидально. Когда ряд тетраэдров соединён по краям в цикл, возможно, что они будут непрерывно вращаться через центр не деформируясь. Это работает только с чётным числом тетраэдров, их должно быть восемь, или больше, иначе - ничего не получится. Автор: Джейми Завински; 2013."
#: ../hacks/config/klein.xml.h:1
msgid "Klein"
-msgstr ""
+msgstr "Кляйн"
#: ../hacks/config/klein.xml.h:3
msgid "Figure 8"
@@ -6191,7 +6215,7 @@ msgstr "Сжатый тор"
#: ../hacks/config/klein.xml.h:5
msgid "Lawson"
-msgstr ""
+msgstr "Лоусон"
#: ../hacks/config/klein.xml.h:6 ../hacks/config/projectiveplane.xml.h:38
#: ../hacks/config/qix.xml.h:15 ../hacks/config/romanboy.xml.h:2
@@ -6201,7 +6225,7 @@ msgstr "Случайное движение"
#: ../hacks/config/klein.xml.h:7 ../hacks/config/projectiveplane.xml.h:39
#: ../hacks/config/romanboy.xml.h:3
msgid "Walk"
-msgstr "Движение прямо"
+msgstr "Хождение"
#: ../hacks/config/klein.xml.h:8 ../hacks/config/projectiveplane.xml.h:40
#: ../hacks/config/romanboy.xml.h:4
@@ -6210,7 +6234,7 @@ msgstr "Поворот"
#: ../hacks/config/klein.xml.h:9 ../hacks/config/projectiveplane.xml.h:41
msgid "Walk and turn"
-msgstr "Движение прямо и поворот"
+msgstr "Хождение и поворот"
#: ../hacks/config/klein.xml.h:10 ../hacks/config/projectiveplane.xml.h:42
#: ../hacks/config/romanboy.xml.h:6
@@ -6225,7 +6249,7 @@ msgstr "Случайная поверхность"
#: ../hacks/config/klein.xml.h:12 ../hacks/config/polytopes.xml.h:2
#: ../hacks/config/projectiveplane.xml.h:3 ../hacks/config/romanboy.xml.h:15
msgid "Wireframe mesh"
-msgstr "Ячеистая поверхность"
+msgstr "Каркасная сетка"
#: ../hacks/config/klein.xml.h:13 ../hacks/config/mirrorblob.xml.h:27
#: ../hacks/config/polytopes.xml.h:3 ../hacks/config/projectiveplane.xml.h:4
@@ -6241,7 +6265,7 @@ msgstr "Прозрачная поверхность"
#: ../hacks/config/klein.xml.h:15 ../hacks/config/projectiveplane.xml.h:6
#: ../hacks/config/romanboy.xml.h:18
msgid "Random pattern"
-msgstr "Случайный паттерн"
+msgstr "Случайный узор"
#: ../hacks/config/klein.xml.h:17
msgid "See-through bands"
@@ -6265,27 +6289,27 @@ msgstr "Случайное 4D"
#: ../hacks/config/klein.xml.h:36 ../hacks/config/romanboy.xml.h:34
msgid "-180.0"
-msgstr ""
+msgstr "-180.0"
#: ../hacks/config/klein.xml.h:37 ../hacks/config/romanboy.xml.h:35
msgid "Walking direction"
-msgstr "Направление движения"
+msgstr "Направление ходьбы"
#: ../hacks/config/klein.xml.h:38 ../hacks/config/romanboy.xml.h:36
msgid "180.0"
-msgstr ""
+msgstr "180.0"
#: ../hacks/config/klein.xml.h:39 ../hacks/config/romanboy.xml.h:8
msgid "1.0"
-msgstr ""
+msgstr "1.0"
#: ../hacks/config/klein.xml.h:40 ../hacks/config/romanboy.xml.h:37
msgid "Walking speed"
-msgstr "Скорость движения"
+msgstr "Скорость ходьбы"
#: ../hacks/config/klein.xml.h:41 ../hacks/config/romanboy.xml.h:10
msgid "100.0"
-msgstr ""
+msgstr "100.0"
#: ../hacks/config/klein.xml.h:46
msgid ""
@@ -6293,27 +6317,27 @@ msgid ""
"surface of the bottle or rotate it in 4D or walk on it while it rotates in "
"4D. Inspired by Thomas Banchoff's book \"Beyond the Third Dimension: "
"Geometry, Computer Graphics, and Higher Dimensions\", Scientific American "
-"Library, 1990. https://en.wikipedia.org/wiki/Klein_bottle Written by Carsten "
-"Steger; 2008."
-msgstr ""
+"Library, 1990. https://en.wikipedia.org/wiki/Klein_bottle Written by Carsten"
+" Steger; 2008."
+msgstr "Бутылка Кляйна является 4D аналогом ленты Мёбиуса. Вы можете ходить по поверхности бутылки или пововорачивать её в 4D, ходить по ней, пока она вращается в 4D. Вдохновлённый книгой Томаса Банчоф \"Вне третьего измерения: Геометрия, компьютерной графики, и более высокие измерения\", научная американская библиотека, 1990. https://en.wikipedia.org/wiki/Klein_bottle Автор Карстен Стегер; 2008."
#: ../hacks/config/kumppa.xml.h:1
msgid "Kumppa"
-msgstr ""
+msgstr "Каппа"
#: ../hacks/config/kumppa.xml.h:6
msgid "Randomize"
-msgstr "Выбирать все случайно"
+msgstr "Случайные значения"
#: ../hacks/config/kumppa.xml.h:9
msgid ""
"Spiraling, spinning, and very, very fast splashes of color rush toward the "
"screen. Written by Teemu Suutari; 1998."
-msgstr ""
+msgstr "Вихрь, вращение, и очень, очень быстрые всплески цвета на экране. Автор: Теему Суутари; 1998."
#: ../hacks/config/lament.xml.h:1
msgid "Lament"
-msgstr ""
+msgstr "Плач"
#: ../hacks/config/lament.xml.h:9
#, no-c-format
@@ -6321,22 +6345,22 @@ msgid ""
"Lemarchand's Box, the Lament Configuration. Warning: occasionally opens "
"doors. https://en.wikipedia.org/wiki/Lemarchand%27s_box Written by Jamie "
"Zawinski; 1998."
-msgstr ""
+msgstr "Шкатулка Лемаршана, Конфигурация плача. Внимание: иногда открывает двери. https://en.wikipedia.org/wiki/Lemarchand%27s_box Автор: Джейми Завински; 1998."
#: ../hacks/config/laser.xml.h:1
msgid "Laser"
-msgstr ""
+msgstr "Лазер"
#: ../hacks/config/laser.xml.h:13
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.08. Moving radiating lines, that look vaguely like scanning laser "
"beams. (Frankie say relax.) Written by Pascal Pensa; 1997."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Перемещение расходящихся линий, которые выглядят неопределённо, как сканированные лазерные пучки. (Фрэнки надо отдохнуть.) Автор: Паскаль Пенза; 1997."
#: ../hacks/config/lavalite.xml.h:1
msgid "Lavalite"
-msgstr ""
+msgstr "Лавовая лампа"
#: ../hacks/config/lavalite.xml.h:9
msgid "Max blobs"
@@ -6380,13 +6404,13 @@ msgid ""
"configuration of the globe and base of the motion lamp are registered "
"trademarks of Haggerty Enterprises, Inc. in the U.S.A. and in other "
"countries around the world.\" https://en.wikipedia.org/wiki/Lava_lamp "
-"https://en.wikipedia.org/wiki/Metaballs https://en.wikipedia.org/wiki/"
-"Lavarand Written by Jamie Zawinski; 2002."
-msgstr ""
+"https://en.wikipedia.org/wiki/Metaballs "
+"https://en.wikipedia.org/wiki/Lavarand Written by Jamie Zawinski; 2002."
+msgstr "Моделирование лавовой лампы(r). Нечётные сгустки таинственной субстанции нагреваются, медленно поднимаются в верхнюю часть бутылки, а затем, остывая, падают вниз. Это моделирование требует довольно быструю машину (как и процессор с 3D-производительностью.) \"ЛАВОВАЯ ЛАМПА(r) и конфигурация движущейся лампы ЛАВЫ(r) являются зарегистрированными торговыми марками Haggerty Enterprises, Inc. Конфигурация земного шара и базы движущейся лампы являются зарегистрированными торговыми марками Haggerty Enterprises, Inc. в США и в других странах по всему миру\". https://en.wikipedia.org/wiki/Lava_lamp https://en.wikipedia.org/wiki/Metaballs https://en.wikipedia.org/wiki/Lavarand Автор: Джейми Завински; 2002."
#: ../hacks/config/lcdscrub.xml.h:1
msgid "LCDscrub"
-msgstr ""
+msgstr "LCD-скраб"
#: ../hacks/config/lcdscrub.xml.h:5
msgid "Line spread"
@@ -6414,19 +6438,19 @@ msgstr "Первичные цвета"
#: ../hacks/config/lcdscrub.xml.h:13
msgid "Horizontal black"
-msgstr "Горизонтальные черные"
+msgstr "Горизонтальные чёрные"
#: ../hacks/config/lcdscrub.xml.h:14
msgid "Vertical black"
-msgstr "Вертикальные черные"
+msgstr "Вертикальные чёрные"
#: ../hacks/config/lcdscrub.xml.h:15
msgid "Diagonal black"
-msgstr "Диагональные черные"
+msgstr "Диагональные чёрные"
#: ../hacks/config/lcdscrub.xml.h:16
msgid "Solid black"
-msgstr "Сплошные черные"
+msgstr "Сплошные чёрные"
#: ../hacks/config/lcdscrub.xml.h:17
msgid ""
@@ -6434,41 +6458,41 @@ msgid ""
"pretty. Believe it or not, screen burn is not a thing of the past. It can "
"happen to LCD screens pretty easily, even in this modern age. However, "
"leaving the screen on and displaying high contrast images can often repair "
-"the damage. That's what this screen saver does. See also: http://docs.info."
-"apple.com/article.html?artnum=88343 http://toastycode.com/blog/2008/02/05/"
-"lcd-scrub/ Inspired by the like-named program by Daniel Sandler. Written by "
-"Jamie Zawinski; 2008."
-msgstr ""
+"the damage. That's what this screen saver does. See also: "
+"http://docs.info.apple.com/article.html?artnum=88343 "
+"http://toastycode.com/blog/2008/02/05/lcd-scrub/ Inspired by the like-named "
+"program by Daniel Sandler. Written by Jamie Zawinski; 2008."
+msgstr "Ремонт выгорания на LCD/ЖК-мониторах. Эта заставка является функциональной. Верите вы, или нет, выгорание экрана не является делом прошлого. Это может случиться с ЖК-экранами довольно легко, даже в современную эпоху. Тем не менее, использование экрана высокой контрастности может не довести до этого. Смотрите также: http://docs.info.apple.com/article.html?artnum=88343 http://toastycode.com/blog/2008/02/05/lcd-scrub/ Вдохновлённый одноимённой программой Даниила Сандлера. Автор: Джейми Завински; 2008."
#: ../hacks/config/lightning.xml.h:1
msgid "Lightning"
-msgstr ""
+msgstr "Молния"
#: ../hacks/config/lightning.xml.h:9
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.08. Crackling fractal lightning bolts. Written by Keith Romberg; "
"1997."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Сверкающие фрактальные молнии. Автор Кейт Ромберг; 1997."
#: ../hacks/config/lisa.xml.h:1
msgid "Lisa"
-msgstr ""
+msgstr "Лиза"
#: ../hacks/config/lisa.xml.h:6
msgid "Steps"
-msgstr ""
+msgstr "Шаги"
#: ../hacks/config/lisa.xml.h:17
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
-"version 5.08. Lissajous loops. https://en.wikipedia.org/wiki/Lissajous_curve "
-"Written by Caleb Cullen; 1997."
-msgstr ""
+"version 5.08. Lissajous loops. https://en.wikipedia.org/wiki/Lissajous_curve"
+" Written by Caleb Cullen; 1997."
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Петли Лиссажу. https://en.wikipedia.org/wiki/Lissajous_curve Автор Калеб Каллена; 1997."
#: ../hacks/config/lissie.xml.h:1
msgid "Lissie"
-msgstr ""
+msgstr "Лисси"
#: ../hacks/config/lissie.xml.h:16
msgid ""
@@ -6476,50 +6500,50 @@ msgid ""
"version 5.08. Lissajous loops. This one draws the progress of circular "
"shapes along a path. https://en.wikipedia.org/wiki/Lissajous_curve Written "
"by Alexander Jolk; 1997."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Петли Лиссажу. Она рисует прогресс круглых форм вдоль пути. https://en.wikipedia.org/wiki/Lissajous_curve Автор: Александр Джолк; 1997."
#: ../hacks/config/lmorph.xml.h:1
msgid "LMorph"
-msgstr ""
+msgstr "L-превращение"
#: ../hacks/config/lmorph.xml.h:6
msgid "Control points"
-msgstr ""
+msgstr "Контрольные точки"
#: ../hacks/config/lmorph.xml.h:8
msgid "Less"
-msgstr ""
+msgstr "Меньше"
#: ../hacks/config/lmorph.xml.h:9
msgid "Interpolation steps"
-msgstr ""
+msgstr "Шаги интерполяции"
#: ../hacks/config/lmorph.xml.h:10
msgid "More"
-msgstr ""
+msgstr "Больше"
#: ../hacks/config/lmorph.xml.h:14
msgid "Open and closed figures"
-msgstr ""
+msgstr "Открытые и закрытые фигуры"
#: ../hacks/config/lmorph.xml.h:15
msgid "Open figures"
-msgstr ""
+msgstr "Открые фигуры"
#: ../hacks/config/lmorph.xml.h:16
msgid "Closed figures"
-msgstr ""
+msgstr "Закрытые фигуры"
#: ../hacks/config/lmorph.xml.h:18
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.08. This generates random spline-ish line drawings and morphs "
"between them. Written by Sverre H. Huseby and Glenn T. Lines; 1995."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Генерирует случайные сплайны линейных чертежей и преобразования между ними. Автор: Сверре Х. Хьюзбай и Гленн Т. Лайнс; 1995."
#: ../hacks/config/lockward.xml.h:1
msgid "Lockward"
-msgstr ""
+msgstr "Заблокированная защита"
#: ../hacks/config/lockward.xml.h:5
msgid "Miniumum rotator idle time"
@@ -6551,15 +6575,15 @@ msgstr "Максимальное время задержки мерцания"
#: ../hacks/config/lockward.xml.h:13
msgid ""
-"A translucent spinning, blinking thing. Sort of a cross between the wards in "
-"an old combination lock and those old backlit information displays that "
+"A translucent spinning, blinking thing. Sort of a cross between the wards in"
+" an old combination lock and those old backlit information displays that "
"animated and changed color via polarized light. Written by Leo L. Schwab; "
"2007."
-msgstr ""
+msgstr "Полупрозрачная вращающаяся, мигающая вещь. Что-то вроде помехи между защитами в старом кодовом замке и теми старыми информационными дисплеями с подсветкой, которые оживляли и меняли цвет с помощью поляризованного света. Автор: Лео Л. Счваб; 2007."
#: ../hacks/config/loop.xml.h:1
msgid "Loop"
-msgstr ""
+msgstr "Петля"
#: ../hacks/config/loop.xml.h:14
#, no-c-format
@@ -6567,38 +6591,50 @@ msgid ""
"A cellular automaton that generates loop-shaped colonies that spawn, age, "
"and eventually die. https://en.wikipedia.org/wiki/Langton%27s_loops Written "
"by David Bagley; 1999."
-msgstr ""
+msgstr "Клеточный автомат, генерирует колонии петлеобразных; рождающихся, порождающих жизнь, и, в конце концов, умирающих. https://en.wikipedia.org/wiki/Langton%27s_loops Автор: Дэвид Бэгли; 1999 год."
#: ../hacks/config/m6502.xml.h:1
msgid "m6502"
-msgstr ""
+msgstr "m6502"
-#: ../hacks/config/m6502.xml.h:3
-msgid "Display time for each program"
-msgstr "Время отображения каждой программы"
+#: ../hacks/config/m6502.xml.h:2
+msgid "Assembly file"
+msgstr "Сборочный файл"
#: ../hacks/config/m6502.xml.h:5
-msgid "Assembly file"
-msgstr "Файл ассемблера"
+msgid "Display time for each program"
+msgstr "Отображать время для каждой программы"
+
+#: ../hacks/config/m6502.xml.h:11
+msgid "500"
+msgstr "500"
+
+#: ../hacks/config/m6502.xml.h:12
+msgid "Instructions per second"
+msgstr "Инструкций в секунду"
#: ../hacks/config/m6502.xml.h:13
+msgid "120000"
+msgstr "120000"
+
+#: ../hacks/config/m6502.xml.h:16
msgid ""
"Emulates a 6502 microprocessor, and runs some example programs on it. The "
-"family of 6502 chips were used throughout the 70's and 80's in machines such "
-"as the Atari 2600, Commodore PET, VIC20 and C64, Apple ][, and the NES. Some "
-"example programs are included, and it can also read in an assembly file as "
-"input. Original JavaScript Version by Stian Soreng: http://www.6502asm.com/. "
-"Ported to XScreenSaver by Jeremy English. Written by Stian Soreng and Jeremy "
-"English; 2007."
-msgstr ""
+"family of 6502 chips were used throughout the 70's and 80's in machines such"
+" as the Atari 2600, Commodore PET, VIC20 and C64, Apple ][, and the NES. "
+"Some example programs are included, and it can also read in an assembly file"
+" as input. Original JavaScript Version by Stian Soreng: "
+"http://www.6502asm.com/. Ported to XScreenSaver by Jeremy English. Written "
+"by Stian Soreng and Jeremy English; 2007."
+msgstr "Эмулирует микропроцессор 6502 и запускает несколько примеров программ на нём. Семья 6502 чипов была использована на протяжении 70-х и 80-х годов в машинах, таких как Atari 2600, Commodore PET, VIC20 и C64, Apple] [ и NES. Включены некоторые примеры программ, об этом также можно прочитать в файле сборки в качестве входных данных. Оригинальная версия на JavaScript автора Стиан Сёренг: http://www.6502asm.com/. Портирована на XScreenSaver Джереми Инглиш. Автор: Стиан Сёренг и Джереми Инглиш; 2007."
#: ../hacks/config/maze.xml.h:1
msgid "Maze"
-msgstr ""
+msgstr "Лабиринт"
#: ../hacks/config/maze.xml.h:5
msgid "Random maze generator"
-msgstr "Случайный генератор лабиринта"
+msgstr "Генератор случайных лабиринтов"
#: ../hacks/config/maze.xml.h:6
msgid "Depth-first backtracking maze generator"
@@ -6636,15 +6672,50 @@ msgstr "Время после решения"
msgid ""
"Generates random mazes, with three different algorithms: Kruskal, Prim, and "
"a depth-first recursive backtracker. It also solves them. Backtracking and "
-"look-ahead paths are displayed in different colors. https://en.wikipedia.org/"
-"wiki/Maze_generation_algorithm https://en.wikipedia.org/wiki/"
-"Maze_solving_algorithm Written by Martin Weiss, Dave Lemke, Jim Randell, "
-"Jamie Zawinski, Johannes Keukelaar, and Zack Weinberg; 1985."
-msgstr ""
+"look-ahead paths are displayed in different colors. "
+"https://en.wikipedia.org/wiki/Maze_generation_algorithm "
+"https://en.wikipedia.org/wiki/Maze_solving_algorithm Written by Martin "
+"Weiss, Dave Lemke, Jim Randell, Jamie Zawinski, Johannes Keukelaar, and Zack"
+" Weinberg; 1985."
+msgstr "Генерирует случайные лабиринты, с тремя различными алгоритмами: Крускала, Прима, и в глубину рекурсивного обратного хода. Он также решает случайные лабиринты. Возвраты и пути упреждения отображаются в разных цветах. https://en.wikipedia.org/wiki/Maze_generation_algorithm https://en.wikipedia.org/wiki/Maze_solving_algorithm Авторы: Мартин Вайс, Дэйв Лемке, Джим Ранделл, Джейми Завински, Джоханнес Кеукелаар и Зак Вейнберг; 1985."
+
+#: ../hacks/config/maze3d.xml.h:1
+msgid "Maze3D"
+msgstr "3D-лабиринт"
+
+#: ../hacks/config/maze3d.xml.h:8
+msgid "Show Overlay"
+msgstr "Показать наложение"
+
+#: ../hacks/config/maze3d.xml.h:9
+msgid "Acid"
+msgstr "Кислота"
+
+#: ../hacks/config/maze3d.xml.h:11 ../hacks/config/splitflap.xml.h:9
+msgid "Rows"
+msgstr "Строки"
+
+#: ../hacks/config/maze3d.xml.h:12 ../hacks/config/splitflap.xml.h:8
+msgid "Columns"
+msgstr "Столбцы"
+
+#: ../hacks/config/maze3d.xml.h:13
+msgid "Inverters"
+msgstr "Инверторы"
+
+#: ../hacks/config/maze3d.xml.h:14
+msgid "Rats"
+msgstr "Крысы"
+
+#: ../hacks/config/maze3d.xml.h:15
+msgid ""
+"A re-creation of the 3D Maze screensaver from Windows 95. Written by Sudoer;"
+" 2018."
+msgstr "Воссоздание заставки 3D-лабиринта из Windows 95. Автор Судоер; 2018."
#: ../hacks/config/memscroller.xml.h:1
msgid "MemScroller"
-msgstr ""
+msgstr "Прокручиватель памяти"
#: ../hacks/config/memscroller.xml.h:5
msgid "Dump memory"
@@ -6660,17 +6731,17 @@ msgstr "Прорисовывать в RGB"
#: ../hacks/config/memscroller.xml.h:8
msgid "Draw green"
-msgstr "Прорисовывать зеленым цветом"
+msgstr "Прорисовывать зелёным цветом"
#: ../hacks/config/memscroller.xml.h:10
msgid ""
"Scrolls a dump of its own memory in three windows at three different rates. "
"Written by Jamie Zawinski; 2004."
-msgstr ""
+msgstr "Прокрутка дампа собственной памяти в трёх окнах, на трёх разных скоростях. Автор: Джейми Завински; 2004."
#: ../hacks/config/menger.xml.h:1
msgid "Menger"
-msgstr ""
+msgstr "Менгер"
#: ../hacks/config/menger.xml.h:8 ../hacks/config/sierpinski3d.xml.h:8
msgid "Max depth"
@@ -6679,13 +6750,14 @@ msgstr "Максимальная глубина"
#: ../hacks/config/menger.xml.h:21
msgid ""
"The Menger Gasket is a cube-based recursive fractal object analagous to the "
-"Sierpinski Tetrahedron. https://en.wikipedia.org/wiki/Menger_sponge https://"
-"en.wikipedia.org/wiki/Sierpinski_carpet Written by Jamie Zawinski; 2001."
-msgstr ""
+"Sierpinski Tetrahedron. https://en.wikipedia.org/wiki/Menger_sponge "
+"https://en.wikipedia.org/wiki/Sierpinski_carpet Written by Jamie Zawinski; "
+"2001."
+msgstr "Уплотнение Менгера представляет собой куб на основе рекурсивного фрактального объекта, аналогичного тетраэдру Серпинского. https://en.wikipedia.org/wiki/Menger_sponge https://en.wikipedia.org/wiki/Sierpinski_carpet Автор: Джейми Завински; 2001."
#: ../hacks/config/metaballs.xml.h:1
msgid "MetaBalls"
-msgstr ""
+msgstr "Мета-шары"
#: ../hacks/config/metaballs.xml.h:11
msgid "Metaball count"
@@ -6701,21 +6773,21 @@ msgstr "Темп движения метамячей"
#: ../hacks/config/metaballs.xml.h:17
msgid ""
-"2D meta-balls: overlapping and merging balls with fuzzy edges. https://en."
-"wikipedia.org/wiki/Metaballs Written by W.P. van Paassen; 2003."
-msgstr ""
+"2D meta-balls: overlapping and merging balls with fuzzy edges. "
+"https://en.wikipedia.org/wiki/Metaballs Written by W.P. van Paassen; 2003."
+msgstr "2D мета-шары: перекрытие и слияние шаров с нечёткими краями. https://en.wikipedia.org/wiki/Metaballs Автор: В.П. ван Паасен; 2003."
#: ../hacks/config/mirrorblob.xml.h:1
msgid "MirrorBlob"
-msgstr ""
+msgstr "Сгусток с отражением"
#: ../hacks/config/mirrorblob.xml.h:5
msgid "0.1x"
-msgstr ""
+msgstr "0.1x"
#: ../hacks/config/mirrorblob.xml.h:7
msgid "3.0x"
-msgstr ""
+msgstr "3.0x"
#: ../hacks/config/mirrorblob.xml.h:8
msgid "5 sec"
@@ -6727,7 +6799,7 @@ msgstr "5 минут"
#: ../hacks/config/mirrorblob.xml.h:12
msgid "Transition duration"
-msgstr "Направление перехода"
+msgstr "Продолжительность перехода"
#: ../hacks/config/mirrorblob.xml.h:13 ../hacks/config/timetunnel.xml.h:4
msgid "30 sec"
@@ -6763,11 +6835,11 @@ msgstr "Смещение координат текстур"
#: ../hacks/config/mirrorblob.xml.h:28
msgid "A wobbly blob distorts images behind it. Written by Jon Dowdall; 2003."
-msgstr ""
+msgstr "Стекающий сгусток искажает изображение позади себя. Автор Джон Даудолл; 2003."
#: ../hacks/config/mismunch.xml.h:1
msgid "Mismunch"
-msgstr ""
+msgstr "Недожёвывание"
#: ../hacks/config/mismunch.xml.h:9 ../hacks/config/munch.xml.h:9
msgid "Simultaneous squares"
@@ -6776,7 +6848,7 @@ msgstr "Одновременные квадраты"
#: ../hacks/config/mismunch.xml.h:11 ../hacks/config/munch.xml.h:14
#: ../hacks/config/qix.xml.h:22
msgid "XOR"
-msgstr ""
+msgstr "Исключающее ИЛИ (XOR)"
#: ../hacks/config/mismunch.xml.h:14
msgid ""
@@ -6784,21 +6856,21 @@ msgid ""
"version 5.08. It was merged with the \"Munch\" screen saver. Munching "
"errors! This is a creatively broken misimplementation of the classic "
"munching squares graphics hack. See the \"Munch\" screen saver for the "
-"original. https://en.wikipedia.org/wiki/HAKMEM https://en.wikipedia.org/wiki/"
-"Munching_square Written by Steven Hazel; 2004."
-msgstr ""
+"original. https://en.wikipedia.org/wiki/HAKMEM "
+"https://en.wikipedia.org/wiki/Munching_square Written by Steven Hazel; 2004."
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Она была объединена с экранной заставкой \"Жевание\". Жевание давало сбои! Это творчески сломанная неправильная реализация классических жующих квадратов. См. хранитель экрана \"Жевание\" для оригинала. https://en.wikipedia.org/wiki/HAKMEM https://en.wikipedia.org/wiki/Munching_square Автор: Стивен Хейзел; 2004."
#: ../hacks/config/moebius.xml.h:1
msgid "Moebius"
-msgstr ""
+msgstr "Мёбиус"
#: ../hacks/config/moebius.xml.h:5
msgid "Solid floor"
-msgstr "Сплошная поверхность"
+msgstr "Сплошной пол"
#: ../hacks/config/moebius.xml.h:6
msgid "Draw ants"
-msgstr "Прорисовывать муравьев"
+msgstr "Прорисовывать муравьёв"
#: ../hacks/config/moebius.xml.h:8
msgid ""
@@ -6806,31 +6878,31 @@ msgid ""
"surface of a moebius strip. https://en.wikipedia.org/wiki/Moebius_strip "
"https://en.wikipedia.org/wiki/Maurits_Cornelis_Escher Written by Marcelo F. "
"Vianna; 1997."
-msgstr ""
+msgstr "M.C. Эшер \"Лента Мёбиуса II\", образ муравьев, идущих по поверхности ленты Мёбиуса. https://en.wikipedia.org/wiki/Moebius_strip https://en.wikipedia.org/wiki/Maurits_Cornelis_Escher Автор Марсело Ф. Вианна; 1997."
#: ../hacks/config/moebiusgears.xml.h:1
msgid "MoebiusGears"
-msgstr ""
+msgstr "Шестерёнки Мебиуса"
#: ../hacks/config/moebiusgears.xml.h:8
msgid "Number of gears"
-msgstr "Количество шестеренок"
+msgstr "Количество шестерёнок"
#: ../hacks/config/moebiusgears.xml.h:9
msgid "Number of teeth"
-msgstr "Количество зубцов"
+msgstr "Количество зубьев"
#: ../hacks/config/moebiusgears.xml.h:15
msgid ""
"An interlinked loop of rotating gears. The layout of the gears follows the "
"path of a moebius strip. See also the \"Pinion\" and \"Gears\" screen "
-"savers. https://en.wikipedia.org/wiki/Involute_gear https://en.wikipedia.org/"
-"wiki/Moebius_strip Written by Jamie Zawinski; 2007."
-msgstr ""
+"savers. https://en.wikipedia.org/wiki/Involute_gear "
+"https://en.wikipedia.org/wiki/Moebius_strip Written by Jamie Zawinski; 2007."
+msgstr "Взаимосвязанное вращение шестерёнок. Компоновка шестерёнок следует путём ленты Мёбиуса. Смотрите также хранители экрана: \"Круглая шестерёнка\" и \"Шестерёнка\". https://en.wikipedia.org/wiki/Involute_gear https://en.wikipedia.org/wiki/Moebius_strip Автор: Джейми Завински; 2007."
#: ../hacks/config/moire.xml.h:1
msgid "Moire"
-msgstr ""
+msgstr "Муар"
#: ../hacks/config/moire.xml.h:9 ../hacks/config/rorschach.xml.h:5
msgid "Offset"
@@ -6841,23 +6913,23 @@ msgid ""
"When the lines on the screen Make more lines in between, That's a moire'! "
"https://en.wikipedia.org/wiki/Moire_pattern Written by Jamie Zawinski and "
"Michael Bayne; 1997."
-msgstr ""
+msgstr "Когда на экране можно сделать больше линий, чем линий между ними - это муар! https://en.wikipedia.org/wiki/Moire_pattern Автор Джейми Завински и Майкл Бейн; 1997."
#: ../hacks/config/moire2.xml.h:1
msgid "Moire2"
-msgstr ""
+msgstr "Муар2"
#: ../hacks/config/moire2.xml.h:10
msgid ""
"Generates fields of concentric circles or ovals, and combines the planes "
-"with various operations. The planes are moving independently of one another, "
-"causing the interference lines to spray. https://en.wikipedia.org/wiki/"
-"Moire_pattern Written by Jamie Zawinski; 1998."
-msgstr ""
+"with various operations. The planes are moving independently of one another,"
+" causing the interference lines to spray. "
+"https://en.wikipedia.org/wiki/Moire_pattern Written by Jamie Zawinski; 1998."
+msgstr "Формирует поля концентрических окружностей или овалов и сочетает в себе плоскости с различными операциями. Плоскости движутся независимо друг от друга, в результате чего появляются интерференционные линии для распыления. https://en.wikipedia.org/wiki/Moire_pattern Автор: Джейми Завински; 1998."
#: ../hacks/config/molecule.xml.h:1
msgid "Molecule"
-msgstr ""
+msgstr "Молекула"
#: ../hacks/config/molecule.xml.h:8
msgid "Label atoms"
@@ -6869,7 +6941,7 @@ msgstr "Описание молекулы"
#: ../hacks/config/molecule.xml.h:12
msgid "Draw atomic nuclei"
-msgstr "Прорисовывать частицы атомов"
+msgstr "Прорисовывать атомные ядра"
#: ../hacks/config/molecule.xml.h:13
msgid "Draw atomic bonds"
@@ -6887,13 +6959,14 @@ msgstr "Файл или папка PDB"
#, no-c-format
msgid ""
"Some interesting molecules. Several molecules are built in, and it can also "
-"read PDB (Protein Data Bank) files as input. https://en.wikipedia.org/wiki/"
-"Protein_Data_Bank_%28file_format%29 Written by Jamie Zawinski; 2001."
-msgstr ""
+"read PDB (Protein Data Bank) files as input. "
+"https://en.wikipedia.org/wiki/Protein_Data_Bank_%28file_format%29 Written by"
+" Jamie Zawinski; 2001."
+msgstr "Некоторые интересные молекулы. Несколько молекул встроены, заставка также может читать PDB (Protein Data Bank/Банк Белковых Данных) файлы в качестве входных данных. https://en.wikipedia.org/wiki/Protein_Data_Bank_%28file_format%29 Автор: Джейми Завински; 2001."
#: ../hacks/config/morph3d.xml.h:1
msgid "Morph3D"
-msgstr ""
+msgstr "3D-превращение"
#: ../hacks/config/morph3d.xml.h:7 ../hacks/config/polyhedra.xml.h:30
#: ../hacks/config/sballs.xml.h:7
@@ -6917,13 +6990,14 @@ msgstr "Икосаэдр"
#: ../hacks/config/morph3d.xml.h:12
msgid ""
-"Platonic solids that turn inside out and get spikey. https://en.wikipedia."
-"org/wiki/Platonic_solid Written by Marcelo Vianna; 1997."
-msgstr ""
+"Platonic solids that turn inside out and get spikey. "
+"https://en.wikipedia.org/wiki/Platonic_solid Written by Marcelo Vianna; "
+"1997."
+msgstr "Выворачивая наизнанку Платоновы тела - получаем колючку. https://en.wikipedia.org/wiki/Platonic_solid Автор Марсело Вианна; 1997."
#: ../hacks/config/mountain.xml.h:1
msgid "Mountain"
-msgstr ""
+msgstr "Гора"
#: ../hacks/config/mountain.xml.h:6
msgid "Peaks"
@@ -6933,23 +7007,23 @@ msgstr "Пики"
msgid ""
"Generates random 3D plots that look vaguely mountainous. Written by Pascal "
"Pensa; 1997."
-msgstr ""
+msgstr "Генерирует случайные 3D графики, которые выглядят как смутные горы. Автор: Паскаль Пенза; 1997."
#: ../hacks/config/munch.xml.h:1
msgid "Munch"
-msgstr ""
+msgstr "Жевание"
#: ../hacks/config/munch.xml.h:11
msgid "Munch or mismunch"
-msgstr "Соединение или разделение"
+msgstr "Жевать или не жевать"
#: ../hacks/config/munch.xml.h:12
msgid "Munch only"
-msgstr "Только соединение"
+msgstr "Только жевать"
#: ../hacks/config/munch.xml.h:13
msgid "Mismunch only"
-msgstr "Только разделение"
+msgstr "Только не жевать"
#: ../hacks/config/munch.xml.h:17
msgid ""
@@ -6957,28 +7031,28 @@ msgid ""
"Memo 239, 1972), Jackson Wright wrote the above PDP-1 code in 1962. That "
"code still lives on here, some 46 years later. In \"mismunch\" mode, it "
"displays a creatively broken misimplementation of the classic munching "
-"squares algorithm instead. https://en.wikipedia.org/wiki/HAKMEM https://en."
-"wikipedia.org/wiki/Munching_square Written by Jackson Wright, Tim Showalter, "
-"Jamie Zawinski and Steven Hazel; 1997."
-msgstr ""
+"squares algorithm instead. https://en.wikipedia.org/wiki/HAKMEM "
+"https://en.wikipedia.org/wiki/Munching_square Written by Jackson Wright, Tim"
+" Showalter, Jamie Zawinski and Steven Hazel; 1997."
+msgstr "DATAI 2 ADDB 1,2 ROTC 2, -22 XOR 1,2 JRST.-4 Как сообщает HAKMEM (MIT AI Memo 239, 1972), Джексон Райт написал вышенаписанный код PDP-1 в 1962 году. Этот код до сих пор живёт, 46 лет спустя. В режиме \"Недожёвывание\", он отображает творчески сломанный недореализованный алгоритм классического жевания квадратами вместо этого. https://en.wikipedia.org/wiki/HAKMEM https://en.wikipedia.org/wiki/Munching_square Автор: Джексон Райт Тим Шоуолтер, Джейми Завински и Стивен Хейзел; 1997."
#: ../hacks/config/nerverot.xml.h:1
msgid "NerveRot"
-msgstr ""
+msgstr "Корень нерва"
#: ../hacks/config/nerverot.xml.h:9
msgid "Blot count"
msgstr "Количество пятен"
#: ../hacks/config/nerverot.xml.h:12 ../hacks/config/raverhoop.xml.h:6
-#: ../hacks/config/topblock.xml.h:14
+#: ../hacks/config/razzledazzle.xml.h:9 ../hacks/config/topblock.xml.h:14
msgid "Colors"
msgstr "Цвета"
#: ../hacks/config/nerverot.xml.h:13 ../hacks/config/pyro.xml.h:8
#: ../hacks/config/splodesic.xml.h:5
msgid "Seldom"
-msgstr "Редкие"
+msgstr "Редкий"
#: ../hacks/config/nerverot.xml.h:14
msgid "Changes"
@@ -6986,7 +7060,7 @@ msgstr "Изменения"
#: ../hacks/config/nerverot.xml.h:15
msgid "Frequent"
-msgstr "Постоянные"
+msgstr "Постоянный"
#: ../hacks/config/nerverot.xml.h:16
msgid "Calm"
@@ -7002,57 +7076,88 @@ msgstr "Припадочный"
#: ../hacks/config/nerverot.xml.h:19
msgid "Crunchiness"
-msgstr "Разрыв"
+msgstr "Хрусткость"
#: ../hacks/config/nerverot.xml.h:22
msgid "Nervously vibrating squiggles. Written by Dan Bornstein; 2000."
-msgstr ""
+msgstr "Нервно-вибрационные закорючки. Автор Дэн Борнстейн; 2000."
#: ../hacks/config/noof.xml.h:1
msgid "Noof"
-msgstr ""
+msgstr "Нуф"
#: ../hacks/config/noof.xml.h:6
msgid "Flowery, rotatey patterns. Written by Bill Torzewski; 2004."
-msgstr ""
+msgstr "Цветочные, вращающиеся узоры. Автор Билл Торзевский; 2004."
#: ../hacks/config/noseguy.xml.h:1
msgid "NoseGuy"
-msgstr ""
+msgstr "Носатый парень"
#: ../hacks/config/noseguy.xml.h:3
msgid ""
"A little man with a big nose wanders around your screen saying things. "
"Written by Dan Heller and Jamie Zawinski; 1992."
-msgstr ""
+msgstr "Маленький человечек с большим носом бродит по экрану и делает замечания. Авторы: Дэн Хеллер и Джейми Завински; 1992 год."
#: ../hacks/config/pacman.xml.h:1
msgid "Pacman"
-msgstr ""
+msgstr "Игра Pacman"
#: ../hacks/config/pacman.xml.h:5
msgid "Player size"
-msgstr "Размер плейера"
+msgstr "Размер плеера"
#: ../hacks/config/pacman.xml.h:7
msgid ""
-"Simulates a game of Pac-Man on a randomly-created level. https://en."
-"wikipedia.org/wiki/Pac-Man Written by Edwin de Jong and Jamie Zawinski; 2004."
-msgstr ""
+"Simulates a game of Pac-Man on a randomly-created level. "
+"https://en.wikipedia.org/wiki/Pac-Man Written by Edwin de Jong and Jamie "
+"Zawinski; 2004."
+msgstr "Имитирует игру PaсMan на случайно созданном уровне. https://en.wikipedia.org/wiki/Pac-Man Автор Эдвин де Йонг и Джейми Завински; 2004."
#: ../hacks/config/pedal.xml.h:1
msgid "Pedal"
-msgstr ""
+msgstr "Педаль"
#: ../hacks/config/pedal.xml.h:10
msgid ""
"The even-odd winding rule. https://en.wikipedia.org/wiki/Even-odd_rule "
"https://en.wikipedia.org/wiki/Nonzero-rule Written by Dale Moore; 1995."
-msgstr ""
+msgstr "Правило обмотки чёт-нечёт. https://en.wikipedia.org/wiki/Even-odd_rule https://en.wikipedia.org/wiki/Nonzero-rule. Автор: Дейл Мур; 1995."
+
+#: ../hacks/config/peepers.xml.h:1
+msgid "Peepers"
+msgstr "Гляделки"
+
+#: ../hacks/config/peepers.xml.h:9
+msgid "Number of eyes"
+msgstr "Количество глаз"
+
+#: ../hacks/config/peepers.xml.h:12
+msgid "Scroll"
+msgstr "Прокрутка"
+
+#: ../hacks/config/peepers.xml.h:13
+msgid "Bounce or scroll"
+msgstr "Отскок или прокрутка"
+
+#: ../hacks/config/peepers.xml.h:14
+msgid "Grid"
+msgstr "Сетка"
+
+#: ../hacks/config/peepers.xml.h:15
+msgid "Beholder"
+msgstr "Очевидец"
+
+#: ../hacks/config/peepers.xml.h:18
+msgid ""
+"Floating eyeballs. Anatomically correct, and they also track the pointer. "
+"Written by Jamie Zawinski; 2018."
+msgstr "Плавающие глазные яблоки. Анатомически правильно, и они также отслеживают указатель. Автор Джейми Завински; 2018."
#: ../hacks/config/penetrate.xml.h:1
msgid "Penetrate"
-msgstr ""
+msgstr "Проникнуть"
#: ../hacks/config/penetrate.xml.h:3
msgid "Explosions"
@@ -7068,13 +7173,13 @@ msgstr "Всегда играть хорошо"
#: ../hacks/config/penetrate.xml.h:9
msgid ""
-"Simulates (something like) the classic arcade game Missile Command. https://"
-"en.wikipedia.org/wiki/Missile_Command Written by Adam Miller; 1999."
-msgstr ""
+"Simulates (something like) the classic arcade game Missile Command. "
+"https://en.wikipedia.org/wiki/Missile_Command Written by Adam Miller; 1999."
+msgstr "Имитация (что-то вроде) классической аркадной игры Missile Command. https://en.wikipedia.org/wiki/Missile_Command Автор Адам Миллер; 1999 год."
#: ../hacks/config/penrose.xml.h:1
msgid "Penrose"
-msgstr ""
+msgstr "Пенроуз"
#: ../hacks/config/penrose.xml.h:11
msgid "Draw ammann lines"
@@ -7087,18 +7192,18 @@ msgid ""
"black holes, and whether time has a beginning, filed a copyright-"
"infringement lawsuit against the Kimberly-Clark Corporation, which Penrose "
"said copied a pattern he created (a pattern demonstrating that \"a "
-"nonrepeating pattern could exist in nature\") for its Kleenex quilted toilet "
-"paper. Penrose said he doesn't like litigation but, \"When it comes to the "
+"nonrepeating pattern could exist in nature\") for its Kleenex quilted toilet"
+" paper. Penrose said he doesn't like litigation but, \"When it comes to the "
"population of Great Britain being invited by a multinational to wipe their "
-"bottoms on what appears to be the work of a Knight of the Realm, then a last "
-"stand must be taken.\" As reported by News of the Weird #491, 4-Jul-1997. "
-"https://en.wikipedia.org/wiki/Penrose_tiling https://en.wikipedia.org/wiki/"
-"Tessellation Written by Timo Korvola; 1997."
-msgstr ""
+"bottoms on what appears to be the work of a Knight of the Realm, then a last"
+" stand must be taken.\" As reported by News of the Weird #491, 4-Jul-1997. "
+"https://en.wikipedia.org/wiki/Penrose_tiling "
+"https://en.wikipedia.org/wiki/Tessellation Written by Timo Korvola; 1997."
+msgstr "Квазипериодические тайлинги. В апреле 1997 года сэр Роджер Пенроуз, британский профессор математики, который работал со Стивеном Хокингом по таким темам как относительности, чёрные дыры, а также имеет ли время начало, подал иск о нарушении авторских прав на интеллектуальную собственность против Kimberly-Clark Corporation, которая скопировала узор, который создал Пенроуз (узор, демонстрирующий, что \"подобный узор может существовать в природе\"). Пенроуз сказал, что он не любит судебных процессов, но \"Когда дело доходит до Великобритании, то меры должны быть приняты\". Как сообщили Новости странностей #491, 4-июл-1997. https://en.wikipedia.org/wiki/Penrose_tiling https://en.wikipedia.org/wiki/Tessellation Автор Тимо Корвола; 1997."
#: ../hacks/config/petri.xml.h:1
msgid "Petri"
-msgstr ""
+msgstr "Петри"
#: ../hacks/config/petri.xml.h:6
msgid "Square"
@@ -7114,11 +7219,11 @@ msgstr "Бриллиант"
#: ../hacks/config/petri.xml.h:9
msgid "Fertility"
-msgstr "Размножение"
+msgstr "Плодовитость"
#: ../hacks/config/petri.xml.h:11
msgid "Offspring"
-msgstr "Потомки"
+msgstr "Потомок"
#: ../hacks/config/petri.xml.h:13
msgid "Slowly"
@@ -7158,17 +7263,17 @@ msgstr "Максимальное время жизни"
#: ../hacks/config/petri.xml.h:27
msgid "Mold varieties"
-msgstr "Разновидности форм"
+msgstr "Разновидности плесени"
#: ../hacks/config/petri.xml.h:28
msgid ""
"Colonies of mold grow in a petri dish. Growing colored circles overlap and "
"leave spiral interference in their wake. Written by Dan Bornstein; 1999."
-msgstr ""
+msgstr "Рост колонии плесени в чашке Петри. В процессе роста цветных кругов они перекрываются и в случае помехи на своем пути закручиваются в спираль. Автор Дэн Борнстейн; 1999 год."
#: ../hacks/config/phosphor.xml.h:1
msgid "Phosphor"
-msgstr ""
+msgstr "Фосфор"
#: ../hacks/config/phosphor.xml.h:5
msgid "Font scale"
@@ -7180,11 +7285,11 @@ msgid ""
"Linux, this program is also a fully-functional VT100 emulator! Run it as an "
"application instead of as a screen saver and you can use it as a terminal. "
"Written by Jamie Zawinski; 1999."
-msgstr ""
+msgstr "Старый терминал с большими пикселями и давно выгоревшим люминофором. На MacOS и Linux эта программа полностью функциональна как эмулятор VT100! Запустите её как приложение, а не как экранную заставку, и вы сможете использовать её в качестве терминала. Автор: Джейми Завински; 1999 год."
#: ../hacks/config/photopile.xml.h:1
msgid "Photopile"
-msgstr ""
+msgstr "Куча фотографий"
#: ../hacks/config/photopile.xml.h:3
msgid "Image size"
@@ -7204,11 +7309,11 @@ msgstr "90 градусов"
#: ../hacks/config/photopile.xml.h:9
msgid "Simulate instant film"
-msgstr "Симулировать моментальную фотографию"
+msgstr "Имитация быстрой киноленты"
#: ../hacks/config/photopile.xml.h:10
msgid "Instant film theme"
-msgstr "Тема быстрой пленки"
+msgstr "Тема быстрой киноленты"
#: ../hacks/config/photopile.xml.h:11
msgid "Draw drop shadows"
@@ -7216,18 +7321,18 @@ msgstr "Прорисовывать падающие тени"
#: ../hacks/config/photopile.xml.h:23
msgid ""
-"Loads several random images, and displays them as if lying in a random pile. "
-"The pile is periodically reshuffled, with new images coming in and old ones "
-"being thrown out. Written by Jens Kilian and Jamie Zawinski; 2008."
-msgstr ""
+"Loads several random images, and displays them as if lying in a random pile."
+" The pile is periodically reshuffled, with new images coming in and old ones"
+" being thrown out. Written by Jens Kilian and Jamie Zawinski; 2008."
+msgstr "Загружается несколько случайных изображений и в случайном порядке сваливается в кучу. Куча периодически подзагружается новыми изображениями с заменой старых и дополнительно ещё и премешивается. Автор: Дженс Килиан и Джейми Завински; 2008 год."
#: ../hacks/config/piecewise.xml.h:1
msgid "Piecewise"
-msgstr ""
+msgstr "Кусочки"
#: ../hacks/config/piecewise.xml.h:9
msgid "Color shift"
-msgstr "Изменение цвета"
+msgstr "Цветовой сдвиг"
#: ../hacks/config/piecewise.xml.h:12
msgid "Minimum radius"
@@ -7241,11 +7346,11 @@ msgstr "Максимальный радиус"
msgid ""
"Moving circles switch from visibility to invisibility at intersection "
"points. Written by Geoffrey Irving; 2003."
-msgstr ""
+msgstr "Движущиеся круги переходят в точки их пересечения, от видимости к невидимости. Автор: Джеффри Ирвинг; 2003 год."
#: ../hacks/config/pinion.xml.h:1
msgid "Pinion"
-msgstr ""
+msgstr "Круглая шестерёнка"
#: ../hacks/config/pinion.xml.h:8
msgid "Scrolling speed"
@@ -7253,11 +7358,11 @@ msgstr "Скорость прокрутки"
#: ../hacks/config/pinion.xml.h:10
msgid "Gear size"
-msgstr "Размер шестеренок"
+msgstr "Размер шестерёнок"
#: ../hacks/config/pinion.xml.h:12 ../hacks/config/projectiveplane.xml.h:34
msgid "100"
-msgstr ""
+msgstr "100"
#: ../hacks/config/pinion.xml.h:13
msgid "Max RPM"
@@ -7265,18 +7370,18 @@ msgstr "Максимальное количество оборотов в мин
#: ../hacks/config/pinion.xml.h:14
msgid "2000"
-msgstr ""
+msgstr "2000"
#: ../hacks/config/pinion.xml.h:17
msgid ""
"A gear system marches across the screen. See also the \"Gears\" and "
"\"MoebiusGears\" screen savers. https://en.wikipedia.org/wiki/Involute_gear "
"Written by Jamie Zawinski; 2004."
-msgstr ""
+msgstr "На экране целая система зубчатых шестерёнок. Смотрите также хранители экрана: \"Шестерёнки\" и \"Шестерёнки Мебиуса\". https://en.wikipedia.org/wiki/Involute_gear Автор Джейми Завински; 2004."
#: ../hacks/config/pipes.xml.h:1
msgid "Pipes"
-msgstr ""
+msgstr "Трубы"
#: ../hacks/config/pipes.xml.h:6
msgid "Number of pipes"
@@ -7292,7 +7397,7 @@ msgstr "Длина трубы"
#: ../hacks/config/pipes.xml.h:12
msgid "Gadgetry"
-msgstr "Устройства"
+msgstr "Гаджет"
#: ../hacks/config/pipes.xml.h:14
msgid "Fisheye lens"
@@ -7304,7 +7409,7 @@ msgstr "Разрешать крутые повороты"
#: ../hacks/config/pipes.xml.h:16
msgid "Curved pipes"
-msgstr "Искривленные трубы"
+msgstr "Искривлённые трубы"
#: ../hacks/config/pipes.xml.h:17
msgid "Ball joints"
@@ -7322,11 +7427,11 @@ msgstr "Случайный стиль"
msgid ""
"A growing plumbing system, with bolts and valves. Written by Marcelo Vianna "
"and Jamie Zawinski; 1997."
-msgstr ""
+msgstr "Сантехнические системы в развитии (с помощью болтов и арматуры). Авторы: Марсело Вианна и Джейми Завински; 1997."
#: ../hacks/config/polyhedra.xml.h:1
msgid "Polyhedra"
-msgstr ""
+msgstr "Многогранники"
#: ../hacks/config/polyhedra.xml.h:11
msgid "Display random polyhedron"
@@ -7366,7 +7471,7 @@ msgstr "Пентаграммический трапецоэдр"
#: ../hacks/config/polyhedra.xml.h:20
msgid "Pentagrammic crossed antiprism"
-msgstr "Пентаграммическая скрещенная антипризма"
+msgstr "Пентаграммическая скрещённая антипризма"
#: ../hacks/config/polyhedra.xml.h:21
msgid "Pentagrammic concave deltohedron"
@@ -7374,7 +7479,7 @@ msgstr "Пентаграммический вогнутый трапецоэдр
#: ../hacks/config/polyhedra.xml.h:23
msgid "Truncated tetrahedron"
-msgstr "Усеченный тетраэдр"
+msgstr "Усечённый тетраэдр"
#: ../hacks/config/polyhedra.xml.h:24
msgid "Triakistetrahedron"
@@ -7406,7 +7511,7 @@ msgstr "Ромбический додекаэдр"
#: ../hacks/config/polyhedra.xml.h:33
msgid "Truncated octahedron"
-msgstr "Усеченный октаэдр"
+msgstr "Усечённый октаэдр"
#: ../hacks/config/polyhedra.xml.h:34
msgid "Tetrakishexahedron"
@@ -7414,7 +7519,7 @@ msgstr "Тетракисгексаэдр"
#: ../hacks/config/polyhedra.xml.h:35
msgid "Truncated cube"
-msgstr "Усеченный куб"
+msgstr "Усечённый куб"
#: ../hacks/config/polyhedra.xml.h:36
msgid "Triakisoctahedron"
@@ -7430,7 +7535,7 @@ msgstr "Дельтоидальный икоситетраэдр"
#: ../hacks/config/polyhedra.xml.h:39
msgid "Truncated cuboctahedron"
-msgstr "Усеченный кубооктаэдр"
+msgstr "Усечённый кубооктаэдр"
#: ../hacks/config/polyhedra.xml.h:40
msgid "Disdyakisdodecahedron"
@@ -7470,7 +7575,7 @@ msgstr "Гексагемиоктакрон"
#: ../hacks/config/polyhedra.xml.h:49
msgid "Cubitruncated cuboctahedron"
-msgstr "Кубоусеченный кубооктаэдр"
+msgstr "Кубоусечённый кубооктаэдр"
#: ../hacks/config/polyhedra.xml.h:50
msgid "Tetradyakishexahedron"
@@ -7494,7 +7599,7 @@ msgstr "Малый ромбогексакрон"
#: ../hacks/config/polyhedra.xml.h:55
msgid "Stellated truncated hexahedron"
-msgstr "Звездообразный усеченный гексаэдр"
+msgstr "Звёздообразный усечённый гексаэдр"
#: ../hacks/config/polyhedra.xml.h:56
msgid "Great triakisoctahedron"
@@ -7502,7 +7607,7 @@ msgstr "Большой триакисоктаэдр"
#: ../hacks/config/polyhedra.xml.h:57
msgid "Great truncated cuboctahedron"
-msgstr "Большой усеченный кубооктаэдр"
+msgstr "Большой усечённый кубооктаэдр"
#: ../hacks/config/polyhedra.xml.h:58
msgid "Great disdyakisdodecahedron"
@@ -7526,7 +7631,7 @@ msgstr "Ромботриаконтаэдр"
#: ../hacks/config/polyhedra.xml.h:65
msgid "Truncated icosahedron"
-msgstr "Усеченный икосаэдр"
+msgstr "Усечённый икосаэдр"
#: ../hacks/config/polyhedra.xml.h:66
msgid "Pentakisdodecahedron"
@@ -7534,7 +7639,7 @@ msgstr "Пентакисдодекаэдр"
#: ../hacks/config/polyhedra.xml.h:67
msgid "Truncated dodecahedron"
-msgstr "Усеченный додекаэдр"
+msgstr "Усечённый додекаэдр"
#: ../hacks/config/polyhedra.xml.h:68
msgid "Triakisicosahedron"
@@ -7550,7 +7655,7 @@ msgstr "Дельтоидальный гексеконтаэдр"
#: ../hacks/config/polyhedra.xml.h:71
msgid "Truncated icosidodecahedron"
-msgstr "Усеченный икосододекаэдр"
+msgstr "Усечённый икосододекаэдр"
#: ../hacks/config/polyhedra.xml.h:72
msgid "Disdyakistriacontahedron"
@@ -7598,7 +7703,7 @@ msgstr "Малый додекакронный гексеконтаэдр"
#: ../hacks/config/polyhedra.xml.h:83
msgid "Small stellated dodecahedron"
-msgstr "Малый звездообразный додекаэдр"
+msgstr "Малый звёздообразный додекаэдр"
#: ../hacks/config/polyhedra.xml.h:84
msgid "Great dodecahedron"
@@ -7614,11 +7719,11 @@ msgstr "Средний ромбический триаконтаэдр"
#: ../hacks/config/polyhedra.xml.h:87
msgid "Truncated great dodecahedron"
-msgstr "Усеченный большой додекаэдр"
+msgstr "Усечённый большой додекаэдр"
#: ../hacks/config/polyhedra.xml.h:88
msgid "Small stellapentakisdodecahedron"
-msgstr "Малый звездчатый пентакисдодекаэдр"
+msgstr "Малый звёздчатый пентакисдодекаэдр"
#: ../hacks/config/polyhedra.xml.h:89
msgid "Rhombidodecadodecahedron"
@@ -7678,7 +7783,7 @@ msgstr "Средний икосакронный гексеконтаэдр"
#: ../hacks/config/polyhedra.xml.h:103
msgid "Icositruncated dodecadodecahedron"
-msgstr "Икосоусеченный додекододекаэдр"
+msgstr "Икосоусечённый додекододекаэдр"
#: ../hacks/config/polyhedra.xml.h:104
msgid "Tridyakisicosahedron"
@@ -7734,7 +7839,7 @@ msgstr "Малый додекогемидодекакрон"
#: ../hacks/config/polyhedra.xml.h:117
msgid "Great stellated dodecahedron"
-msgstr "Большой звездообразный додекаэдр"
+msgstr "Большой звёздообразный додекаэдр"
#: ../hacks/config/polyhedra.xml.h:118
msgid "Great icosahedron"
@@ -7750,11 +7855,11 @@ msgstr "Большой ромбический триаконтаэдр"
#: ../hacks/config/polyhedra.xml.h:121
msgid "Great truncated icosahedron"
-msgstr "Большой усеченный икосаэдр"
+msgstr "Большой усечённый икосаэдр"
#: ../hacks/config/polyhedra.xml.h:122
msgid "Great stellapentakisdodecahedron"
-msgstr "Большой звездчатый пентакисдодекаэдр"
+msgstr "Большой звёздчатый пентакисдодекаэдр"
#: ../hacks/config/polyhedra.xml.h:123
msgid "Rhombicosahedron"
@@ -7774,7 +7879,7 @@ msgstr "Большой пентагональный гексеконтаэдр"
#: ../hacks/config/polyhedra.xml.h:127
msgid "Small stellated truncated dodecahedron"
-msgstr "Малый звездообразный усеченный додекаэдр"
+msgstr "Малый звёздообразный усечённый додекаэдр"
#: ../hacks/config/polyhedra.xml.h:128
msgid "Great pentakisdodecahedron"
@@ -7782,7 +7887,7 @@ msgstr "Большой пентакисдодекаэдр"
#: ../hacks/config/polyhedra.xml.h:129
msgid "Truncated dodecadodecahedron"
-msgstr "Усеченный додекододекаэдр"
+msgstr "Усечённый додекододекаэдр"
#: ../hacks/config/polyhedra.xml.h:130
msgid "Medial disdyakistriacontahedron"
@@ -7838,7 +7943,7 @@ msgstr "Большой додекогемиикосакрон"
#: ../hacks/config/polyhedra.xml.h:143
msgid "Great stellated truncated dodecahedron"
-msgstr "Большой звездообразный додекаэдр"
+msgstr "Большой звёздообразный додекаэдр"
#: ../hacks/config/polyhedra.xml.h:144
msgid "Great triakisicosahedron"
@@ -7854,7 +7959,7 @@ msgstr "Большой дельтоидальный гексеконтаэдр"
#: ../hacks/config/polyhedra.xml.h:147
msgid "Great truncated icosidodecahedron"
-msgstr "Большой усеченный икосододекаэдр"
+msgstr "Большой усечённый икосододекаэдр"
#: ../hacks/config/polyhedra.xml.h:148
msgid "Great disdyakistriacontahedron"
@@ -7927,15 +8032,16 @@ msgstr "Показать описание"
#: ../hacks/config/polyhedra.xml.h:169
msgid ""
"The 75 uniform polyhedra and their duals, plus 5 prisms and antiprisms, and "
-"some information about each. https://en.wikipedia.org/wiki/Uniform_polyhedra "
-"https://en.wikipedia.org/wiki/Stellation https://en.wikipedia.org/wiki/"
-"Dual_polyhedron https://en.wikipedia.org/wiki/Antiprism Written by Dr. Zvi "
-"Har'El and Jamie Zawinski; 2004."
-msgstr ""
+"some information about each. https://en.wikipedia.org/wiki/Uniform_polyhedra"
+" https://en.wikipedia.org/wiki/Stellation "
+"https://en.wikipedia.org/wiki/Dual_polyhedron "
+"https://en.wikipedia.org/wiki/Antiprism Written by Dr. Zvi Har'El and Jamie "
+"Zawinski; 2004."
+msgstr "75 форм многогранников и их сопряжений, плюс 5 призм и антипризм, а также некоторые сведения о каждом из них. https://en.wikipedia.org/wiki/Uniform_polyhedra https://en.wikipedia.org/wiki/Stellation https://en.wikipedia.org/wiki/Dual_polyhedron https://en.wikipedia.org/wiki/Antiprism Авторы: доктор Цви Харьел и Джейми Завински; 2004."
#: ../hacks/config/polyominoes.xml.h:1
msgid "Polyominoes"
-msgstr ""
+msgstr "Полимино"
#: ../hacks/config/polyominoes.xml.h:2
msgid "Identical pieces"
@@ -7946,11 +8052,11 @@ msgid ""
"Repeatedly attempts to completely fill a rectangle with irregularly-shaped "
"puzzle pieces. https://en.wikipedia.org/wiki/Polyomino Written by Stephen "
"Montgomery-Smith; 2002."
-msgstr ""
+msgstr "Неоднократные попытки решения головоломки по заполнению прямоугольника кусочками различной формы (Тетрис). https://en.wikipedia.org/wiki/Polyomino Автор: Стивен Монтгомери-Смит; 2002 год."
#: ../hacks/config/polytopes.xml.h:1
msgid "Polytopes"
-msgstr ""
+msgstr "Многогранники"
#: ../hacks/config/polytopes.xml.h:6
msgid "5-cell (hyper-tetrahedron)"
@@ -7987,17 +8093,18 @@ msgstr "Цвета с глубиной 4D"
#: ../hacks/config/polytopes.xml.h:30
msgid ""
"The six regular 4D polytopes rotating in 4D. Inspired by H.S.M Coxeter's "
-"book \"Regular Polytopes\", 3rd Edition, Dover Publications, Inc., 1973, and "
-"Thomas Banchoff's book \"Beyond the Third Dimension: Geometry, Computer "
+"book \"Regular Polytopes\", 3rd Edition, Dover Publications, Inc., 1973, and"
+" Thomas Banchoff's book \"Beyond the Third Dimension: Geometry, Computer "
"Graphics, and Higher Dimensions\", Scientific American Library, 1990. "
-"https://en.wikipedia.org/wiki/Hypercube https://en.wikipedia.org/wiki/"
-"Tesseract https://en.wikipedia.org/wiki/Regular_polytope Written by Carsten "
-"Steger; 2003."
-msgstr ""
+"https://en.wikipedia.org/wiki/Hypercube "
+"https://en.wikipedia.org/wiki/Tesseract "
+"https://en.wikipedia.org/wiki/Regular_polytope Written by Carsten Steger; "
+"2003."
+msgstr "Шесть 4D-многогранников вращаются в 4D. Из книги Коксетера \"Обычные многогранники\", 3-е издание, Dover Publications, Inc., 1973, и книги Томаса Банчофа \"За пределами третьего измерения: Геометрия, Компьютерная графика, а также - более высокие измерения\", Научно-американская библиотека, 1990. https://en.wikipedia.org/wiki/Hypercube https://en.wikipedia.org/wiki/Tesseract https://en.wikipedia.org/wiki/Regular_polytope Автор: Карстен Штегер; 2003."
#: ../hacks/config/pong.xml.h:1
msgid "Pong"
-msgstr ""
+msgstr "Понг"
#: ../hacks/config/pong.xml.h:3
msgid "Game speed"
@@ -8007,10 +8114,6 @@ msgstr "Скорость игры"
msgid "Crisp"
msgstr "Треск"
-#: ../hacks/config/pong.xml.h:6
-msgid "Noise"
-msgstr "Шум"
-
#: ../hacks/config/pong.xml.h:7
msgid "Noisy"
msgstr "Шумно"
@@ -8022,18 +8125,18 @@ msgstr "Режим отображения времени"
#: ../hacks/config/pong.xml.h:14
msgid ""
"The 1971 Pong home video game, including artifacts of an old color TV set. "
-"In clock mode, the score keeps track of the current time. https://en."
-"wikipedia.org/wiki/Pong Written by Jeremy English, Trevor Blackwell and "
-"Jamie Zawinski; 2003."
-msgstr ""
+"In clock mode, the score keeps track of the current time. "
+"https://en.wikipedia.org/wiki/Pong Written by Jeremy English, Trevor "
+"Blackwell and Jamie Zawinski; 2003."
+msgstr "Понг — домашняя видеоигра 1971 в виде старого цветного телевизора. В тактовом режиме отслеживает текущее время. https://en.wikipedia.org/wiki/Pong Автор Джереми Инглиш, Тревор Блэквелл и Джейми Завински; 2003 год."
#: ../hacks/config/popsquares.xml.h:1
msgid "PopSquares"
-msgstr ""
+msgstr "Лопающиеся квадраты"
#: ../hacks/config/popsquares.xml.h:5
msgid "Subdivision"
-msgstr "Разделение"
+msgstr "Подраздел"
#: ../hacks/config/popsquares.xml.h:8
msgid "Light red"
@@ -8041,11 +8144,11 @@ msgstr "Светло-красный"
#: ../hacks/config/popsquares.xml.h:9
msgid "Light yellow"
-msgstr "Светло-желтый"
+msgstr "Светло-жёлтый"
#: ../hacks/config/popsquares.xml.h:10
msgid "Light green"
-msgstr "Светло-зеленый"
+msgstr "Светло-зелёный"
#: ../hacks/config/popsquares.xml.h:11
msgid "Light cyan"
@@ -8061,27 +8164,27 @@ msgstr "Светло-пурпурный"
#: ../hacks/config/popsquares.xml.h:14
msgid "Dark red"
-msgstr "Темно-красный"
+msgstr "Тёмно-красный"
#: ../hacks/config/popsquares.xml.h:15
msgid "Dark yellow"
-msgstr "Темно-желтый"
+msgstr "Тёмно-жёлтый"
#: ../hacks/config/popsquares.xml.h:16
msgid "Dark green"
-msgstr "Темно-зеленый"
+msgstr "Тёмно-зелёный"
#: ../hacks/config/popsquares.xml.h:17
msgid "Dark cyan"
-msgstr "Темно-голубой"
+msgstr "Тёмно-голубой"
#: ../hacks/config/popsquares.xml.h:18
msgid "Dark blue"
-msgstr "Темно-синий"
+msgstr "Тёмно-синий"
#: ../hacks/config/popsquares.xml.h:19
msgid "Dark magenta"
-msgstr "Темно-пурпурный"
+msgstr "Тёмно-пурпурный"
#: ../hacks/config/popsquares.xml.h:20
msgid "Twitch"
@@ -8090,11 +8193,11 @@ msgstr "Рывок"
#: ../hacks/config/popsquares.xml.h:22
msgid ""
"A pop-art-ish looking grid of pulsing colors. Written by Levi Burton; 2003."
-msgstr ""
+msgstr "Поп-арт сетка пульсирующих цветов. Автор: Леви Бертон; 2003 год."
#: ../hacks/config/projectiveplane.xml.h:1
msgid "ProjectivePlane"
-msgstr ""
+msgstr "Проективная плоскость"
#: ../hacks/config/projectiveplane.xml.h:8 ../hacks/config/romanboy.xml.h:20
msgid "Distance bands"
@@ -8114,7 +8217,7 @@ msgstr "Цвета направления"
#: ../hacks/config/projectiveplane.xml.h:21
msgid "-4"
-msgstr ""
+msgstr "-4"
#: ../hacks/config/projectiveplane.xml.h:22
msgid "WX speed"
@@ -8122,7 +8225,7 @@ msgstr "Скорость WX"
#: ../hacks/config/projectiveplane.xml.h:23
msgid "4"
-msgstr ""
+msgstr "4"
#: ../hacks/config/projectiveplane.xml.h:24
msgid "WY speed"
@@ -8146,19 +8249,19 @@ msgstr "Скорость YZ"
#: ../hacks/config/projectiveplane.xml.h:29
msgid "-180"
-msgstr ""
+msgstr "-180"
#: ../hacks/config/projectiveplane.xml.h:30
msgid "Walk dir "
-msgstr "Направление движения"
+msgstr "Направление ходьбы "
#: ../hacks/config/projectiveplane.xml.h:31
msgid "180"
-msgstr ""
+msgstr "180"
#: ../hacks/config/projectiveplane.xml.h:33
msgid "Walk speed"
-msgstr "Скорость движения"
+msgstr "Скорость ходьбы"
#: ../hacks/config/projectiveplane.xml.h:44
msgid ""
@@ -8166,17 +8269,19 @@ msgid ""
"the real projective plane or rotate it in 4D or walk on it while it rotates "
"in 4D. Inspired by Thomas Banchoff's book \"Beyond the Third Dimension: "
"Geometry, Computer Graphics, and Higher Dimensions\", Scientific American "
-"Library, 1990. https://en.wikipedia.org/wiki/Real_projective_plane https://"
-"en.wikipedia.org/wiki/Roman_surface https://en.wikipedia.org/wiki/Cross_cap "
-"https://en.wikipedia.org/wiki/Moebius_strip http://mathworld.wolfram.com/"
-"RealProjectivePlane.html http://mathworld.wolfram.com/RomanSurface.html "
-"http://mathworld.wolfram.com/Cross-Cap.html http://mathworld.wolfram.com/"
-"MoebiusStrip.html Written by Carsten Steger; 2014."
-msgstr ""
+"Library, 1990. https://en.wikipedia.org/wiki/Real_projective_plane "
+"https://en.wikipedia.org/wiki/Roman_surface "
+"https://en.wikipedia.org/wiki/Cross_cap "
+"https://en.wikipedia.org/wiki/Moebius_strip "
+"http://mathworld.wolfram.com/RealProjectivePlane.html "
+"http://mathworld.wolfram.com/RomanSurface.html http://mathworld.wolfram.com"
+"/Cross-Cap.html http://mathworld.wolfram.com/MoebiusStrip.html Written by "
+"Carsten Steger; 2014."
+msgstr "4D-вложение вещественной проективной плоскости. Вы можете ходить по поверхности вещественной проективной плоскости или повернуть её в 4D, или ходить по ней, пока она вращается в 4D. Из книги Томаса Банкхоффа \"Вне третьего измерения: Геометрия, компьютерная графика, и более высокие измерения\", Научно-американская библиотека, 1990. https://en.wikipedia.org/wiki/Real_projective_plane https://en.wikipedia.org/wiki/Roman_surface https://en.wikipedia.org/wiki/Cross_cap https://en.wikipedia.org/wiki/Moebius_strip http://mathworld.wolfram.com/RealProjectivePlane.html http://mathworld.wolfram.com/RomanSurface.html http://mathworld.wolfram.com/Cross-Cap.html http://mathworld.wolfram.com/MoebiusStrip.html Автор: Карстен Штегер; 2014."
#: ../hacks/config/providence.xml.h:1
msgid "Providence"
-msgstr ""
+msgstr "Предусмотрительность"
#: ../hacks/config/providence.xml.h:5
msgid "Draw eye"
@@ -8187,11 +8292,11 @@ msgid ""
"\"A pyramid unfinished. In the zenith an eye in a triangle, surrounded by a "
"glory, proper.\" https://en.wikipedia.org/wiki/Eye_of_Providence Written by "
"Blair Tennessy; 2004."
-msgstr ""
+msgstr "Усечённая пирамида, на вершине которой, окруженный собственной славой, глаз в треугольнике. https://en.wikipedia.org/wiki/Eye_of_Providence Автор: Блэр Теннесси; 2004."
#: ../hacks/config/pulsar.xml.h:1
msgid "Pulsar"
-msgstr ""
+msgstr "Пульсар"
#: ../hacks/config/pulsar.xml.h:5
msgid "Quad count"
@@ -8203,11 +8308,11 @@ msgstr "Включить текстурирование"
#: ../hacks/config/pulsar.xml.h:9
msgid "Enable texture mipmaps"
-msgstr "Включить множественное отображение текстур"
+msgstr "Включить MIP-текстурирование"
#: ../hacks/config/pulsar.xml.h:10
msgid "Enable blending"
-msgstr "Включить перемешивание"
+msgstr "Включить смешивание"
#: ../hacks/config/pulsar.xml.h:11
msgid "Anti-alias lines"
@@ -8225,11 +8330,11 @@ msgstr "Включить буфер глубины"
msgid ""
"Intersecting planes, with alpha blending, fog, textures, and mipmaps. "
"Written by David Konerding; 1999."
-msgstr ""
+msgstr "Пересекающиеся плоскости с альфа-смешиванием, туманом, текстурами и MIP-текстурированием. Автор: Дэвид Конердинг; 1999."
#: ../hacks/config/pyro.xml.h:1
msgid "Pyro"
-msgstr ""
+msgstr "Пирозапал"
#: ../hacks/config/pyro.xml.h:6
msgid "Particle density"
@@ -8245,17 +8350,17 @@ msgstr "Сила взрыва"
#: ../hacks/config/pyro.xml.h:15
msgid ""
-"Exploding fireworks. See also the \"Fireworkx\", \"Eruption\", and \"XFlame"
-"\" screen savers. Written by Jamie Zawinski; 1992."
-msgstr ""
+"Exploding fireworks. See also the \"Fireworkx\", \"Eruption\", and "
+"\"XFlame\" screen savers. Written by Jamie Zawinski; 1992."
+msgstr "Взрыв фейерверков. Смотрите также хранители экрана: \"Фейерверк\", \"Извержение\" и \"Х-пламя\". Автор Джейми Завински; 1992 год."
#: ../hacks/config/qix.xml.h:1
msgid "Qix"
-msgstr ""
+msgstr "Qix"
#: ../hacks/config/qix.xml.h:12
msgid "Line segments"
-msgstr "Сегменты линий"
+msgstr "Отрезки"
#: ../hacks/config/qix.xml.h:13
msgid "Solid objects"
@@ -8267,11 +8372,11 @@ msgstr "Линейное движение"
#: ../hacks/config/qix.xml.h:16
msgid "Additive colors"
-msgstr "Добавление цветов"
+msgstr "Аддитивные цвета"
#: ../hacks/config/qix.xml.h:17
msgid "Subtractive colors"
-msgstr "Вычитание цветов"
+msgstr "Субтрактивные цвета"
#: ../hacks/config/qix.xml.h:19
msgid "Max size"
@@ -8279,19 +8384,19 @@ msgstr "Максимальный размер"
#: ../hacks/config/qix.xml.h:20
msgid "Poly corners"
-msgstr "Полигоны"
+msgstr "Многоугольники"
#: ../hacks/config/qix.xml.h:25
msgid ""
"Bounces a series of line segments around the screen, and uses variations on "
"this basic motion pattern to produce all sorts of different presentations: "
-"line segments, filled polygons, and overlapping translucent areas. https://"
-"en.wikipedia.org/wiki/Qix Written by Jamie Zawinski; 1992."
-msgstr ""
+"line segments, filled polygons, and overlapping translucent areas. "
+"https://en.wikipedia.org/wiki/Qix Written by Jamie Zawinski; 1992."
+msgstr "Отскок отрезков друг от друга по экрану, использование вариаций на этом базовом узоре движения, чтобы воспроизводить все виды различных презентаций: отрезков, заполненных многоугольников и перекрывающихся полупрозрачных областей. https://en.wikipedia.org/wiki/Qix Авто: Джейми Завински; 1992."
#: ../hacks/config/quasicrystal.xml.h:1
msgid "QuasiCrystal"
-msgstr ""
+msgstr "Квазикристалл"
#: ../hacks/config/quasicrystal.xml.h:9
msgid "Contrast"
@@ -8299,31 +8404,31 @@ msgstr "Контраст"
#: ../hacks/config/quasicrystal.xml.h:14
msgid ""
-"A quasicrystal is a structure that is ordered but aperiodic. Two-dimensional "
-"quasicrystals can be generated by adding a set of planes where x is the sine "
-"of y. Different complex aperiodic plane tilings are produced depending on "
-"the period, position, and rotation of the component planes, and whether the "
-"rotation of the planes is evenly distributed around the circle (the "
+"A quasicrystal is a structure that is ordered but aperiodic. Two-dimensional"
+" quasicrystals can be generated by adding a set of planes where x is the "
+"sine of y. Different complex aperiodic plane tilings are produced depending "
+"on the period, position, and rotation of the component planes, and whether "
+"the rotation of the planes is evenly distributed around the circle (the "
"\"symmetry\" option, above) or random. See also the \"RD-Bomb\", \"CWaves\" "
"and \"Penrose\" screen savers. https://en.wikipedia.org/wiki/Quasicrystal "
"Written by Jamie Zawinski; 2013."
-msgstr ""
+msgstr "Квазикристалл является структурой, которая упорядочена, но апериодически. Двумерные квазикристаллы могут быть получены путём добавления множества плоскостей, где х - синус у. Различные сложные апериодические плоскоские тайлинги производятся в зависимости от периода, положения и вращения плоскостей компонентов; вращение плоскостей распределяется равномерно по кругу (опция \"симметрия\", выше), или случайным образом. Смотрите также экранные заставки \"RD-бомба\", \"C-волны\" и \"Пенроуз\". https://en.wikipedia.org/wiki/Quasicrystal Автор: Джейми Завински; 2013 год."
#: ../hacks/config/queens.xml.h:1
msgid "Queens"
-msgstr ""
+msgstr "Ферзи"
#: ../hacks/config/queens.xml.h:7
msgid ""
"The N-Queens problem: how to place N queens on an NxN chessboard such that "
-"no queen can attack a sister? See also the \"Endgame\" screen saver. https://"
-"en.wikipedia.org/wiki/Eight_queens_puzzle Written by Blair Tennessy and "
-"Jamie Zawinski; 2002."
-msgstr ""
+"no queen can attack a sister? See also the \"Endgame\" screen saver. "
+"https://en.wikipedia.org/wiki/Eight_queens_puzzle Written by Blair Tennessy "
+"and Jamie Zawinski; 2002."
+msgstr "Проблема N-ферзей: как разместить N ферзей на шахматной доске NxN, так, чтобы ни один ферзь не смог атаковать другого? Смотрите также экранную заставку \"Эндшпиль\". https://en.wikipedia.org/wiki/Eight_queens_puzzle Авторы: Блэр Tеннесси и Джейми Завински; 2002."
#: ../hacks/config/raverhoop.xml.h:1
msgid "RaverHoop"
-msgstr ""
+msgstr "Непослушный обруч"
#: ../hacks/config/raverhoop.xml.h:9
msgid "Lights"
@@ -8335,7 +8440,7 @@ msgstr "Скорость, движение"
#: ../hacks/config/raverhoop.xml.h:14
msgid "Speed, lights"
-msgstr "Скорость, свет"
+msgstr "Скорость, источники света"
#: ../hacks/config/raverhoop.xml.h:16
msgid "Sustain"
@@ -8345,11 +8450,43 @@ msgstr "Выдержка"
msgid ""
"Simulates an LED hula hoop in a dark room. Oontz oontz oontz. Written by "
"Jamie Zawinski; 2016."
-msgstr ""
+msgstr "Имитирует светодиодный обруч в тёмной комнате. Уц Уц Уц. Автор Джейми Завински; 2016."
+
+#: ../hacks/config/razzledazzle.xml.h:1
+msgid "RazzleDazzle"
+msgstr "Суматоха"
+
+#: ../hacks/config/razzledazzle.xml.h:17
+msgid "Ship Outlines"
+msgstr "Контуры корабля"
+
+#: ../hacks/config/razzledazzle.xml.h:18
+msgid "Flat Pattern"
+msgstr "Плоский узор"
+
+#: ../hacks/config/razzledazzle.xml.h:19
+msgid "Ships or flat pattern"
+msgstr "Корабли или плоские узоры"
+
+#: ../hacks/config/razzledazzle.xml.h:22
+#, no-c-format
+msgid ""
+"Generates an infinitely-scrolling sequence of dazzle camouflage patterns. "
+"Dazzle Ships, in addition to being the best album by Orchestral Manoeuvres "
+"in the Dark, were military vessels during World War I and early in World War"
+" II that were painted not to conceal but to confuse: with these Cubist "
+"overlapping stripes, it was very hard to estimate their size, range and "
+"heading. This was a big deal before the invention of Radar. "
+"https://en.wikipedia.org/wiki/Dazzle_camouflage "
+"https://en.wikipedia.org/wiki/Cubism "
+"https://en.wikipedia.org/wiki/Dazzle_Ships_%28album%29 "
+"https://en.wikipedia.org/wiki/Acoustic_mirror "
+"https://en.wikipedia.org/wiki/Radar Written by Jamie Zawinski; 2018."
+msgstr "Создаёт бесконечно прокручивающуюся последовательность ослепительных камуфляжных узоров. Ослепляющие корабли, в дополнение к тому, чтобы быть лучшим альбомом группы \"Orchestral Maneuvers in the Dark\", были военными кораблями во время Первой мировой войны и в начале Второй мировой войны, которые были нарисованы не для того, чтобы скрываться, а чтобы путать: с этими кубистскими пересекающимися полосами было очень трудно оценить их размер, ассортимент и курс. Это было большое дело до изобретения радара. hhttps://en.wikipedia.org/wiki/Dazzle_camouflage https://en.wikipedia.org/wiki/Cubism https://en.wikipedia.org/wiki/Dazzle_Ships_%28album%29 https://en.wikipedia.org/wiki/Acoustic_mirror https://en.wikipedia.org/wiki/Radar Автор Джейми Завински; 2018."
#: ../hacks/config/rd-bomb.xml.h:1 ../hacks/config/rdbomb.xml.h:1
msgid "RDbomb"
-msgstr ""
+msgstr "Диффузная бомба"
#: ../hacks/config/rd-bomb.xml.h:5 ../hacks/config/rdbomb.xml.h:5
#: ../hacks/config/voronoi.xml.h:12
@@ -8359,10 +8496,10 @@ msgstr "Скорость блуждания"
#: ../hacks/config/rd-bomb.xml.h:7 ../hacks/config/rdbomb.xml.h:7
#, no-c-format
msgid "1%"
-msgstr ""
+msgstr "1%"
#: ../hacks/config/rd-bomb.xml.h:8 ../hacks/config/rdbomb.xml.h:8
-#: ../hacks/config/tessellimage.xml.h:14
+#: ../hacks/config/tessellimage.xml.h:17
msgid "Fill screen"
msgstr "Заполнить экран"
@@ -8389,26 +8526,26 @@ msgstr "Диффузия"
#. #### default is wrong
#: ../hacks/config/rd-bomb.xml.h:23 ../hacks/config/rdbomb.xml.h:23
msgid "Seed radius"
-msgstr "Радиус зерен"
+msgstr "Радиус зёрен"
#: ../hacks/config/rd-bomb.xml.h:24 ../hacks/config/rdbomb.xml.h:24
msgid ""
"Reaction-diffusion: draws a grid of growing square-like shapes that, once "
"they overtake each other, react in unpredictable ways. Written by Scott "
"Draves; 1997."
-msgstr ""
+msgstr "Реакция-диффузия: рисует сетку растущих квадратоподобных фигур, которые, как только они обгоняют друг друга, вступают в реакцию непредсказуемым образом. Автор: Скотт Дрейвес; 1997."
#: ../hacks/config/ripples.xml.h:1
msgid "Ripples"
-msgstr ""
+msgstr "Рябь"
#: ../hacks/config/ripples.xml.h:8
msgid "Drizzle"
-msgstr "Мелкий дождь"
+msgstr "Мелкий дождь (изморось)"
#: ../hacks/config/ripples.xml.h:9
msgid "Drippiness"
-msgstr "Темп"
+msgstr "Капание"
#: ../hacks/config/ripples.xml.h:10
msgid "Storm"
@@ -8420,7 +8557,7 @@ msgstr "Маленькие капли"
#: ../hacks/config/ripples.xml.h:12
msgid "Fluidity"
-msgstr "Степень текучести"
+msgstr "Текучесть"
#: ../hacks/config/ripples.xml.h:13
msgid "Big drops"
@@ -8446,11 +8583,11 @@ msgstr "Эффект волшебного освещения"
msgid ""
"Rippling interference patterns reminiscent of splashing water distort a "
"loaded image. Written by Tom Hammersley; 1999."
-msgstr ""
+msgstr "Волнообразная рябь, напоминающая брызги воды, искажает загруженное изображение. Автор Том Хаммерсли; 1999 год."
#: ../hacks/config/rocks.xml.h:1
msgid "Rocks"
-msgstr ""
+msgstr "Астероиды"
#: ../hacks/config/rocks.xml.h:9
msgid "Velocity"
@@ -8458,15 +8595,15 @@ msgstr "Скорость"
#: ../hacks/config/rocks.xml.h:12
msgid "Steering"
-msgstr "Управление"
+msgstr "Рулевое управление"
#: ../hacks/config/rocks.xml.h:18
msgid "An asteroid field zooms by. Written by Jamie Zawinski; 1992."
-msgstr ""
+msgstr "Астероид, изменяет изображение поля путём изменения масштаба. Автор: Джейми Завински; 1992."
#: ../hacks/config/romanboy.xml.h:1
msgid "RomanBoy"
-msgstr ""
+msgstr "Римский Бой"
#: ../hacks/config/romanboy.xml.h:5
msgid "Order of the surface"
@@ -8482,7 +8619,7 @@ msgstr "Скорость искажения"
#: ../hacks/config/romanboy.xml.h:11
msgid "0.0"
-msgstr ""
+msgstr "0.0"
#: ../hacks/config/romanboy.xml.h:12
msgid "Initial deformation"
@@ -8490,19 +8627,19 @@ msgstr "Начальное искажение"
#: ../hacks/config/romanboy.xml.h:13
msgid "1000.0"
-msgstr ""
+msgstr "1000.0"
#: ../hacks/config/romanboy.xml.h:26
msgid "Random Projection"
-msgstr "Случайное искажение"
+msgstr "Случайная проекция"
#: ../hacks/config/romanboy.xml.h:27
msgid "Perspective"
-msgstr "Перспективное"
+msgstr "Перспектива"
#: ../hacks/config/romanboy.xml.h:28
msgid "Orthographic"
-msgstr "Ортографическое"
+msgstr "Ортографическая"
#: ../hacks/config/romanboy.xml.h:30
msgid "X rotation speed"
@@ -8524,15 +8661,17 @@ msgid ""
"real projective plane or rotate it in 3D. Furthermore, it is possible to "
"smoothly deform the real projective plane between the Roman surface and the "
"Boy surface while turning it or walking on it. Inspired by François Apéry's "
-"book \"Models of the Real Projective Plane\", Vieweg, 1987. https://en."
-"wikipedia.org/wiki/Boy%27s_surface https://en.wikipedia.org/wiki/"
-"Roman_surface http://mathworld.wolfram.com/BoySurface.html http://mathworld."
-"wolfram.com/RomanSurface.html Written by Carsten Steger; 2014."
-msgstr ""
+"book \"Models of the Real Projective Plane\", Vieweg, 1987. "
+"https://en.wikipedia.org/wiki/Boy%27s_surface "
+"https://en.wikipedia.org/wiki/Roman_surface "
+"http://mathworld.wolfram.com/BoySurface.html "
+"http://mathworld.wolfram.com/RomanSurface.html Written by Carsten Steger; "
+"2014."
+msgstr "3D-погружение вещественной проективной плоскости, которая плавно деформируется между римской поверхностью и поверхностью Боя. Вы можете ходить по поверхности вещественной проективной плоскости, или вращать её в 3D. Кроме того, можно плавно деформировать реальную проективную плоскость между римской поверхностью и поверхностью Боя, поворачивая её, или ходить по неё. Из книги Франсуа Апери \"Модели вещественной проективной плоскости\", Фивег, 1987. https://en.wikipedia.org/wiki/Boy%27s_surface https://en.wikipedia.org/wiki/Roman_surface http://mathworld.wolfram.com/BoySurface.html http://mathworld.wolfram.com/RomanSurface.html Автор: Карстен Штегер; 2014."
#: ../hacks/config/rorschach.xml.h:1
msgid "Rorschach"
-msgstr ""
+msgstr "Роршах"
#: ../hacks/config/rorschach.xml.h:6
msgid "With X symmetry"
@@ -8544,30 +8683,25 @@ msgstr "С симметрией Y"
#: ../hacks/config/rorschach.xml.h:12
msgid ""
-"Inkblot patterns via a reflected random walk. https://en.wikipedia.org/wiki/"
-"Rorschach_inkblot_test https://en.wikipedia.org/wiki/Random_walk Written by "
-"Jamie Zawinski; 1992."
-msgstr ""
+"Inkblot patterns via a reflected random walk. "
+"https://en.wikipedia.org/wiki/Rorschach_inkblot_test "
+"https://en.wikipedia.org/wiki/Random_walk Written by Jamie Zawinski; 1992."
+msgstr "Узоры чернильного пятна через отражение случайного блуждания. https://en.wikipedia.org/wiki/Rorschach_inkblot_test https://en.wikipedia.org/wiki/Random_walk Автор: Джейми Завински; 1992."
#: ../hacks/config/rotor.xml.h:1
msgid "Rotor"
-msgstr ""
-
-#: ../hacks/config/rotor.xml.h:6 ../hacks/config/skytentacles.xml.h:6
-#: ../hacks/config/wander.xml.h:9
-msgid "Length"
-msgstr "Длина"
+msgstr "Ротор"
#: ../hacks/config/rotor.xml.h:14
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.08. Draws a line segment moving along a complex spiraling curve. "
"Written by Tom Lawrence; 1997."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Рисует движение отрезка вдоль сложной спиралевидной кривой. Автор: Том Лоуренс; 1997."
#: ../hacks/config/rotzoomer.xml.h:1
msgid "RotZoomer"
-msgstr ""
+msgstr "Зумер"
#: ../hacks/config/rotzoomer.xml.h:8
msgid "Rectangle count"
@@ -8597,11 +8731,11 @@ msgstr "Анимировать"
msgid ""
"Distorts an image by rotating and scaling random sections of it. Written by "
"Claudio Matsuoka and Jamie Zawinski; 2001."
-msgstr ""
+msgstr "Искажает изображение, поворачивая и масштабируя его случайные участки. Авторы Клаудио Мацуока и Джейми Завински; 2001."
#: ../hacks/config/rubik.xml.h:1
msgid "Rubik"
-msgstr ""
+msgstr "Рубик"
#: ../hacks/config/rubik.xml.h:10
msgid "Hide shuffling"
@@ -8611,24 +8745,26 @@ msgstr "Скрывать перетасовку"
#, no-c-format
msgid ""
"A Rubik's Cube that repeatedly shuffles and solves itself. See also the "
-"\"GLSnake\" and \"Cube21\" screen savers. https://en.wikipedia.org/wiki/Rubik"
-"%27s_Cube Written by Marcelo Vianna; 1997."
-msgstr ""
+"\"GLSnake\" and \"Cube21\" screen savers. "
+"https://en.wikipedia.org/wiki/Rubik%27s_Cube Written by Marcelo Vianna; "
+"1997."
+msgstr "Кубик Рубика, который перемешивается и решается сам. Смотрите также заставки \"Змейка\" и \"Кубик21\". https://en.wikipedia.org/wiki/Rubik%27s_Cube Автор: Марсело Вианна; 1997."
#: ../hacks/config/rubikblocks.xml.h:1
msgid "RubikBlocks"
-msgstr ""
+msgstr "Блоки Рубика"
#: ../hacks/config/rubikblocks.xml.h:21
msgid ""
"The \"Rubik's Mirror Blocks\" puzzle. See also the \"Rubik\", \"Cube21\", "
-"and \"GLSnake\" screen savers. https://en.wikipedia.org/wiki/"
-"Combination_puzzles#Irregular_cuboids Written by Vasek Potocek; 2009."
-msgstr ""
+"and \"GLSnake\" screen savers. "
+"https://en.wikipedia.org/wiki/Combination_puzzles#Irregular_cuboids Written "
+"by Vasek Potocek; 2009."
+msgstr "Головоломка \"Зеркальные блоки Рубика\". Смотрите также хранители экрана: \"Рубик\", \"Кубик21\" и \"GL-змейка\". https://en.wikipedia.org/wiki/Combination_puzzles#Irregular_cuboids Автор Васек Поточек; 2009 год."
#: ../hacks/config/sballs.xml.h:1
msgid "SBalls"
-msgstr ""
+msgstr "S-шары"
#: ../hacks/config/sballs.xml.h:11
msgid "Plane"
@@ -8644,21 +8780,21 @@ msgstr "Звезда"
#: ../hacks/config/sballs.xml.h:17
msgid "Textured balls spinning like crazy. Written by Eric Lassauge; 2002."
-msgstr ""
+msgstr "Текстурированные шарики крутятся, как сумасшедшие. Автор: Эрик Лассюж; 2002."
#: ../hacks/config/shadebobs.xml.h:1
msgid "ShadeBobs"
-msgstr ""
+msgstr "Тень пучков"
#: ../hacks/config/shadebobs.xml.h:17
msgid ""
"Oscillating oval patterns that look something like vapor trails or neon "
"tubes. Written by Shane Smit; 1999."
-msgstr ""
+msgstr "Колебательные овальные узоры, которые выглядят как следы паров или неоновых трубок. Автор: Шейн Смит; 1999."
#: ../hacks/config/sierpinski.xml.h:1
msgid "Sierpinski"
-msgstr ""
+msgstr "Серпинский"
#: ../hacks/config/sierpinski.xml.h:6 ../hacks/config/surfaces.xml.h:22
#: ../hacks/config/thornbird.xml.h:6 ../hacks/config/voronoi.xml.h:6
@@ -8670,22 +8806,22 @@ msgid ""
"The 2D Sierpinski triangle fractal. See also the \"Sierpinski3D\" screen "
"saver. https://en.wikipedia.org/wiki/Sierpinski_triangle Written by Desmond "
"Daignault; 1997."
-msgstr ""
+msgstr "2D треугольный фрактал Серпинского. Смотрите также заставку \"Серпинский 3D\". https://en.wikipedia.org/wiki/Sierpinski_triangle Автор: Десмонд Дейнолт; 1997."
#: ../hacks/config/sierpinski3d.xml.h:1
msgid "Sierpinski3D"
-msgstr ""
+msgstr "Серпинский 3D"
#: ../hacks/config/sierpinski3d.xml.h:11
msgid ""
-"The recursive Sierpinski tetrahedron fractal. https://en.wikipedia.org/wiki/"
-"Sierpinski_triangle#Analogs_in_higher_dimension Written by Jamie Zawinski "
-"and Tim Robinson; 1999."
-msgstr ""
+"The recursive Sierpinski tetrahedron fractal. "
+"https://en.wikipedia.org/wiki/Sierpinski_triangle#Analogs_in_higher_dimension"
+" Written by Jamie Zawinski and Tim Robinson; 1999."
+msgstr "Рекурсивный фрактал-тетраэдр Серпинского. https://en.wikipedia.org/wiki/Sierpinski_triangle#Analogs_in_higher_dimension Авторы: Джейми Завински и Тим Робинсон; 1999."
#: ../hacks/config/skytentacles.xml.h:1
msgid "SkyTentacles"
-msgstr ""
+msgstr "Небесные шупальцы"
#: ../hacks/config/skytentacles.xml.h:12
msgid "Flexibility"
@@ -8693,7 +8829,7 @@ msgstr "Гибкость"
#: ../hacks/config/skytentacles.xml.h:14
msgid "Wiggliness"
-msgstr "Движения"
+msgstr "Волнистость"
#: ../hacks/config/skytentacles.xml.h:19
msgid "X resolution"
@@ -8713,17 +8849,17 @@ msgstr "Мультяшный"
#: ../hacks/config/skytentacles.xml.h:23
msgid "Tentacles can intersect"
-msgstr "С щупальцами можно взаимодействовать"
+msgstr "Щупальца могут пересекаться"
#: ../hacks/config/skytentacles.xml.h:26
msgid ""
"There is a tentacled abomination in the sky. From above you it devours. "
"Written by Jamie Zawinski; 2008."
-msgstr ""
+msgstr "Мерзкое существо со щупальцами в небе. Автор: Джейми Завински; 2008."
#: ../hacks/config/slidescreen.xml.h:1
msgid "SlideScreen"
-msgstr ""
+msgstr "Оползень экрана"
#: ../hacks/config/slidescreen.xml.h:6
msgid "Pause"
@@ -8740,37 +8876,42 @@ msgstr "Размер паза"
#: ../hacks/config/slidescreen.xml.h:19
msgid ""
"A variant on a \"fifteen puzzle\", operating on the screen or an image. It "
-"divides the image into a grid and randomly shuffles the squares. https://en."
-"wikipedia.org/wiki/Fifteen_puzzle Written by Jamie Zawinski; 1994."
-msgstr ""
+"divides the image into a grid and randomly shuffles the squares. "
+"https://en.wikipedia.org/wiki/Fifteen_puzzle Written by Jamie Zawinski; "
+"1994."
+msgstr "Вариант \"Пятнашек\", работающий на экране или изображении. Он делит изображение на сетку и случайным образом перемешивает квадраты. https://en.wikipedia.org/wiki/Fifteen_puzzle Автор: Джейми Завински; 1994."
#: ../hacks/config/slip.xml.h:1
msgid "Slip"
-msgstr ""
+msgstr "Проскальзывание"
#: ../hacks/config/slip.xml.h:14
msgid ""
-"A jet engine consumes the screen, then puts it through a spin cycle. Written "
-"by Scott Draves and Jamie Zawinski; 1997."
-msgstr ""
+"A jet engine consumes the screen, then puts it through a spin cycle. Written"
+" by Scott Draves and Jamie Zawinski; 1997."
+msgstr "Реактивный двигатель поглощает экран, а затем проводит его через цикл вращения. Автор: Скотт Дрейвес и Джейми Завински; 1997."
#: ../hacks/config/sonar.xml.h:1
msgid "Sonar"
-msgstr ""
+msgstr "Гидролокатор"
#: ../hacks/config/sonar.xml.h:8
msgid "Ping local subnet"
msgstr "Пинговать локальную подсеть"
-#.
-#. <option id="24" _label="Ping subnet/24 (254 hosts)" arg-set="-ping subnet/24"/>
-#. <option id="25" _label="Ping subnet/25 (126 hosts)" arg-set="-ping subnet/25"/>
-#. <option id="26" _label="Ping subnet/26 (62 hosts)" arg-set="-ping subnet/26"/>
-#. <option id="27" _label="Ping subnet/27 (31 hosts)" arg-set="-ping subnet/27"/>
+#. <option id="24" _label="Ping subnet/24 (254 hosts)" arg-set="-ping
+#. subnet/24"/>
+#. <option id="25" _label="Ping subnet/25 (126 hosts)" arg-set="-ping
+#. subnet/25"/>
+#. <option id="26" _label="Ping subnet/26 (62 hosts)" arg-set="-ping
+#. subnet/26"/>
+#. <option id="27" _label="Ping subnet/27 (31 hosts)" arg-set="-ping
+#. subnet/27"/>
#. <option id="28" _label="Ping subnet/28 (14 hosts)"/>
-#. <option id="29" _label="Ping subnet/29 (6 hosts)" arg-set="-ping subnet/29"/>
-#. <option id="30" _label="Ping subnet/30 (2 hosts)" arg-set="-ping subnet/30"/>
-#.
+#. <option id="29" _label="Ping subnet/29 (6 hosts)" arg-set="-ping
+#. subnet/29"/>
+#. <option id="30" _label="Ping subnet/30 (2 hosts)" arg-set="-ping
+#. subnet/30"/>
#: ../hacks/config/sonar.xml.h:18
msgid "Ping known SSH hosts"
msgstr "Пинговать известные хосты по SSH"
@@ -8805,7 +8946,7 @@ msgstr "Количество B"
#: ../hacks/config/sonar.xml.h:31
msgid "Resolve host names"
-msgstr "Преобразовывать имена хостов"
+msgstr "Резолвить имена хостов"
#: ../hacks/config/sonar.xml.h:32
msgid "Show ping times"
@@ -8816,14 +8957,14 @@ msgid ""
"A sonar display pings (get it?) the hosts on your local network, and plots "
"their distance (response time) from you. The three rings represent ping "
"times of approximately 2.5, 70 and 2,000 milliseconds respectively. "
-"Alternately, it can run a simulation that doesn't involve hosts. https://en."
-"wikipedia.org/wiki/Ping#History Written by Jamie Zawinski and Stephen "
-"Martin; 1998."
-msgstr ""
+"Alternately, it can run a simulation that doesn't involve hosts. "
+"https://en.wikipedia.org/wiki/Ping#History Written by Jamie Zawinski and "
+"Stephen Martin; 1998."
+msgstr "Дисплей гидролокатора пингует (ты вразумился?) хосты в вашей локальной сети, их расстояние (время отклика) от вас. Три кольца представляют собой пинг 2,5, 70 и 2000 миллисекунд соответственно. С другой стороны, дисплей может запустить моделирование, которое не предполагает хостов. https://en.wikipedia.org/wiki/Ping#History Авторы: Джейми Завински и Стефан Мартин; 1998 год."
#: ../hacks/config/speedmine.xml.h:1
msgid "SpeedMine"
-msgstr ""
+msgstr "Моя скорость"
#: ../hacks/config/speedmine.xml.h:6
msgid "Max velocity"
@@ -8843,7 +8984,7 @@ msgstr "Червь"
#: ../hacks/config/speedmine.xml.h:12
msgid "Rocky walls"
-msgstr "Каменные стены"
+msgstr "Скалистые стены"
#: ../hacks/config/speedmine.xml.h:13
msgid "Allow wall collisions"
@@ -8861,55 +9002,47 @@ msgstr "Показывать перекрестье"
msgid ""
"Simulates speeding down a rocky mineshaft, or a funky dancing worm. Written "
"by Conrad Parker; 2001."
-msgstr ""
+msgstr "Имитирует превышение скорости вниз по каменистой штольне, или танцы червя. Автор: Конрад Паркер; 2001."
#: ../hacks/config/sphere.xml.h:9
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.08. Draws shaded spheres in multiple colors. Written by Tom Duff "
"and Jamie Zawinski; 1982, 1997."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Рисует затенённые сферы в нескольких цветах. Автор: Том Дуфф и Джейми Завински; 1982, 1997."
#: ../hacks/config/spheremonics.xml.h:1
msgid "Spheremonics"
-msgstr ""
+msgstr "Моническик сферы"
#: ../hacks/config/spheremonics.xml.h:18
msgid "Smoothed lines"
-msgstr "Сглаживание линий"
+msgstr "Сглаженные линии"
#: ../hacks/config/spheremonics.xml.h:23
msgid ""
"These closed objects are commonly called spherical harmonics, although they "
"are only remotely related to the mathematical definition found in the "
"solution to certain wave functions, most notably the eigenfunctions of "
-"angular momentum operators. https://en.wikipedia.org/wiki/"
-"Spherical_harmonics#Visualization_of_the_spherical_harmonics Written by Paul "
-"Bourke and Jamie Zawinski; 2002."
-msgstr ""
+"angular momentum operators. "
+"https://en.wikipedia.org/wiki/Spherical_harmonics#Visualization_of_the_spherical_harmonics"
+" Written by Paul Bourke and Jamie Zawinski; 2002."
+msgstr "Эти закрытые объекты обычно называются сферическими гармониками, хотя они лишь отдалённо связаны с математическим определением, найденного в решении определённых волновых функций, в первую очередь собственных функций операторов углового момента. https://en.wikipedia.org/wiki/Spherical_harmonics#Visualization_of_the_spherical_harmonics Авторы: Пол Бурк и Джейми Завински; 2002."
#: ../hacks/config/spiral.xml.h:1
msgid "Spiral"
-msgstr ""
+msgstr "Спираль"
#: ../hacks/config/spiral.xml.h:12
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.08. Moving circular moire patterns. Written by Peter "
"Schmitzberger; 1997."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Перемещение круговых муарных узоров. Автор Питер Счмитзбергер; 1997."
#: ../hacks/config/splitflap.xml.h:1
msgid "SplitFlap"
-msgstr ""
-
-#: ../hacks/config/splitflap.xml.h:8
-msgid "Columns"
-msgstr "Столбцы"
-
-#: ../hacks/config/splitflap.xml.h:9
-msgid "Rows"
-msgstr "Строки"
+msgstr "Откидные створки"
#: ../hacks/config/splitflap.xml.h:10
msgid "Display text"
@@ -8929,11 +9062,11 @@ msgid ""
"seen in airports and train stations, and commonly used in alarm clocks in "
"the 1960s and 1970s. https://en.wikipedia.org/wiki/Split-flap_display "
"https://en.wikipedia.org/wiki/Flip_clock Written by Jamie Zawinski; 2015."
-msgstr ""
+msgstr "Имитирует дисплей с откидными створками, старый стиль электромеханического табло, используемый в аэропортах и на вокзалах, а также в будильниках 1960-х и 1970-х годов. https://en.wikipedia.org/wiki/Split-flap_display https://en.wikipedia.org/wiki/Flip_clock Автор: Джейми Завински; 2015."
#: ../hacks/config/splodesic.xml.h:1
msgid "Splodesic"
-msgstr ""
+msgstr "Сплодэсик"
#: ../hacks/config/splodesic.xml.h:6
msgid "Eruption frequency"
@@ -8943,11 +9076,11 @@ msgstr "Частота извержений"
msgid ""
"A geodesic sphere experiences a series of eruptions. Written by Jamie "
"Zawinski; 2016."
-msgstr ""
+msgstr "Геодезическая сфера испытывает серию извержений. Автор Джейми Завински; 2016."
#: ../hacks/config/spotlight.xml.h:1
msgid "Spotlight"
-msgstr ""
+msgstr "Прожектор"
#: ../hacks/config/spotlight.xml.h:9
msgid "Spotlight size"
@@ -8955,13 +9088,13 @@ msgstr "Размер прожектора"
#: ../hacks/config/spotlight.xml.h:12
msgid ""
-"A spotlight scanning across a black screen, illuminating a loaded image when "
-"it passes. Written by Rick Schultz and Jamie Zawinski; 1999."
-msgstr ""
+"A spotlight scanning across a black screen, illuminating a loaded image when"
+" it passes. Written by Rick Schultz and Jamie Zawinski; 1999."
+msgstr "Прожектор сканирует чёрный экран, частично освещая загруженное изображение. Авторы: Рик Шульц и Джейми Завински; 1999 год."
#: ../hacks/config/sproingies.xml.h:1
msgid "Sproingies"
-msgstr ""
+msgstr "Пружинисто"
#: ../hacks/config/sproingies.xml.h:7
msgid "Fall off edge"
@@ -8971,14 +9104,14 @@ msgstr "Падать с грани"
#, no-c-format
msgid ""
"Slinky-like creatures walk down an infinite staircase and occasionally "
-"explode! https://en.wikipedia.org/wiki/Slinky https://en.wikipedia.org/wiki/Q"
-"%2Abert https://en.wikipedia.org/wiki/Marble_Madness Written by Ed Mackey; "
-"1997."
-msgstr ""
+"explode! https://en.wikipedia.org/wiki/Slinky "
+"https://en.wikipedia.org/wiki/Q%2Abert "
+"https://en.wikipedia.org/wiki/Marble_Madness Written by Ed Mackey; 1997."
+msgstr "Слинки-подобные существа идут вниз по бесконечной лестнице, а иногда взрываются! https://en.wikipedia.org/wiki/Slinky https://en.wikipedia.org/wiki/Q%2Abert https://en.wikipedia.org/wiki/Marble_Madness Автор: Эд Макки; 1997."
#: ../hacks/config/squiral.xml.h:1
msgid "Squiral"
-msgstr ""
+msgstr "Крадратные спирали"
#: ../hacks/config/squiral.xml.h:5 ../hacks/config/twang.xml.h:9
msgid "Randomness"
@@ -8990,7 +9123,7 @@ msgstr "Влево"
#: ../hacks/config/squiral.xml.h:8
msgid "Handedness"
-msgstr "Направление"
+msgstr "Направленность"
#: ../hacks/config/squiral.xml.h:9
msgid "Right"
@@ -9000,25 +9133,26 @@ msgstr "Вправо"
msgid ""
"Square-spiral-producing automata. The spirals grow outward until they hit "
"something, then they go around it. Written by Jeff Epler; 1999."
-msgstr ""
+msgstr "Автомат производства квадратичных спиралей. Спирали растут наружу, пока они не поражают что-то, или движутся по кругу. Автор Джеф Эплер; 1999."
#: ../hacks/config/stairs.xml.h:1
msgid "Stairs"
-msgstr ""
+msgstr "Лестница"
#: ../hacks/config/stairs.xml.h:6
msgid ""
-"Escher's infinite staircase. https://en.wikipedia.org/wiki/"
-"Maurits_Cornelis_Escher Written by Marcelo Vianna and Jamie Zawinski; 1998."
-msgstr ""
+"Escher's infinite staircase. "
+"https://en.wikipedia.org/wiki/Maurits_Cornelis_Escher Written by Marcelo "
+"Vianna and Jamie Zawinski; 1998."
+msgstr "Бесконечная лестница Эшера. https://en.wikipedia.org/wiki/Maurits_Cornelis_Escher Авторы: Марсело Виана и Джейми Завински; 1998."
#: ../hacks/config/starfish.xml.h:1
msgid "Starfish"
-msgstr ""
+msgstr "Морская звезда"
#: ../hacks/config/starfish.xml.h:3
msgid "Color gradients"
-msgstr "Градиенты цветов"
+msgstr "Цветовые градиенты"
#: ../hacks/config/starfish.xml.h:4
msgid "Pulsating blob"
@@ -9030,31 +9164,31 @@ msgid ""
"out. Another display mode uses these shapes to lay down a field of colors, "
"which are then cycled. The motion is very organic. Written by Jamie "
"Zawinski; 1997."
-msgstr ""
+msgstr "Неровные звёздообразные узоры пульсируют, вращаются и выворачиваются наизнанку. Другой режим отображения использует эти формы чтобы сложить поле цветов с цикличным режимом работы. Движение очень органично. Автор: Джейми Завински; 1997."
#: ../hacks/config/starwars.xml.h:1
msgid "StarWars"
-msgstr ""
+msgstr "Звёздные войны"
#: ../hacks/config/starwars.xml.h:2
msgid " Frame rate Low"
-msgstr "Частота кадров Низкая"
+msgstr " Частота кадров Низкая"
#: ../hacks/config/starwars.xml.h:4
msgid "Scroll speed Slow"
-msgstr "Скорость прокрутки Медленно"
+msgstr "Скорость прокрутки Медленно"
#: ../hacks/config/starwars.xml.h:6
msgid " Stars speed Slow"
-msgstr "Скорость звезд Медленно"
+msgstr " Скорость звёзд Медленно"
#: ../hacks/config/starwars.xml.h:10
msgid "Wrap long lines"
-msgstr "Обрезать длинные строки"
+msgstr "Перенос длинных строк"
#: ../hacks/config/starwars.xml.h:11
msgid "Texture-mapped font"
-msgstr "Шрифт с текстурой"
+msgstr "Текстурированный шрифт"
#: ../hacks/config/starwars.xml.h:12
msgid "Anti-aliased lines"
@@ -9070,19 +9204,19 @@ msgstr "Затухание"
#: ../hacks/config/starwars.xml.h:18
msgid "or, Text columns"
-msgstr "или столбцов текста"
+msgstr "или столбцы текста"
#: ../hacks/config/starwars.xml.h:19
msgid ""
-"A stream of text slowly scrolling into the distance at an angle, over a star "
-"field, like at the beginning of the movie of the same name. https://en."
-"wikipedia.org/wiki/Star_Wars_opening_crawl Written by Jamie Zawinski and "
-"Claudio Matsuoka; 2001."
-msgstr ""
+"A stream of text slowly scrolling into the distance at an angle, over a star"
+" field, like at the beginning of the movie of the same name. "
+"https://en.wikipedia.org/wiki/Star_Wars_opening_crawl Written by Jamie "
+"Zawinski and Claudio Matsuoka; 2001."
+msgstr "Поток текста медленно прокручивается на расстоянии, под углом, над полем звезды, как в начале фильма с тем же названием. https://en.wikipedia.org/wiki/Star_Wars_opening_crawl Авторы: Джейми Завински и Клаудио Мацуока; 2001."
#: ../hacks/config/stonerview.xml.h:1
msgid "StonerView"
-msgstr ""
+msgstr "Просмотр Стоунера"
#: ../hacks/config/stonerview.xml.h:6
msgid "Translucent"
@@ -9094,11 +9228,11 @@ msgid ""
"patterns. Inspired by David Tristram's `electropaint' screen saver, "
"originally written for SGI computers in the late 1980s or early 1990s. "
"Written by Andrew Plotkin; 2001."
-msgstr ""
+msgstr "Цепи красочных квадратов танцуют вокруг друг друга в сложных спиральных узорах. Вдохновлённый скринсейвером Дэвида Тристраме `Гальванопластика', первоначально написаной для компьютеров SGI в конце 1980-х или начале 1990-х годов. Автор: Эндрю Плоткин; 2001."
#: ../hacks/config/strange.xml.h:1
msgid "Strange"
-msgstr ""
+msgstr "Странный"
#: ../hacks/config/strange.xml.h:5
msgid "Curviness"
@@ -9106,7 +9240,7 @@ msgstr "Кривизна"
#: ../hacks/config/strange.xml.h:6
msgid "1k"
-msgstr "1 000"
+msgstr "1000"
#: ../hacks/config/strange.xml.h:7
msgid "Number of points"
@@ -9114,7 +9248,7 @@ msgstr "Количество точек"
#: ../hacks/config/strange.xml.h:8
msgid "500k"
-msgstr "500 000"
+msgstr "500000"
#: ../hacks/config/strange.xml.h:10 ../hacks/config/voronoi.xml.h:9
msgid "Point size"
@@ -9123,12 +9257,12 @@ msgstr "Размер точки"
#: ../hacks/config/strange.xml.h:13
#, no-c-format
msgid "10%"
-msgstr ""
+msgstr "10%"
#: ../hacks/config/strange.xml.h:16
#, no-c-format
msgid "400%"
-msgstr ""
+msgstr "400%"
#: ../hacks/config/strange.xml.h:17
msgid "Brightness"
@@ -9136,14 +9270,14 @@ msgstr "Яркость"
#: ../hacks/config/strange.xml.h:24
msgid ""
-"Strange attractors: a swarm of dots swoops and twists around. https://en."
-"wikipedia.org/wiki/Attractor#Strange_attractor Written by Massimino Pascal; "
-"1997."
-msgstr ""
+"Strange attractors: a swarm of dots swoops and twists around. "
+"https://en.wikipedia.org/wiki/Attractor#Strange_attractor Written by "
+"Massimino Pascal; 1997."
+msgstr "Странные аттракторы: рой из точек с наскоками и поворотами вокруг. https://en.wikipedia.org/wiki/Attractor#Strange_attractor Автор: Массимино Паскаль; 1997."
#: ../hacks/config/substrate.xml.h:1
msgid "Substrate"
-msgstr ""
+msgstr "Субстрат"
#: ../hacks/config/substrate.xml.h:9
msgid "Sand grains"
@@ -9152,15 +9286,15 @@ msgstr "Песчинки"
#: ../hacks/config/substrate.xml.h:12
#, no-c-format
msgid "0%"
-msgstr ""
+msgstr "0%"
#: ../hacks/config/substrate.xml.h:13
msgid "Circle percentage"
-msgstr ""
+msgstr "Процент круга"
#: ../hacks/config/substrate.xml.h:16
msgid "Initial cracks"
-msgstr "Начальное количество разломов"
+msgstr "Начальные трещины"
#: ../hacks/config/substrate.xml.h:17
msgid "Wireframe only"
@@ -9175,11 +9309,11 @@ msgid ""
"Crystalline lines grow on a computational substrate. A simple perpendicular "
"growth rule creates intricate city-like structures. Written by J. Tarbell "
"and Mike Kershaw; 2004."
-msgstr ""
+msgstr "Кристаллические линии растут на вычислительном субстрате. Простое правило роста создаёт сложные структуры, подобные городским. Авторы: Дж. Тарбелл и Майк Кершоу; 2004."
#: ../hacks/config/superquadrics.xml.h:1
msgid "Superquadrics"
-msgstr ""
+msgstr "Суперквадрики"
#: ../hacks/config/superquadrics.xml.h:6
msgid "Spin speed"
@@ -9187,11 +9321,11 @@ msgstr "Скорость вращения"
#: ../hacks/config/superquadrics.xml.h:14
msgid "Morphing 3D shapes. Written by Ed Mackey; 1987, 1997."
-msgstr ""
+msgstr "Преобразование 3D-фигур. Автор Эд Макки; 1987, 1997."
#: ../hacks/config/surfaces.xml.h:1
msgid "Surfaces"
-msgstr ""
+msgstr "Поверхности"
#: ../hacks/config/surfaces.xml.h:8
msgid "Random Surface"
@@ -9211,11 +9345,11 @@ msgstr "Поверхность Куэна"
#: ../hacks/config/surfaces.xml.h:12
msgid "Moebius Strip"
-msgstr "Петля Мебиуса"
+msgstr "Лента Мёбиуса"
#: ../hacks/config/surfaces.xml.h:13
msgid "Seashell"
-msgstr "Ракушка"
+msgstr "Морская ракушка"
#: ../hacks/config/surfaces.xml.h:14
msgid "Swallowtail"
@@ -9251,72 +9385,76 @@ msgstr "Случайный режим отображения"
#: ../hacks/config/surfaces.xml.h:24
msgid "Line Loops"
-msgstr "Замкнутые линии"
+msgstr "Петлевые линии"
#: ../hacks/config/surfaces.xml.h:28
msgid ""
-"Parametric surfaces. http://mathworld.wolfram.com/DinisSurface.html https://"
-"en.wikipedia.org/wiki/Enneper_surface http://mathworld.wolfram.com/"
-"EnnepersMinimalSurface.html http://mathworld.wolfram.com/KuenSurface.html "
-"https://en.wikipedia.org/wiki/Moebius_strip http://mathworld.wolfram.com/"
-"Seashell.html http://mathworld.wolfram.com/SwallowtailCatastrophe.html "
-"http://mathworld.wolfram.com/BohemianDome.html https://en.wikipedia.org/wiki/"
-"Whitney_umbrella http://mathworld.wolfram.com/PlueckersConoid.html http://"
-"mathworld.wolfram.com/HennebergsMinimalSurface.html http://mathworld.wolfram."
-"com/CatalansSurface.html http://mathworld.wolfram.com/CorkscrewSurface.html "
-"Written by Andrey Mirtchovski and Carsten Steger; 2003."
-msgstr ""
+"Parametric surfaces. http://mathworld.wolfram.com/DinisSurface.html "
+"https://en.wikipedia.org/wiki/Enneper_surface "
+"http://mathworld.wolfram.com/EnnepersMinimalSurface.html "
+"http://mathworld.wolfram.com/KuenSurface.html "
+"https://en.wikipedia.org/wiki/Moebius_strip "
+"http://mathworld.wolfram.com/Seashell.html "
+"http://mathworld.wolfram.com/SwallowtailCatastrophe.html "
+"http://mathworld.wolfram.com/BohemianDome.html "
+"https://en.wikipedia.org/wiki/Whitney_umbrella "
+"http://mathworld.wolfram.com/PlueckersConoid.html "
+"http://mathworld.wolfram.com/HennebergsMinimalSurface.html "
+"http://mathworld.wolfram.com/CatalansSurface.html "
+"http://mathworld.wolfram.com/CorkscrewSurface.html Written by Andrey "
+"Mirtchovski and Carsten Steger; 2003."
+msgstr "Параметрические поверхности. http://mathworld.wolfram.com/DinisSurface.html https://en.wikipedia.org/wiki/Enneper_surface http://mathworld.wolfram.com/EnnepersMinimalSurface.html http://mathworld.wolfram.com/KuenSurface.html https://en.wikipedia.org/wiki/Moebius_strip http://mathworld.wolfram.com/Seashell.html http://mathworld.wolfram.com/SwallowtailCatastrophe.html http://mathworld.wolfram.com/BohemianDome.html https://en.wikipedia.org/wiki/Whitney_umbrella http://mathworld.wolfram.com/PlueckersConoid.html http://mathworld.wolfram.com/HennebergsMinimalSurface.html http://mathworld.wolfram.com/CatalansSurface.html http://mathworld.wolfram.com/CorkscrewSurface.html Авторы: Андрей Мирчевский и Карстен Штегер; 2003."
#: ../hacks/config/swirl.xml.h:1
msgid "Swirl"
-msgstr ""
+msgstr "Вихрь"
#: ../hacks/config/swirl.xml.h:12
msgid "Flowing, swirly patterns. Written by M. Dobie and R. Taylor; 1997."
-msgstr ""
+msgstr "Текучие вихревые узоры. Авторы: М. Доби и Р. Тейлор; 1997 год."
#: ../hacks/config/t3d.xml.h:1
msgid "T3D"
-msgstr ""
+msgstr "T3D"
#: ../hacks/config/t3d.xml.h:6
msgid "Turn side-to-side"
-msgstr ""
+msgstr "Повороты туда-сюда"
#: ../hacks/config/t3d.xml.h:8
msgid "Wobbliness"
-msgstr ""
+msgstr "Люфт"
#: ../hacks/config/t3d.xml.h:9
msgid "Cycle seconds"
-msgstr ""
+msgstr "Секундный цикл"
#: ../hacks/config/t3d.xml.h:10
msgid "Smaller"
-msgstr ""
+msgstr "Меньше"
#: ../hacks/config/t3d.xml.h:12
msgid "Bigger"
-msgstr ""
+msgstr "Больше"
#: ../hacks/config/t3d.xml.h:13
msgid "Minute tick marks"
-msgstr ""
+msgstr "Маркировка минутных отметок"
#: ../hacks/config/t3d.xml.h:14
msgid "5 minute tick marks"
-msgstr ""
+msgstr "Маркировка 5-минутных отметок"
#: ../hacks/config/t3d.xml.h:16
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.08. Draws a working analog clock composed of floating, throbbing "
"bubbles. Written by Bernd Paysan; 1999."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Рисует рабочие аналоговые часы, состоящие из плавающих, пульсирующих пузырьков. Автор Бернд Пайсан; 1999 год."
#: ../hacks/config/tangram.xml.h:1
msgid "Tangram"
-msgstr ""
+msgstr "Танграм"
#: ../hacks/config/tangram.xml.h:9
msgid "X rotation"
@@ -9334,11 +9472,11 @@ msgstr "Поворот Z"
msgid ""
"Solves tangram puzzles. https://en.wikipedia.org/wiki/Tangram Written by "
"Jeremy English; 2005."
-msgstr ""
+msgstr "Решить Танграм головоломки. https://en.wikipedia.org/wiki/Tangram Автор: Джереми Инглиш; 2005."
#: ../hacks/config/tessellimage.xml.h:1
msgid "Tessellimage"
-msgstr ""
+msgstr "Мозаичное изображение"
#: ../hacks/config/tessellimage.xml.h:5
msgid "0.1 second"
@@ -9348,46 +9486,60 @@ msgstr "0.1 секунды"
msgid "4 seconds"
msgstr "4 секунды"
+#: ../hacks/config/tessellimage.xml.h:14
+msgid "Delaunay or voronoi"
+msgstr "Делоне или Вороной"
+
#: ../hacks/config/tessellimage.xml.h:15
+msgid "Delaunay"
+msgstr "Делоне"
+
+#: ../hacks/config/tessellimage.xml.h:16 ../hacks/config/voronoi.xml.h:1
+msgid "Voronoi"
+msgstr "Вороной"
+
+#: ../hacks/config/tessellimage.xml.h:18
msgid "Outline triangles"
msgstr "Обводить треугольники"
-#: ../hacks/config/tessellimage.xml.h:17
-msgid ""
-"Converts an image to triangles using Delaunay tessellation, and animates the "
-"result at various depths. More triangles are allocated to visually complex "
-"parts of the image. This is accomplished by first computing the first "
-"derivative of the image: the distance between each pixel and its neighbors "
-"(which is essentially edge detection or embossing). Then the Delaunay "
-"control points are chosen by selecting those pixels whose distance value is "
-"above a certain threshold: those are the pixels that have the largest change "
-"in color/brightness. https://en.wikipedia.org/wiki/Delaunay_triangulation "
-"Written by Jamie Zawinski; 2014."
-msgstr ""
+#: ../hacks/config/tessellimage.xml.h:20
+msgid ""
+"Converts an image to triangles using Delaunay tessellation, or to polygons "
+"using Voronoi tesselation, and animates the result at various depths. More "
+"polygons are allocated to visually complex parts of the image. This is "
+"accomplished by first computing the first derivative of the image: the "
+"distance between each pixel and its neighbors (which is essentially edge "
+"detection or embossing). Then the Delaunay or Voronoi control points are "
+"chosen by selecting those pixels whose distance value is above a certain "
+"threshold: those are the pixels that have the largest change in "
+"color/brightness. https://en.wikipedia.org/wiki/Delaunay_triangulation "
+"https://en.wikipedia.org/wiki/Voronoi_diagram "
+"https://en.wikipedia.org/wiki/Tessellation Written by Jamie Zawinski; 2014."
+msgstr "Преобразует изображение в треугольники, используя тесселяцию Делоне, или в многоугольники, используя тесселяцию Вороного, и анимирует результат на различных глубинах. Больше многоугольников размещено у визуально сложных частей изображения. Это достигается путём первого вычисления первой производной изображения: расстояния между каждым пикселем и его соседями (что по существу является обнаружением края или тиснением). Затем контрольные точки Делоне или Вороного выбираются путём выбора тех пикселей, значение расстояния которых превышает определённый порог: это пиксели, которые имеют наибольшее изменение цвета/яркости. https://en.wikipedia.org/wiki/Delaunay_triangulation https://en.wikipedia.org/wiki/Voronoi_diagram https://en.wikipedia.org/wiki/Tessellation Автор Джейми Завински; 2014."
#: ../hacks/config/testx11.xml.h:1
msgid "TestX11"
-msgstr ""
+msgstr "Тест X11"
#: ../hacks/config/testx11.xml.h:3
msgid ""
"Test platform for JWXYZ - the X11 compatibility shim for OS X and iOS. End "
"users shouldn't normally see this one. Written by Dave Odell; 2015."
-msgstr ""
+msgstr "Протестировать платформу для JWXYZ - совместимость X11 для OS X и iOS. Конечные пользователи обычно не должны видеть это. Автор Дэйв Оделл; 2015."
#: ../hacks/config/thornbird.xml.h:1
msgid "Thornbird"
-msgstr ""
+msgstr "Терновая птица"
#: ../hacks/config/thornbird.xml.h:17
msgid ""
"Displays a view of the \"Bird in a Thornbush\" fractal. Written by Tim "
"Auckland; 2002."
-msgstr ""
+msgstr "Отображает вид фрактала \"Птица в терновом кусте\". Автор Тим Окленд; 2002."
#: ../hacks/config/timetunnel.xml.h:1
msgid "TimeTunnel"
-msgstr ""
+msgstr "Туннель времени"
#: ../hacks/config/timetunnel.xml.h:2
msgid "0 sec"
@@ -9411,13 +9563,13 @@ msgstr "Запускать в обратном порядке"
#: ../hacks/config/timetunnel.xml.h:9
msgid ""
-"An animation similar to the title sequence of Dr. Who in the 70s. Written by "
-"Sean P. Brennan; 2005."
-msgstr ""
+"An animation similar to the title sequence of Dr. Who in the 70s. Written by"
+" Sean P. Brennan; 2005."
+msgstr "Анимация, похожая на заглавную последовательность доктора Кто в 70-х. Автор Шон П. Бреннан; 2005."
#: ../hacks/config/topblock.xml.h:1
msgid "TopBlock"
-msgstr ""
+msgstr "Верхний блок"
#: ../hacks/config/topblock.xml.h:6
msgid "Drop speed"
@@ -9425,7 +9577,7 @@ msgstr "Скорость падения"
#: ../hacks/config/topblock.xml.h:9
msgid "Carpet size"
-msgstr "Размер фундамента"
+msgstr "Размер покрытия"
#: ../hacks/config/topblock.xml.h:11
msgid "Spawn likelyhood"
@@ -9433,7 +9585,7 @@ msgstr "Вероятность появления"
#: ../hacks/config/topblock.xml.h:12
msgid "Polygon count"
-msgstr "Количество полигонов"
+msgstr "Количество многоугольников"
#: ../hacks/config/topblock.xml.h:18
msgid "Follow"
@@ -9449,7 +9601,7 @@ msgstr "Режим туннеля"
#: ../hacks/config/topblock.xml.h:21
msgid "Carpet"
-msgstr "Фундамент"
+msgstr "Покрытие"
#: ../hacks/config/topblock.xml.h:22
msgid "Nipples"
@@ -9459,45 +9611,46 @@ msgstr "Бугорки"
msgid ""
"Creates a 3D world with dropping blocks that build up and up. Written by "
"rednuht; 2006."
-msgstr ""
+msgstr "Создает 3D мир с беспорядочным накоплением блоков, груда которых делается всё выше и выше. Автор Реднухт; 2006 год."
#: ../hacks/config/triangle.xml.h:1
msgid "Triangle"
-msgstr ""
+msgstr "Треугольное"
#: ../hacks/config/triangle.xml.h:9
msgid ""
"Generates random mountain ranges using iterative subdivision of triangles. "
"Written by Tobias Gloth; 1997."
-msgstr ""
+msgstr "Генерирует случайные горные цепи, используя итерационное разбиение треугольников. Автор: Тобиас Глот; 1997."
#: ../hacks/config/tronbit.xml.h:1
msgid "TronBit"
-msgstr ""
+msgstr "Бит трона"
#: ../hacks/config/tronbit.xml.h:12
msgid ""
"The character \"Bit\" from the film, \"Tron\". The \"yes\" state is a "
"tetrahedron; the \"no\" state is the second stellation of an icosahedron; "
"and the idle state oscillates between a small triambic icosahedron and the "
-"compound of an icosahedron and a dodecahedron. https://en.wikipedia.org/wiki/"
-"List_of_Tron_characters#Bit https://en.wikipedia.org/wiki/Uniform_polyhedra "
+"compound of an icosahedron and a dodecahedron. "
+"https://en.wikipedia.org/wiki/List_of_Tron_characters#Bit "
+"https://en.wikipedia.org/wiki/Uniform_polyhedra "
"https://en.wikipedia.org/wiki/Stellation Written by Jamie Zawinski; 2011."
-msgstr ""
+msgstr "Символ \"Бит\" из фильма \"Трон\". \"Да\" - тетраэдр; \"нет\" - икосаэдр; неактивное состояние колеблется между малым триамбическим икосаэдром и соединением икосаэдра и додекаэдра. https://en.wikipedia.org/wiki/List_of_Tron_characters#Bit https://en.wikipedia.org/wiki/Uniform_polyhedra https://en.wikipedia.org/wiki/Stellation Автор: Джейми Завински; 2011."
#: ../hacks/config/truchet.xml.h:1
msgid "Truchet"
-msgstr ""
+msgstr "Труше"
#: ../hacks/config/truchet.xml.h:7
msgid ""
-"Line- and arc-based truchet patterns that tile the screen. https://en."
-"wikipedia.org/wiki/Tessellation Written by Adrian Likins; 1998."
-msgstr ""
+"Line- and arc-based truchet patterns that tile the screen. "
+"https://en.wikipedia.org/wiki/Tessellation Written by Adrian Likins; 1998."
+msgstr "Линейные и дуговые узоры Труше, что укладываются плиткой на экране. https://en.wikipedia.org/wiki/Tessellation Автор: Адриан Ликинс; 1998."
#: ../hacks/config/twang.xml.h:1
msgid "Twang"
-msgstr ""
+msgstr "Бренчать"
#: ../hacks/config/twang.xml.h:10
msgid "Jumpy"
@@ -9519,11 +9672,11 @@ msgstr "Толщина границы"
msgid ""
"Divides the screen into a grid, and plucks them. Written by Dan Bornstein; "
"2002."
-msgstr ""
+msgstr "Делит экран на сетки, и дёргивает их. Автор: Дэн Бёрнштейн; 2002."
#: ../hacks/config/unicrud.xml.h:1
msgid "Unicrud"
-msgstr ""
+msgstr "Юникруд"
#: ../hacks/config/unicrud.xml.h:12
msgid "Display everything"
@@ -9554,17 +9707,25 @@ msgid ""
"Chooses a random Unicode character and displays it full screen, along with "
"some information about it. https://en.wikipedia.org/wiki/Unicode Written by "
"Jamie Zawinski; 2016."
-msgstr ""
+msgstr "Выбирает случайный символ Юникода и отображает его на весь экран вместе с некоторой информацией о нём. https://en.wikipedia.org/wiki/Unicode Автор: Джейми Завински; 2016."
#: ../hacks/config/unknownpleasures.xml.h:1
msgid "UnknownPleasures"
-msgstr ""
+msgstr "Неизвестные удовольствия"
#: ../hacks/config/unknownpleasures.xml.h:12
+msgid "Amplitude"
+msgstr "Амплитуда"
+
+#: ../hacks/config/unknownpleasures.xml.h:14
msgid "Orthographic Projection"
msgstr "Ортографическая проекция"
-#: ../hacks/config/unknownpleasures.xml.h:16
+#: ../hacks/config/unknownpleasures.xml.h:15
+msgid "Buzz"
+msgstr "Жужжание"
+
+#: ../hacks/config/unknownpleasures.xml.h:19
#, no-c-format
msgid ""
"PSR B1919+21 (AKA CP 1919) was the first pulsar ever discovered: a spinning "
@@ -9573,23 +9734,34 @@ msgid ""
"and later in The Cambridge Encyclopedia of Astronomy in 1977, where it was "
"seen by Stephen Morris, the drummer of Joy Division, and was consequently "
"appropriated by Peter Saville for the cover of the band's album \"Unknown "
-"Pleasures\". https://en.wikipedia.org/wiki/Pulsar https://en.wikipedia.org/"
-"wiki/PSR_B1919%2B21 https://en.wikipedia.org/wiki/Unknown_Pleasures https://"
-"en.wikipedia.org/wiki/Peter_Saville_%28graphic_designer%29 https://en."
-"wikipedia.org/wiki/Joy_Division Written by Jamie Zawinski; 2013."
-msgstr ""
+"Pleasures\". https://en.wikipedia.org/wiki/Pulsar "
+"https://en.wikipedia.org/wiki/PSR_B1919%2B21 "
+"https://en.wikipedia.org/wiki/Unknown_Pleasures "
+"https://en.wikipedia.org/wiki/Peter_Saville_%28graphic_designer%29 "
+"https://en.wikipedia.org/wiki/Joy_Division Written by Jamie Zawinski; 2013."
+msgstr "PSR B1919+21 (AKA CP 1919) был первым пульсаром из когда-либо обнаруженных: вращающаяся нейтронная звезда, испускающая периодический сигнал, как маяк. Иллюстрация сигнала, полученного от него была опубликована в журнале \"Ученый американец\" в 1971 году, а затем в Кембридже, в энциклопедии астрономии, в 1977 году, иллюстрацию увидел Стивен Моррис, барабанщик Joy Division; иллюстрация была использована Питером Сэвиллом для обложки альбома \"Неизвестные удовольствия\". https://en.wikipedia.org/wiki/Pulsar https://en.wikipedia.org/wiki/PSR_B1919%2B21 https://en.wikipedia.org/wiki/Unknown_Pleasures https://en.wikipedia.org/wiki/Peter_Saville_%28graphic_designer%29 https://en.wikipedia.org/wiki/Joy_Division Автор: Джейми Завински; 2013."
#: ../hacks/config/vermiculate.xml.h:1
msgid "Vermiculate"
-msgstr ""
+msgstr "Изъеденный червями"
#: ../hacks/config/vermiculate.xml.h:6
msgid "Squiggly worm-like paths. Written by Tyler Pierce; 2001."
-msgstr ""
+msgstr "Червеобразные пути. Автор: Тайлер Пирс; 2001."
+
+#: ../hacks/config/vfeedback.xml.h:1
+msgid "VFeedback"
+msgstr "Обратная связь видео"
+
+#: ../hacks/config/vfeedback.xml.h:10
+msgid ""
+"Simulates video feedback: pointing a video camera at an NTSC television. "
+"Written by Jamie Zawinski; 2018."
+msgstr "Имитирует обратную связь видео: направляет видеокамеру на телевидение NTSC (\"Национальный комитет по телевизионным системам\"). Автор Джейми Завински; 2018."
#: ../hacks/config/vidwhacker.xml.h:1
msgid "VidWhacker"
-msgstr ""
+msgstr "VidWhacker"
#: ../hacks/config/vidwhacker.xml.h:2
msgid "2 seconds"
@@ -9606,13 +9778,13 @@ msgid ""
"(chosen at random) to manipulate and recombine the video frame in various "
"ways (edge detection, subtracting the image from a rotated version of "
"itself, etc.) Then it displays that image for a few seconds, and does it "
-"again. This works really well if you just feed broadcast television into it. "
-"Written by Jamie Zawinski; 1998."
-msgstr ""
+"again. This works really well if you just feed broadcast television into it."
+" Written by Jamie Zawinski; 1998."
+msgstr "Отображает искажённые видеокадры. Это скрипт, который захватывает кадр видео от входного видеосигнала системы, а затем использует некоторые PBM фильтры (выбираются случайным образом), чтобы манипулировать и рекомбинировать видеокадр различными способами (обнаружение края, вычитание изображения из повёрнутой версии и т.д.) Затем он показывает изображение на несколько секунд, и делает это снова. Это работает очень хорошо, если вы просто добавляете в него вещательное телевидение. Автор: Джейми Завински; 1998."
#: ../hacks/config/vigilance.xml.h:1
msgid "Vigilance"
-msgstr ""
+msgstr "Зоркость"
#: ../hacks/config/vigilance.xml.h:9
msgid "Number of cameras"
@@ -9623,22 +9795,18 @@ msgid ""
"Security cameras keep careful track of their surroundings. You can trust "
"them. Everything is completely under control. Written by Jamie Zawinski; "
"2017."
-msgstr ""
+msgstr "Камеры видеонаблюдения тщательно отслеживают обстановку. Вы можете доверять им. Всё полностью под контролем. Автор Джейми Завински; 2017."
#: ../hacks/config/vines.xml.h:1
msgid "Vines"
-msgstr ""
+msgstr "Лоза"
#: ../hacks/config/vines.xml.h:9
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.08. Generates a continuous sequence of small, curvy geometric "
"patterns. Written by Tracy Camp and David Hansen; 1997."
-msgstr ""
-
-#: ../hacks/config/voronoi.xml.h:1
-msgid "Voronoi"
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Формирует непрерывную последовательность небольших извилистых геометрических узоров. Автор: Трейси Камп и Дэвид Хансен; 1997."
#: ../hacks/config/voronoi.xml.h:10
msgid "50 pixels"
@@ -9659,27 +9827,27 @@ msgstr "Частота масштабирования"
#: ../hacks/config/voronoi.xml.h:17
msgid ""
"A Voronoi tessellation. Periodically zooms in and adds new points. The "
-"existing points also wander around. There are a set of control points on the "
-"plane, each at the center of a colored cell. Every pixel within that cell is "
-"closer to that cell's control point than to any other control point. That is "
-"what determines the cell's shapes. https://en.wikipedia.org/wiki/"
-"Voronoi_diagram https://en.wikipedia.org/wiki/Tessellation Written by Jamie "
-"Zawinski; 2007."
-msgstr ""
+"existing points also wander around. There are a set of control points on the"
+" plane, each at the center of a colored cell. Every pixel within that cell "
+"is closer to that cell's control point than to any other control point. That"
+" is what determines the cell's shapes. "
+"https://en.wikipedia.org/wiki/Voronoi_diagram "
+"https://en.wikipedia.org/wiki/Tessellation Written by Jamie Zawinski; 2007."
+msgstr "Тесселяции Вороного. Периодически масштабирует и добавляет новые точки. Есть множество контрольных точек на плоскости, каждая в центре цветной клетки. Каждый пиксель в этой ячейке находится ближе к контрольной точке ячейки, чем в любой другой точке управления. То есть то, что определяет форму клетки. https://en.wikipedia.org/wiki/Voronoi_diagram https://en.wikipedia.org/wiki/Tessellation Автор: Джейми Завински; 2007."
#: ../hacks/config/wander.xml.h:11
msgid "Draw spots"
-msgstr "Прорисовывать точки"
+msgstr "Прорисовывать пятна"
#: ../hacks/config/wander.xml.h:14
msgid ""
-"A colorful random-walk. https://en.wikipedia.org/wiki/Random_walk Written by "
-"Rick Campbell; 1999."
-msgstr ""
+"A colorful random-walk. https://en.wikipedia.org/wiki/Random_walk Written by"
+" Rick Campbell; 1999."
+msgstr "Красочное изображение случайной ходьбы. https://en.wikipedia.org/wiki/Random_walk Автор: Рик Кэмпбелл; 1999."
#: ../hacks/config/webcollage.xml.h:1
msgid "WebCollage"
-msgstr ""
+msgstr "Веб-коллаж"
#: ../hacks/config/webcollage.xml.h:3
msgid "Delay between images"
@@ -9710,16 +9878,16 @@ msgid ""
"This is what the Internet looks like. This creates collages out of random "
"images from the World Wide Web. It finds the images by feeding random words "
"into various search engines, and pulling images (or sections of images) out "
-"of the pages returned. WARNING: THE INTERNET SOMETIMES CONTAINS PORNOGRAPHY. "
-"The Internet being what it is, absolutely anything might show up in the "
+"of the pages returned. WARNING: THE INTERNET SOMETIMES CONTAINS PORNOGRAPHY."
+" The Internet being what it is, absolutely anything might show up in the "
"collage including -- quite possibly -- pornography, or even nudity. Please "
"act accordingly. See also https://www.jwz.org/webcollage/ Written by Jamie "
"Zawinski; 1999."
-msgstr ""
+msgstr "Интернет, который выглядит случайным образом. Заставка создает коллажи из случайных изображений из World Wide Web (Всемирной паутины). Она находит изображения путём подачи случайных слов в различных поисковых системах, и вытягивает изображения (или группы изображений) из возвращаемых страниц. ПРЕДУПРЕЖДЕНИЕ: ИНТЕРНЕТ СОДЕРЖИТ ИНОГДА порнографию. Интернет, какой он есть; в коллаже может абсолютно ничего не появиться, вполне возможно, может появиться порнография, или даже - нагота! Пожалуйста, действуйте соответственно. Смотрите также https://www.jwz.org/webcollage/ Автор: Джейми Завински; 1999."
#: ../hacks/config/whirlwindwarp.xml.h:1
msgid "WhirlWindWarp"
-msgstr ""
+msgstr "Вихревая деформация"
#: ../hacks/config/whirlwindwarp.xml.h:6
msgid "Trail size"
@@ -9730,126 +9898,126 @@ msgid ""
"Floating stars are acted upon by a mixture of simple 2D force fields. The "
"strength of each force field changes continuously, and it is also switched "
"on and off at random. Written by Paul 'Joey' Clark; 2001."
-msgstr ""
+msgstr "Плавающие звёзды на смеси простых 2D силовых полей. Сила каждого силового поля постоянно меняется; включается и выключается в случайном порядке. Автор: Пол 'Джой' Кларк; 2001."
#: ../hacks/config/whirlygig.xml.h:1
msgid "Whirlygig"
-msgstr ""
+msgstr "Волчок"
#: ../hacks/config/whirlygig.xml.h:2
msgid "Whirlies"
-msgstr ""
+msgstr "Шторма"
#: ../hacks/config/whirlygig.xml.h:5
msgid "X speed"
-msgstr ""
+msgstr "Скорость по X"
#: ../hacks/config/whirlygig.xml.h:7
msgid "Y speed"
-msgstr ""
+msgstr "Скорость по Y"
#: ../hacks/config/whirlygig.xml.h:8
msgid "X amplitude"
-msgstr ""
+msgstr "Амплитуда по Х"
#: ../hacks/config/whirlygig.xml.h:9
msgid "Y amplitude"
-msgstr ""
+msgstr "Амплитуда по Y"
#: ../hacks/config/whirlygig.xml.h:10
msgid "X random"
-msgstr ""
+msgstr "Случайность по Х"
#: ../hacks/config/whirlygig.xml.h:11
msgid "X spin"
-msgstr ""
+msgstr "Вращение вокруг оси Х"
#: ../hacks/config/whirlygig.xml.h:12
msgid "X funky"
-msgstr ""
+msgstr "Фанк по X"
#: ../hacks/config/whirlygig.xml.h:13
msgid "X circle"
-msgstr ""
+msgstr "Круг по X"
#: ../hacks/config/whirlygig.xml.h:14
msgid "X linear"
-msgstr ""
+msgstr "Линейность по Х"
#: ../hacks/config/whirlygig.xml.h:15
msgid "X test"
-msgstr ""
+msgstr "Тест по Х"
#: ../hacks/config/whirlygig.xml.h:16
msgid "X fun"
-msgstr ""
+msgstr "Функция по Х"
#: ../hacks/config/whirlygig.xml.h:17
msgid "X innie"
-msgstr ""
+msgstr "Втянутость по X"
#: ../hacks/config/whirlygig.xml.h:18
msgid "X lissajous"
-msgstr ""
+msgstr "Лиссажу по X"
#: ../hacks/config/whirlygig.xml.h:19
msgid "Y random"
-msgstr ""
+msgstr "Случайность по Y"
#: ../hacks/config/whirlygig.xml.h:20
msgid "Y spin"
-msgstr ""
+msgstr "Вращение вокруг оси Y"
#: ../hacks/config/whirlygig.xml.h:21
msgid "Y funky"
-msgstr ""
+msgstr "Фанк по Y"
#: ../hacks/config/whirlygig.xml.h:22
msgid "Y circle"
-msgstr ""
+msgstr "Круг по Y"
#: ../hacks/config/whirlygig.xml.h:23
msgid "Y linear"
-msgstr ""
+msgstr "Линейность по Y"
#: ../hacks/config/whirlygig.xml.h:24
msgid "Y test"
-msgstr ""
+msgstr "Тест по Y"
#: ../hacks/config/whirlygig.xml.h:25
msgid "Y fun"
-msgstr ""
+msgstr "Функция по Y"
#: ../hacks/config/whirlygig.xml.h:26
msgid "Y innie"
-msgstr ""
+msgstr "Втянутость по Y"
#: ../hacks/config/whirlygig.xml.h:27
msgid "Y lissajous"
-msgstr ""
+msgstr "Лиссажу по Y"
#: ../hacks/config/whirlygig.xml.h:28
msgid "Leave a trail"
-msgstr ""
+msgstr "Оставить след"
#: ../hacks/config/whirlygig.xml.h:29
msgid "Explain modes"
-msgstr ""
+msgstr "Объяснение режимов"
#: ../hacks/config/whirlygig.xml.h:30
msgid "Wrap the screen"
-msgstr ""
+msgstr "Обернуть экран"
#: ../hacks/config/whirlygig.xml.h:32
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
"version 5.08. Zooming chains of sinusoidal spots. Written by Ashton Trey "
"Belew; 2001."
-msgstr ""
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver версии 5.08. Увеличенные цепочки синусоидальных пятен. Автор Эштон Трей Белью; 2001 год."
#: ../hacks/config/winduprobot.xml.h:1
msgid "WindupRobot"
-msgstr ""
+msgstr "Заводной робот"
#: ../hacks/config/winduprobot.xml.h:6
msgid "Robot speed"
@@ -9885,52 +10053,56 @@ msgstr "Исчезающая прозрачность"
#: ../hacks/config/winduprobot.xml.h:23
msgid ""
-"A swarm of wind-up toy robots wander around the table-top, bumping into each "
-"other. Each robot contains a mechanically accurate gear system inside, which "
-"you can see when the robot's shell occasionally fades to transparency. Also, "
-"sometimes a cartoony word bubble pops up above a robot, full of random text. "
-"Written by Jamie Zawinski; 2014."
-msgstr ""
+"A swarm of wind-up toy robots wander around the table-top, bumping into each"
+" other. Each robot contains a mechanically accurate gear system inside, "
+"which you can see when the robot's shell occasionally fades to transparency."
+" Also, sometimes a cartoony word bubble pops up above a robot, full of "
+"random text. Written by Jamie Zawinski; 2014."
+msgstr "Рой заводных игрушечных роботов, натыкаясь друг на друга, бродит по столешнице. Каждый робот внутри содержит механическую систему точных шестерёнок, которую вы можете видеть, поскольку иногда оболочки роботов становятся прозрачными. Кроме того, время от времени, пузыри-диалоги, наполненные случайными текстами, всплывают над роботами. Автор: Джейми Завински; 2014 год."
#: ../hacks/config/worm.xml.h:12
msgid ""
"This screen saver was removed from the XScreenSaver distribution as of "
-"version 5.08. Draws multicolored worms that crawl around the screen. Written "
-"by Brad Taylor, Dave Lemke, Boris Putanec, and Henrik Theiling; 1991."
-msgstr ""
+"version 5.08. Draws multicolored worms that crawl around the screen. Written"
+" by Brad Taylor, Dave Lemke, Boris Putanec, and Henrik Theiling; 1991."
+msgstr "Эта заставка была удалена из дистрибутива XScreenSaver в версии 5.08. Рисует разноцветных ползающих по экрану червей. Авторы Брэд Тейлор, Дэйв Лимк, Борис Путанец и Генрик Тейлинг; 1991 год."
#: ../hacks/config/wormhole.xml.h:1
msgid "Wormhole"
-msgstr ""
+msgstr "Червоточины"
#: ../hacks/config/wormhole.xml.h:6
msgid "Star speed"
-msgstr "Скорость звезд"
+msgstr "Скорость звёзд"
#: ../hacks/config/wormhole.xml.h:9
msgid "Stars created"
-msgstr "Количество звезд"
+msgstr "Количество звёзд"
#: ../hacks/config/wormhole.xml.h:12
msgid ""
"Flying through a colored wormhole in space. Written by Jon Rafkind; 2004."
-msgstr ""
+msgstr "Полёт в пространстве через цветную червоточину. Автор Джон Рафкинд; 2004."
#: ../hacks/config/xanalogtv.xml.h:1
msgid "XAnalogTV"
-msgstr ""
+msgstr "Х аналоговое телевидение"
+
+#: ../hacks/config/xanalogtv.xml.h:3
+msgid "Colorbars only"
+msgstr "Только цветные полосы"
-#: ../hacks/config/xanalogtv.xml.h:9
+#: ../hacks/config/xanalogtv.xml.h:10
msgid ""
"An old TV set, including artifacts like snow, bloom, distortion, ghosting, "
"and hash noise. It also simulates the TV warming up. It will cycle through "
"12 channels, some with images you give it, and some with color bars or "
"nothing but static. Written by Trevor Blackwell; 2003."
-msgstr ""
+msgstr "Изображает старый телевизор с такими артефактами, как снег, цветовое искажение, ореолы и запутанный шум. Также имитируется разогрев телевизора. Это цикл из 12 каналов с изображениями, которые вы выберете; возможны цветовые полосы или статическое ничего. Автор: Тревор Блэквелл; 2003."
#: ../hacks/config/xflame.xml.h:1
msgid "XFlame"
-msgstr ""
+msgstr "Х-пламя"
#. #### -vartrend [20]
#: ../hacks/config/xflame.xml.h:6
@@ -9941,31 +10113,31 @@ msgstr "Разрешить вспышки"
msgid ""
"Pulsing fire. It can also take an arbitrary image and set it on fire too. "
"Written by Carsten Haitzler and many others; 1999."
-msgstr ""
+msgstr "Пульсирующий огонь. Он также может принимать случайный вид. Автор Карстен Хайтзлер и многие другие; 1999 год."
#: ../hacks/config/xjack.xml.h:1
msgid "XJack"
-msgstr ""
+msgstr "X-Джек"
#: ../hacks/config/xjack.xml.h:7
msgid ""
"This behaves schizophrenically and makes a lot of typos. Written by Jamie "
"Zawinski; 1997."
-msgstr ""
+msgstr "Эта штука ведет себя шизофренически и делает много опечаток. Автор: Джейми Завински; 1997 год."
#: ../hacks/config/xlyap.xml.h:1
msgid "XLyap"
-msgstr ""
+msgstr "X-Ляпунов"
#: ../hacks/config/xlyap.xml.h:10
msgid ""
-"The Lyapunov exponent makes pretty fractal pictures. https://en.wikipedia."
-"org/wiki/Lyapunov_exponent Written by Ron Record; 1997."
-msgstr ""
+"The Lyapunov exponent makes pretty fractal pictures. "
+"https://en.wikipedia.org/wiki/Lyapunov_exponent Written by Ron Record; 1997."
+msgstr "Экспонента Ляпунова делает фрактальные картины. https://en.wikipedia.org/wiki/Lyapunov_exponent Автор: Рон Рекорд; 1997."
#: ../hacks/config/xmatrix.xml.h:1
msgid "XMatrix"
-msgstr ""
+msgstr "Х-матрица"
#: ../hacks/config/xmatrix.xml.h:2
msgid "Small font"
@@ -10005,31 +10177,32 @@ msgstr "Номер телефона"
#: ../hacks/config/xmatrix.xml.h:22
msgid ""
-"The \"digital rain\" effect, as seen on the computer monitors in \"The Matrix"
-"\". See also \"GLMatrix\" for a 3D rendering of the similar effect that "
-"appeared in the movie's title sequence. https://en.wikipedia.org/wiki/"
-"Matrix_digital_rain Written by Jamie Zawinski; 1999."
-msgstr ""
+"The \"digital rain\" effect, as seen on the computer monitors in \"The "
+"Matrix\". See also \"GLMatrix\" for a 3D rendering of the similar effect "
+"that appeared in the movie's title sequence. "
+"https://en.wikipedia.org/wiki/Matrix_digital_rain Written by Jamie Zawinski;"
+" 1999."
+msgstr "Эффект \"Цифрового дождя\", такой же, как на компьютерных мониторах в \"Матрице\". Смотрите также \"GL-матрица\" для 3D-визуализации аналогичного эффекта, который проявился и в названии фильма. https://en.wikipedia.org/wiki/Matrix_digital_rain Автор: Джейми Завински; 1999 год."
#: ../hacks/config/xrayswarm.xml.h:1
msgid "XRaySwarm"
-msgstr ""
+msgstr "X-поток лучей"
#: ../hacks/config/xrayswarm.xml.h:6
msgid ""
"Worm-like swarms of particles with vapor trails. Written by Chris Leger; "
"2000."
-msgstr ""
+msgstr "Черви, как рои частиц оставляющие инверсионный след. Автор Крис Леже; 2000."
#: ../hacks/config/xspirograph.xml.h:1
msgid "XSpirograph"
-msgstr ""
+msgstr "Х-спирограф"
#: ../hacks/config/xspirograph.xml.h:10
msgid ""
-"Simulates that pen-in-nested-plastic-gears toy from your childhood. https://"
-"en.wikipedia.org/wiki/Spirograph Written by Rohit Singh; 2000."
-msgstr ""
+"Simulates that pen-in-nested-plastic-gears toy from your childhood. "
+"https://en.wikipedia.org/wiki/Spirograph Written by Rohit Singh; 2000."
+msgstr "Имитирует игрушку из пластиковых шестерёнок из вашего детства. https://en.wikipedia.org/wiki/Spirograph Автор: Рохит Сингх; 2000."
#: ../hacks/config/zoom.xml.h:8
msgid "X mag"
@@ -10064,4 +10237,4 @@ msgid ""
"Fatbits! Zooms in on a part of the screen and then moves around. With the "
"\"Lenses\" option, the result is like looking through many overlapping "
"lenses rather than just a simple zoom. Written by James Macnicol; 2001."
-msgstr ""
+msgstr "Заметьте! Приближение части экрана, а затем - движение вокруг. С опцией «линзы», достигается не только простой зум, но и, как бы, взгляд через перекрывающие друг-друга несколько линз. Автор: Джеймс Макникол; 2001 год."
diff --git a/utils/colors.c b/utils/colors.c
index 5445cd6..01f8fc6 100644
--- a/utils/colors.c
+++ b/utils/colors.c
@@ -393,11 +393,13 @@ make_color_path (Screen *screen, Visual *visual, Colormap cmap,
if (k <= 0)
return;
# else
- for (i = k+1; i < *ncolorsP; i++)
+ if (k <= 0)
+ return;
+ for (i = k; i < *ncolorsP; i++)
/* #### Should duplicate the allocation of the color cell here
to avoid a double-color-free on PseudoColor, but it's 2018
and I don't care, */
- colors[i] = colors[k];
+ colors[i] = colors[i-1];
# endif
}
diff --git a/utils/erase.c b/utils/erase.c
index fdf7496..7e1cbc9 100644
--- a/utils/erase.c
+++ b/utils/erase.c
@@ -396,7 +396,7 @@ fizzle (eraser_state *st)
unsigned int i;
st->fizzle_rnd =
- (unsigned short *) malloc (sizeof(unsigned short) * chunks);
+ (unsigned short *) calloc (sizeof(unsigned short), chunks);
if (! st->fizzle_rnd)
return;
diff --git a/utils/font-retry.c b/utils/font-retry.c
index ab999e2..f8e6507 100644
--- a/utils/font-retry.c
+++ b/utils/font-retry.c
@@ -107,26 +107,39 @@ load_font_retry_1 (Display *dpy, int screen, const char *xlfd, Bool xft_p)
}
else
{
- const char *fixed[] = { "courier",
- "courier new",
- "courier 10 pitch",
- "lucidatypewriter",
- "american typewriter",
- "fixed",
- "ocr a std",
- "*" };
- const char *variable[] = { "helvetica",
- "arial",
- "bitstream vera sans",
- "gill sans",
- "times",
- "times new roman",
- "new century schoolbook",
- "utopia",
- "palatino",
- "lucida",
- "bitstream charter",
- "*" };
+ const char *variable[] = {
+ "helvetica",
+ "arial",
+ "bitstream vera sans",
+ "gill sans",
+ "times",
+ "times new roman",
+ "new century schoolbook",
+ "utopia",
+ "palatino",
+ "lucida",
+ "bitstream charter",
+
+ /* Don't use a wildcard family. If none of the above worked, then
+ then almost none of the X11 fonts are installed, and it's not
+ unlikely that "-*-*-medium-r-*-*-*-140-*-*-*-10646-1" will
+ match an Arabic or or Japanese font that contains no Latin
+ glyphs at all, even in a Latin locale. So in that case, just
+ let "helvetica" fall back to "fixed".
+ */
+ /* "*" */
+ };
+ const char *fixed[] = {
+ "courier",
+ "courier new",
+ "courier 10 pitch",
+ "lucidatypewriter",
+ "american typewriter",
+ "fixed",
+ "ocr a std",
+ /* As above, but "can't happen" because we already tried fixed? */
+ /* "*" */
+ };
const char *charsets[] = { "iso10646-1", "iso8859-1", "*-*" };
const char *weights[] = { "bold", "medium" };
const char *slants[] = { "o", "i", "r" };
diff --git a/utils/thread_util.c b/utils/thread_util.c
index 5ad5d47..71c8633 100644
--- a/utils/thread_util.c
+++ b/utils/thread_util.c
@@ -960,7 +960,7 @@ void *io_thread_create(struct io_thread *self, void *parent, void *(*start_routi
attr_ptr = &attr;
if(pthread_attr_init(&attr))
return NULL;
-# if defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || defined _XOPEN_SOURCE
+# if (defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || defined _XOPEN_SOURCE) && !defined __GNU__
/* PTHREAD_STACK_MIN needs the above test. */
assert(stacksize >= PTHREAD_STACK_MIN);
# endif
diff --git a/utils/version.h b/utils/version.h
index 7bdae95..b01396c 100644
--- a/utils/version.h
+++ b/utils/version.h
@@ -1,2 +1,2 @@
static const char screensaver_id[] =
- "@(#)xscreensaver 5.42 (28-Dec-2018), by Jamie Zawinski (jwz@jwz.org)";
+ "@(#)xscreensaver 5.43 (09-Jul-2019), by Jamie Zawinski (jwz@jwz.org)";
diff --git a/xscreensaver.spec b/xscreensaver.spec
index da913e6..3fc0527 100644
--- a/xscreensaver.spec
+++ b/xscreensaver.spec
@@ -1,5 +1,5 @@
%define name xscreensaver
-%define version 5.42
+%define version 5.43
Summary: X screen saver and locker
Name: %{name}