gtypist-2.9.5/0000755000175000017500000000000012372333426010240 500000000000000gtypist-2.9.5/INSTALL0000644000175000017500000001507512372333374011223 00000000000000 GNU Typist 2.9.5 Installation instructions This program is designed for UNIXes and Microsoft Windows, but it can be compiled in various environments provided that there is a standard compiler and required libraries. Compilation under Unix ---------------------- In order to compile this program, you must have: - A reasonably standard C compiler (and standard C library with corresponding header files of course). - The 'ncursesw' library (with wide-character support) with corresponding header files installed in convenient places. The instructions are general for most Unix software in source form: * Uncompress the sources distribution: $ tar jxvf gtypist-2.9.5.tar.bz2 or $ tar zxvf gtypist-2.9.5.tar.gz * Change to the sources directory: $ cd gtypist-2.9.5 * Configure the package: $ ./configure This default configuration will probably be just fine. However, you may add some configuration options to the end of that line. Run configure with `--help' to get full list of them, like this: $ ./configure --help By default the program executable will be installed in /usr/local/bin and the lessons and internationalization support files in /usr/local/share/gtypist (you can change this with the `--prefix' option). By default Native Language Support will be installed (but you can disable this with the `--disable-nls' option). * Build the package: $ make * Get required permissions and install the package: $ sudo make install The sudo program will ask you for the root password to install gtypist system-wide. If you do not have the root password, you will not be able to install it system-wide. Instead, you should run configure with something like '--prefix=~/opt' to install it in your home directory. * To test your installation type $ gtypist If you already had a version of gtypist installed on the system before you installed this one,you may need to explicitly state which one you want to run. So you may need to type: $ /usr/local/bin/gtypist Compilation under Windows NT/2000/XP ------------------------------------ First, please check to see if there is a Windows build of this version before going through the trouble of compiling it yourself! http://ftp.gnu.org/gnu/gtypist/w32_binaries/ If you're still here, then... You must have: - MinGW compiler package, available at http://sourceforge.net/projects/mingw/files/ It is advised that you download the "Automated MinGW Installer" package (ming-get-inst) if you are not familiar with MinGW. When installing, make sure you turn on the options to install "MSYS Basic System" and "MinGW Developer Toolkit". If you don't use the atomated installer, note that you will also need mingw32-make or MSYS. More information about MinGW can be found at http://www.mingw.org/ - A recent version of PDCurses, available at http://pdcurses.sourceforge.net/ The current official binaries of gtypist are compiled using PDCurses 3.4. We build a static version of the library with Unicode and forced UTF-8 support. Although building PDCurses is outside the scope of this document, here is a quick run-through of what to do... - copy the PDCurses-3.4.tar.gz file to C:\dev - open a MinGW shell, co to C:\dev and unpack PDCurses $ cd /c/dev $ tar -xvf PDCurses-3.4.tar.gz - cd to the win32 directory $ cd PDCurses-3.4/win32 - there's a README in there if you need help - build PDCurses $ make -f mingwin32.mak WIDE=Y UTF8=Y - rename the resulting pdcurses.a to libpdcurses.a $ mv pdcurses.a libpdcurses.a To build GNU Typist: * Open a MinGW Shell (not a Windows command prompt), create a working doirectory and change to it. $ mkdir /c/dev $ cd /c/dev * In a file explorer window, copy gtypist-2.9.5.tar.xz to C:\dev * Uncompress gtypist-2.9.5.tar.xz $ tar -xvf gtypist-2.9.5.tar.xz * Change to the gtypist directory and configure the build by running configure-w32 $ cd gtypist-2.9.5 $ configure-w32 * If you are using PDCurses 3.4 and you unpacked it and built it in the C:\dev\PDCurses-3.4 directory (as suggested in the instructions above), you will not need to change the Makefile created by the previous step. You can skip to the next step. Otherwise, open the Makefile and specify the path to your PDCurses directory as directed by the comments. $ notepad Makefile * Compile gtypist using make $ make * To install it, you should create a directory (in this example we use C:\GTypist) and copy into it the lessons, documentation, UI translations and the program itsself (gtypist.exe). $ mkdir /c/gtypist $ cp gtypist.exe /c/gtypist $ mkdir /c/gtypist/{doc,lessons} $ cp lessons/*.typ /c/gtypist/lessons $ cp doc/*.html /c/gtypist/doc $ cp -r locale /c/gtypist * To use GNU Typist, go to the directory where you installed it and run gtypist.exe. You can do this in a file explorer, or from the MinGW shell, like this $ cd /c/gtypist $ gtypist Problems and their solution --------------------------- Configuration with Native Language Support under Unix: * If you configured first without NLS and now you want NLS, go to directory intl remove libintl.h and configure again. * If your Unix doesn't have Native Language Support, the sources of gtypist come with a limited version, to use it configure with: ./configure --with-included-gettext And before running gtypist set the environment variable LC_ALL/LANG to your language and country codes (LL_CC, as described in the manual, node "Environment Variables"). See the manual for the list of supported languages. Using this option it was possible to compile and run gtypist under AIX. Dvorak Keyboard under GNU/Linux (Ben Armstrong ): * To get Dvorak keymaps, run the 'loadkeys' command on the appropriate keymap file. For example if your keymaps are at /usr/share/keymaps > loadkeys /usr/share/keymaps/i386/dvorak/dvorak.kmap.gz * To switch to your default keyboard mappings, run loadkeys on the default keymap file: $ loadkeys /etc/console-tools/default.map.gz * If you are in X, please visit the Dvorak home page at http://www.mwbrooks.com/dvorak/ for more information. Keyboard under Windows: * You could experience some problems with the keyboard under DOS/Windows. The [Return] key should now work, but the function keys (F1, F2... F12) may not. However, this should not affect usage for most users. gtypist-2.9.5/configure-w320000644000175000017500000000271312372333374012502 00000000000000#!/bin/bash echo Configuring gtypist 2.9.5 echo - using MinGW and PDCurses echo - with Native Language Support echo creating src/config.h... echo -e '/* config.h */\r' > src/config.h echo -e '#define ENABLE_NLS 1\r' >> src/config.h echo -e '#define PACKAGE "gtypist"\r' >> src/config.h echo -e '#define VERSION "2.9.5"\r' >> src/config.h echo -e '#define HAVE_PDCURSES 1\r' >> src/config.h echo -e '#define LOCALEDIR "locale"\r' >> src/config.h echo copying UI translations... (cd po/ for i in *.gmo do lang=${i/.gmo/} mkdir -p ../locale/$lang/LC_MESSAGES cp $lang.gmo ../locale/$lang/LC_MESSAGES/gtypist.mo done ) echo creating Makefile... echo -e '# gtypist: Makefile for MinGW\r' > Makefile echo -e '#\r' >> Makefile echo -e '# Please read INSTALL for help building gtypist with MinGW.\r' >> Makefile echo -e '\r' >> Makefile echo -e '# Set the path to a compiled PDCurses library here:\r' >> Makefile echo -e 'PDCURSES_PATH=C:\dev\PDCurses-3.4\r' >> Makefile echo -e '\r' >> Makefile echo -e 'gtypist.exe:\r' >> Makefile echo -e ' gcc -DMINGW -DPDC_WIDE -I$(PDCURSES_PATH) -Isrc -static -s -O2 -o gtypist src/error.c src/script.c src/cursmenu.c src/gtypist.c src/getopt.c src/getopt1.c src/utf8.c -L$(PDCURSES_PATH)/win32 -lpdcurses -lgettextlib.dll -lintl -liconv\r' >> Makefile echo echo echo IMPORTANT: Before running make, change the PDCURSES_PATH variable in the echo Makefile! Type 'notepad Makefile' to edit it. echo gtypist-2.9.5/THANKS0000644000175000017500000000712712204155736011102 00000000000000GNU Typist THANKS file GNU Typist was originally written by Simon Baldwin. More details can be found in the section "History of GNU Typist" in the GNU Typist Manual. This manual can be found with info after the program is installed, or before installing at directory `doc'. Many people have further contributed to GNU Typist by reporting problems, suggesting various improvements, or submitting actual code. Here is a list of these people. Help us keep it complete and exempt of errors. * Rob Leslie for reporting bugs and implementing patches and improvements. * Dmitry Rutsky for major improvements to the code, for Russian interface translation, as well as for lessons in Russian. * OLS3 for the Traditional Chinese translation. * Martin Pitt for a patch to ignore trailing spaces in lesson file lines. * Stefan Troeger for typefortune fixes. * J. M. Cogels for the Dutch interface translation. * Richard Susta for contributing new lessons in Czech. * Hynek Hanke for translating to Czech interface messages, lesson files and the user's manual. * Yuusuke Mita for suggesting and starting the typefortune script. * Sven Guckes for helping us in debugging 2.5 on Debian GNU/Linux and in GNU/Solaris8. * José Pelegrín for updating the Spanish interface and reporting errors in lessons. * Kimmo K. I. Surakka for Native Language Support in Finnish. * Felix Natter for bringing new features, lots of fixes and improvements to the code and documentation, improving and converting lessons from other typing tutors, extending tool capabilities by lesson syntax enhancements, implementing a gtypist lesson file mode for Emacs, etc. See ChangeLog for details! * Michael Opdenacker for administrating CVS, the mailing-list, GNU Savannah, etc., writing and improving documentation, testing and discussing tool features. * Christian "naddy" Weisgerber for reporting errors and contributing various fixes on po/*.po, Makefile.am, and aclocal.m4. * Igor Tamara and Vladimir Tamara for creating a lesson in spanish; configuration/compilation a la GNU; adding native language support; porting to DOS/DJGPP, adding NLS in spanish and enhancing documentation. * Melissa Giraldo for her help with the lesson in spanish. * Kester Habermann for helping with Native Language Support in German * for helping with the NLS in German. * Ben Armstrong for maintaining the Debian version, reporting bugs and proposing patches. * stephan.hegel@gmx.de for reporting a bug in the configuration of typist 2.3. * Caolan McNamara for sending a patch for configure.in in typist 2.3.1 to allow the use of curses if ncurses is not available. * Jhair Tocancipa for reporting bugs in the documentation. * Ricardo Cadavid for reporting bugs in the documentation. * Paul Goins for taking over maintainership in 2008, contributing code and updating documentation. * Tim Marston for maintainership and development since 2010. * Jakub Bogusz for the polish translation. * Gökçen Eraslan for the Turkish translation. gtypist-2.9.5/NEWS0000644000175000017500000002650612372324062010664 00000000000000GNU Typist Release Notes ------------------------ See the `ChangeLog' (top-level and in some subdirectories) and `THANKS' files for details about changes and contributors. version 2.9.5 - August 2014 - improved CPM/WPM calculation precision - fix for Colemak lesson, thanks to Ashley Whetter - fix for Q series, thanks to Olu Niyi-Awosusi - fix for Colemak lesson (updated top 1000 most frequently used words) - updated simplified Chinese translation, thanks to Wei Mingzhi version 2.9.4 - February 2014 - fix for Colemak lesson, thanks to Ashley Whetter - libintl is now an external requirement - libtinfo is now linked against, as required - minor documentation fixes version 2.9.3 - June 2013 - fix for Alt+some key being treated as ESCAPE and clearing drills (reported by Chris Jones ) - updates to the ktouch lesson import script, based on a patch submitted by Alexei Matveev ) - updates to lessons imported from ktouch (fixes issue with lines over 80 characters causing errors, amongst other things) - fix some errors in lessons, thanks to Rob Day and Chris Jones version 2.9.2 - December 2012 - fix collison between unicode 0x107 (c with accent) and KEY_BACKSPACE (Reported by Kalthor ) - change documentation licence so that there are no invariant sections version 2.9.1 - November 2011 - Native Language Support added on Windows - fixed support for UTF-8 on Windows - re-added vim syntax highlighting and updated manual - updated Polish translation, thanks to Jakub Bogusz - several fixes to the build system Version 2.9 - October 2011 - Full UTF-8 support - New Colemak typing lessons - Many new international lessons imported from KTouch 1.6 and update of the german tipptrainer 0.6.0 lesson - New Spanish manual, thanks to smc - Tracking of personal best scores - New Polish translation, thanks to Jakub Bogusz - New Turkish translation, thanks to Gökçen Eraslan - We are dropping support for the DJGPP compiler (DOS), although the MinGW GCC compiler is still supported. Version 2.8.5 - March 2011 - Fixed an issue that prevented installation. - Corrected a minor typo in a lesson. Version 2.8.4 - February 2011 - Bug fixed where pressing escape at some prompts could crash gtypist - A few corrected typos in some lessons (thanks to Elmar Zander) Version 2.8 - May 2008 - License updated to the GNU General Public License version 3. - Windows NT-based builds (Windows 2000/XP) now supported. - "Characters Per Minute" scoring mode via "--scoring=cpm" - New Simplified Chinese interface from Wei Mingzhi - Many small bug fixes and other updates; see the ChangeLog files for details. Version 2.7 - September 2003 - New menu-based ncurses interface, replacing function keys. You can use arrow keys to navigate in the menus. You can use vi keys too! Much more reliable and user friendly! - Make a few changes in the lesson file syntax to support menus. - Built with automake-1.7.7, texinfo-4.6 and gettext-0.12.1 - New Traditional Chinese interface from OLS3 - New Dutch interface from J.M. Cogels - New Russian interface and lessons from Dmitry Rutsky - Now ignores trailing spaces in lesson file lines which were invisible in the interface. - Now only counts one mistake when a key was missed or when the user presses the correct key after an error. Implemented by Rob Leslie - HTML manual (English and Czech) now available in the source package. - Lots of small fixes and improvements (See the ChangeLog file for details) Version 2.6.2 - September/2002 - Now installs lessons (bug only in version 2.6.1). Version 2.6.1 - August/2002 - findwords.sh: new script to help with creating lessons. See the manual for details. - configure: checks for ncurses if curses if not available. - built with automake-1.6.3 and gettext-0.11.5. Version 2.6 - April/2002 - New `typefortune' (perl-)script which creates lessons from `fortune' (see the new section "Using typefortune" in the manual). - New interface messages and manual in Czech from Hynek Hanke . - New lessons in Czech from Hynek Hanke and Richard Susta . - Manual now using `@copying' as recommended in texinfo-4.2, and released under the GNU Free Documentation License (with no Invariant Sections). - Built with automake 1.6.1, autoconf 2.53, gettext 0.11.1 and texinfo 4.2, following their latest guidelines. Version 2.5.1 - February/2002 - fix a bug in --help output - small documentation fixes Version 2.5 - January/2002 - Allowed the user to skip an exercise or exit the lesson by pressing ESC twice (once to restart and then again at the beginning of the exercise to skip) - Added new switch --no-skip which prohibits the user from skipping exercises - Removed more occurrences of "Q: Press Y to continue, ..." following an exercise (because this is builtin since 2.4) in d.typ, r.typ, v.typ and esp.typ - Removed all occurrences of "Q: Press Y to cont..." following T: : It doesn't make sense to repeat a T:, the standard message "Press Enter to continue." is better (d.typ, v.typ, r.typ) (multi-page T:'s are the exception) - The last two changes make the lesson-files quite a bit simpler - Fixed errors in d.typ and esp.typ (see lessons/ChangeLog) - Renamed --wpmode to --word-processor - Added interface messages in French (using gtranslator) - Spanish interface updated by José Pelegrín - Fixes for undefined symbols errors compiling on Unix systems (such as Solaris) when both curses and ncurses are installed. Version 2.4.1 - November/2001 - documentation: fix some TODOs, shorten the node-names and add descriptions in menus, remove node "Technical Information" and place its children on top-level and small markup changes - gtypist-mode.el now works with XEmacs as well (because of this, gtypist-mode-goto-label is now bound to C-c M-g) Version 2.4 - September/2001 - Added Finnish Native Language Support - Changes to the types of exercises: d,D for drills and s,S for speed-tests - Added commands E: (sets error-max) and F: (sets "on failure" label) (currently only used in demo.typ and esp.typ) - do_drill, do_speedtest: added "builtin repeat loop" - print_help: only break on whitespace in help-strings, use ';' to separate words. - Allowed translation of the "do you want to repeat?" message (which is possible because it is now builtin) and the corresponding keys (Y/N) - fatal_error: made the output more logical - Allowed "give up" (repeat lesson) via ESC (there is no way to skip an exercise in 2.4) - Added (unsigned char) cast in ADDCH, ADDCH_REV to support 8bit-characters in exercises - Rewrote command-line parsing + use '-' as word-separator in long options - command_char's are case-sensitive now - Ignores trailing whitespace in labels - Added new lessons which are converted from ktouch-1.0 (http://ktouch.sourceforge.net) kt*.typ, converted by tools/ktouch2typ.pl and tipptrainer-0.3.3 (http://www.pingos.schulnetz.org/tipptrainer): currently only the german lesson, which is in ttde.typ, converted by tools/tt2typ.pl. - An Emacs-mode for editing gtypist's script-files: tools/gtypist-mode.el - Improved i18n-support - Improved German translation (with help from de@li.org) - Minor fixes (build, charset definition) - Documentation improvements Version 2.3.2 - Nov/2000 - Now this program is part of GNU! We celebrate with a new name: "GNU Typist" (or gtypist) and a new release - New documentation in Texinfo format, the man page now is generated automatically with the program help2man - Now configure supports curses if ncurses is not available (thanks to Caolan McNamara ) Version 2.3.1 - Sep/2000 - Fixed bug with --datadir reported by stephan.hegel@gmx.de Installation of data by default now in prefix/share/typist - Now the keys F1,F2,...,F12 can be "emulated" with 1,2,3,4,5,6,7,8,9,0,A,S and also C-q, C-w, C-r, C-t, C-z, C-u, C-i, C-o, C-p, C-a, C-s - Fixed bug in word processor mode reported by Ben Armstrong, now by default this mode is off, it can be activated with the option --wpmode or -w. (The option --nowpmode doesn't exist anymore) - Better documentation for installing typist with Dvorak keyboards and under DOS without Long File Name Support (tested under DOS 6.22) Version 2.3 - Ago/2000 - New lesson in spanish (lessons/esp.typ) - NLS (Native Language Support) added (via GNU gettext). - Avalaible NLS for Spanish (po/es.po) and German (po/de.po) - Ported to Windows/DOS with the DJGPP compiler and PDCURSES library - New configuration scheme, using automake and autoconf Version 2.2b: - Fixed a bug in exercises, where the typing timer was not started when the exercise begins with space characters and word processing behaviour is enabled. - Moved the binary to typist_bin, and created a typist shell script wrapper to try to cope with TYPIST_PATH not set, and the variations in the location of the terminfo database between RedHat 5.2 and other platforms. - Again, why not look at 'Jtypist'. Version 2.2a: - Added word processing like behaviour to the exercises, so that multiple spaces combine into one, return moves to the next paragraph, space is accepted at the end of a line, and hyphens at a line's end are skipped. - Fixed drills so that delete does not actually insert an error, but is now just ignored. - Corrected backspace key detection on RedHat Linux 5.2. Version 2.2: - Removed the C++ version of the program. Apart from my elderly slackware system, this would not really compile anywhere else, and was causing more problems than it was worth. - Added the "one-time" 'O' drill command. - Added the function key to label binding 'K' command, to allow better menus to be built. - Tidied the C program for better error handling. It's still a bit messy, though. - Optimised T/D/O/P commands to avoid "Press return to continue" where they are directly followed by a Q command. - Updated typv1tov2 and typcombine to use these new features, and output improved menus that use the function keys for direct access to lessons, and repeat-this-exercise queries. - The typist binary is now statically linked for Linux, to try to enhance its portability as a binary. The build system is now RedHat 5.2, and the program is now an incredible 700kB as a static binary. - All of these enhancements got finished up after I had completed the Java version, 'Jtypist'. If you can, I'd heartily recommend that you use the Java one instead of this package. It has a far better interface, and lots of extra features that Typist 2.2 doesn't have. You should be able to obtain a copy of it from the same place that you picked up this package from. Version 2.1a: - Whole package GPLified. Otherwise, no changes. None. Nothing at all. Really. gtypist-2.9.5/version.sh0000755000175000017500000000011212372070341012170 00000000000000#! /bin/sh # Central version definition. VERSION=2.9.5 echo -n $VERSION gtypist-2.9.5/autogen.sh0000755000175000017500000001117612204155736012167 00000000000000#!/bin/sh # Run this program to build the configuration # files for GNU Typist: # [*/]Makefile.in, aclocal.m4, configure, # config.h.in, config.sub, config.guess # INSTALL, configure-w32, doc/gtypist.info, lessons/gtypist.typ # (maybe more) echo "Checking for required tools..." (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`autoconf' installed" echo "Get ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.57.tar.bz2" echo "(or a newer version if it is available)" exit 1 } (automake --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`automake' installed." echo "Get ftp://ftp.gnu.org/gnu/automake/automake-1.7.7.tar.bz2" echo "(or a newer version if it is available)" exit 1 } (gettext --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`gettext' installed." echo "Get ftp://ftp.gnu.org/gnu/gettext/gettext-0.12.1.tar.gz" echo "(or a newer version if it is available)" exit 1 } (autopoint --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`autopoint' (part of gettext) installed." echo "Get ftp://ftp.gnu.org/gnu/gettext/gettext-0.12.1.tar.gz" echo "(or a newer version if it is available)" exit 1 } (help2man --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`help2man' installed." echo "Get ftp://ftp.gnu.org/gnu/help2man/help2man_1.33.1.tar.gz" echo "(or a newer version if it is available)" exit 1 } (makeinfo --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`texinfo' installed." echo "Get ftp://ftp.gnu.org/gnu/texinfo/texinfo-4.6.tar.bz2" echo "(or a newer version if it is available)" exit 1 } # Copy gettext.h from gettext install gettext_exe=`which gettext` gettext_bin=`dirname $gettext_exe` gettext_home=`dirname $gettext_bin` gettexth=$gettext_home/share/gettext/gettext.h if [ ! -r "$gettexth" ]; then echo "Couldn't find gettext.h" echo "Looking for gettext.h in /usr/ ..." gettexth=`find /usr/ -name gettext.h -print` fi if [ ! -r "$gettexth" ]; then echo echo "**Error**: Can not find gettext.h on your system." echo "Get ftp://ftp.gnu.org/gnu/gettext/gettext-0.12.1.tar.gz" echo "(or a newer version if it is available)" exit 1 fi echo "Copying gettext.h from $gettexth" cp $gettexth src/ # Generate lesson menus (gawk --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: The git version requires \`gawk' (awk won't do)." echo "This is needed to build lessons/gtypist.typ." echo "Write to bug-gtypist@gnu.org if you have problems with this." exit 1 } echo "creating lessons/gtypist.typ..." (cd lessons && gawk -f ../tools/typcombine q.typ r.typ t.typ v.typ u.typ d.typ c.typ m.typ s.typ n.typ > gtypist.typ) VERSION=`./version.sh` for file in configure-w32 INSTALL do echo "creating $file..." if test $file -nt ${file}.in; then echo "*** \"$file\" has been modified," echo "but it is generated from ${file}.in." echo "Please apply the changes to ${file}.in instead." exit -1; fi sed "s/@VERSION/$VERSION/g" ${file}.in > $file # TODO: this causes cvs to think that ${file}.in was modified... # solution: use a "stamp" file for each $file ? touch ${file}.in done # Add gettext infrastructure. echo "running autopoint..." autopoint # Build configuration files echo "creating build configuration files..." aclocal -I m4 autoheader automake --add-missing if [ $? != 0 ]; then echo "" echo "Automake wasn't able to generate the necessary files like" echo "config.sub, config.guess, etc. needed for compilation" echo "You can copy them from some other place, but it's better" echo "to investigate why automake --add-missing failed, so that" echo "it doesn't cause some obscure problems later." echo "After pressing ENTER, the process will continue, but" echo "you can use CONTROL-C to interrupt it." read fi autoconf if [ $? != 0 ]; then echo -e \ "--------------------------------------------------------------------" \ "\nSomething was wrong, autoconf failed." \ "\nConsult notes on how to build if from git in the README.git file," \ "\nif you don't know how to resolve this." exit 1 fi if test -z "$*"; then echo echo "**Warning**: I am going to run \`configure' with no arguments." echo "If you wish to pass any to it, please specify them on the" echo \'$0\'" command line." fi echo echo running ./configure "$@"... echo ./configure "$@" # Run make make # Create the source packages make dist gtypist-2.9.5/configure-w32.in0000644000175000017500000000272112372333374013106 00000000000000#!/bin/bash echo Configuring gtypist @VERSION echo - using MinGW and PDCurses echo - with Native Language Support echo creating src/config.h... echo -e '/* config.h */\r' > src/config.h echo -e '#define ENABLE_NLS 1\r' >> src/config.h echo -e '#define PACKAGE "gtypist"\r' >> src/config.h echo -e '#define VERSION "@VERSION"\r' >> src/config.h echo -e '#define HAVE_PDCURSES 1\r' >> src/config.h echo -e '#define LOCALEDIR "locale"\r' >> src/config.h echo copying UI translations... (cd po/ for i in *.gmo do lang=${i/.gmo/} mkdir -p ../locale/$lang/LC_MESSAGES cp $lang.gmo ../locale/$lang/LC_MESSAGES/gtypist.mo done ) echo creating Makefile... echo -e '# gtypist: Makefile for MinGW\r' > Makefile echo -e '#\r' >> Makefile echo -e '# Please read INSTALL for help building gtypist with MinGW.\r' >> Makefile echo -e '\r' >> Makefile echo -e '# Set the path to a compiled PDCurses library here:\r' >> Makefile echo -e 'PDCURSES_PATH=C:\dev\PDCurses-3.4\r' >> Makefile echo -e '\r' >> Makefile echo -e 'gtypist.exe:\r' >> Makefile echo -e ' gcc -DMINGW -DPDC_WIDE -I$(PDCURSES_PATH) -Isrc -static -s -O2 -o gtypist src/error.c src/script.c src/cursmenu.c src/gtypist.c src/getopt.c src/getopt1.c src/utf8.c -L$(PDCURSES_PATH)/win32 -lpdcurses -lgettextlib.dll -lintl -liconv\r' >> Makefile echo echo echo IMPORTANT: Before running make, change the PDCURSES_PATH variable in the echo Makefile! Type 'notepad Makefile' to edit it. echo gtypist-2.9.5/po/0000755000175000017500000000000012372333426010656 500000000000000gtypist-2.9.5/po/de.po0000644000175000017500000003077612372332140011533 00000000000000msgid "" msgstr "" "Project-Id-Version: GNU Typist 2.9\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: 2011-08-11 13:15+0200\n" "Last-Translator: Felix Natter \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/gtypist.c:295 msgid "internal error in strdup" msgstr "interner Fehler: strdup" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "ungültige Tastenkombination" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "ungültige Funktionstastennummer" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "die Daten passen nicht auf den Bildschirm" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "Einführungen sind auf zwei Zeilen beschränkt" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "interner Fehler: fseek" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "'*' muss direkt auf '%' folgen" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "'%' fehlt" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "'%' muss direkt nach dem Wert kommen" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "Überlauf in do_error_max_set" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "Ungültiger Wert für \"E:\" (außerhalb der gültigen Reichweite)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "Bezeichner '%s' nicht gefunden" #: src/gtypist.c:1611 msgid "unknown command" msgstr "Unbekannter Befehl" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "merke die persönlichen Bestzeiten" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "" "Standardwert für maximale Fehlerrate (Stdwert 3,0); gültige Werte sind " "zwischen 0,0 und 100,0" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "WPM Zeitnehmer abschalten in Übungen" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "Cursor des Terminals verwenden" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "Eingabe Cursor Blinkfrequenz in P*.1 sek.; Standarwert 10, gültige Werte von " "0 bis 512; wird nicht beachtet wenn -t angegeben ist" #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "Initiale Farben der Anzeige setzen (wenn verfügbar)" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "lautlos im Fehlerfall" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "identisch zu -s, --silent" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "Lektion bei Bezeichner 'L' beginnen" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "Textverarbeitung nachahmen" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "Verbietet dem Benutzer, Übungen zu überspringen" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "Fehler mit invertierter Darstellung hervorheben" #: src/gtypist.c:1743 msgid "print this message" msgstr "diese Meldung anzeigen" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "Versionsinformation anzeigen und beenden" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "keine Bestätigungsanfragen erzeugen" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "setze die Bannerfarben (Hintergrund, Vordergrund, Paket und Version)" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "setze Bewertungsmodus (Worte pro Minute oder Zeichen pro Minute)" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" "`gtypist' ist ein Maschinenschreib-Lernprogramm, mit verschiedenen Lektionen " "für unterschiedliche Tastaturen und Sprachen. Neue Lektionen können einfach " "durch den Nutzer erstellt werden.\n" "\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "Benutzung" #: src/gtypist.c:1756 msgid "options" msgstr "Optionen" #: src/gtypist.c:1756 msgid "script-file" msgstr "Skript-Datei" #: src/gtypist.c:1757 msgid "Options" msgstr "Optionen" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "Wenn Skript-Datei nicht angegeben ist, gilt der Standardwert '%s/%s'.\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" "Nach Skript-Dateien wird im Pfad $GTYPIST_PATH gesucht.\n" "\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "Beispiele" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "Zum Ausführen der Standard-Lektion in Englisch `gtypist.typ'" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "Zum Ausführen der Lektion in Spanisch" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "" "Um gtypist anzuweisen die Lektion `bar.typ' in einem anderen Verzeichnis als " "dem Standardverzeichnis zu suchen" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "Um die Lektion aus Datei `test.typ' im Verzeichnis `temp' auszuführen, " "beginnend mit dem Bezeichner `TEST1', und der Verwendung des Terminal-" "Cursors und lautlos." #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "Bitte melden Sie Fehler an bug-gtypist@gnu.org" #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: Ungültiger Wert für error-max\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: unzulässiger Wert für curs-flash\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: Ungültiger Farbwert\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "%s: Parameterformat ist ungültig\n" #: src/gtypist.c:1876 #, c-format msgid "%s: incorrect colour values\n" msgstr "%s: Ungültige Farbwerte\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, c-format msgid "%s: invalid scoring mode" msgstr "%s: Ungültiger Bewertungsmodus" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: Interner Fehler: malloc\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "Geschrieben von Simon Baldwin" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "Aufruf mit '%s --help' für mehr Informationen.\n" #: src/gtypist.c:2023 msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "Für dieses Programm besteht KEINERLEI GARANTIE; wenn Sie Details\n" "sehen möchten, lesen Sie bitte die Datei 'COPYING', die mit dem Quelltext\n" "verteilt wird.\n" "Diese Software ist freie Software, die Sie unter bestimmten Bedingungen\n" "weitergeben dürfen; für Details siehe ebenfalls 'COPYING'.\n" "Dieses Programm steht unter der GNU General Public License." # TODO: what is the whitespace used for ? #: src/gtypist.c:2031 msgid " Tutorial " msgstr "Einführung" # TODO: what is the whitespace used for ? #: src/gtypist.c:2033 msgid " Query " msgstr " Anfrage " # TODO: what is the whitespace used for ? TODO: Routine/Griff-Übung ?? #: src/gtypist.c:2035 msgid " Drill " msgstr " Drill " # TODO: Geschwindigkeitstest ?? #: src/gtypist.c:2037 msgid "Speed test" msgstr "Geschwindigkeitstest" #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr "ENTER oder LEERTASTE: weitermachen, ESCAPE: zurück zum Menü" #: src/gtypist.c:2042 #, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr "Deine Fehlerrate ist zu hoch. Du musst %.1f%% erreichen." #: src/gtypist.c:2046 #, c-format msgid " You failed this test, so you need to go back to %s. " msgstr "Der Test war nicht gut genug: Zur Wiederh. zurück zu %s." #: src/gtypist.c:2050 msgid " Press R to repeat, N for next exercise or E to exit " msgstr "Drücke W um zu wiederholen, N für nächste Übung oder B zum Beenden" #: src/gtypist.c:2054 msgid " Press R to repeat or E to exit " msgstr "Drücke W um zu wiederholen oder B zum Beenden" #: src/gtypist.c:2057 msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr "Willst du wirklich diese Lektion verlassen ? [J/N]" #: src/gtypist.c:2061 msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr "Es ist nicht erlaubt, Übungen zu überspringen (siehe Konfig)." #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr " Netto-Geschwindigkeit = %6.2f wpm " #: src/gtypist.c:2068 #, c-format msgid " Raw speed = %6.2f cpm " msgstr " Netto-Geschwindigkeit = %6.2f cpm " #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr " Tatsächliche Geschwindigkeit = %6.2f wpm " #: src/gtypist.c:2075 #, c-format msgid " Adjusted speed = %6.2f cpm " msgstr " Tatsächliche Geschwindigkeit = %6.2f cpm " #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr " mit %.1f%% Fehlern " #: src/gtypist.c:2085 #, c-format msgid " Personal best = %6.2f wpm " msgstr " Netto-Geschwindigkeit = %6.2f wpm " #: src/gtypist.c:2087 #, c-format msgid " Personal best = %6.2f cpm " msgstr " Pers. Bestzeit = %6.2f cpm " #: src/gtypist.c:2092 msgid " new personal best " msgstr " neue persönliche Bestzeit " #: src/gtypist.c:2097 msgid "Y/N" msgstr "J/N" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "W/N/B" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "Datei nicht vorhanden oder nicht lesbar" #: src/gtypist.c:2185 #, fuzzy, c-format msgid "%s: %s environment variable not set\n" msgstr "%s: HOME-Umgebungsvariable nicht gesetzt\n" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "Lade den Skript..." #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "interner Fehler: malloc" #: src/gtypist.c:2362 msgid " internal error: fopen" msgstr "interner Fehler: fopen" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "Pfeiltasten: Bewegen, ENTER/LEERTASTE: Auswählen, ESCAPE: Zurückgehen" #: src/error.c:51 msgid "line" msgstr "Zeile" #: src/script.c:56 msgid "internal error: strdup" msgstr "interner Fehler: strdup" #: src/script.c:158 msgid "label contains space" msgstr "Bezeichner enthält Leerzeichen" #: src/script.c:184 msgid "label redefinition" msgstr "Neudefinition von Bezeichnern" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "Ungültige multibyte-Sequenz (falsches Encoding? non-utf8?)" #: src/script.c:230 msgid "data shortage" msgstr "zu wenig Daten" #: src/script.c:232 msgid "missing ':'" msgstr "':' fehlt" #: src/script.c:238 msgid "line too long for screen" msgstr "Zeile zu lang für den Bildschirm" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" "Fröhliches Tippen!\n" "\n" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "konnte UTF-8 nicht in breite Zeichen konvertieren" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "" #~ msgid " Press Return to continue... " #~ msgstr " Bitte Eingabetaste drücken um fortzufahren... " gtypist-2.9.5/po/zh_CN.gmo0000644000175000017500000001677312372333404012315 00000000000000Rm<3 % 02; n5>< A5L:"$# ? Z x  !    , %6 \ r z " 6 L 22 e & 0 P6   . )F rp  V !c!#%3I`w  #"Fcv +<QR!p"c5c  %!>;:4v 51 <Xv8?1U ' 2@63w!*WCg"~( AQN&;Ody$   'Feu !9QH$f*FP1B%,HGN. "Q-D>RO)2798'&5($+I6C#;<? 3K!M 4*/ =E JLA:0@ If not supplied, script-file defaults to '%s/%s'. Drill Query Are you sure you want to exit this lesson? [Y/N] Press R to repeat or E to exit Press R to repeat, N for next exercise or E to exit Press RETURN or SPACE to continue, ESC to return to the menu Sorry, gtypist is configured to forbid skipping exercises. Tutorial You failed this test, so you need to go back to %s. Your error-rate is too high. You have to achieve %.1f%%. %s: argument format is incorrect %s: incorrect colour values %s: %s environment variable not set %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value %s: invalid scoring mode'%' must immediately follow value'*' must immediately follow '%'ExamplesHappy Typing! Invalid multibyte sequence (wrong encoding?)Invalid value for "E:" (out of range)Loading the script...OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageUse arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go backWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecouldn't convert UTF-8 to wide characterscursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0do not ask confirmation questionsdon't beep on errorserror in setcchar()forbid the user to skip exerciseshighlight errors with reverse videoinstructions are limited to two linesinternal error in strdupinternal error: fseekinternal error: mallocinternal error: strdupinvalid function key numberinvalid key bindinglabel '%s' not foundlabel contains spacelabel redefinitionlineline too long for screenmissing '%'missing ':'optionsoutput version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-fileset initial display colours where availableset scoring mode (words per minute or characters per minute)set top banner colours (background, foreground, package and version respectively)start the lesson at label 'L'track personal best typing speedstry to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: GNU Typist 2.6 Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 PO-Revision-Date: 2012-05-20 21:27+0800 Last-Translator: Wei Mingzhi Language-Team: Simplified Chinese Language: zh_CN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 如果没有提供,默认脚本文件为 '%s/%s'. 操练 查询 您确定要退出此课程吗? [Y/N]按 R 重复一次或按 E 退出按 R 重复一次, 按 N 进入下一个练习或按 E 退出 按回车键或空格键继续。ESC 键返回至菜单。抱歉, gtypist 目前设定为禁止跳过课程。 教程 您没有通过此次测验, 所以您必须回到 %s您的错误率太高了. 您必须达到 %.1f%%.%s: 参数格式不正确 %s: 不正确的颜色值 %s: %s 环境变量未设置 %s: 内部错误: malloc %s: 不正确的颜色值 %s: 无效的 curs-flash 值 %s: 无效的 error-max 值 %s: 不合法的计分模式'%' 必须立即接着值'*' 必须立即接着 '%'例子祝您打字愉快! 非法的多字节序列 (错误的字符编码?)"E:" 的值无效 (超出范围)正在调入脚本文件选项R/N/E将错误报告给 bug-gtypist@gnu.org 速度测验从路径 $GTYPIST_PATH 中搜索脚本文件。 让 gtypist 在一个非标准目录中查找课程 `bar.typ'。以默认的英语方式 `gtypist.typ' 进行课程以西班牙语方式进行课程要进行目录 `temp' 下的文件 `test.typ' 中的课程,从标签 `TEST1' 开始,使用终端光标,并且使用安静模式。打 '%s --help' 可得到更多的信息. 用法使用光标键移动,空格键或回车键选择,ESC 键后退作者 Simon BaldwinY/N'gtypist' 是一款打字教程软件,支持不同的键盘和语言。新的课程可以由用户很容易的制作出来。 找不到或无法打开文件无法将 UTF-8 转换为宽字符光标闪烁周期 P * 0.1 秒 (默认为 10); 有效值在 0 和 512 之间; 若 -t 参数被指定, 则这个值将被忽略数据超出屏幕宽度数据不足默认最大的错误百分比 (默认为 3.0); 有效值在 0.0 和 100.0 之间不要问确认问题当错误发生时不响铃setcchar() 错误禁止使用者跳过练习高亮显示错误指令只限二行内部错误: strdup内部错误: fseek内部错误: malloc内部错误: strdup无效的功能键编号无效的按键绑定标签 '%s' 没找到标签包含空格标签重定义行行长度超过屏幕可容纳宽度缺少 '%'缺少 ':'选项输出版本信息然后退出在 do_error_max_set 中溢出打印此消息和 -s, --silent 相同脚本文件设置可用的初始显示颜色设置计分模式 (每分钟词数或每分钟字符数)设置屏幕上方的广告条颜色 (分别为背景,前景,包和版本)。由标签 'L' 的课程开始跟踪个人最佳打字速度成绩试图模拟字处理软件在训练中关闭每分钟字数计时器未知的命令使用终端硬件光标gtypist-2.9.5/po/Makevars0000644000175000017500000000443112204155736012274 00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Simon Baldwin # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = gtypist-2.9.5/po/de.gmo0000644000175000017500000002324212372333404011671 00000000000000Z3  + 6A^2{ 5 >? ~  < 5 :6 q "      ; !T v  J S ,c %    " 6L?2&cP)r= XVf!!#%:`y*/ H T`#h +< QF!""WEG-& : E+R+~2!*.*FY=** ?4 t98# .He'$$0 ;/@k.9nL=& 0 GF d h ''!1O!!)"."_="$""1"/ #.:#i#### ##$%$E$c$!i$ $ $$($$$% %4-%@b%D%#%" &/&%J&p&&:6"G-V(Q&J+ DZ SA!T#P0?8RY$,H/>B4%N3CU'@E<)L;=M17 K FI*W5O9 2. X If not supplied, script-file defaults to '%s/%s'. with %.1f%% errors new personal best Drill Query Adjusted speed = %6.2f cpm Adjusted speed = %6.2f wpm Are you sure you want to exit this lesson? [Y/N] Personal best = %6.2f cpm Personal best = %6.2f wpm Press R to repeat or E to exit Press R to repeat, N for next exercise or E to exit Press RETURN or SPACE to continue, ESC to return to the menu Raw speed = %6.2f cpm Raw speed = %6.2f wpm Sorry, gtypist is configured to forbid skipping exercises. Tutorial You failed this test, so you need to go back to %s. Your error-rate is too high. You have to achieve %.1f%%. internal error: fopen%s: argument format is incorrect %s: incorrect colour values %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value %s: invalid scoring mode'%' must immediately follow value'*' must immediately follow '%'Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin. Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team. This program comes with ABSOLUTELY NO WARRANTY; for details please see the file 'COPYING' supplied with the source code. This is free software, and you are welcome to redistribute it under certain conditions; again, see 'COPYING' for details. This program is released under the GNU General Public License.ExamplesHappy Typing! Invalid multibyte sequence (wrong encoding?)Invalid value for "E:" (out of range)Loading the script...OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageUse arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go backWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecouldn't convert UTF-8 to wide characterscursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0do not ask confirmation questionsdon't beep on errorsforbid the user to skip exerciseshighlight errors with reverse videoinstructions are limited to two linesinternal error in strdupinternal error: fseekinternal error: mallocinternal error: strdupinvalid function key numberinvalid key bindinglabel '%s' not foundlabel contains spacelabel redefinitionlineline too long for screenmissing '%'missing ':'optionsoutput version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-fileset initial display colours where availableset scoring mode (words per minute or characters per minute)set top banner colours (background, foreground, package and version respectively)start the lesson at label 'L'track personal best typing speedstry to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: GNU Typist 2.9 Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 PO-Revision-Date: 2011-08-11 13:15+0200 Last-Translator: Felix Natter Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wenn Skript-Datei nicht angegeben ist, gilt der Standardwert '%s/%s'. mit %.1f%% Fehlern neue persönliche Bestzeit Drill Anfrage Tatsächliche Geschwindigkeit = %6.2f cpm Tatsächliche Geschwindigkeit = %6.2f wpm Willst du wirklich diese Lektion verlassen ? [J/N] Pers. Bestzeit = %6.2f cpm Netto-Geschwindigkeit = %6.2f wpm Drücke W um zu wiederholen oder B zum BeendenDrücke W um zu wiederholen, N für nächste Übung oder B zum BeendenENTER oder LEERTASTE: weitermachen, ESCAPE: zurück zum Menü Netto-Geschwindigkeit = %6.2f cpm Netto-Geschwindigkeit = %6.2f wpm Es ist nicht erlaubt, Übungen zu überspringen (siehe Konfig).EinführungDer Test war nicht gut genug: Zur Wiederh. zurück zu %s.Deine Fehlerrate ist zu hoch. Du musst %.1f%% erreichen.interner Fehler: fopen%s: Parameterformat ist ungültig %s: Ungültige Farbwerte %s: Interner Fehler: malloc %s: Ungültiger Farbwert %s: unzulässiger Wert für curs-flash %s: Ungültiger Wert für error-max %s: Ungültiger Bewertungsmodus'%' muss direkt nach dem Wert kommen'*' muss direkt auf '%' folgenCopyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin. Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team. Für dieses Programm besteht KEINERLEI GARANTIE; wenn Sie Details sehen möchten, lesen Sie bitte die Datei 'COPYING', die mit dem Quelltext verteilt wird. Diese Software ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen; für Details siehe ebenfalls 'COPYING'. Dieses Programm steht unter der GNU General Public License.BeispieleFröhliches Tippen! Ungültige multibyte-Sequenz (falsches Encoding? non-utf8?)Ungültiger Wert für "E:" (außerhalb der gültigen Reichweite)Lade den Skript...OptionenW/N/BBitte melden Sie Fehler an bug-gtypist@gnu.orgGeschwindigkeitstestNach Skript-Dateien wird im Pfad $GTYPIST_PATH gesucht. Um gtypist anzuweisen die Lektion `bar.typ' in einem anderen Verzeichnis als dem Standardverzeichnis zu suchenZum Ausführen der Standard-Lektion in Englisch `gtypist.typ'Zum Ausführen der Lektion in SpanischUm die Lektion aus Datei `test.typ' im Verzeichnis `temp' auszuführen, beginnend mit dem Bezeichner `TEST1', und der Verwendung des Terminal-Cursors und lautlos.Aufruf mit '%s --help' für mehr Informationen. BenutzungPfeiltasten: Bewegen, ENTER/LEERTASTE: Auswählen, ESCAPE: ZurückgehenGeschrieben von Simon BaldwinJ/N`gtypist' ist ein Maschinenschreib-Lernprogramm, mit verschiedenen Lektionen für unterschiedliche Tastaturen und Sprachen. Neue Lektionen können einfach durch den Nutzer erstellt werden. Datei nicht vorhanden oder nicht lesbarkonnte UTF-8 nicht in breite Zeichen konvertierenEingabe Cursor Blinkfrequenz in P*.1 sek.; Standarwert 10, gültige Werte von 0 bis 512; wird nicht beachtet wenn -t angegeben istdie Daten passen nicht auf den Bildschirmzu wenig DatenStandardwert für maximale Fehlerrate (Stdwert 3,0); gültige Werte sind zwischen 0,0 und 100,0keine Bestätigungsanfragen erzeugenlautlos im FehlerfallVerbietet dem Benutzer, Übungen zu überspringenFehler mit invertierter Darstellung hervorhebenEinführungen sind auf zwei Zeilen beschränktinterner Fehler: strdupinterner Fehler: fseekinterner Fehler: mallocinterner Fehler: strdupungültige Funktionstastennummerungültige TastenkombinationBezeichner '%s' nicht gefundenBezeichner enthält LeerzeichenNeudefinition von BezeichnernZeileZeile zu lang für den Bildschirm'%' fehlt':' fehltOptionenVersionsinformation anzeigen und beendenÜberlauf in do_error_max_setdiese Meldung anzeigenidentisch zu -s, --silentSkript-DateiInitiale Farben der Anzeige setzen (wenn verfügbar)setze Bewertungsmodus (Worte pro Minute oder Zeichen pro Minute)setze die Bannerfarben (Hintergrund, Vordergrund, Paket und Version)Lektion bei Bezeichner 'L' beginnenmerke die persönlichen BestzeitenTextverarbeitung nachahmenWPM Zeitnehmer abschalten in ÜbungenUnbekannter BefehlCursor des Terminals verwendengtypist-2.9.5/po/zh_CN.po0000644000175000017500000004061512372332140012135 00000000000000# Simplified Chinese translation # Copyright (C) 2000 Simon Baldwin # This file is distributed under the same license as the gtypist package. # Wei Mingzhi , 2006, 2012. # msgid "" msgstr "" "Project-Id-Version: GNU Typist 2.6\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: 2012-05-20 21:27+0800\n" "Last-Translator: Wei Mingzhi \n" "Language-Team: Simplified Chinese\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/gtypist.c:295 msgid "internal error in strdup" msgstr "内部错误: strdup" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "无效的按键绑定" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "无效的功能键编号" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "数据超出屏幕宽度" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "指令只限二行" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "内部错误: fseek" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "'*' 必须立即接着 '%'" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "缺少 '%'" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "'%' 必须立即接着值" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "在 do_error_max_set 中溢出" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "\"E:\" 的值无效 (超出范围)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "标签 '%s' 没找到" #: src/gtypist.c:1611 msgid "unknown command" msgstr "未知的命令" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "跟踪个人最佳打字速度成绩" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "默认最大的错误百分比 (默认为 3.0); 有效值在 0.0 和 100.0 之间" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "在训练中关闭每分钟字数计时器" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "使用终端硬件光标" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "光标闪烁周期 P * 0.1 秒 (默认为 10); 有效值在 0 和 512 之间; 若 -t 参数被指" "定, 则这个值将被忽略" #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "设置可用的初始显示颜色" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "当错误发生时不响铃" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "和 -s, --silent 相同" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "由标签 'L' 的课程开始" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "试图模拟字处理软件" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "禁止使用者跳过练习" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "高亮显示错误" #: src/gtypist.c:1743 msgid "print this message" msgstr "打印此消息" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "输出版本信息然后退出" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "不要问确认问题" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "设置屏幕上方的广告条颜色 (分别为背景,前景,包和版本)。" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "设置计分模式 (每分钟词数或每分钟字符数)" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" "'gtypist' 是一款打字教程软件,支持不同的键盘和语言。新的课程可以由用户很容易" "的制作出来。\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "用法" #: src/gtypist.c:1756 msgid "options" msgstr "选项" #: src/gtypist.c:1756 msgid "script-file" msgstr "脚本文件" #: src/gtypist.c:1757 msgid "Options" msgstr "选项" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "如果没有提供,默认脚本文件为 '%s/%s'.\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" "从路径 $GTYPIST_PATH 中搜索脚本文件。\n" "\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "例子" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "以默认的英语方式 `gtypist.typ' 进行课程" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "以西班牙语方式进行课程" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "让 gtypist 在一个非标准目录中查找课程 `bar.typ'。" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "要进行目录 `temp' 下的文件 `test.typ' 中的课程,从标签 `TEST1' 开始,使用终端" "光标,并且使用安静模式。" #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "将错误报告给 bug-gtypist@gnu.org " #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: 无效的 error-max 值\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: 无效的 curs-flash 值\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: 不正确的颜色值\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "%s: 参数格式不正确\n" #: src/gtypist.c:1876 #, c-format msgid "%s: incorrect colour values\n" msgstr "%s: 不正确的颜色值\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, c-format msgid "%s: invalid scoring mode" msgstr "%s: 不合法的计分模式" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: 内部错误: malloc\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "作者 Simon Baldwin" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "打 '%s --help' 可得到更多的信息.\n" #: src/gtypist.c:2023 #, fuzzy msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" "版权所有 (c) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "版权所有 (c) 2003, 2004, 2008, 2011, 2012 GNU Typist Development Team.\n" "本软件没有任何保证; 详情请参看源码包中的 'COPYING' 文件。\n" "本程序是自由软件,您可以在一定的条款下传播。请参看 COPYING\n" "文件。本程序在 GNU 一般公众许可证下发布。" #: src/gtypist.c:2031 msgid " Tutorial " msgstr " 教程 " #: src/gtypist.c:2033 msgid " Query " msgstr " 查询 " #: src/gtypist.c:2035 msgid " Drill " msgstr " 操练 " #: src/gtypist.c:2037 msgid "Speed test" msgstr "速度测验" #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr " 按回车键或空格键继续。ESC 键返回至菜单。" #: src/gtypist.c:2042 #, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr "您的错误率太高了. 您必须达到 %.1f%%." #: src/gtypist.c:2046 #, c-format msgid " You failed this test, so you need to go back to %s. " msgstr "您没有通过此次测验, 所以您必须回到 %s" #: src/gtypist.c:2050 msgid " Press R to repeat, N for next exercise or E to exit " msgstr "按 R 重复一次, 按 N 进入下一个练习或按 E 退出" #: src/gtypist.c:2054 msgid " Press R to repeat or E to exit " msgstr "按 R 重复一次或按 E 退出" #: src/gtypist.c:2057 msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr "您确定要退出此课程吗? [Y/N]" #: src/gtypist.c:2061 msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr "抱歉, gtypist 目前设定为禁止跳过课程。" #: src/gtypist.c:2066 #, fuzzy, c-format msgid " Raw speed = %6.2f wpm " msgstr "原始速度|= %6.2f 词/分" #: src/gtypist.c:2068 #, fuzzy, c-format msgid " Raw speed = %6.2f cpm " msgstr "原始速度|= %6.2f 词/分" #: src/gtypist.c:2073 #, fuzzy, c-format msgid " Adjusted speed = %6.2f wpm " msgstr "已调整速度|= %6.2f 词/分" #: src/gtypist.c:2075 #, fuzzy, c-format msgid " Adjusted speed = %6.2f cpm " msgstr "已调整速度|= %6.2f 词/分" #: src/gtypist.c:2080 #, fuzzy, c-format msgid " with %.1f%% errors " msgstr "|有 %.1f%% 的错误" #: src/gtypist.c:2085 #, fuzzy, c-format msgid " Personal best = %6.2f wpm " msgstr "个人最佳成绩|= %6.2f 词/分" #: src/gtypist.c:2087 #, fuzzy, c-format msgid " Personal best = %6.2f cpm " msgstr "个人最佳成绩|= %6.2f 词/分" #: src/gtypist.c:2092 #, fuzzy msgid " new personal best " msgstr "|新的个人最佳成绩" #: src/gtypist.c:2097 msgid "Y/N" msgstr "Y/N" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "R/N/E" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "找不到或无法打开文件" #: src/gtypist.c:2185 #, c-format msgid "%s: %s environment variable not set\n" msgstr "%s: %s 环境变量未设置\n" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "正在调入脚本文件" #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "内部错误: malloc" #: src/gtypist.c:2362 #, fuzzy msgid " internal error: fopen" msgstr "内部错误: fopen" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "使用光标键移动,空格键或回车键选择,ESC 键后退" #: src/error.c:51 msgid "line" msgstr "行" #: src/script.c:56 msgid "internal error: strdup" msgstr "内部错误: strdup" #: src/script.c:158 msgid "label contains space" msgstr "标签包含空格" #: src/script.c:184 msgid "label redefinition" msgstr "标签重定义" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "非法的多字节序列 (错误的字符编码?)" #: src/script.c:230 msgid "data shortage" msgstr "数据不足" #: src/script.c:232 msgid "missing ':'" msgstr "缺少 ':'" #: src/script.c:238 msgid "line too long for screen" msgstr "行长度超过屏幕可容纳宽度" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" "祝您打字愉快!\n" "\n" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "无法将 UTF-8 转换为宽字符" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "setcchar() 错误" #~ msgid "" #~ "Welcome to GNU Typist!\n" #~ "\n" #~ "This message is meant to get you started using gtypist. Please read the\n" #~ "manual (at http://www.gnu.org/software/gtypist/doc/, or type \"info " #~ "gtypist\")\n" #~ "for more in-depth information!\n" #~ "\n" #~ "Use the arrow keys or PGUP/PGDN to scroll this window, SPACE/ENTER to " #~ "start\n" #~ "using gtypist, or ESCAPE use gtypist and never show this dialog again.\n" #~ "\n" #~ "There are two types of typing exercises: \"drills\" and \"speed tests\". " #~ "In a\n" #~ "\"drill\", gtypist displays text in every other line on the screen and " #~ "waits\n" #~ "for the user to correctly type the exact same text in the intermediate\n" #~ "lines. In a \"speed test\", gtypist displays text on the screen and " #~ "waits\n" #~ "for the user to correctly type the exact same text over the top.\n" #~ "\n" #~ "In both exercise types, you have to repeat the test if your error " #~ "percentage\n" #~ "is higher than a maximum error percentage. The default is 3%, but if this " #~ "is\n" #~ "too difficult you can change it by running gtypist with the \"-e " #~ "\"\n" #~ "command-line option.\n" #~ "\n" #~ "On most X11-based terminal emulators you can use Ctrl--/Ctrl-+ to resize " #~ "the\n" #~ "terminal window. On Windows, change the properties of the terminal window " #~ "by\n" #~ "clicking on the top left corner of the window and choosing 'Properties'.\n" #~ "\n" #~ "Several typing courses are available from the main menu. As well as the\n" #~ "\"QWERTY\" courses, lessons are also available for other keyboard " #~ "layouts,\n" #~ "such as Dvorak and Colemak, and numeric keypads. There are also other\n" #~ "lessons, besides the ones available on the main menu. To see a list of " #~ "the\n" #~ "other lessons, select \"More lessons...\" from the main menu. To use one\n" #~ "of these other lessons, run gtypist with the name of the lesson file as " #~ "a\n" #~ "command-line argument. See the comments at the top of each .typ file for\n" #~ "more information about the source and the author of the lessons. If you " #~ "want\n" #~ "to write your own lessons, look at the gtypist manual, it's really " #~ "simple!\n" #~ "\n" #~ "If you have any questions about GNU Typist, please write to the gtypist\n" #~ "mailing list at ." #~ msgstr "" #~ "欢迎使用 GNU Typist!\n" #~ "\n" #~ "此信息将引导您开始使用 gtypist。要获取更多详细信息,请阅读使用手册 (可在\n" #~ "http//www.gnu.org/software/gtypist/doc/ 找到, 或使用 \"info gtypist\")。\n" #~ "\n" #~ "使用方向键或 PGUP/PGDN 滚动此窗口,空格键/回车键开始使用 gtypist,\n" #~ "或按 Esc 开始使用 gtypist 且不再显示此对话框。\n" #~ "\n" #~ "有两种类型的练习可供使用:\"操练\" 和 \"速度测试\"。在 \"操练\" 模式下,\n" #~ "gtypist 将在屏幕上显示一行文字并等待用户正确打出这行文字。在 \"速度测试" #~ "\"\n" #~ "模式下,gtypist 将在屏幕上显示一篇文章并等待用户正确打出全部内容。\n" #~ "\n" #~ "无论在哪种模式下,如果您的错误率高于某一限值,您需要重复进行测试。默认限" #~ "值\n" #~ "是 3%,但是如果此限值过于困难,您可以使用 \"-e \" 命令行参数更" #~ "改。\n" #~ "\n" #~ "在大多数基于 X11 的终端模拟器,您可以使用 Ctrl--/Ctrl-+ 改变终端窗口的大" #~ "小。在\n" #~ "Windows 下,可单击窗口左上角的图标并选择 '属性' 来改变窗口属性。\n" #~ "\n" #~ "若干个打字课程可在主菜单选用。除 \"QWERTY\" 课程,适用其它键盘布局的课程\n" #~ "亦可用,如 Dvorak 及 Colemak 键盘,以及数字小键盘。除主菜单显示的课程" #~ "外,\n" #~ "gtypist 同时提供了一些其它的课程。如要查看其它课程的列表,请在主菜单选择\n" #~ "\"更多课程...\"。如要使用其它课程,使用命令行参数指定课程文件名。请参考" #~ "各\n" #~ ".typ 文件的注释以获取关于课程来源及作者的详细信息。如果您要编写自己的课" #~ "程,\n" #~ "请参考 gtypist 使用手册,编写自己的课程是很简单的!\n" #~ "\n" #~ "如果您对 GNU Typist 有任何问题,欢迎在 gtypist 邮件列表发信询问。\n" #~ "邮件列表地址为 (请使用英文发信)。" #~ msgid "" #~ "Press SPACE or ENTER to start gtypist, or ESCAPE to disable this dialog" #~ msgstr "请按空格或回车键启动 gtypist,或按 Esc 键禁用此对话框" #~ msgid "Raw speed|= %7.2f cpm" #~ msgstr "原始速度|= %7.2f 字符/分" #~ msgid "Adjusted speed|= %7.2f cpm" #~ msgstr "已调整速度|= %7.2f 字符/分" #~ msgid "Personal best|= %7.2f cpm" #~ msgstr "个人最佳成绩|= %7.2f 字符/分" gtypist-2.9.5/po/es.gmo0000644000175000017500000001747612372333404011724 00000000000000L|ep3q  2 +5L>< 5&:\" - !J l   %    "  6 LT 2  &x  P     r ( C VQ !  ! #%%Kdz  *#6Zw +Q)Gd"`: P q |9-JDZ$Q ?!;a+"" %,$Rw+8MW_YH%Z7 Xh\9/w\&$?+d?00H'^ -  0&$W|"Ez'*.  4E/C- ;I3 B>@)*+G8?=(&# H2 97 <!J.%KF,5$' L1DA0":6 If not supplied, script-file defaults to '%s/%s'. with %.1f%% errors Drill Query Adjusted speed = %6.2f wpm Are you sure you want to exit this lesson? [Y/N] Press R to repeat or E to exit Press R to repeat, N for next exercise or E to exit Press RETURN or SPACE to continue, ESC to return to the menu Raw speed = %6.2f wpm Sorry, gtypist is configured to forbid skipping exercises. Tutorial You failed this test, so you need to go back to %s. Your error-rate is too high. You have to achieve %.1f%%. %s: argument format is incorrect %s: incorrect colour values %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value '%' must immediately follow value'*' must immediately follow '%'ExamplesHappy Typing! Invalid value for "E:" (out of range)Loading the script...OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageUse arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go backWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0do not ask confirmation questionsdon't beep on errorsforbid the user to skip exerciseshighlight errors with reverse videoinstructions are limited to two linesinternal error in strdupinternal error: fseekinternal error: mallocinternal error: strdupinvalid function key numberinvalid key bindinglabel '%s' not foundlabel redefinitionlineline too long for screenmissing '%'missing ':'output version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-fileset initial display colours where availableset top banner colours (background, foreground, package and version respectively)start the lesson at label 'L'try to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: GNU Typist 2.7 Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 PO-Revision-Date: 2011-08-14 20:42+0200 Last-Translator: José Pelegrín Language-Team: Spanish/Spain Language: es MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Si no se da, el fichero 'script' por defecto es '%s/%s'. con %3.0f%% errores Rutina Consulta Velocidad neta = %6.2f wpm ¿Estás seguro de querer concluir esta lección? [Y/N] Pulsa 'R' para repetir o 'E' para finalizar Pulsa 'R' para repetir, 'N' para el siguiente ejercicio o 'E' para salir Pulse 'RETURN' o 'SPACE' para continuar, 'ESC' para volver al menu Velocidad en bruto = %6.2f wpm Lo siento, 'gtypist' está configurado para no permitir saltarse las lecciones. Tutorial Has fallado esta prueba, por lo que debes ir de nuevo a '%s'. Tu tasa de error es demasiado alta. Debes obtener %.1f%%. %s: el formato del argumento es incorrecto %s: valor incorrecto de 'colour' %s: error interno: 'malloc' %s: valor incorrecto de 'colours' %s: valor incorrecto de 'curs-flash' %s: valor incorrecto de 'error-max' '%' debe seguir al valor'*' debe seguir a '%'Ejemplos¡Feliz Tecleo! Valor incorrecto para "E:" (fuera de rango)Cargando el 'script'...OpcionesR/N/EInforme de errores a la dirección 'bug-gtypist@gnu.org'Test de velocidadSe buscarán los archivos 'script' en la ruta descrita por la variable 'GTYPIST_PATH'. Para indicarle a 'gtypist' que busque la lección 'bar.typ' en un directorio no estándarPara ejecutar la lección en inglés que está por defecto 'gtypist.typ'Para ejecutar la lección en españolPara ejecutar la lección del archivo 'test.typ' del directorio 'temp', comenzando en la etiqueta 'TEST1', usando el cursor de la terminal y en modo silenciosoPruebe con '%s --help' para obtener más información. UsoUsa las teclas de flecha para moverte, 'SPACE' o 'RETURN' para seleccionar y 'ESCAPE' para volver atrásEscrito por Simon BaldwinY/N'gtypist' es un tutor para aprender a teclear. Está compuesto de diversas lecciones para diferentes teclados e idiomas. Un usuario puede añadir nuevas lecciones con facilidad. el archivo no se ha encontrado o no ha podido ser abiertopone el periodo de parpadeo del cursor en P*.1 segundos (por defecto 10), los valores válidos están entre 0 y 512; Se ignorará si se especifica con la opción '-t'los datos sobrepasan la longitud de la pantalladatos insuficientesporcentaje de error máximo (por defecto 3.0); los valores válidos están entre 0.0 y 100.0no pedir confirmación a las preguntasno producir sonidos en caso de errorprohibir al usuario saltarse los ejerciciosresaltar los errores con la inversión del color de la pantallalas instrucciones están limitadas a dos líneaserror interno en strduperror interno: 'fseek'error interno: 'malloc'error interno: strdupnúmero incorrecto de tecla de funciónasociación incorrecta de teclasetiqueta '%s' no encontradaredefinición de etiquetalíneala línea es demasiado larga para la pantallafalta '%'falta ':'muestra información sobre la versión y terminadesbordamiento en 'do_error_max_set'muestra este mensajeel mismo efecto que '-s, --silent'ficheros de 'script'establece los colores iniciales de la pantalla cuando esto es posiblemodifica el valor de los colores del panel de mensajes superior (fondo, primer plano, paquete y versión respectivamente).comenzar la lección en la etiqueta 'L'intenta imitar a los procesadores de textodesactivar el contador PPM para las prácticascomando desconocidousar el cursor de la terminalgtypist-2.9.5/po/insert-header.sin0000644000175000017500000000124012231002500014014 00000000000000# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } gtypist-2.9.5/po/cs.po0000644000175000017500000003030612372332140011535 00000000000000# Translation of gtypist.c (GNU Typist) # Copyright (C) 2001, 2002 Free Software Foundation, Inc. # Hynek Hanke , 2001. # msgid "" msgstr "" "Project-Id-Version: GNU Typist 2.7\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: 2011-08-11 13:26+0200\n" "Last-Translator: Hynek Hanke \n" "Language-Team: Czech\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/gtypist.c:295 msgid "internal error in strdup" msgstr "vnitřní chyba v strdup" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "chybné přiřazení kláves" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "neplatné číslo F-klávesy" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "data překročila velikost obrazovky" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "instrukce smí mít pouze dva řádky" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "vnitřní chyba: fseek" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "po '%' musí okamžitě následovat '*'" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "chybí '%'" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "po hodnotě musí okamžitě následovat '%'" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "přetečení bufferu v do_error_max_set" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "Neplatná hodnota pro \"E:\" (mimo obor hodnot)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "návěstí '%s' nebylo nalezeno" #: src/gtypist.c:1611 msgid "unknown command" msgstr "neznámý příkaz" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "" "defaultní maximální počet chyb (standardně 3.0); platné hodnoty jsou mezi " "0.0 a 100.0" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "vypnout sledování rychlosti při drilových testech" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "používat kurzor terminálu" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "perioda blikání kurzoru P*0,1 sekund (defaultně 10); platné hodnoty jsou " "mezi 0 a 512; parametr je ignorován, pokud bylo zadáno -t." #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "nastavení výchozích barev, pokud je to možné" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "při chybách nepípat" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "to samé jako -s a --silent" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "spusť lekci na návěstí 'L'" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "emuluj textový procesor" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "zakaž uživateli přeskakovat cvičení" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "zvýraznit chyby inverzním zobrazením" #: src/gtypist.c:1743 msgid "print this message" msgstr "vytiskni tuto zprávu" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "vytisknout informace o verzi a skončit" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "neptat se na potvrzení" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "" "nastavit barvy vrchního banneru (pozadí, popředí, balíček a verzi,v tomto " "pořadí)" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" ",,gtypist'' je program pro výuku psaní na klávesnici všemi deseti prsty a " "obsahuje několik lekcí. Snadno mohou být dopsány i lekce nové.\n" "\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "Používání" #: src/gtypist.c:1756 #, fuzzy msgid "options" msgstr "Nastavení" #: src/gtypist.c:1756 msgid "script-file" msgstr "skriptovací soubor" #: src/gtypist.c:1757 msgid "Options" msgstr "Nastavení" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "Pokud není uvedeno jinak, skriptovací soubor bude: '%s/%s'.\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" "Skriptovací soubory se hledají v $GTYPIST_PATH.\n" "\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "Příklady" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "Ke spuštění defaultní lekce v angličtině gtypist.typ" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "Spustit lekci ve španělštině" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "Prohledává pro bar.typ nestandardní adresář" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "Spustí lekcii `test.typ' z adresáře `temp', začne na návěstí `TEST1', " "použije terminálový kurzor a pracuje v tichém módu" #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "Oznamte chyby na bug-gtypist@gnu.org." #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: neplatná hodnota error-max\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: neplatná hodnota curs-flash\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: neplatné číslo barvy\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "%s: neplatný formát argumentu\n" #: src/gtypist.c:1876 #, c-format msgid "%s: incorrect colour values\n" msgstr "%s: neplatná čísla barev\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, fuzzy, c-format msgid "%s: invalid scoring mode" msgstr "%s: neplatné číslo barvy\n" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: interní chyba: malloc\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "Napsáno Simonem Baldwinem" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "Více informací získáte zadáním '%s --help.'\n" # The msgstr was totally empty, so I copied the # English version for now. Can someone please # translate this? - Paul #: src/gtypist.c:2023 #, fuzzy msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." #: src/gtypist.c:2031 msgid " Tutorial " msgstr " Tutoriál " #: src/gtypist.c:2033 msgid " Query " msgstr " Dotaz " #: src/gtypist.c:2035 msgid " Drill " msgstr " Drilové cvičení " #: src/gtypist.c:2037 msgid "Speed test" msgstr "Rychlostní test" #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr "Stiskněte ENTER nebo mezeru pro pokračování, ESC k návratu do menu" #: src/gtypist.c:2042 #, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr "Vaše chybovost je příliš velká. Musíte dosáhnout %.1f%%." #: src/gtypist.c:2046 #, c-format msgid " You failed this test, so you need to go back to %s. " msgstr " Neprošel jste tímto testem. Musíte se vrátit na %s. " #: src/gtypist.c:2050 msgid " Press R to repeat, N for next exercise or E to exit " msgstr " Stiskněte O pro opakování, D pro další cvičení či K pro konec " #: src/gtypist.c:2054 msgid " Press R to repeat or E to exit " msgstr " Stiskněte O pro opakování nebo K pro konec " #: src/gtypist.c:2057 msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr " Jste si jist/a, že chcete opustit tuto lekci? [A/N] " #: src/gtypist.c:2061 msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr " Omlouvám se, ale jsem konfigurován, abych nedovolil přeskakovat." #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr " Hrubá rychlost = %6.2f slov/m " #: src/gtypist.c:2068 #, fuzzy, c-format msgid " Raw speed = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr " Orientační rychlost = %6.2f slov/m " #: src/gtypist.c:2075 #, fuzzy, c-format msgid " Adjusted speed = %6.2f cpm " msgstr " Adjusted speed = %6.2f cpm " #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr " s %.1f%% chyb " #: src/gtypist.c:2085 #, fuzzy, c-format msgid " Personal best = %6.2f wpm " msgstr " Hrubá rychlost = %6.2f slov/m " #: src/gtypist.c:2087 #, fuzzy, c-format msgid " Personal best = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2092 #, fuzzy msgid " new personal best " msgstr " s %.1f%% chyb " #: src/gtypist.c:2097 msgid "Y/N" msgstr "A/N" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "O/D/K" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "Nemůžu najít či otevřít soubor" #: src/gtypist.c:2185 #, c-format msgid "%s: %s environment variable not set\n" msgstr "" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "Načítám skript..." #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "vnitřní chyba: malloc" #: src/gtypist.c:2362 #, fuzzy msgid " internal error: fopen" msgstr "vnitřní chyba: fseek" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "" "K pohybu použijte kurzorových kláves, mezerou či ENTERem vyberte položku " "nebo ESC se vraťte zpět" #: src/error.c:51 msgid "line" msgstr "řádka" #: src/script.c:56 msgid "internal error: strdup" msgstr "vnitřní chyba: strdup" #: src/script.c:158 msgid "label contains space" msgstr "" #: src/script.c:184 msgid "label redefinition" msgstr "předefinování návěstí" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "" #: src/script.c:230 msgid "data shortage" msgstr "nedostatek dat" #: src/script.c:232 msgid "missing ':'" msgstr "chybí ':'" #: src/script.c:238 msgid "line too long for screen" msgstr "řádka je na obrazovku příliš dlouhá" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" "Přejeme příjemné psaní!\n" "\n" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "" #~ msgid " Press Return to continue... " #~ msgstr " Pokračujte stisknutím ENTER... " #~ msgid "Exit" #~ msgstr "Konec" #~ msgid "Up" #~ msgstr "Zpět" gtypist-2.9.5/po/en@boldquot.header0000644000175000017500000000247112231002500014204 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # gtypist-2.9.5/po/fi.po0000644000175000017500000003035412372332140011531 00000000000000# FINNISH # Copyright (C) 2001,2003 Kimmo Surakka # msgid "" msgstr "" "Project-Id-Version: GNU Typist 2.6\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: 2011-08-11 13:33+0200\n" "Last-Translator: Kimmo Surakka \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/gtypist.c:295 msgid "internal error in strdup" msgstr "sisäinen virhe strdup:ssa" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "virheellinen näppäinliitos" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "virheellinen funktionäppäimen numero" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "koko teksti ei mahdu ruudulle" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "ohjeita saa olla enintään kaksi riviä" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "sisäinen virhe: fseek" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "asteriskin ('*') pitää olla välittömästi '%':n jälkeen" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "puuttuva '%'" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "'%':n pitää olla välittömasti arvon jälkeen" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "ylivuoto funktiossa do_error_max_set" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "Virheellinen arvo parametrille \"E:\" (alueen ulkopuolella)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "tunnistetta '%s' ei löydy" #: src/gtypist.c:1611 msgid "unknown command" msgstr "tuntematon komento" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "" "virheiden enimmäismäärän oletusarvo prosentteina (oletuksena 3.0); lailliset " "arvot ovat 0.0:n ja 100.0:n välissä" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "kytke sanoja minuutissa -laskuri pois käytöstä harjoituksissa" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "käytä päätteen laitteistokohdistinta" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "kohdistimen vilkkumisjakso kymmenesosasekunteina (oletusarvo 10); lailliset " "arvot ovat 0:n ja 512:n välissä; tällä ei ole merkitystä, jos on annettu " "optio -t" #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "aseta näytön alkuvärit, jos mahdollista" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "kytke virhetilanteen merkkiääni pois käytöstä" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "sama kuin -s, --silent" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "aloita oppitunti tunnisteesta 'L'" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "yritä jäljitellä tekstinkäsittelyohjelmia" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "älä anna käyttäjän ohittaa harjoituksia" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "korosta virheet käänteisvärillä" #: src/gtypist.c:1743 msgid "print this message" msgstr "tulosta tämä viesti" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "näytä versiotiedot ja lopeta" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "älä kysy varmistuskysymyksiä" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "" "aseta ylätunnisteen värit (tausta, edusta, pakkaus ja versio tässä " "järjestyksessä)" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" "'gtypist' on konekirjoituksen harjoitteluohjelma, joka tukee useita eri " "näppäimistöasetteluita ja kieliä. Käyttäjän on helppo lisätä uusia " "harjoituksia.\n" "\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "Käyttö" #: src/gtypist.c:1756 #, fuzzy msgid "options" msgstr "Optiot" #: src/gtypist.c:1756 msgid "script-file" msgstr "skriptitiedosto" #: src/gtypist.c:1757 msgid "Options" msgstr "Optiot" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "Jos skriptitiedostoa ei kerrota, oletusarvo on '%s/%s'\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" "Skriptitiedostoja etsittäessä käytetään polkua $GTYPIST_PATH.\n" "\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "Esimerkkejä" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "Suorittaa englanninkielisen oletusoppitunnin 'gtypist.typ'" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "Käynnistää espanjankielisen oppitunnin" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "" "Kehottaa gtypist-ohjelmaa etsimään oppituntia 'bar.typ' epästandardista " "hakemistosta" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "Suorittaa oppitunnin tiedostosta 'test.typ' hakemistossa 'temp', alkaen " "tunnisteesta 'TEST1', käyttäen päätteen kohdistinta ja äänettömästi" #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "Virheilmoitukset osoitteeseen bug-gtypist@gnu.org" #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: virheellinen arvo parametrilla error-max\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: virheellinen kohdistimen vilkkumisjakson arvo\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: virheelinen värimääritysparametrin arvo\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "%s: argumentin muoto on virheellinen\n" #: src/gtypist.c:1876 #, c-format msgid "%s: incorrect colour values\n" msgstr "%s: virheellinen värimääritysparametrin arvo\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, fuzzy, c-format msgid "%s: invalid scoring mode" msgstr "%s: virheelinen värimääritysparametrin arvo\n" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: sisäinen virhe: malloc\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "Tekijä: Simon Baldwin" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "Kirjoita '%s --help' saadaksesi lisätietoja.\n" #: src/gtypist.c:2023 #, fuzzy msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" "Tekijänoikeus (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Tekijänoikeus (C) 2003, 2004, 2008 GNU Typist Development Team.\n" "Tätä ohjelmaa levitetään ILMAN MITÄÄN TAKUUTA; lisätietoja on\n" "lähdekoodin mukana toimitetussa tiedostossa 'COPYING'.\n" "Tämä ohjelma on vapaa, ja sitä saa levittää edelleen tiettyjen ehtojen\n" "mukaisesti; yksityiskohdat ovat em. tiedostossa 'COPYING'.\n" "Tämä ohjelma on julkaistu GNU Yleisen julkisen lisenssin (GPL) alaisena." #: src/gtypist.c:2031 msgid " Tutorial " msgstr " Opastus " #: src/gtypist.c:2033 msgid " Query " msgstr " Kysely " #: src/gtypist.c:2035 msgid " Drill " msgstr "Harjoitus " #: src/gtypist.c:2037 msgid "Speed test" msgstr "Nopeuskoe " #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr " Paina Return tai välilyönti jatkaaksesi, Esc palataksesi valikkoon " #: src/gtypist.c:2042 #, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr " Virhetiheytesi on liian suuri. Virheitä saa olla enintään %.1f%%. " #: src/gtypist.c:2046 #, c-format msgid " You failed this test, so you need to go back to %s. " msgstr " Et läpäissyt koetta, sinun on palattava kohtaan %s. " #: src/gtypist.c:2050 msgid " Press R to repeat, N for next exercise or E to exit " msgstr " Paina T toistaaksesi, J jatkaaksesi tai L lopettaaksesi " #: src/gtypist.c:2054 msgid " Press R to repeat or E to exit " msgstr " Paina T toistaaksesi tai L lopettaaksesi " #: src/gtypist.c:2057 msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr " Haluatko varmasti lopettaa tämän harjoituksen? [K/E] " #: src/gtypist.c:2061 msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr " Valitan, asetuksissa kielletään harjoitusten ohittaminen. " #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr " Raakanopeus = %6.2f s/m " #: src/gtypist.c:2068 #, fuzzy, c-format msgid " Raw speed = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr " Korjattu nopeus = %6.2f s/m " #: src/gtypist.c:2075 #, fuzzy, c-format msgid " Adjusted speed = %6.2f cpm " msgstr " Adjusted speed = %6.2f cpm " #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr " virheitä yhteensä %.1f%%. " #: src/gtypist.c:2085 #, fuzzy, c-format msgid " Personal best = %6.2f wpm " msgstr " Raakanopeus = %6.2f s/m " #: src/gtypist.c:2087 #, fuzzy, c-format msgid " Personal best = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2092 #, fuzzy msgid " new personal best " msgstr " virheitä yhteensä %.1f%%. " #: src/gtypist.c:2097 msgid "Y/N" msgstr "K/E" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "T/J/L" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "ei löydä tai voi avata tiedostoa" #: src/gtypist.c:2185 #, c-format msgid "%s: %s environment variable not set\n" msgstr "" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "Lataa skriptitiedostoa..." #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "sisäinen virhe: malloc" #: src/gtypist.c:2362 #, fuzzy msgid " internal error: fopen" msgstr "sisäinen virhe: fseek" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "" "Liiku nuolinäppäimillä, valitse välilyönillä tai Returnilla, palaa takaisin " "Esc:llä" #: src/error.c:51 msgid "line" msgstr "rivi" #: src/script.c:56 msgid "internal error: strdup" msgstr "sisäinen virhe: strdup" #: src/script.c:158 msgid "label contains space" msgstr "" #: src/script.c:184 msgid "label redefinition" msgstr "tunnisteen uudelleenmäärittely" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "" #: src/script.c:230 msgid "data shortage" msgstr "liian vähän dataa" #: src/script.c:232 msgid "missing ':'" msgstr "puuttuva ':'" #: src/script.c:238 msgid "line too long for screen" msgstr "rivi ei mahdu näytölle" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" "Iloista kirjoittelua!\n" "\n" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "" #~ msgid " Press Return to continue... " #~ msgstr " Paina Return jatkaaksesi... " gtypist-2.9.5/po/boldquot.sed0000644000175000017500000000033112231002500013075 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g s/“/“/g s/”/”/g s/‘/‘/g s/’/’/g gtypist-2.9.5/po/stamp-po0000644000175000017500000000001212372333404012246 00000000000000timestamp gtypist-2.9.5/po/eu.gmo0000644000175000017500000002007712372333404011715 00000000000000Pk3  (3P2m 5>6S<p 5:") L j     !  7 @ %P v   " 6 L 2L  &# J PP   H r`  V !Su!#%%<So  #"5 J+V<Q/Li"y> "@2]*H#!] .E87~(#8"\ %% $'C\d?jOQ =[<I h') ^0%P5v@(.E`v%  1*#\;C]C()  3N:.DE9 -+' "J7412K%IB # LCF0(H&!G5?PAO=>,$6 /< *@;8)M If not supplied, script-file defaults to '%s/%s'. with %.1f%% errors Drill Query Adjusted speed = %6.2f cpm Adjusted speed = %6.2f wpm Are you sure you want to exit this lesson? [Y/N] Press R to repeat or E to exit Press R to repeat, N for next exercise or E to exit Press RETURN or SPACE to continue, ESC to return to the menu Raw speed = %6.2f cpm Raw speed = %6.2f wpm Sorry, gtypist is configured to forbid skipping exercises. Tutorial You failed this test, so you need to go back to %s. Your error-rate is too high. You have to achieve %.1f%%. %s: argument format is incorrect %s: incorrect colour values %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value %s: invalid scoring mode'%' must immediately follow value'*' must immediately follow '%'ExamplesHappy Typing! Invalid value for "E:" (out of range)Loading the script...OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageUse arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go backWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0do not ask confirmation questionsdon't beep on errorsforbid the user to skip exerciseshighlight errors with reverse videoinstructions are limited to two linesinternal error in strdupinternal error: fseekinternal error: mallocinternal error: strdupinvalid function key numberinvalid key bindinglabel '%s' not foundlabel redefinitionlineline too long for screenmissing '%'missing ':'output version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-fileset initial display colours where availableset scoring mode (words per minute or characters per minute)set top banner colours (background, foreground, package and version respectively)start the lesson at label 'L'try to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: GNU Typist 2.7 Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 Last-Translator: David Garca-Abad Language-Team: Language: eu MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Adierazten ez bada, defektuzko 'script' artxiboa '%s/%s' da. %3.0f%% akatsekinErrutinaGaldeketa Abiadura doitua = %6.2f cpm Abiadura garbia = %6.2f wpm Ziur zaude ikasgai hau bukatu nahi izateaz? [Y/N] Sakatu 'R' errepikatzeko edo 'E' bukatzekoSakatu 'R' errepikatzeko, 'N' hurrengo ariketa egiteko edo 'E' irtetekoPulse 'RETURN' o 'SPACE' para continuar, 'ESC' para volver al menu 'RETURN' edo 'SPACE' sakatu jarraitzeko, 'ESC' menura bueltatzeko Abiadura gordina = %6.2f cpm Abiadura gordina = %6.2f wpm Sentitzen dut, baina 'gtypist' ikasgaiei jaramonik ez egitea ez onartzeko konfiguratuta dago.TutorialaProba honetan huts egin duzu; beraz, '%s' ra joan behar zara berriro.Zure akatsen tasa altuegia da. %.1f%% lortu behar duzu.%s: argumentuaren formatoa ez zuzena da %s: koloreen balore okerrak' %s: barne errorea: 'malloc' %s: kolorearen balore okerra %s: 'curs-flash' -en balore okerra %s: 'error-max' -en balore okerra %s: puntuaziorako modu ez zuzena'%' balorearen ostean etorri behar da'*' '% (r)en ostean etorri behar da'AdibideakTekleatze zoriontsua izan deizula! "E:" rako balio okerra (tartetik kanpo) 'script'-a kargatzen...AukerakR/N/EErrorei buruzko txostena 'bug-gtypist@gnu.org' helbidera bidaliAbiadura testa'script' artxiboak 'GTYPIST_PATH' aldagaian adierazitako bidean bilatuko dira. 'gtypist' -i 'bar.typ' ikasgaia direktorio ez estandar batean bila dezan esateko.Defektuz ingelesez dagoen ikasgaia exekutatzeko 'gtypist.typ'Ikasgaia erdaraz exekutatzeko'temp' direktorioan dagoen 'test.typ' artxiboko ikasgaia exekutatzeko, 'TEST1' etiketan hasiz, terminalaren kurtsorea erabiliz eta modu isiliean.Saiatu '%s --help' erabiliz informazio gehiago eskuratzeko. ErabileraErabili gezidun teklak mugitzeko, 'SPACE' edo 'RETURN ' selekzionatzeko eta 'ESCAPE' atzera bueltatzekoSimon Baldwinek idatziaY/N'gtypist' makinaz idazten ikasteko tutore bat da. Ikasgai desberdinez osatuta dago, teklatu eta hizkuntza desberdinetarako. Erabiltzaile batek ikasgai berriak gehitu ditzake erraztasunez. artxiboa ezin izan da aurkitu edo irekikurtsorearen kliskaldia P*.1 segundutan jartzen du (defektuz 10), baliozko baloreak 0 eta 512 bitartean daude; Ez da kontuan hartuko '-t' aukera zehazten badadatuek pantailaren luzera gainditzen dutedatu gutxiegigehienezko errorearen ehunekoa (defektuz 3.0); baliozko baloreak 0.0 eta 100.0 bitartean daudebaieztatzeko galderarik ez eginez egin soinurik erroreak izanez geroerabiltzaileari ariketei jaramonik ez egitea debekatukoloreak azpimarratu pantailak daukan kolorearen inbertsioarekininstrukzioak bi lerrotara mugatuta daudebarne errorea strdup-enbarne errorea: 'fseek'barne errorea 'malloc' -enbarne errorea: strdupfuntzio teklaren zenbaki okerrateklen asoziazio ez zuzena'%s' etiketa ez aurkituaetiketaren berdefinizioalerroalerroa luzeegia da pantailan sartzeko'%' falta da':' falta dabertsioari buruzko informazioa erakutsi eta irten'do_error_max_set' -en gainezkatzeamezu hau erakutsi'-s, --silent'-en eragin bera'script' artxiboakpantailaren hasierako koloreak ezartzen ditu posible deneanezarri puntuatzeko modua (hitzak minutuko edo karakterrak minutuko)goiko panelaren koloreak ezarri (hondoa, lehen planoa, paketea eta bertsioa hurrenez hurren)ikasgaia 'L' etiketan hasitestu prozesadorak imitatzen saiatzen daWPM kontadorea desaktibatu praktiketarakoagindu ezezagunaerabili terminalaren kurtsoreagtypist-2.9.5/po/fi.gmo0000644000175000017500000001725412372333404011705 00000000000000L|ep3q  2 +5L>< 5&:\" - !J l   %    "  6 LT 2  &x  P     r ( C VQ !  ! #%%Kdz  *#6Zw +Q)Gd"V8 "D g r}8*9F9= 7F%f0/2 -=0k< 98RY1_ DW:9)t.2aZj"Jhv|2,F#s( &"If   $4K*[X!-@/p(4E/C- ;I3 B>@)*+G8?=(&# H2 97 <!J.%KF,5$' L1DA0":6 If not supplied, script-file defaults to '%s/%s'. with %.1f%% errors Drill Query Adjusted speed = %6.2f wpm Are you sure you want to exit this lesson? [Y/N] Press R to repeat or E to exit Press R to repeat, N for next exercise or E to exit Press RETURN or SPACE to continue, ESC to return to the menu Raw speed = %6.2f wpm Sorry, gtypist is configured to forbid skipping exercises. Tutorial You failed this test, so you need to go back to %s. Your error-rate is too high. You have to achieve %.1f%%. %s: argument format is incorrect %s: incorrect colour values %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value '%' must immediately follow value'*' must immediately follow '%'ExamplesHappy Typing! Invalid value for "E:" (out of range)Loading the script...OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageUse arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go backWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0do not ask confirmation questionsdon't beep on errorsforbid the user to skip exerciseshighlight errors with reverse videoinstructions are limited to two linesinternal error in strdupinternal error: fseekinternal error: mallocinternal error: strdupinvalid function key numberinvalid key bindinglabel '%s' not foundlabel redefinitionlineline too long for screenmissing '%'missing ':'output version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-fileset initial display colours where availableset top banner colours (background, foreground, package and version respectively)start the lesson at label 'L'try to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: GNU Typist 2.6 Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 PO-Revision-Date: 2011-08-11 13:33+0200 Last-Translator: Kimmo Surakka Language-Team: Finnish Language: fi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jos skriptitiedostoa ei kerrota, oletusarvo on '%s/%s' virheitä yhteensä %.1f%%. Harjoitus Kysely Korjattu nopeus = %6.2f s/m Haluatko varmasti lopettaa tämän harjoituksen? [K/E] Paina T toistaaksesi tai L lopettaaksesi Paina T toistaaksesi, J jatkaaksesi tai L lopettaaksesi Paina Return tai välilyönti jatkaaksesi, Esc palataksesi valikkoon Raakanopeus = %6.2f s/m Valitan, asetuksissa kielletään harjoitusten ohittaminen. Opastus Et läpäissyt koetta, sinun on palattava kohtaan %s. Virhetiheytesi on liian suuri. Virheitä saa olla enintään %.1f%%. %s: argumentin muoto on virheellinen %s: virheellinen värimääritysparametrin arvo %s: sisäinen virhe: malloc %s: virheelinen värimääritysparametrin arvo %s: virheellinen kohdistimen vilkkumisjakson arvo %s: virheellinen arvo parametrilla error-max '%':n pitää olla välittömasti arvon jälkeenasteriskin ('*') pitää olla välittömästi '%':n jälkeenEsimerkkejäIloista kirjoittelua! Virheellinen arvo parametrille "E:" (alueen ulkopuolella)Lataa skriptitiedostoa...OptiotT/J/LVirheilmoitukset osoitteeseen bug-gtypist@gnu.orgNopeuskoe Skriptitiedostoja etsittäessä käytetään polkua $GTYPIST_PATH. Kehottaa gtypist-ohjelmaa etsimään oppituntia 'bar.typ' epästandardista hakemistostaSuorittaa englanninkielisen oletusoppitunnin 'gtypist.typ'Käynnistää espanjankielisen oppitunninSuorittaa oppitunnin tiedostosta 'test.typ' hakemistossa 'temp', alkaen tunnisteesta 'TEST1', käyttäen päätteen kohdistinta ja äänettömästiKirjoita '%s --help' saadaksesi lisätietoja. KäyttöLiiku nuolinäppäimillä, valitse välilyönillä tai Returnilla, palaa takaisin Esc:lläTekijä: Simon BaldwinK/E'gtypist' on konekirjoituksen harjoitteluohjelma, joka tukee useita eri näppäimistöasetteluita ja kieliä. Käyttäjän on helppo lisätä uusia harjoituksia. ei löydä tai voi avata tiedostoakohdistimen vilkkumisjakso kymmenesosasekunteina (oletusarvo 10); lailliset arvot ovat 0:n ja 512:n välissä; tällä ei ole merkitystä, jos on annettu optio -tkoko teksti ei mahdu ruudulleliian vähän dataavirheiden enimmäismäärän oletusarvo prosentteina (oletuksena 3.0); lailliset arvot ovat 0.0:n ja 100.0:n välissäälä kysy varmistuskysymyksiäkytke virhetilanteen merkkiääni pois käytöstäälä anna käyttäjän ohittaa harjoituksiakorosta virheet käänteisvärilläohjeita saa olla enintään kaksi riviäsisäinen virhe strdup:ssasisäinen virhe: fseeksisäinen virhe: mallocsisäinen virhe: strdupvirheellinen funktionäppäimen numerovirheellinen näppäinliitostunnistetta '%s' ei löydytunnisteen uudelleenmäärittelyrivirivi ei mahdu näytöllepuuttuva '%'puuttuva ':'näytä versiotiedot ja lopetaylivuoto funktiossa do_error_max_settulosta tämä viestisama kuin -s, --silentskriptitiedostoaseta näytön alkuvärit, jos mahdollistaaseta ylätunnisteen värit (tausta, edusta, pakkaus ja versio tässä järjestyksessä)aloita oppitunti tunnisteesta 'L'yritä jäljitellä tekstinkäsittelyohjelmiakytke sanoja minuutissa -laskuri pois käytöstä harjoituksissatuntematon komentokäytä päätteen laitteistokohdistintagtypist-2.9.5/po/quot.sed0000644000175000017500000000023112231002500012233 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g gtypist-2.9.5/po/fr.po0000644000175000017500000003037712372332140011547 00000000000000# translation of GNU Typist. # Copyright (C) 2001 Free Software Foundation, Inc. # <>, 2001. # msgid "" msgstr "" "Project-Id-Version: GNU Typist 2.6\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: 2011-08-14 20:43+0200\n" "Last-Translator: Michael Opdenacker \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/gtypist.c:295 msgid "internal error in strdup" msgstr "erreur interne dans l'appel de strdup" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "touche de raccourci incorrecte:" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "numéro de touche de fonction incorrect" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "données trop longues pour l'affichage" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "les instructions sont limitées à deux lignes" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "erreur interne: fseek" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "'* doit suivre immédiatement '%'" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "'%' manquant" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "'%' doit suivre immédiatement la valeur donnée" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "dépassement dans do_error_max_set" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "Valeur incorrecte pour \"E:\" (hors limites)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "label '%s' introuvable" #: src/gtypist.c:1611 msgid "unknown command" msgstr "commande inconnue" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "" "taux maximal d'erreur par défaut (3,0 par défaut). Les valeurs autorisées " "vont de 0 à 100." #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "désactiver le compteur MPM dans les exercices" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "utiliser le curseur hardware du terminal" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "Période de clignotement du curseur P*1 sec (10 par défaut). Les valeurs " "autorisées vont de 0 à 512. Cette option est ignorée si -t est spécifié." #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "définit les couleurs d'affichage initiales si possible" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "Ne pas sonner en cas d'erreurs" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "identique à -s, --silent" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "commencer la leçon au label `L'" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "essaie d'imiter un traitement de texte" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "interdit à l'utilisateur de sauter une leçon" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "Faire ressortir les erreurs en inverse vidéo" #: src/gtypist.c:1743 msgid "print this message" msgstr "affiche ce message" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "affiche l'information de version" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "Ne pas demander de confirmations" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "" "Définit les couleurs du bandeau supérieur (respectivement arrière-plan, " "avant-plan, paquetage et version)" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" "`gtypist' est un programme pour apprendre à taper au clavier dans " "différentes langues et pour différents claviers. Il est facile d'écrire de " "nouvelles leçons.\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "Utilisation" #: src/gtypist.c:1756 #, fuzzy msgid "options" msgstr "Options" #: src/gtypist.c:1756 msgid "script-file" msgstr "fichier d'exercice" #: src/gtypist.c:1757 msgid "Options" msgstr "Options" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "S'il n'est pas précisé, script-file est '%s/%s' par défaut.\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "Les fichiers d'exercices sont cherchés dans $GTYPIST_PATH\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "Exemples" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "Pour démarrer la leçon en anglais `gtypist.typ'" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "Pour démarrer la leçon en Espagnol" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "" "Pour indiquer à gtypist de rechercher l'exercice `toto.typ' dans un " "répertoire spécial" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "Pour démarrer la leçon du fichier `test.typ' du répertoire `temp', en " "commençant au label `TEST1', en utilisant le curseur du terminal, en mode " "silencieux" #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "Contactez bug-gtypist@gnu.org pour signaler tout problème." #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: valeur incorrecte pour error-max\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: valeur incorrecte pour curs-flash\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: valeur incorrecte pour colours\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "%s: format d'argument incorrect\n" #: src/gtypist.c:1876 #, c-format msgid "%s: incorrect colour values\n" msgstr "%s: valeurs incorrectes pour l'argument `-c/--colours'\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, fuzzy, c-format msgid "%s: invalid scoring mode" msgstr "%s: valeur incorrecte pour colours\n" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: erreur interne: malloc\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "Écrit par Simon Baldwin" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "Essayez '%s --help' pour plus d'information\n" #: src/gtypist.c:2023 #, fuzzy msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008 GNU Typist Development Team.\n" "Ce programme est fourni SANS LA MOINDRE GARANTIE.\n" "Pour plus de détails, voir le fichier `COPYING' fourni avec le code source.\n" "Ce programme est un logiciel libre, et vous êtes invités\n" "à le redistribuer sous certaines conditions. Une fois de plus,\n" "référez-vous au fichier `COPYING' pour plus de détails.\n" "Ce programme est distribué sous la licence\n" "GNU General Public License." #: src/gtypist.c:2031 msgid " Tutorial " msgstr "Travaux pratiques" #: src/gtypist.c:2033 msgid " Query " msgstr "Question" #: src/gtypist.c:2035 msgid " Drill " msgstr "Exercice" #: src/gtypist.c:2037 msgid "Speed test" msgstr "Test de vitesse" #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr "" "Appuyez sur [ENTREE] ou [ESPACE] pour continuer, ou [ECHAP] pour revenir au " "menu" #: src/gtypist.c:2042 #, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr "" "Votre taux d'erreur est trop élevé. Vous devez atteindre moins de %.1f%%." #: src/gtypist.c:2046 #, c-format msgid " You failed this test, so you need to go back to %s. " msgstr "Vous avez échoué à cet exercice. Vous devez donc retourner à %s." #: src/gtypist.c:2050 msgid " Press R to repeat, N for next exercise or E to exit " msgstr "" "Appuyez sur R pour recommencer, S pour l'exercice suivant ou Q pour sortir" #: src/gtypist.c:2054 msgid " Press R to repeat or E to exit " msgstr "Tapez R pour recommencer ou Q pour quitter." #: src/gtypist.c:2057 msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr "Voulez-vous vraiment quitter cette leçon? [O/N]" #: src/gtypist.c:2061 msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr "Désolé, gtypist est configuré pour interdire de sauter un exercice." #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr " Vitesse brute = %6.2f mpm " #: src/gtypist.c:2068 #, fuzzy, c-format msgid " Raw speed = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr " Vitesse corrigée = %6.2f mpm " #: src/gtypist.c:2075 #, fuzzy, c-format msgid " Adjusted speed = %6.2f cpm " msgstr " Adjusted speed = %6.2f cpm " #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr " avec %.1f%% d'erreurs " #: src/gtypist.c:2085 #, fuzzy, c-format msgid " Personal best = %6.2f wpm " msgstr " Vitesse brute = %6.2f mpm " #: src/gtypist.c:2087 #, fuzzy, c-format msgid " Personal best = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2092 #, fuzzy msgid " new personal best " msgstr " avec %.1f%% d'erreurs " #: src/gtypist.c:2097 msgid "Y/N" msgstr "O/N" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "R/S/Q" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "fichier introuvable ou impossible à ouvrir" #: src/gtypist.c:2185 #, c-format msgid "%s: %s environment variable not set\n" msgstr "" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "Chargement du script..." #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "erreur interne: malloc" #: src/gtypist.c:2362 #, fuzzy msgid " internal error: fopen" msgstr "erreur interne: fseek" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "" "Utilisez les touches de flèche pour vous déplacer, [ESPACE] ou [RETOUR] pour " "sélectionner, et [ECHAP] pour revenir en arrière" #: src/error.c:51 msgid "line" msgstr "ligne" #: src/script.c:56 msgid "internal error: strdup" msgstr "erreur interne: strdup" #: src/script.c:158 msgid "label contains space" msgstr "" #: src/script.c:184 msgid "label redefinition" msgstr "redéfinition de label" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "" #: src/script.c:230 msgid "data shortage" msgstr "données manquantes" #: src/script.c:232 msgid "missing ':'" msgstr "':' manquant" #: src/script.c:238 msgid "line too long for screen" msgstr "ligne trop longue pour l'affichage" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" "Bonne pratique!\n" "\n" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "" gtypist-2.9.5/po/gtypist.pot0000644000175000017500000002051112372332140013014 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Simon Baldwin # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: gtypist 2.9.5\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: src/gtypist.c:295 msgid "internal error in strdup" msgstr "" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "" #: src/gtypist.c:1611 msgid "unknown command" msgstr "" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "" #: src/gtypist.c:1743 msgid "print this message" msgstr "" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" #: src/gtypist.c:1756 msgid "Usage" msgstr "" #: src/gtypist.c:1756 msgid "options" msgstr "" #: src/gtypist.c:1756 msgid "script-file" msgstr "" #: src/gtypist.c:1757 msgid "Options" msgstr "" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" #: src/gtypist.c:1768 msgid "Examples" msgstr "" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "" #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "" #: src/gtypist.c:1876 #, c-format msgid "%s: incorrect colour values\n" msgstr "" #: src/gtypist.c:1885 src/gtypist.c:1898 #, c-format msgid "%s: invalid scoring mode" msgstr "" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "" #: src/gtypist.c:2023 msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" #: src/gtypist.c:2031 msgid " Tutorial " msgstr "" #: src/gtypist.c:2033 msgid " Query " msgstr "" #: src/gtypist.c:2035 msgid " Drill " msgstr "" #: src/gtypist.c:2037 msgid "Speed test" msgstr "" #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr "" #: src/gtypist.c:2042 #, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr "" #: src/gtypist.c:2046 #, c-format msgid " You failed this test, so you need to go back to %s. " msgstr "" #: src/gtypist.c:2050 msgid " Press R to repeat, N for next exercise or E to exit " msgstr "" #: src/gtypist.c:2054 msgid " Press R to repeat or E to exit " msgstr "" #: src/gtypist.c:2057 msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr "" #: src/gtypist.c:2061 msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr "" #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr "" #: src/gtypist.c:2068 #, c-format msgid " Raw speed = %6.2f cpm " msgstr "" #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr "" #: src/gtypist.c:2075 #, c-format msgid " Adjusted speed = %6.2f cpm " msgstr "" #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr "" #: src/gtypist.c:2085 #, c-format msgid " Personal best = %6.2f wpm " msgstr "" #: src/gtypist.c:2087 #, c-format msgid " Personal best = %6.2f cpm " msgstr "" #: src/gtypist.c:2092 msgid " new personal best " msgstr "" #: src/gtypist.c:2097 msgid "Y/N" msgstr "" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "" #: src/gtypist.c:2185 #, c-format msgid "%s: %s environment variable not set\n" msgstr "" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "" #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "" #: src/gtypist.c:2362 msgid " internal error: fopen" msgstr "" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "" #: src/error.c:51 msgid "line" msgstr "" #: src/script.c:56 msgid "internal error: strdup" msgstr "" #: src/script.c:158 msgid "label contains space" msgstr "" #: src/script.c:184 msgid "label redefinition" msgstr "" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "" #: src/script.c:230 msgid "data shortage" msgstr "" #: src/script.c:232 msgid "missing ':'" msgstr "" #: src/script.c:238 msgid "line too long for screen" msgstr "" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "" gtypist-2.9.5/po/ru.po0000644000175000017500000003601612372332140011562 00000000000000# Russian localization for GNU Typist 2.7. # Copyright (C) 2003 Dmitry Rutsky # This file is distributed under the same license as the GNU Typist. msgid "" msgstr "" "Project-Id-Version: GNU Typist 2.7\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: 2011-08-11 13:44+0200\n" "Last-Translator: Dmitry Rutsky \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/gtypist.c:295 msgid "internal error in strdup" msgstr "внутренняя ошибка в функции strdup" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "неправильное назначение клавиши" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "неправильный номер функциональной клавиши" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "данные выходят за пределы экрана" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "указания к уроку ограничены двумя строками" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "внутренняя ошибка в функции fseek" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "звёздочка `*' должна немедленно следовать за процентом `%'" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "отсутствует процент `%'" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "процент `%' должен сразу следовать за значением" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "переполнение в функции do_error_max_set" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "Неправильная величина для команды \"E:\" (вне допустимого диапазона)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "метка `%s' не найдена" #: src/gtypist.c:1611 msgid "unknown command" msgstr "неизвестная команда" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "" "значение по умолчанию для максимального допустимого процента ошибок (3.0 по " "умолчанию); допустимы значения от 0.0 до 100.0" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "выключить измерение WPM в упражнениях" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "использовать \"физический\" курсор терминала" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "период мерцания курсора в десятых секунды (10 по умолчанию); допустимы " "значения между 0 и 512; аргумент игнорируется, если указан параметр -t" #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "установить цвета терминала, если доступно" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "не пищать при ошибках" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "то же самое, что и -s, --silent" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "начать урок с метки 'L'" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "попробовать подражать текстовым редакторам" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "запретить пользователю пропускать упражнения" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "подсвечивать ошибки инвертированным цветом" #: src/gtypist.c:1743 msgid "print this message" msgstr "вывести это сообщение" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "вывести информацию о выпуске и закончить выполнение" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "не спрашивать вопросов подтверждения" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "" "установить цвета верхней строчки (задний фон, передний фон, название пакета " "и номер версии соответственно" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" "`gtypist' является программой обучения слепой печати с несколькими уроками " "для различных клавиатур и языков. Новые уроки могут быть с лёгкостью " "написаны пользователем.\n" "\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "Использование" #: src/gtypist.c:1756 #, fuzzy msgid "options" msgstr "Параметры" #: src/gtypist.c:1756 msgid "script-file" msgstr "файл-сценария" #: src/gtypist.c:1757 msgid "Options" msgstr "Параметры" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "Если не предоставлено, файл-сценария ставится по умолчанию как `%s/%s'.\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" "В путях из переменной окружения $GTYPIST_PATH ведётся поиск файлов " "сценариев.\n" "\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "Примеры" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "Для запуска урока по умолчанию на английском `gtypist.typ'" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "Чтобы запустить урок на испанском" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "Чтобы заставить gtypist найти урок `bar.typ' в нестандартном каталоге" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "Чтобы запустить урок в файле `test.typ' каталога `temp', начиная с метки " "`TEST1', используя курсор терминала, и не пищать" #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "" "Сообщайте об ошибках по адресу bug-gtypist@gnu.org (лучше на английском " "языке)" #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: неправильная максимально допустимая величина ошибки\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: неправильная величина периода мерцания курсора\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: неправильная величина цвета\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "%s: формат параметра неверен\n" #: src/gtypist.c:1876 #, c-format msgid "%s: incorrect colour values\n" msgstr "%s: неверные величины цветов\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, fuzzy, c-format msgid "%s: invalid scoring mode" msgstr "%s: неправильная величина цвета\n" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: внутренняя ошибка: malloc\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "Написано by Simon Baldwin" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "Попробуйте `%s --help' для более подробной информации.\n" #: src/gtypist.c:2023 #, fuzzy msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008 GNU Typist Development Team.\n" "На эту программу не предоставляется СОВЕРШЕННО НИКАКИХ ГАРАНТИЙ; за\n" "подробностями смотрите файл `COPYING' предоставленный вместе с исходным " "кодом.\n" "Это свободное программное обеспечение, и приветствуется его распространение\n" "на некоторых условиях; снова, смотрите файл 'COPYING' для подробностей.\n" "Эта программа выпущена на условиях общей общественной лицензии GNU." #: src/gtypist.c:2031 msgid " Tutorial " msgstr " Указания " #: src/gtypist.c:2033 msgid " Query " msgstr " Вопрос " #: src/gtypist.c:2035 msgid " Drill " msgstr "Упражнение" #: src/gtypist.c:2037 msgid "Speed test" msgstr " Тест " #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr " Нажмите ВВОД или ПРОБЕЛ чтобы продолжить, ESC для возврата в меню " #: src/gtypist.c:2042 #, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr " У вас слишком много ошибок. Нужно добиться %.1f%%. " #: src/gtypist.c:2046 #, c-format msgid " You failed this test, so you need to go back to %s. " msgstr " Вы завалили этот тест, так что вам нужно обратно к %s. " #: src/gtypist.c:2050 msgid " Press R to repeat, N for next exercise or E to exit " msgstr "" " Нажмите `П' для повторения, `С' для следующего упражнения, или `В' для " "выхода" #: src/gtypist.c:2054 msgid " Press R to repeat or E to exit " msgstr " Нажмите `П' для повторения, или `В' для выхода " #: src/gtypist.c:2057 msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr " Вы уверены, что хотите покинуть этот урок? [Д/Н] " #: src/gtypist.c:2061 msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr " Извините, gtypist настроен на запрет пропуска упражнений. " #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr " Средняя скорость %6.2f WPM " #: src/gtypist.c:2068 #, fuzzy, c-format msgid " Raw speed = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr " С учётом ошибок: %6.2f WPM " #: src/gtypist.c:2075 #, fuzzy, c-format msgid " Adjusted speed = %6.2f cpm " msgstr " Adjusted speed = %6.2f cpm " #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr " было %.1f%% ошибок " #: src/gtypist.c:2085 #, fuzzy, c-format msgid " Personal best = %6.2f wpm " msgstr " Средняя скорость %6.2f WPM " #: src/gtypist.c:2087 #, fuzzy, c-format msgid " Personal best = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2092 #, fuzzy msgid " new personal best " msgstr " было %.1f%% ошибок " #: src/gtypist.c:2097 msgid "Y/N" msgstr "Д/Н" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "П/С/В" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "не удаётся найти или открыть файл" #: src/gtypist.c:2185 #, c-format msgid "%s: %s environment variable not set\n" msgstr "" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "Загружаем сценарий..." #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "внутренняя ошибка в функции malloc" #: src/gtypist.c:2362 #, fuzzy msgid " internal error: fopen" msgstr "внутренняя ошибка в функции fseek" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "" " Клавиши со стрелками для перемещения, ПРОБЕЛ для выбора и ESCAPE для " "возврата" #: src/error.c:51 msgid "line" msgstr "строка" #: src/script.c:56 msgid "internal error: strdup" msgstr "внутренняя ошибка: strdup" #: src/script.c:158 msgid "label contains space" msgstr "" #: src/script.c:184 msgid "label redefinition" msgstr "переопределение метки" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "" #: src/script.c:230 msgid "data shortage" msgstr "нехватка данных" #: src/script.c:232 msgid "missing ':'" msgstr "пропущено двоеточие ':'" #: src/script.c:238 msgid "line too long for screen" msgstr "строка слишком длинна для экрана" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" "Счастливой Печати!\n" "\n" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "" gtypist-2.9.5/po/Makefile.in.in0000644000175000017500000004040712231002500013231 00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.18.2 GETTEXT_MACRO_VERSION = 0.18 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: all-@USE_NLS@ all-yes: stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. CHECK_MACRO_VERSION = \ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot @$(CHECK_MACRO_VERSION) test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. # The determination of whether the package xyz is a GNU one is based on the # heuristic whether some file in the top level directory mentions "GNU xyz". # If GNU 'find' is available, we avoid grepping through monster files. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \ else \ LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ fi; \ } | grep -v 'libtool:' >/dev/null; then \ package_gnu='GNU '; \ else \ package_gnu=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_gnu}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) \ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ esac; \ }; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(MAKE) update-po @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ esac; \ }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gtypist-2.9.5/po/nl.gmo0000644000175000017500000001262012372333404011710 00000000000000:O3- M Xc !<\%e" 6L2K~&"IOhlr  V  ! %8 ^ t        # = Z m     "  ?    1 R`z #  **U\"b <T8%!^*/Zb!~7X>)S(}/5P`"p$&,S*e'(79:/)5 14#32 $!+"6,8 .-0 *&% If not supplied, script-file defaults to '%s/%s'. with %.1f%% errors Drill Query Adjusted speed = %6.2f wpm Raw speed = %6.2f wpm Tutorial %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value '%' must immediately follow value'*' must immediately follow '%'ExamplesInvalid value for "E:" (out of range)OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0don't beep on errorsforbid the user to skip exercisesinstructions are limited to two linesinternal error: fseekinternal error: mallocinvalid function key numberinvalid key bindinglabel '%s' not foundlabel redefinitionlineline too long for screenmissing '%'missing ':'output version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-filestart the lesson at label 'L'try to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 PO-Revision-Date: 2002-11-09 15:49+0100 Last-Translator: Joost Cogels Language-Team: Dutch (Nederlands) Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: KBabel 0.9.6 Indien niet opgegeven, gebruikt het script standaard '%s/%s'. met %.1f%% fouten Oefening Vraag Aangepaste snelheid = %6.2f wpm Ruwe snelheid = %6.2f wpm Handleiding %s: interne fout: malloc %s: ongeldige kleuren waarde %s: ongeldige curs-flash waarde %s: ongeldige error-max waarde '%' moet waarde onmiddellijk volgen'*' moet '%' onmiddellijk volgenVoorbeeldenOngeldige waarde voor "E:" (buiten bereik)OptiesR/N/EMeldt bugs aan bug-gtypist@gnu.orgSnelheidstestHet pad $GTYPIST_PATH wordt doorzocht op script-bestanden. Om gtypist te vertellen naar les 'bar.typ' te zoeken in een niet-standaard directoryOm de standaardlessen in Engels te draaien 'gtypist.typ'Om de lessen in Spaans te draaienOm de les in het bestand 'test.typ' uit directory 'temp' te draaien, beginnende bij label 'TEST1', met gebruikmaking van de cursor van de terminal, en draai op de achtergrondProbeer '%s --help' voor meer informatie. GebruikGeschreven door Simon BaldwinJ/N'gtypist' is een typcursus met lessen voor diverse toetsenborden en talen. Nieuwe lessen kunnen eenvoudig door de gebruiker geschreven worden. kan bestand niet vinden of openentijd dat de cursor oplicht P*.1 sec (standaard 10); geldige waarde tussen 0 en 512; dit wordt genegeerd indien -t is opgegevendata overschreidt vensterlengtegegevenstekortstandaard maximum percentage fouten (standaard 3.0); geldige waarden tussen 0.0 en 100.0piep niet bij foutenverbied de gebruiker lessen over te slaaninstructies zijn beperkt tot twee regelsinterne fout: fseekinterne fout: mallocongeldig functietoets nummerongeldige toetsbindinglabel '%s' niet gevondenlabel herdefinitieregelregel te lang voor vensterontbrekende '%'ontbrekende ':'geef versie informatie en sluit afoverflow in do_error_max_setprint dit berichthetzelfde als -s, --silentscript-bestandstart de les bij label 'L'probeer woord processoren na te doenschakel de WPM timer uit in oefeningenonbekend commandogebruik de hardware cursor van de terminalgtypist-2.9.5/po/zh_TW.po0000644000175000017500000002631012372332140012163 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Simon Baldwin # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: GNU Typist 2.6\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: 2011-08-11 13:50+0200\n" "Last-Translator: OLS3 \n" "Language-Team: OLS3 \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/gtypist.c:295 #, fuzzy msgid "internal error in strdup" msgstr "內部錯誤: fseek" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "無效的按鍵組合" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "無效的功能鍵數字" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "資料超出螢幕長度" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "指令只限於二列長" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "內部錯誤: fseek" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "'*' 必須立即接著 '%'" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "缺少了 '%'" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "'%' 必須立即接著值" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "溢位於 do_error_max_set" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "無效的值 於 \"E:\" (超出範圍)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "標示 '%s' 沒有找到" #: src/gtypist.c:1611 msgid "unknown command" msgstr "未知的命令" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "預設最大的錯誤百分比 (預設 3.0); 有效值介於 9.0 和 100.0" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "關閉 WPM 計時於 drills" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "使用終端硬體游標" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "游標閃爍周期 P*1 秒 (預設 10); 有效值介於 0 和 512; 若 -t 有設定, 這將被忽略" #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "設定可用的初始化顯示顏色" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "錯誤發生時不叫響" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "和 -s, --silent 相同" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "由標示 'L' 的課程開始" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "嘗試模擬字節處理" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "禁止使用者跳過練習" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "" #: src/gtypist.c:1743 msgid "print this message" msgstr "顯示這個訊息" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "輸出版本資訊然後離開" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" "'gtypist' 是一個打字教學軟體,支援不同的鍵盤和語言。新的課程可以由使用者很容" "易的設計出來。\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "使用法" #: src/gtypist.c:1756 #, fuzzy msgid "options" msgstr "選項" #: src/gtypist.c:1756 msgid "script-file" msgstr "指令-檔" #: src/gtypist.c:1757 msgid "Options" msgstr "選項" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "若沒有提供,指令檔預設為 '%s/%s'.\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" "路徑 $GTYPIST_PATH 為此指令檔被搜尋.\n" "\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "範例" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "打開預設課程為英語 'gtypist.typ'" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "打開 spanish 課程" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "在一個非標準目錄中,命令 gtypist 去尋找 `bar.typ' 課程" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "執行 'temp' 目錄中的 'test.typ' 的課程, 由 標示 `TEST1' 開始, 使用終端游標, " "而且安靜地執行" #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "臭虫報告給 bug-gtypist@gnu.org " #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: 無效的 error-max 值\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: 無效的 curs-flash 值\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: 無法的 colours 值\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "" #: src/gtypist.c:1876 #, fuzzy, c-format msgid "%s: incorrect colour values\n" msgstr "%s: 無法的 colours 值\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, fuzzy, c-format msgid "%s: invalid scoring mode" msgstr "%s: 無法的 colours 值\n" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: 內部錯誤: malloc\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "作者 Simon Baldwin" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "試 '%s --help' 可得到較多的資訊.\n" #: src/gtypist.c:2023 #, fuzzy msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" "版權 (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "版權 (C) 2003, 2004, 2008 GNU Typist Development Team.\n" "這個程式沒有附帶任何保證; 欲知詳情\n" "請參考原始碼中的 'COPYING' 這個檔案.\n" "本程式為自由軟體, 在某些情況下您可以散播它\n" "再次強調, 請您參考 'COPYING' 以得到詳細的資訊.\n" "這個程式採用 GNU 一般公共版權執照.(GPL)" #: src/gtypist.c:2031 msgid " Tutorial " msgstr " 教學 " #: src/gtypist.c:2033 msgid " Query " msgstr " 查詢 " #: src/gtypist.c:2035 msgid " Drill " msgstr " 練習 " #: src/gtypist.c:2037 msgid "Speed test" msgstr "速度測驗" #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr "" #: src/gtypist.c:2042 #, fuzzy, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr "您的錯誤率太高了. 您已達 %.1f%%." #: src/gtypist.c:2046 #, fuzzy, c-format msgid " You failed this test, so you need to go back to %s. " msgstr "您在這個測驗中沒有過關, 所以您必須回到 %s" #: src/gtypist.c:2050 #, fuzzy msgid " Press R to repeat, N for next exercise or E to exit " msgstr "按 R 重來一次, 按 N 進入下一個練習 或按 E 可離開" #: src/gtypist.c:2054 #, fuzzy msgid " Press R to repeat or E to exit " msgstr "按 R 重來一次 或 按 E 可離開" #: src/gtypist.c:2057 #, fuzzy msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr "您確定要離開這個課程嗎? [Y/N]" #: src/gtypist.c:2061 #, fuzzy msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr "抱歉, gtypist 目前設定禁止跳過練習" #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr " 原始速度 = %6.2f wpm " #: src/gtypist.c:2068 #, fuzzy, c-format msgid " Raw speed = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr " 已調整速度 = %6.2f wpm " #: src/gtypist.c:2075 #, fuzzy, c-format msgid " Adjusted speed = %6.2f cpm " msgstr " Adjusted speed = %6.2f cpm " #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr " 有 %.1f%% 錯誤 " #: src/gtypist.c:2085 #, fuzzy, c-format msgid " Personal best = %6.2f wpm " msgstr " 原始速度 = %6.2f wpm " #: src/gtypist.c:2087 #, fuzzy, c-format msgid " Personal best = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2092 #, fuzzy msgid " new personal best " msgstr " 有 %.1f%% 錯誤 " #: src/gtypist.c:2097 msgid "Y/N" msgstr "Y/N" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "R/N/E" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "找不到 或 無法開啟 檔案" #: src/gtypist.c:2185 #, c-format msgid "%s: %s environment variable not set\n" msgstr "" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "" #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "內部錯誤: malloc" #: src/gtypist.c:2362 #, fuzzy msgid " internal error: fopen" msgstr "內部錯誤: fseek" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "" #: src/error.c:51 msgid "line" msgstr "列" #: src/script.c:56 #, fuzzy msgid "internal error: strdup" msgstr "內部錯誤: fseek" #: src/script.c:158 msgid "label contains space" msgstr "" #: src/script.c:184 msgid "label redefinition" msgstr "標示 重定義" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "" #: src/script.c:230 msgid "data shortage" msgstr "資料 不足" #: src/script.c:232 msgid "missing ':'" msgstr "缺少 ':'" #: src/script.c:238 msgid "line too long for screen" msgstr "列太長超出螢幕" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "" #~ msgid " Press Return to continue... " #~ msgstr " 按 Enter 鍵繼續... " gtypist-2.9.5/po/es.po0000644000175000017500000003052712372332140011544 00000000000000# ESPAÑOL # Vladimir Támara Patiño , 2000. # Copyright (C) 2001-2003 José Pelegrín # msgid "" msgstr "" "Project-Id-Version: GNU Typist 2.7\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: 2011-08-14 20:42+0200\n" "Last-Translator: José Pelegrín \n" "Language-Team: Spanish/Spain \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/gtypist.c:295 msgid "internal error in strdup" msgstr "error interno en strdup" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "asociación incorrecta de teclas" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "número incorrecto de tecla de función" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "los datos sobrepasan la longitud de la pantalla" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "las instrucciones están limitadas a dos líneas" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "error interno: 'fseek'" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "'*' debe seguir a '%'" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "falta '%'" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "'%' debe seguir al valor" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "desbordamiento en 'do_error_max_set'" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "Valor incorrecto para \"E:\" (fuera de rango)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "etiqueta '%s' no encontrada" #: src/gtypist.c:1611 msgid "unknown command" msgstr "comando desconocido" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "" "porcentaje de error máximo (por defecto 3.0); los valores válidos están " "entre 0.0 y 100.0" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "desactivar el contador PPM para las prácticas" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "usar el cursor de la terminal" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "pone el periodo de parpadeo del cursor en P*.1 segundos (por defecto 10), " "los valores válidos están entre 0 y 512; Se ignorará si se especifica con la " "opción '-t'" #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "establece los colores iniciales de la pantalla cuando esto es posible" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "no producir sonidos en caso de error" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "el mismo efecto que '-s, --silent'" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "comenzar la lección en la etiqueta 'L'" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "intenta imitar a los procesadores de texto" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "prohibir al usuario saltarse los ejercicios" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "resaltar los errores con la inversión del color de la pantalla" #: src/gtypist.c:1743 msgid "print this message" msgstr "muestra este mensaje" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "muestra información sobre la versión y termina" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "no pedir confirmación a las preguntas" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "" "modifica el valor de los colores del panel de mensajes superior (fondo, " "primer plano, paquete y versión respectivamente)." #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" "'gtypist' es un tutor para aprender a teclear. Está compuesto de diversas " "lecciones para diferentes teclados e idiomas. Un usuario puede añadir nuevas " "lecciones con facilidad.\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "Uso" #: src/gtypist.c:1756 #, fuzzy msgid "options" msgstr "Opciones" #: src/gtypist.c:1756 msgid "script-file" msgstr "ficheros de 'script'" #: src/gtypist.c:1757 msgid "Options" msgstr "Opciones" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "Si no se da, el fichero 'script' por defecto es '%s/%s'.\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" "Se buscarán los archivos 'script' en la ruta descrita por la variable " "'GTYPIST_PATH'.\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "Ejemplos" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "Para ejecutar la lección en inglés que está por defecto 'gtypist.typ'" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "Para ejecutar la lección en español" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "" "Para indicarle a 'gtypist' que busque la lección 'bar.typ' en un directorio " "no estándar" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "Para ejecutar la lección del archivo 'test.typ' del directorio 'temp', " "comenzando en la etiqueta 'TEST1', usando el cursor de la terminal y en modo " "silencioso" #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "Informe de errores a la dirección 'bug-gtypist@gnu.org'" #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: valor incorrecto de 'error-max'\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: valor incorrecto de 'curs-flash'\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: valor incorrecto de 'colours'\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "%s: el formato del argumento es incorrecto\n" #: src/gtypist.c:1876 #, c-format msgid "%s: incorrect colour values\n" msgstr "%s: valor incorrecto de 'colour'\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, fuzzy, c-format msgid "%s: invalid scoring mode" msgstr "%s: valor incorrecto de 'colours'\n" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: error interno: 'malloc'\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "Escrito por Simon Baldwin" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "Pruebe con '%s --help' para obtener más información.\n" #: src/gtypist.c:2023 #, fuzzy msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008 GNU Typist Development Team.\n" "Este programa viene SIN GARANTIA ALGUNA; si desea ver detalles\n" "por favor lea el archivo 'COPYING' suministrado con el código fuente.\n" "Esto es software libre, y usted está invitado a redistribuirlo\n" "bajo ciertas condiciones; nuevamente, vea los detalles en 'COPYING'.\n" "Este programa se ha liberado bajo la GNU General Public License." #: src/gtypist.c:2031 msgid " Tutorial " msgstr " Tutorial " #: src/gtypist.c:2033 msgid " Query " msgstr " Consulta " #: src/gtypist.c:2035 msgid " Drill " msgstr " Rutina " #: src/gtypist.c:2037 msgid "Speed test" msgstr "Test de velocidad" #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr " Pulse 'RETURN' o 'SPACE' para continuar, 'ESC' para volver al menu " #: src/gtypist.c:2042 #, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr " Tu tasa de error es demasiado alta. Debes obtener %.1f%%. " #: src/gtypist.c:2046 #, c-format msgid " You failed this test, so you need to go back to %s. " msgstr " Has fallado esta prueba, por lo que debes ir de nuevo a '%s'. " #: src/gtypist.c:2050 msgid " Press R to repeat, N for next exercise or E to exit " msgstr "" " Pulsa 'R' para repetir, 'N' para el siguiente ejercicio o 'E' para salir " #: src/gtypist.c:2054 msgid " Press R to repeat or E to exit " msgstr " Pulsa 'R' para repetir o 'E' para finalizar " #: src/gtypist.c:2057 msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr " ¿Estás seguro de querer concluir esta lección? [Y/N] " #: src/gtypist.c:2061 msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr "" " Lo siento, 'gtypist' está configurado para no permitir saltarse las " "lecciones. " #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr " Velocidad en bruto = %6.2f wpm " #: src/gtypist.c:2068 #, fuzzy, c-format msgid " Raw speed = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr " Velocidad neta = %6.2f wpm " #: src/gtypist.c:2075 #, fuzzy, c-format msgid " Adjusted speed = %6.2f cpm " msgstr " Adjusted speed = %6.2f cpm " #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr " con %3.0f%% errores " #: src/gtypist.c:2085 #, fuzzy, c-format msgid " Personal best = %6.2f wpm " msgstr " Velocidad en bruto = %6.2f wpm " #: src/gtypist.c:2087 #, fuzzy, c-format msgid " Personal best = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2092 #, fuzzy msgid " new personal best " msgstr " con %3.0f%% errores " #: src/gtypist.c:2097 msgid "Y/N" msgstr "Y/N" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "R/N/E" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "el archivo no se ha encontrado o no ha podido ser abierto" #: src/gtypist.c:2185 #, c-format msgid "%s: %s environment variable not set\n" msgstr "" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "Cargando el 'script'..." #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "error interno: 'malloc'" #: src/gtypist.c:2362 #, fuzzy msgid " internal error: fopen" msgstr "error interno: 'fseek'" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "" "Usa las teclas de flecha para moverte, 'SPACE' o 'RETURN' para seleccionar y " "'ESCAPE' para volver atrás" #: src/error.c:51 msgid "line" msgstr "línea" #: src/script.c:56 msgid "internal error: strdup" msgstr "error interno: strdup" #: src/script.c:158 msgid "label contains space" msgstr "" #: src/script.c:184 msgid "label redefinition" msgstr "redefinición de etiqueta" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "" #: src/script.c:230 msgid "data shortage" msgstr "datos insuficientes" #: src/script.c:232 msgid "missing ':'" msgstr "falta ':'" #: src/script.c:238 msgid "line too long for screen" msgstr "la línea es demasiado larga para la pantalla" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" "¡Feliz Tecleo!\n" "\n" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "" gtypist-2.9.5/po/ChangeLog0000644000175000017500000001342012362706765012361 000000000000002014-07-20 Tim Marston * zh_CN.po: updated, thanks to Wei Mingzhi 2013-06-04 Tim Marston * Makevars: updated for gettext 0.18.2 2011-11-04 Jakub Bogusz * pl.po: updated for 2.9 2011-10-28 Gökçen Eraslan * tr.po: new Turkish translation 2011-09-18 Jakub Bogusz * pl.po: new Polish translation 2011-08-11 Felix Natter * de.po: finish German translation * *.po: update from potfile, convert to utf-8 (except for eu.po) 2009-02-03 Paul Goins * eu.po: New translation for Basque, provided by David Garciabad. 2008-05-17 Paul Goins * *.po: I decided to revert my CPM-mode translations. It's probably better to remain untranslated rather than have a mistake somewhere. 2008-05-06 Paul Goins * *.po: A few new strings have been added, in regards to WPM/CPM scoring mode selection. I've attempted partial translations of some of the strings, while others are completely untranslated. Please, if anyone can verify/finish these translations, let me know! (As a result of recent updates, the line numbers and a few flags been auto-updated in all .po files.) 2008-05-05 Paul Goins * *.po: Modified Copyright msgid string to match updated version in gtypist.c. * cs.po: msgstr to match Copyright msgid was empty. I copied the English version for now. * zh_*.po: Added 2003 to the Copyright msgstr. 2008-05-04 Paul Goins * zh_CN.po: Added Simplified Chinese translation, submitted by Wei Mingzhi 2001-12-07 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-12-01 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-12-01 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-12-01 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-12-01 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-11-29 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-11-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-11-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-10-20 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-10-20 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-10-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-10-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-10-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-10-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-09-23 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-09-18 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-18 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-09 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-09 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-09 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-08 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-07 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-07 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-07 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-05 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-05 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-04 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-04 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-09-04 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. 2001-07-31 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. * cat-id-tbl.c: Remove file. * stamp-cat-id: Remove file. 2001-07-29 gettextize * Makefile.in.in: Upgrade to gettext-0.10.39. * cat-id-tbl.c: Remove file. * stamp-cat-id: Remove file. 2001-06-11 Christian Weisgerber * *.po: added a proper charset specification. (for current gettext with iconv support) 2000-12-05 Kester Habermann < * de.po: Revision of grammar and spelling 2000-11-10 Vladimir Tamara * es.po, de.po: Added new strings shown with --help and --version 2000-07-30 Vladimir Tamara * Support for spanish. es.po gtypist-2.9.5/po/cs.gmo0000644000175000017500000001667112372333404011716 00000000000000L|ep3q  2 +5L>< 5&:\" - !J l   %    "  6 LT 2  &x  P     r ( C VQ !  ! #%%Kdz  *#6Zw +Q)Gd"H? =^ u&6/G GU%D 9?N!! ),J'w - %C3T0: 2 gC^b$$[5M(d'% #;Xu)  ''!I_{1Y:5S4E/C- ;I3 B>@)*+G8?=(&# H2 97 <!J.%KF,5$' L1DA0":6 If not supplied, script-file defaults to '%s/%s'. with %.1f%% errors Drill Query Adjusted speed = %6.2f wpm Are you sure you want to exit this lesson? [Y/N] Press R to repeat or E to exit Press R to repeat, N for next exercise or E to exit Press RETURN or SPACE to continue, ESC to return to the menu Raw speed = %6.2f wpm Sorry, gtypist is configured to forbid skipping exercises. Tutorial You failed this test, so you need to go back to %s. Your error-rate is too high. You have to achieve %.1f%%. %s: argument format is incorrect %s: incorrect colour values %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value '%' must immediately follow value'*' must immediately follow '%'ExamplesHappy Typing! Invalid value for "E:" (out of range)Loading the script...OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageUse arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go backWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0do not ask confirmation questionsdon't beep on errorsforbid the user to skip exerciseshighlight errors with reverse videoinstructions are limited to two linesinternal error in strdupinternal error: fseekinternal error: mallocinternal error: strdupinvalid function key numberinvalid key bindinglabel '%s' not foundlabel redefinitionlineline too long for screenmissing '%'missing ':'output version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-fileset initial display colours where availableset top banner colours (background, foreground, package and version respectively)start the lesson at label 'L'try to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: GNU Typist 2.7 Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 PO-Revision-Date: 2011-08-11 13:26+0200 Last-Translator: Hynek Hanke Language-Team: Czech Language: cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pokud není uvedeno jinak, skriptovací soubor bude: '%s/%s'. s %.1f%% chyb Drilové cvičení Dotaz Orientační rychlost = %6.2f slov/m Jste si jist/a, že chcete opustit tuto lekci? [A/N] Stiskněte O pro opakování nebo K pro konec Stiskněte O pro opakování, D pro další cvičení či K pro konec Stiskněte ENTER nebo mezeru pro pokračování, ESC k návratu do menu Hrubá rychlost = %6.2f slov/m Omlouvám se, ale jsem konfigurován, abych nedovolil přeskakovat. Tutoriál Neprošel jste tímto testem. Musíte se vrátit na %s. Vaše chybovost je příliš velká. Musíte dosáhnout %.1f%%.%s: neplatný formát argumentu %s: neplatná čísla barev %s: interní chyba: malloc %s: neplatné číslo barvy %s: neplatná hodnota curs-flash %s: neplatná hodnota error-max po hodnotě musí okamžitě následovat '%'po '%' musí okamžitě následovat '*'PříkladyPřejeme příjemné psaní! Neplatná hodnota pro "E:" (mimo obor hodnot)Načítám skript...NastaveníO/D/KOznamte chyby na bug-gtypist@gnu.org.Rychlostní testSkriptovací soubory se hledají v $GTYPIST_PATH. Prohledává pro bar.typ nestandardní adresářKe spuštění defaultní lekce v angličtině gtypist.typSpustit lekci ve španělštiněSpustí lekcii `test.typ' z adresáře `temp', začne na návěstí `TEST1', použije terminálový kurzor a pracuje v tichém móduVíce informací získáte zadáním '%s --help.' PoužíváníK pohybu použijte kurzorových kláves, mezerou či ENTERem vyberte položku nebo ESC se vraťte zpětNapsáno Simonem BaldwinemA/N,,gtypist'' je program pro výuku psaní na klávesnici všemi deseti prsty a obsahuje několik lekcí. Snadno mohou být dopsány i lekce nové. Nemůžu najít či otevřít souborperioda blikání kurzoru P*0,1 sekund (defaultně 10); platné hodnoty jsou mezi 0 a 512; parametr je ignorován, pokud bylo zadáno -t.data překročila velikost obrazovkynedostatek datdefaultní maximální počet chyb (standardně 3.0); platné hodnoty jsou mezi 0.0 a 100.0neptat se na potvrzenípři chybách nepípatzakaž uživateli přeskakovat cvičenízvýraznit chyby inverzním zobrazeníminstrukce smí mít pouze dva řádkyvnitřní chyba v strdupvnitřní chyba: fseekvnitřní chyba: mallocvnitřní chyba: strdupneplatné číslo F-klávesychybné přiřazení klávesnávěstí '%s' nebylo nalezenopředefinování návěstířádkařádka je na obrazovku příliš dlouháchybí '%'chybí ':'vytisknout informace o verzi a skončitpřetečení bufferu v do_error_max_setvytiskni tuto zprávuto samé jako -s a --silentskriptovací soubornastavení výchozích barev, pokud je to možnénastavit barvy vrchního banneru (pozadí, popředí, balíček a verzi,v tomto pořadí)spusť lekci na návěstí 'L'emuluj textový procesorvypnout sledování rychlosti při drilových testechneznámý příkazpoužívat kurzor terminálugtypist-2.9.5/po/fr.gmo0000644000175000017500000001732612372333404011716 00000000000000L|ep3q  2 +5L>< 5&:\" - !J l   %    "  6 LT 2  &x  P     r ( C VQ !  ! #%%Kdz  *#6Zw +Q)Gd"f@!\~0+J PXFD!Kf!7 #(&L%s0!*2JR;X;Y1:$l,0 ]i+&q_ -.L-{.%+'Bj"   "?Rl7l $&E.l(4E/C- ;I3 B>@)*+G8?=(&# H2 97 <!J.%KF,5$' L1DA0":6 If not supplied, script-file defaults to '%s/%s'. with %.1f%% errors Drill Query Adjusted speed = %6.2f wpm Are you sure you want to exit this lesson? [Y/N] Press R to repeat or E to exit Press R to repeat, N for next exercise or E to exit Press RETURN or SPACE to continue, ESC to return to the menu Raw speed = %6.2f wpm Sorry, gtypist is configured to forbid skipping exercises. Tutorial You failed this test, so you need to go back to %s. Your error-rate is too high. You have to achieve %.1f%%. %s: argument format is incorrect %s: incorrect colour values %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value '%' must immediately follow value'*' must immediately follow '%'ExamplesHappy Typing! Invalid value for "E:" (out of range)Loading the script...OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageUse arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go backWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0do not ask confirmation questionsdon't beep on errorsforbid the user to skip exerciseshighlight errors with reverse videoinstructions are limited to two linesinternal error in strdupinternal error: fseekinternal error: mallocinternal error: strdupinvalid function key numberinvalid key bindinglabel '%s' not foundlabel redefinitionlineline too long for screenmissing '%'missing ':'output version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-fileset initial display colours where availableset top banner colours (background, foreground, package and version respectively)start the lesson at label 'L'try to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: GNU Typist 2.6 Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 PO-Revision-Date: 2011-08-14 20:43+0200 Last-Translator: Michael Opdenacker Language-Team: French Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit S'il n'est pas précisé, script-file est '%s/%s' par défaut. avec %.1f%% d'erreurs ExerciceQuestion Vitesse corrigée = %6.2f mpm Voulez-vous vraiment quitter cette leçon? [O/N]Tapez R pour recommencer ou Q pour quitter.Appuyez sur R pour recommencer, S pour l'exercice suivant ou Q pour sortirAppuyez sur [ENTREE] ou [ESPACE] pour continuer, ou [ECHAP] pour revenir au menu Vitesse brute = %6.2f mpm Désolé, gtypist est configuré pour interdire de sauter un exercice.Travaux pratiquesVous avez échoué à cet exercice. Vous devez donc retourner à %s.Votre taux d'erreur est trop élevé. Vous devez atteindre moins de %.1f%%.%s: format d'argument incorrect %s: valeurs incorrectes pour l'argument `-c/--colours' %s: erreur interne: malloc %s: valeur incorrecte pour colours %s: valeur incorrecte pour curs-flash %s: valeur incorrecte pour error-max '%' doit suivre immédiatement la valeur donnée'* doit suivre immédiatement '%'ExemplesBonne pratique! Valeur incorrecte pour "E:" (hors limites)Chargement du script...OptionsR/S/QContactez bug-gtypist@gnu.org pour signaler tout problème.Test de vitesseLes fichiers d'exercices sont cherchés dans $GTYPIST_PATH Pour indiquer à gtypist de rechercher l'exercice `toto.typ' dans un répertoire spécialPour démarrer la leçon en anglais `gtypist.typ'Pour démarrer la leçon en EspagnolPour démarrer la leçon du fichier `test.typ' du répertoire `temp', en commençant au label `TEST1', en utilisant le curseur du terminal, en mode silencieuxEssayez '%s --help' pour plus d'information UtilisationUtilisez les touches de flèche pour vous déplacer, [ESPACE] ou [RETOUR] pour sélectionner, et [ECHAP] pour revenir en arrièreÉcrit par Simon BaldwinO/N`gtypist' est un programme pour apprendre à taper au clavier dans différentes langues et pour différents claviers. Il est facile d'écrire de nouvelles leçons. fichier introuvable ou impossible à ouvrirPériode de clignotement du curseur P*1 sec (10 par défaut). Les valeurs autorisées vont de 0 à 512. Cette option est ignorée si -t est spécifié.données trop longues pour l'affichagedonnées manquantestaux maximal d'erreur par défaut (3,0 par défaut). Les valeurs autorisées vont de 0 à 100.Ne pas demander de confirmationsNe pas sonner en cas d'erreursinterdit à l'utilisateur de sauter une leçonFaire ressortir les erreurs en inverse vidéoles instructions sont limitées à deux ligneserreur interne dans l'appel de strduperreur interne: fseekerreur interne: mallocerreur interne: strdupnuméro de touche de fonction incorrecttouche de raccourci incorrecte:label '%s' introuvableredéfinition de labelligneligne trop longue pour l'affichage'%' manquant':' manquantaffiche l'information de versiondépassement dans do_error_max_setaffiche ce messageidentique à -s, --silentfichier d'exercicedéfinit les couleurs d'affichage initiales si possibleDéfinit les couleurs du bandeau supérieur (respectivement arrière-plan, avant-plan, paquetage et version)commencer la leçon au label `L'essaie d'imiter un traitement de textedésactiver le compteur MPM dans les exercicescommande inconnueutiliser le curseur hardware du terminalgtypist-2.9.5/po/pl.gmo0000644000175000017500000002334612372333404011721 00000000000000\3 - K Va~2  5) >_   <  5 :V  "  $  * E c  !     , %  " B6ML2!&P&?C)r V!$9!M#o%2F[p  # *+6<bQ!1Nk"{y;$T%y  '()%1&W(~B<&''NKv1FC^ }+ " !.P(l" {:+1#U5eP<%)O/  P b  (&!;O!l!$! "a)""#""%".#*3#^#z###### $)$B$]$c$$$$2$!$$ % #%>0%Co%H%#%1 &'R&1z&&&&;7#I.X)S'L, F\ UC"V$R1A9T[=%-J0@D5&P4EW (BG>*N<?O28 M HK+Y6Q:!3/ Z If not supplied, script-file defaults to '%s/%s'. with %.1f%% errors new personal best Drill Query Adjusted speed = %6.2f cpm Adjusted speed = %6.2f wpm Are you sure you want to exit this lesson? [Y/N] Personal best = %6.2f cpm Personal best = %6.2f wpm Press R to repeat or E to exit Press R to repeat, N for next exercise or E to exit Press RETURN or SPACE to continue, ESC to return to the menu Raw speed = %6.2f cpm Raw speed = %6.2f wpm Sorry, gtypist is configured to forbid skipping exercises. Tutorial You failed this test, so you need to go back to %s. Your error-rate is too high. You have to achieve %.1f%%. internal error: fopen%s: argument format is incorrect %s: incorrect colour values %s: %s environment variable not set %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value %s: invalid scoring mode'%' must immediately follow value'*' must immediately follow '%'Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin. Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team. This program comes with ABSOLUTELY NO WARRANTY; for details please see the file 'COPYING' supplied with the source code. This is free software, and you are welcome to redistribute it under certain conditions; again, see 'COPYING' for details. This program is released under the GNU General Public License.ExamplesHappy Typing! Invalid multibyte sequence (wrong encoding?)Invalid value for "E:" (out of range)Loading the script...OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageUse arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go backWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecouldn't convert UTF-8 to wide characterscursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0do not ask confirmation questionsdon't beep on errorserror in setcchar()forbid the user to skip exerciseshighlight errors with reverse videoinstructions are limited to two linesinternal error in strdupinternal error: fseekinternal error: mallocinternal error: strdupinvalid function key numberinvalid key bindinglabel '%s' not foundlabel contains spacelabel redefinitionlineline too long for screenmissing '%'missing ':'optionsoutput version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-fileset initial display colours where availableset scoring mode (words per minute or characters per minute)set top banner colours (background, foreground, package and version respectively)start the lesson at label 'L'track personal best typing speedstry to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: gtypist 2.9 Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 PO-Revision-Date: 2011-11-04 21:15+0100 Last-Translator: Jakub Bogusz Language-Team: Polish Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jeśli nie podano, przyjmowany jest plik-skryptu '%s/%s'. %.1f%% błędów nowy własny rekord Ćwiczenie Pytanie Szybkość z poprawką = %6.2f zn/min Szybkość z poprawką = %6.2f sł/min Na pewno zakończyć tę lekcję? [T/N] Własny rekord = %6.2f zn/min Własny rekord = %6.2f sł/min P - powtórzenie, K - koniec ćwiczeń P - powtórzenie, N - następne ćwiczenie, K - koniec ćwiczeń RETURN lub SPACE oznacza kontynuację, ESC powrót do menu Sama szybkość = %6.2f zn/min Sama szybkość = %6.2f sł/min gtypist jest skonfigurowany tak, by nie pozwalał na pomijanie ćwiczeń. Nauka Test nie powiódł się, trzeba wrócić do %s. Współczynnik błędów jest zbyt duży. Trzeba osiągnąć %.1f%%. błąd wewnętrzny: fopen%s: błędny format argumentu %s: błędne wartości kolorów %s: zmienna środowiskowa %s nie ustawiona %s: błąd wewnętrzny: malloc %s: błędna wartość kolorów %s: błędna wartość curs-flash %s: błędna wartość error-max %s: błędny tryb punktacji'%' musi być bezpośrednio po wartości'*' musi być bezpośrednio po '%'Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin. Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team. Ten program jest udostępniony BEZ ŻADNEJ GWARANCJI; szczegóły znajdują się w pliku 'COPYING' dołączonym do kodu źródłowego. To oprogramowanie jest wolnodostępne i można je rozpowszechniać pod pewnymi warunkami - szczegóły w pliku 'COPYING'. Ten program jest wydany na Powszechnej Licencji Publicznej GNU.PrzykładyMiłego pisania! Błędna sekwencja wielobajtowa (niewłaściwe kodowanie?)Błędna wartość dla "E:" (spoza zakresu)Wczytywanie skryptu...OpcjeP/N/KBłędy proszę zgłaszać na bug-gtypist@gnu.orgTest szybkościPliki skryptu są szukane w katalogu $GTYPIST_PATH. Aby powiadomić gtypista, by szukał lekcji `bar.typ' w niestandardowym kataloguAby uruchomić domyślną lekcję po angielsku `gtypist.typ'Aby uruchomić lekcję po hiszpańskuAby uruchomić lekcję z pliku `test.typ' w katalogu `temp', zaczynając od etykiety `TEST1', używając kursora terminala, bez piskówPolecenie '%s --help' poda więcej informacji. SkładniaKlawisze ze strzałkami to przemieszczanie, SPACE lub RETURN wybór, ESC powrótNapisane przez Simona BaldwinaT/N`gtypist' jest programem do nauki pisania z różnymi lekcjami dla różnych klawiatur i języków. Nowe lekcje mogą być łatwo dopisane przez użytkownika. nie można znaleźć lub otworzyć plikunie udało się przekonwertować UTF-8 do szerokich znakówokres migania kursora P*.1 sek (domyślnie 10); poprawne wartości od 0 do 512; ignorowane, jeśli podano -tdane przekraczają długość ekranubrak danychdomyślny maksymalny procent błędów (domyślnie 3.0); poprawne wartości pomiędzy 0.0 a 100.0nie żądanie potwierdzeńwyłączenie pisków przy błędachbłąd w setcchar()nie zezwalanie na pomijanie ćwiczeńpodświetlanie błędów odwróconymi koloramiinstrukcje są ograniczone do dwóch liniibłąd wewnętrzny w strdupbłąd wewnętrzny: fseekbłąd wewnętrzny: mallocbłąd wewnętrzny: strdupbłędny numer klawisza funkcyjnegobłędne przypisanie klawiszanie znaleziono etykiety '%s'etykieta zawiera spacjęponowna definicja etykietylinialinia zbyt długa dla ekranubrak '%'brak ':'opcjewypisanie informacji o wersji i zakończenie pracyprzepełnienie w do_error_max_setwyświetlenie tego komunikatuto samo co -s, --silentplik-skryptuustawienie początkowych kolorów ekranu, jeśli są dostępneustawienie trybu punktacji (słowa na minutę lub znaki na minutę)ustawienie kolorów górnych nagłówków (tło, tekst, pakiet i wersja)rozpoczęcie lekcji od etykiety 'L'śledzenie własnych rekordów szybkości pisaniapróba naśladowania procesorów tekstuwyłączenie stopera słów/min na czas ćwiczeńnieznane polecenieużycie sprzętowego kursora terminalagtypist-2.9.5/po/Rules-quot0000644000175000017500000000340612231002500012560 00000000000000# Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header gtypist-2.9.5/po/pl.po0000644000175000017500000003045712372332140011552 00000000000000# Polish messages for gtypist. # This file is distributed under the same license as the gtypist package. # Jakub Bogusz , 2002-2011. # msgid "" msgstr "" "Project-Id-Version: gtypist 2.9\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: 2011-11-04 21:15+0100\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/gtypist.c:295 msgid "internal error in strdup" msgstr "błąd wewnętrzny w strdup" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "błędne przypisanie klawisza" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "błędny numer klawisza funkcyjnego" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "dane przekraczają długość ekranu" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "instrukcje są ograniczone do dwóch linii" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "błąd wewnętrzny: fseek" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "'*' musi być bezpośrednio po '%'" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "brak '%'" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "'%' musi być bezpośrednio po wartości" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "przepełnienie w do_error_max_set" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "Błędna wartość dla \"E:\" (spoza zakresu)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "nie znaleziono etykiety '%s'" #: src/gtypist.c:1611 msgid "unknown command" msgstr "nieznane polecenie" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "śledzenie własnych rekordów szybkości pisania" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "" "domyślny maksymalny procent błędów (domyślnie 3.0); poprawne wartości " "pomiędzy 0.0 a 100.0" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "wyłączenie stopera słów/min na czas ćwiczeń" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "użycie sprzętowego kursora terminala" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "okres migania kursora P*.1 sek (domyślnie 10); poprawne wartości od 0 do " "512; ignorowane, jeśli podano -t" #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "ustawienie początkowych kolorów ekranu, jeśli są dostępne" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "wyłączenie pisków przy błędach" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "to samo co -s, --silent" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "rozpoczęcie lekcji od etykiety 'L'" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "próba naśladowania procesorów tekstu" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "nie zezwalanie na pomijanie ćwiczeń" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "podświetlanie błędów odwróconymi kolorami" #: src/gtypist.c:1743 msgid "print this message" msgstr "wyświetlenie tego komunikatu" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "wypisanie informacji o wersji i zakończenie pracy" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "nie żądanie potwierdzeń" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "ustawienie kolorów górnych nagłówków (tło, tekst, pakiet i wersja)" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "ustawienie trybu punktacji (słowa na minutę lub znaki na minutę)" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" "`gtypist' jest programem do nauki pisania z różnymi lekcjami dla różnych\n" "klawiatur i języków. Nowe lekcje mogą być łatwo dopisane przez użytkownika.\n" "\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "Składnia" #: src/gtypist.c:1756 msgid "options" msgstr "opcje" #: src/gtypist.c:1756 msgid "script-file" msgstr "plik-skryptu" #: src/gtypist.c:1757 msgid "Options" msgstr "Opcje" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "Jeśli nie podano, przyjmowany jest plik-skryptu '%s/%s'.\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" "Pliki skryptu są szukane w katalogu $GTYPIST_PATH.\n" "\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "Przykłady" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "Aby uruchomić domyślną lekcję po angielsku `gtypist.typ'" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "Aby uruchomić lekcję po hiszpańsku" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "" "Aby powiadomić gtypista, by szukał lekcji `bar.typ' w niestandardowym " "katalogu" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "Aby uruchomić lekcję z pliku `test.typ' w katalogu `temp', zaczynając\n" "od etykiety `TEST1', używając kursora terminala, bez pisków" #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "Błędy proszę zgłaszać na bug-gtypist@gnu.org" #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: błędna wartość error-max\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: błędna wartość curs-flash\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: błędna wartość kolorów\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "%s: błędny format argumentu\n" #: src/gtypist.c:1876 #, c-format msgid "%s: incorrect colour values\n" msgstr "%s: błędne wartości kolorów\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, c-format msgid "%s: invalid scoring mode" msgstr "%s: błędny tryb punktacji" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: błąd wewnętrzny: malloc\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "Napisane przez Simona Baldwina" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "Polecenie '%s --help' poda więcej informacji.\n" #: src/gtypist.c:2023 msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "Ten program jest udostępniony BEZ ŻADNEJ GWARANCJI; szczegóły\n" "znajdują się w pliku 'COPYING' dołączonym do kodu źródłowego.\n" "To oprogramowanie jest wolnodostępne i można je rozpowszechniać\n" "pod pewnymi warunkami - szczegóły w pliku 'COPYING'.\n" "Ten program jest wydany na Powszechnej Licencji Publicznej GNU." #: src/gtypist.c:2031 msgid " Tutorial " msgstr " Nauka " #: src/gtypist.c:2033 msgid " Query " msgstr " Pytanie " #: src/gtypist.c:2035 msgid " Drill " msgstr " Ćwiczenie " #: src/gtypist.c:2037 msgid "Speed test" msgstr "Test szybkości" #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr " RETURN lub SPACE oznacza kontynuację, ESC powrót do menu " #: src/gtypist.c:2042 #, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr " Współczynnik błędów jest zbyt duży. Trzeba osiągnąć %.1f%%. " #: src/gtypist.c:2046 #, c-format msgid " You failed this test, so you need to go back to %s. " msgstr " Test nie powiódł się, trzeba wrócić do %s. " #: src/gtypist.c:2050 msgid " Press R to repeat, N for next exercise or E to exit " msgstr " P - powtórzenie, N - następne ćwiczenie, K - koniec ćwiczeń " #: src/gtypist.c:2054 msgid " Press R to repeat or E to exit " msgstr " P - powtórzenie, K - koniec ćwiczeń " #: src/gtypist.c:2057 msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr " Na pewno zakończyć tę lekcję? [T/N] " #: src/gtypist.c:2061 msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr "" " gtypist jest skonfigurowany tak, by nie pozwalał na pomijanie ćwiczeń. " #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr " Sama szybkość = %6.2f sł/min " #: src/gtypist.c:2068 #, c-format msgid " Raw speed = %6.2f cpm " msgstr " Sama szybkość = %6.2f zn/min " #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr " Szybkość z poprawką = %6.2f sł/min " #: src/gtypist.c:2075 #, c-format msgid " Adjusted speed = %6.2f cpm " msgstr " Szybkość z poprawką = %6.2f zn/min " #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr " %.1f%% błędów " #: src/gtypist.c:2085 #, c-format msgid " Personal best = %6.2f wpm " msgstr " Własny rekord = %6.2f sł/min " #: src/gtypist.c:2087 #, c-format msgid " Personal best = %6.2f cpm " msgstr " Własny rekord = %6.2f zn/min " #: src/gtypist.c:2092 msgid " new personal best " msgstr " nowy własny rekord " #: src/gtypist.c:2097 msgid "Y/N" msgstr "T/N" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "P/N/K" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "nie można znaleźć lub otworzyć pliku" #: src/gtypist.c:2185 #, c-format msgid "%s: %s environment variable not set\n" msgstr "%s: zmienna środowiskowa %s nie ustawiona\n" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "Wczytywanie skryptu..." #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "błąd wewnętrzny: malloc" #: src/gtypist.c:2362 msgid " internal error: fopen" msgstr " błąd wewnętrzny: fopen" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "" "Klawisze ze strzałkami to przemieszczanie, SPACE lub RETURN wybór, ESC powrót" #: src/error.c:51 msgid "line" msgstr "linia" #: src/script.c:56 msgid "internal error: strdup" msgstr "błąd wewnętrzny: strdup" #: src/script.c:158 msgid "label contains space" msgstr "etykieta zawiera spację" #: src/script.c:184 msgid "label redefinition" msgstr "ponowna definicja etykiety" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "Błędna sekwencja wielobajtowa (niewłaściwe kodowanie?)" #: src/script.c:230 msgid "data shortage" msgstr "brak danych" #: src/script.c:232 msgid "missing ':'" msgstr "brak ':'" #: src/script.c:238 msgid "line too long for screen" msgstr "linia zbyt długa dla ekranu" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" "Miłego pisania!\n" "\n" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "nie udało się przekonwertować UTF-8 do szerokich znaków" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "błąd w setcchar()" gtypist-2.9.5/po/POTFILES.in0000644000175000017500000000017312204155736012354 00000000000000# List of source files containing translatable strings. src/gtypist.c src/cursmenu.c src/error.c src/script.c src/utf8.c gtypist-2.9.5/po/eu.po0000644000175000017500000003112612372332140011542 00000000000000msgid "" msgstr "" "Project-Id-Version: GNU Typist 2.7\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "Last-Translator: David Garca-Abad\n" "Language-Team: \n" "Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: src/gtypist.c:295 msgid "internal error in strdup" msgstr "barne errorea strdup-en" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "teklen asoziazio ez zuzena" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "funtzio teklaren zenbaki okerra" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "datuek pantailaren luzera gainditzen dute" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "instrukzioak bi lerrotara mugatuta daude" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "barne errorea: 'fseek'" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "'*' '% (r)en ostean etorri behar da'" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "'%' falta da" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "'%' balorearen ostean etorri behar da" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "'do_error_max_set' -en gainezkatzea" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "\"E:\" rako balio okerra (tartetik kanpo)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "'%s' etiketa ez aurkitua" #: src/gtypist.c:1611 msgid "unknown command" msgstr "agindu ezezaguna" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "" "gehienezko errorearen ehunekoa (defektuz 3.0); baliozko baloreak 0.0 eta " "100.0 bitartean daude" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "WPM kontadorea desaktibatu praktiketarako" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "erabili terminalaren kurtsorea" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "kurtsorearen kliskaldia P*.1 segundutan jartzen du (defektuz 10), baliozko " "baloreak 0 eta 512 bitartean daude; Ez da kontuan hartuko '-t' aukera " "zehazten bada" #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "pantailaren hasierako koloreak ezartzen ditu posible denean" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "ez egin soinurik erroreak izanez gero" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "'-s, --silent'-en eragin bera" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "ikasgaia 'L' etiketan hasi" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "testu prozesadorak imitatzen saiatzen da" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "erabiltzaileari ariketei jaramonik ez egitea debekatu" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "koloreak azpimarratu pantailak daukan kolorearen inbertsioarekin" #: src/gtypist.c:1743 msgid "print this message" msgstr "mezu hau erakutsi" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "bertsioari buruzko informazioa erakutsi eta irten" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "baieztatzeko galderarik ez egin" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "" "goiko panelaren koloreak ezarri (hondoa, lehen planoa, paketea eta bertsioa " "hurrenez hurren)" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "ezarri puntuatzeko modua (hitzak minutuko edo karakterrak minutuko)" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" "'gtypist' makinaz idazten ikasteko tutore bat da. Ikasgai desberdinez " "osatuta dago, teklatu eta hizkuntza desberdinetarako. Erabiltzaile batek " "ikasgai berriak gehitu ditzake erraztasunez.\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "Erabilera" #: src/gtypist.c:1756 #, fuzzy msgid "options" msgstr "Aukerak" #: src/gtypist.c:1756 msgid "script-file" msgstr "'script' artxiboak" #: src/gtypist.c:1757 msgid "Options" msgstr "Aukerak" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "Adierazten ez bada, defektuzko 'script' artxiboa '%s/%s' da.\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" "'script' artxiboak 'GTYPIST_PATH' aldagaian adierazitako bidean bilatuko " "dira.\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "Adibideak" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "Defektuz ingelesez dagoen ikasgaia exekutatzeko 'gtypist.typ'" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "Ikasgaia erdaraz exekutatzeko" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "" "'gtypist' -i 'bar.typ' ikasgaia direktorio ez estandar batean bila dezan " "esateko." #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "'temp' direktorioan dagoen 'test.typ' artxiboko ikasgaia exekutatzeko, " "'TEST1' etiketan hasiz, terminalaren kurtsorea erabiliz eta modu isiliean." #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "Errorei buruzko txostena 'bug-gtypist@gnu.org' helbidera bidali" #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: 'error-max' -en balore okerra\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: 'curs-flash' -en balore okerra\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: kolorearen balore okerra\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "%s: argumentuaren formatoa ez zuzena da\n" #: src/gtypist.c:1876 #, c-format msgid "%s: incorrect colour values\n" msgstr "%s: koloreen balore okerrak'\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, c-format msgid "%s: invalid scoring mode" msgstr "%s: puntuaziorako modu ez zuzena" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: barne errorea: 'malloc'\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "Simon Baldwinek idatzia" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "Saiatu '%s --help' erabiliz informazio gehiago eskuratzeko.\n" #: src/gtypist.c:2023 #, fuzzy msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008 GNU Typist Development Team.\n" "Programa hau INOLAKO BERMERIK GABE dator; xehetasunak\n" "ikusi nahi izanez gero, iturri kodearekin batera datorren 'COPYING'\n" " artxiboa irakurri, mesedez. Hau software askea da eta banatzeko\n" "gonbidapena egiten dizugu, baldintza batzuen pean; berriro ere,\n" "'COPYING' artxiboan dauden xehetasunak irakurri.\n" "Programa hau GNU Baimen Publiko Orokorraren pean argitaratu da." #: src/gtypist.c:2031 msgid " Tutorial " msgstr "Tutoriala" #: src/gtypist.c:2033 msgid " Query " msgstr "Galdeketa" #: src/gtypist.c:2035 msgid " Drill " msgstr "Errutina" #: src/gtypist.c:2037 msgid "Speed test" msgstr "Abiadura testa" #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr "" "Pulse 'RETURN' o 'SPACE' para continuar, 'ESC' para volver al menu 'RETURN' " "edo 'SPACE' sakatu jarraitzeko, 'ESC' menura bueltatzeko" #: src/gtypist.c:2042 #, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr "Zure akatsen tasa altuegia da. %.1f%% lortu behar duzu." #: src/gtypist.c:2046 #, c-format msgid " You failed this test, so you need to go back to %s. " msgstr "Proba honetan huts egin duzu; beraz, '%s' ra joan behar zara berriro." #: src/gtypist.c:2050 msgid " Press R to repeat, N for next exercise or E to exit " msgstr "" "Sakatu 'R' errepikatzeko, 'N' hurrengo ariketa egiteko edo 'E' irteteko" #: src/gtypist.c:2054 msgid " Press R to repeat or E to exit " msgstr "Sakatu 'R' errepikatzeko edo 'E' bukatzeko" #: src/gtypist.c:2057 msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr "Ziur zaude ikasgai hau bukatu nahi izateaz? [Y/N] " #: src/gtypist.c:2061 msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr "" "Sentitzen dut, baina 'gtypist' ikasgaiei jaramonik ez egitea ez onartzeko " "konfiguratuta dago." #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr "Abiadura gordina = %6.2f wpm " #: src/gtypist.c:2068 #, c-format msgid " Raw speed = %6.2f cpm " msgstr " Abiadura gordina = %6.2f cpm " #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr "Abiadura garbia = %6.2f wpm " #: src/gtypist.c:2075 #, c-format msgid " Adjusted speed = %6.2f cpm " msgstr " Abiadura doitua = %6.2f cpm " #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr " %3.0f%% akatsekin" #: src/gtypist.c:2085 #, fuzzy, c-format msgid " Personal best = %6.2f wpm " msgstr "Abiadura gordina = %6.2f wpm " #: src/gtypist.c:2087 #, fuzzy, c-format msgid " Personal best = %6.2f cpm " msgstr " Abiadura gordina = %6.2f cpm " #: src/gtypist.c:2092 #, fuzzy msgid " new personal best " msgstr " %3.0f%% akatsekin" #: src/gtypist.c:2097 msgid "Y/N" msgstr "Y/N" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "R/N/E" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "artxiboa ezin izan da aurkitu edo ireki" #: src/gtypist.c:2185 #, c-format msgid "%s: %s environment variable not set\n" msgstr "" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr " 'script'-a kargatzen..." #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "barne errorea 'malloc' -en" #: src/gtypist.c:2362 #, fuzzy msgid " internal error: fopen" msgstr "barne errorea: 'fseek'" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "" "Erabili gezidun teklak mugitzeko, 'SPACE' edo 'RETURN ' selekzionatzeko eta " "'ESCAPE' atzera bueltatzeko" #: src/error.c:51 msgid "line" msgstr "lerroa" #: src/script.c:56 msgid "internal error: strdup" msgstr "barne errorea: strdup" #: src/script.c:158 msgid "label contains space" msgstr "" #: src/script.c:184 msgid "label redefinition" msgstr "etiketaren berdefinizioa" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "" #: src/script.c:230 msgid "data shortage" msgstr "datu gutxiegi" #: src/script.c:232 msgid "missing ':'" msgstr "':' falta da" #: src/script.c:238 msgid "line too long for screen" msgstr "lerroa luzeegia da pantailan sartzeko" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" "Tekleatze zoriontsua izan deizula!\n" "\n" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "" #~ msgid " Press Return to continue... " #~ msgstr " Return sakatu jarraitzeko... " #, fuzzy #~ msgid "%s: invalid drill-tries value\n" #~ msgstr "%s: valor de drill_tries invalido\n" #~ msgid " Please try again, %d of %d; press Return to continue... " #~ msgstr " Intente de nuevo, %d de %d; presione Enter para continuar... " #~ msgid "%s: getopt returned unknown '%c'\n" #~ msgstr "%s: getopt retornó valor desconocido '%c'\n" gtypist-2.9.5/po/remove-potcdate.sin0000644000175000017500000000066012231002500014365 00000000000000# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } gtypist-2.9.5/po/tr.gmo0000644000175000017500000002143412372333404011727 00000000000000Z3  + 6A^2{ 5 >? ~  < 5 :6 q "      ; !T v   , %    "& I 6T L 2  ( &  P -FJ)r V! +@!T#v%9Mbw  #  1+=<iQ!8Ur":h ""$7G:NXCP <)Af!. Pq,6 3+Co 8 9JJ`"6S )>B$# - _G\n-+&  , > "O r     ! ! !"!!%D!j!~!!!F!L"["${""(""#"95!G,V'Q%J* DZ SA T"P/?7RY;#+H.>B3$N2CU&@E<(L:=M06 K FI)W4O81- X If not supplied, script-file defaults to '%s/%s'. with %.1f%% errors new personal best Drill Query Adjusted speed = %6.2f cpm Adjusted speed = %6.2f wpm Are you sure you want to exit this lesson? [Y/N] Personal best = %6.2f cpm Personal best = %6.2f wpm Press R to repeat or E to exit Press R to repeat, N for next exercise or E to exit Press RETURN or SPACE to continue, ESC to return to the menu Raw speed = %6.2f cpm Raw speed = %6.2f wpm Sorry, gtypist is configured to forbid skipping exercises. Tutorial You failed this test, so you need to go back to %s. Your error-rate is too high. You have to achieve %.1f%%. internal error: fopen%s: argument format is incorrect %s: incorrect colour values %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value %s: invalid scoring mode'%' must immediately follow value'*' must immediately follow '%'ExamplesHappy Typing! Invalid multibyte sequence (wrong encoding?)Invalid value for "E:" (out of range)Loading the script...OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageUse arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go backWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecouldn't convert UTF-8 to wide characterscursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0do not ask confirmation questionsdon't beep on errorserror in setcchar()forbid the user to skip exerciseshighlight errors with reverse videoinstructions are limited to two linesinternal error in strdupinternal error: fseekinternal error: mallocinternal error: strdupinvalid function key numberinvalid key bindinglabel '%s' not foundlabel contains spacelabel redefinitionlineline too long for screenmissing '%'missing ':'optionsoutput version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-fileset initial display colours where availableset scoring mode (words per minute or characters per minute)set top banner colours (background, foreground, package and version respectively)start the lesson at label 'L'track personal best typing speedstry to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: GNU Typist 2.9beta1 Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 PO-Revision-Date: 2011-10-28 00:40+0300 Last-Translator: Gökçen Eraslan Language-Team: Turkish Language: tr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Lokalize 1.2 Verilmediğinde, betik dosyası '%s/%s' olarak alınır. %.1f%% hata oranı yeni kişisel rekor Atış talimi Sorgu Düzenlenmiş sürat = %6.2f cpm Düzenlenmiş sürat = %6.2f wpm Bu dersten çıkmak istediğinize emin misiniz? [E/H] Kişisel rekor = %6.2f cpm Kişisel rekor = %6.2f wpm Tekrarlamak için T'ye ya da çıkmak için Ç'ye basın Tekrarlamak için T'ye, devam etmek için D'ye, çıkmak içinse Ç'ye basın Devam etmek için SPACE ya da ENTER tuşuna, ana menüye dönmek içinse ESC'ye basın Ham sürat = %6.2f cpm Ham sürat = %6.2f wpm Üzgünüm, gtypist alıştırmaları geçmenizi engellemek üzere ayarlandı. Eğitim Bu testi geçemediniz, %s bölümüne dönmeniz gerekiyor. Hata oranı çok yüksek. %.1f%% oranına ulaşmanız gerekiyor. iç hata: fopen%s: argüman biçimi yanlış %s: geçersiz renk değerleri %s: iç hata: malloc %s: geçersiz colours değeri %s: geçersiz curs-flash değeri %s: geçersiz error-max değeri %s: geçersiz puanlama kipi'%' karakteri bir değerin ardından gelmeli'*' karakteri '%' karakterinin hemen ardından gelmeliÖrneklerNeşeli Yazmalar! Geçersiz çokbaytlı sıralama (yanlış kodlama?)geçersiz "E:" değeri (aralık dışında)Betik yükleniyor...SeçeneklerT/D/ÇHataları bug-gtypist@gnu.org adresine bildirebilirsinizHız testiBetikleri bulmak için $GTYPIST_PATH yolu kullanılır. gtypist'in standart bir dizinde olmayan `bar.typ' betiğini bulması içinÖntanımlı İngilizce ders olan `gtypist.typ' betiğini başlatmak içinDersi İspanyolca başlatmak için`temp' dizinindeki `test.typ' betiğini `TEST1' etiketinden başlayıp, terminal imlecini kullanarak, sessizce çalıştırmak içinDaha fazla bilgi için '%s --help' komutunu kullanın KullanımGezinmek için ok tuşlarını, seçmek için SPACE ya da RETURN tuşlarını ve geriye gitmek için de ESC tuşunu kullanın.Simon Baldwin tarafından yazılmıştırE/H`gtypist' çeşitli klavyeler ve diller için bir çok ders içeren bir yazım eğitim uygulamasıdır. Kullanıcılar da kolayca yeni dersler ekleyebilirler. dosya bulunamadı ya da açılamadıUTF-8 geniş karaktere çevrilemediimleç görünme süresi P * 0.1 sn. (öntanımlı 10); geçerli değerler 0 ile 512 arasındadır; bu değer -t verildiğinde yoksayılacaktırveri ekran boyunu aşıyorveri yetersizöntanımlı azami hata yüzdesi (default 3.0); gerçerli değerler 0.0 ile 100.0 arasındadıronay soruları sormahatalarda biplemesetcchar() fonksiyonunda hatakullanıcının dersleri atlamasını engellehataları tersine video göstererek vurgulatalimatlar iki satırla sınırlıdırstrdup'ta hataiç hata: fseekİç hata: mallociç hata: strdupgeçersiz fonksiyon tuş numarasıgeçersiz tuş ataması'%s' etiketi bulunamadıetiket boşluk içeriyoretiket tekrar tanımlanmışsatırsatır bu ekran için fazla uzuneksik '%'eksik ':'seçeneklersürüm bilgisini yazdır ve çıkdo_error_max_set fonksiyonunda taşmabu metni yazdırır-s, --silent ile aynıdırbetik-dosyasımümkünse renkleri değiştirpuanlama kipini değiştir (dakikadaki kelime ya da karakter sayısı)en üst şeritin renklerini değiştir (arkaplan, önplan, paket ve sürüm)'L' ile etiketli dersten başlakişisel hız rekorlarını takip etkelime işlemcileri taklit etatış talimlerinde WPM sayacını kapatbilinmeyen komutterminalin donanım imlecini kullangtypist-2.9.5/po/nl.po0000644000175000017500000002723112372332140011544 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Simon Baldwin # This file is distributed under the same license as the PACKAGE package. # Joost Cogels , 2002. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: 2002-11-09 15:49+0100\n" "Last-Translator: Joost Cogels \n" "Language-Team: Dutch (Nederlands) \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 0.9.6\n" #: src/gtypist.c:295 #, fuzzy msgid "internal error in strdup" msgstr "interne fout: fseek" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "ongeldige toetsbinding" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "ongeldig functietoets nummer" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "data overschreidt vensterlengte" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "instructies zijn beperkt tot twee regels" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "interne fout: fseek" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "'*' moet '%' onmiddellijk volgen" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "ontbrekende '%'" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "'%' moet waarde onmiddellijk volgen" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "overflow in do_error_max_set" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "Ongeldige waarde voor \"E:\" (buiten bereik)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "label '%s' niet gevonden" #: src/gtypist.c:1611 msgid "unknown command" msgstr "onbekend commando" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "" "standaard maximum percentage fouten (standaard 3.0); geldige waarden tussen " "0.0 en 100.0" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "schakel de WPM timer uit in oefeningen" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "gebruik de hardware cursor van de terminal" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "tijd dat de cursor oplicht P*.1 sec (standaard 10); geldige waarde tussen 0 " "en 512; dit wordt genegeerd indien -t is opgegeven" #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "piep niet bij fouten" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "hetzelfde als -s, --silent" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "start de les bij label 'L'" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "probeer woord processoren na te doen" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "verbied de gebruiker lessen over te slaan" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "" #: src/gtypist.c:1743 msgid "print this message" msgstr "print dit bericht" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "geef versie informatie en sluit af" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" "'gtypist' is een typcursus met lessen voor diverse toetsenborden en talen. " "Nieuwe lessen kunnen eenvoudig door de gebruiker geschreven worden.\n" "\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "Gebruik" #: src/gtypist.c:1756 #, fuzzy msgid "options" msgstr "Opties" #: src/gtypist.c:1756 msgid "script-file" msgstr "script-bestand" #: src/gtypist.c:1757 msgid "Options" msgstr "Opties" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "Indien niet opgegeven, gebruikt het script standaard '%s/%s'.\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" "Het pad $GTYPIST_PATH wordt doorzocht op script-bestanden.\n" "\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "Voorbeelden" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "Om de standaardlessen in Engels te draaien 'gtypist.typ'" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "Om de lessen in Spaans te draaien" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "" "Om gtypist te vertellen naar les 'bar.typ' te zoeken in een niet-standaard " "directory" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "Om de les in het bestand 'test.typ' uit directory 'temp' te draaien, " "beginnende bij label 'TEST1', met gebruikmaking van de cursor van de " "terminal, en draai op de achtergrond" #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "Meldt bugs aan bug-gtypist@gnu.org" #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: ongeldige error-max waarde\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: ongeldige curs-flash waarde\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: ongeldige kleuren waarde\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "" #: src/gtypist.c:1876 #, fuzzy, c-format msgid "%s: incorrect colour values\n" msgstr "%s: ongeldige kleuren waarde\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, fuzzy, c-format msgid "%s: invalid scoring mode" msgstr "%s: ongeldige kleuren waarde\n" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: interne fout: malloc\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "Geschreven door Simon Baldwin" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "Probeer '%s --help' voor meer informatie.\n" #: src/gtypist.c:2023 #, fuzzy msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" "Copyright (C) 1998, 1999, 2000, 2001, 2002 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008 GNU Typist Development Team.\n" "Dit programma komt ABSOLUUT ZONDER GARANTIE, raadpleeg\n" "het bestand 'COPYING' dat meegeleverd wordt met de broncode voor\n" "meer info. Dit is gratis software, het mag doorgegeven worden onder bepaalde " "voorwaarden; zie ook hiervoor het bestand 'COPYING'.\n" "Dit programma wordt uitgegeven onder de GNU General Public License." #: src/gtypist.c:2031 msgid " Tutorial " msgstr " Handleiding " #: src/gtypist.c:2033 msgid " Query " msgstr " Vraag " #: src/gtypist.c:2035 msgid " Drill " msgstr " Oefening " #: src/gtypist.c:2037 msgid "Speed test" msgstr "Snelheidstest" #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr "" #: src/gtypist.c:2042 #, fuzzy, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr "Uw aantal fouten is te hoog. U dient %.1f%% te behalen." #: src/gtypist.c:2046 #, fuzzy, c-format msgid " You failed this test, so you need to go back to %s. " msgstr "Uw bent gezakt voor de test, dus moet u teruggaan naar %s." #: src/gtypist.c:2050 #, fuzzy msgid " Press R to repeat, N for next exercise or E to exit " msgstr "Druk op R om te herhalen, N voor volgende oefening of E om te sluiten" #: src/gtypist.c:2054 #, fuzzy msgid " Press R to repeat or E to exit " msgstr "Druk op R om te herhalen of E om te sluiten" #: src/gtypist.c:2057 #, fuzzy msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr "Weet u zeker dat u deze les wilt beeindigen? [J/N]" #: src/gtypist.c:2061 #, fuzzy msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr "" "Sorry, gtypist is geconfigureerd het overslaan van oefeningen te verbieden." #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr " Ruwe snelheid = %6.2f wpm " #: src/gtypist.c:2068 #, fuzzy, c-format msgid " Raw speed = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr "Aangepaste snelheid = %6.2f wpm " #: src/gtypist.c:2075 #, fuzzy, c-format msgid " Adjusted speed = %6.2f cpm " msgstr " Adjusted speed = %6.2f cpm " #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr " met %.1f%% fouten " #: src/gtypist.c:2085 #, fuzzy, c-format msgid " Personal best = %6.2f wpm " msgstr " Ruwe snelheid = %6.2f wpm " #: src/gtypist.c:2087 #, fuzzy, c-format msgid " Personal best = %6.2f cpm " msgstr " Raw speed = %6.2f cpm " #: src/gtypist.c:2092 #, fuzzy msgid " new personal best " msgstr " met %.1f%% fouten " #: src/gtypist.c:2097 msgid "Y/N" msgstr "J/N" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "R/N/E" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "kan bestand niet vinden of openen" #: src/gtypist.c:2185 #, c-format msgid "%s: %s environment variable not set\n" msgstr "" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "" #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "interne fout: malloc" #: src/gtypist.c:2362 #, fuzzy msgid " internal error: fopen" msgstr "interne fout: fseek" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "" #: src/error.c:51 msgid "line" msgstr "regel" #: src/script.c:56 #, fuzzy msgid "internal error: strdup" msgstr "interne fout: fseek" #: src/script.c:158 msgid "label contains space" msgstr "" #: src/script.c:184 msgid "label redefinition" msgstr "label herdefinitie" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "" #: src/script.c:230 msgid "data shortage" msgstr "gegevenstekort" #: src/script.c:232 msgid "missing ':'" msgstr "ontbrekende ':'" #: src/script.c:238 msgid "line too long for screen" msgstr "regel te lang voor venster" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "" #~ msgid " Press Return to continue... " #~ msgstr " Druk op Return om verder te gaan... " gtypist-2.9.5/po/ru.gmo0000644000175000017500000002404312372333404011727 00000000000000L|ep3q  2 +5L>< 5&:\" - !J l   %    "  6 LT 2  &x  P     r ( C VQ !  ! #%%Kdz  *#6Zw +Q)Gd"e~))WRkvG+eP`cX44R.9]gNUg t$w& GZ~crw`>K\R!Tv1|=<# A E!'^!U!Q!O.":~"9":").#OX#<###) $ 3$<@$)}$)$`$;2%(n%,%%M%,&'&Q'Ci'%'O'4E/C- ;I3 B>@)*+G8?=(&# H2 97 <!J.%KF,5$' L1DA0":6 If not supplied, script-file defaults to '%s/%s'. with %.1f%% errors Drill Query Adjusted speed = %6.2f wpm Are you sure you want to exit this lesson? [Y/N] Press R to repeat or E to exit Press R to repeat, N for next exercise or E to exit Press RETURN or SPACE to continue, ESC to return to the menu Raw speed = %6.2f wpm Sorry, gtypist is configured to forbid skipping exercises. Tutorial You failed this test, so you need to go back to %s. Your error-rate is too high. You have to achieve %.1f%%. %s: argument format is incorrect %s: incorrect colour values %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value '%' must immediately follow value'*' must immediately follow '%'ExamplesHappy Typing! Invalid value for "E:" (out of range)Loading the script...OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageUse arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go backWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0do not ask confirmation questionsdon't beep on errorsforbid the user to skip exerciseshighlight errors with reverse videoinstructions are limited to two linesinternal error in strdupinternal error: fseekinternal error: mallocinternal error: strdupinvalid function key numberinvalid key bindinglabel '%s' not foundlabel redefinitionlineline too long for screenmissing '%'missing ':'output version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-fileset initial display colours where availableset top banner colours (background, foreground, package and version respectively)start the lesson at label 'L'try to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: GNU Typist 2.7 Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 PO-Revision-Date: 2011-08-11 13:44+0200 Last-Translator: Dmitry Rutsky Language-Team: Russian Language: ru MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Если не предоставлено, файл-сценария ставится по умолчанию как `%s/%s'. было %.1f%% ошибок Упражнение Вопрос С учётом ошибок: %6.2f WPM Вы уверены, что хотите покинуть этот урок? [Д/Н] Нажмите `П' для повторения, или `В' для выхода Нажмите `П' для повторения, `С' для следующего упражнения, или `В' для выхода Нажмите ВВОД или ПРОБЕЛ чтобы продолжить, ESC для возврата в меню Средняя скорость %6.2f WPM Извините, gtypist настроен на запрет пропуска упражнений. Указания Вы завалили этот тест, так что вам нужно обратно к %s. У вас слишком много ошибок. Нужно добиться %.1f%%. %s: формат параметра неверен %s: неверные величины цветов %s: внутренняя ошибка: malloc %s: неправильная величина цвета %s: неправильная величина периода мерцания курсора %s: неправильная максимально допустимая величина ошибки процент `%' должен сразу следовать за значениемзвёздочка `*' должна немедленно следовать за процентом `%'ПримерыСчастливой Печати! Неправильная величина для команды "E:" (вне допустимого диапазона)Загружаем сценарий...ПараметрыП/С/ВСообщайте об ошибках по адресу bug-gtypist@gnu.org (лучше на английском языке) Тест В путях из переменной окружения $GTYPIST_PATH ведётся поиск файлов сценариев. Чтобы заставить gtypist найти урок `bar.typ' в нестандартном каталогеДля запуска урока по умолчанию на английском `gtypist.typ'Чтобы запустить урок на испанскомЧтобы запустить урок в файле `test.typ' каталога `temp', начиная с метки `TEST1', используя курсор терминала, и не пищатьПопробуйте `%s --help' для более подробной информации. Использование Клавиши со стрелками для перемещения, ПРОБЕЛ для выбора и ESCAPE для возвратаНаписано by Simon BaldwinД/Н`gtypist' является программой обучения слепой печати с несколькими уроками для различных клавиатур и языков. Новые уроки могут быть с лёгкостью написаны пользователем. не удаётся найти или открыть файлпериод мерцания курсора в десятых секунды (10 по умолчанию); допустимы значения между 0 и 512; аргумент игнорируется, если указан параметр -tданные выходят за пределы экрананехватка данныхзначение по умолчанию для максимального допустимого процента ошибок (3.0 по умолчанию); допустимы значения от 0.0 до 100.0не спрашивать вопросов подтвержденияне пищать при ошибкахзапретить пользователю пропускать упражненияподсвечивать ошибки инвертированным цветомуказания к уроку ограничены двумя строкамивнутренняя ошибка в функции strdupвнутренняя ошибка в функции fseekвнутренняя ошибка в функции mallocвнутренняя ошибка: strdupнеправильный номер функциональной клавишинеправильное назначение клавишиметка `%s' не найденапереопределение меткистрокастрока слишком длинна для экранаотсутствует процент `%'пропущено двоеточие ':'вывести информацию о выпуске и закончить выполнениепереполнение в функции do_error_max_setвывести это сообщението же самое, что и -s, --silentфайл-сценарияустановить цвета терминала, если доступноустановить цвета верхней строчки (задний фон, передний фон, название пакета и номер версии соответственноначать урок с метки 'L'попробовать подражать текстовым редакторамвыключить измерение WPM в упражненияхнеизвестная командаиспользовать "физический" курсор терминалаgtypist-2.9.5/po/tr.po0000644000175000017500000002767012372332140011567 00000000000000# Turkish translations for GNU Typist package. # Copyright (C) 2011 Simon Baldwin # This file is distributed under the same license as the GNU Typist package. # # Gökçen Eraslan , 2011. msgid "" msgstr "" "Project-Id-Version: GNU Typist 2.9beta1\n" "Report-Msgid-Bugs-To: bug-gtypist@gnu.org\n" "POT-Creation-Date: 2014-08-12 07:29+0100\n" "PO-Revision-Date: 2011-10-28 00:40+0300\n" "Last-Translator: Gökçen Eraslan \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.2\n" #: src/gtypist.c:295 msgid "internal error in strdup" msgstr "strdup'ta hata" #: src/gtypist.c:507 msgid "invalid key binding" msgstr "geçersiz tuş ataması" #: src/gtypist.c:509 msgid "invalid function key number" msgstr "geçersiz fonksiyon tuş numarası" #: src/gtypist.c:547 src/gtypist.c:655 src/gtypist.c:946 msgid "data exceeds screen length" msgstr "veri ekran boyunu aşıyor" #: src/gtypist.c:590 msgid "instructions are limited to two lines" msgstr "talimatlar iki satırla sınırlıdır" #: src/gtypist.c:853 src/gtypist.c:1129 src/script.c:313 msgid "internal error: fseek" msgstr "iç hata: fseek" #: src/gtypist.c:1451 #, no-c-format msgid "'*' must immediately follow '%'" msgstr "'*' karakteri '%' karakterinin hemen ardından gelmeli" #: src/gtypist.c:1454 src/gtypist.c:1457 #, no-c-format msgid "missing '%'" msgstr "eksik '%'" #: src/gtypist.c:1461 #, no-c-format msgid "'%' must immediately follow value" msgstr "'%' karakteri bir değerin ardından gelmeli" #: src/gtypist.c:1470 msgid "overflow in do_error_max_set" msgstr "do_error_max_set fonksiyonunda taşma" #: src/gtypist.c:1490 msgid "Invalid value for \"E:\" (out of range)" msgstr "geçersiz \"E:\" değeri (aralık dışında)" #: src/gtypist.c:1545 src/script.c:307 #, c-format msgid "label '%s' not found" msgstr "'%s' etiketi bulunamadı" #: src/gtypist.c:1611 msgid "unknown command" msgstr "bilinmeyen komut" #: src/gtypist.c:1729 msgid "track personal best typing speeds" msgstr "kişisel hız rekorlarını takip et" #: src/gtypist.c:1730 msgid "" "default maximum error percentage (default 3.0); valid values are between 0.0 " "and 100.0" msgstr "" "öntanımlı azami hata yüzdesi (default 3.0); gerçerli değerler 0.0 ile 100.0 " "arasındadır" #: src/gtypist.c:1732 msgid "turn off WPM timer in drills" msgstr "atış talimlerinde WPM sayacını kapat" #: src/gtypist.c:1733 msgid "use the terminal's hardware cursor" msgstr "terminalin donanım imlecini kullan" #: src/gtypist.c:1734 msgid "" "cursor flash period P*.1 sec (default 10); valid values are between 0 and " "512; this is ignored if -t is specified" msgstr "" "imleç görünme süresi P * 0.1 sn. (öntanımlı 10); geçerli değerler 0 ile 512 " "arasındadır; bu değer -t verildiğinde yoksayılacaktır" #: src/gtypist.c:1736 msgid "set initial display colours where available" msgstr "mümkünse renkleri değiştir" #: src/gtypist.c:1737 msgid "don't beep on errors" msgstr "hatalarda bipleme" #: src/gtypist.c:1738 msgid "same as -s, --silent" msgstr "-s, --silent ile aynıdır" #: src/gtypist.c:1739 msgid "start the lesson at label 'L'" msgstr "'L' ile etiketli dersten başla" #: src/gtypist.c:1740 msgid "try to mimic word processors" msgstr "kelime işlemcileri taklit et" #: src/gtypist.c:1741 msgid "forbid the user to skip exercises" msgstr "kullanıcının dersleri atlamasını engelle" #: src/gtypist.c:1742 msgid "highlight errors with reverse video" msgstr "hataları tersine video göstererek vurgula" #: src/gtypist.c:1743 msgid "print this message" msgstr "bu metni yazdırır" #: src/gtypist.c:1744 msgid "output version information and exit" msgstr "sürüm bilgisini yazdır ve çık" #: src/gtypist.c:1745 msgid "do not ask confirmation questions" msgstr "onay soruları sorma" #: src/gtypist.c:1746 msgid "" "set top banner colours (background, foreground, package and version " "respectively)" msgstr "en üst şeritin renklerini değiştir (arkaplan, önplan, paket ve sürüm)" #: src/gtypist.c:1748 msgid "set scoring mode (words per minute or characters per minute)" msgstr "puanlama kipini değiştir (dakikadaki kelime ya da karakter sayısı)" #: src/gtypist.c:1752 #, c-format msgid "" "`gtypist' is a typing tutor with several lessons for different keyboards and " "languages. New lessons can be written by the user easily.\n" "\n" msgstr "" "`gtypist' çeşitli klavyeler ve diller için bir çok ders içeren bir yazım " "eğitim uygulamasıdır. Kullanıcılar da kolayca yeni dersler ekleyebilirler.\n" "\n" #: src/gtypist.c:1756 msgid "Usage" msgstr "Kullanım" #: src/gtypist.c:1756 msgid "options" msgstr "seçenekler" #: src/gtypist.c:1756 msgid "script-file" msgstr "betik-dosyası" #: src/gtypist.c:1757 msgid "Options" msgstr "Seçenekler" #: src/gtypist.c:1764 #, c-format msgid "" "\n" "If not supplied, script-file defaults to '%s/%s'.\n" msgstr "" "\n" "Verilmediğinde, betik dosyası '%s/%s' olarak alınır.\n" #: src/gtypist.c:1766 #, c-format msgid "" "The path $GTYPIST_PATH is searched for script files.\n" "\n" msgstr "" "Betikleri bulmak için $GTYPIST_PATH yolu kullanılır.\n" "\n" #: src/gtypist.c:1768 msgid "Examples" msgstr "Örnekler" #: src/gtypist.c:1770 msgid "To run the default lesson in english `gtypist.typ'" msgstr "Öntanımlı İngilizce ders olan `gtypist.typ' betiğini başlatmak için" #: src/gtypist.c:1772 msgid "To run the lesson in spanish" msgstr "Dersi İspanyolca başlatmak için" #: src/gtypist.c:1774 msgid "" "To instruct gtypist to look for lesson `bar.typ' in a non standard directory" msgstr "" "gtypist'in standart bir dizinde olmayan `bar.typ' betiğini bulması için" #: src/gtypist.c:1777 msgid "" "To run the lesson in the file `test.typ' of directory `temp', starting at " "label `TEST1', using the terminal's cursor, and run silently" msgstr "" "`temp' dizinindeki `test.typ' betiğini `TEST1' etiketinden başlayıp, " "terminal imlecini kullanarak, sessizce çalıştırmak için" #: src/gtypist.c:1780 msgid "Report bugs to bug-gtypist@gnu.org" msgstr "Hataları bug-gtypist@gnu.org adresine bildirebilirsiniz" #: src/gtypist.c:1829 #, c-format msgid "%s: invalid error-max value\n" msgstr "%s: geçersiz error-max değeri\n" #: src/gtypist.c:1845 #, c-format msgid "%s: invalid curs-flash value\n" msgstr "%s: geçersiz curs-flash değeri\n" #: src/gtypist.c:1856 #, c-format msgid "%s: invalid colours value\n" msgstr "%s: geçersiz colours değeri\n" #: src/gtypist.c:1866 #, c-format msgid "%s: argument format is incorrect\n" msgstr "%s: argüman biçimi yanlış\n" #: src/gtypist.c:1876 #, c-format msgid "%s: incorrect colour values\n" msgstr "%s: geçersiz renk değerleri\n" #: src/gtypist.c:1885 src/gtypist.c:1898 #, c-format msgid "%s: invalid scoring mode" msgstr "%s: geçersiz puanlama kipi" #: src/gtypist.c:1911 #, c-format msgid "%s: internal error: malloc\n" msgstr "%s: iç hata: malloc\n" #: src/gtypist.c:1932 msgid "Written by Simon Baldwin" msgstr "Simon Baldwin tarafından yazılmıştır" #: src/gtypist.c:1941 src/gtypist.c:1948 #, c-format msgid "Try '%s --help' for more information.\n" msgstr "Daha fazla bilgi için '%s --help' komutunu kullanın\n" #: src/gtypist.c:2023 msgid "" "Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Simon Baldwin.\n" "Copyright (C) 2003, 2004, 2008, 2011 GNU Typist Development Team.\n" "This program comes with ABSOLUTELY NO WARRANTY; for details\n" "please see the file 'COPYING' supplied with the source code.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; again, see 'COPYING' for details.\n" "This program is released under the GNU General Public License." msgstr "" #: src/gtypist.c:2031 msgid " Tutorial " msgstr " Eğitim " #: src/gtypist.c:2033 msgid " Query " msgstr " Sorgu " #: src/gtypist.c:2035 msgid " Drill " msgstr " Atış talimi " #: src/gtypist.c:2037 msgid "Speed test" msgstr "Hız testi" #: src/gtypist.c:2039 msgid " Press RETURN or SPACE to continue, ESC to return to the menu " msgstr "" " Devam etmek için SPACE ya da ENTER tuşuna, ana menüye dönmek içinse ESC'ye " "basın " #: src/gtypist.c:2042 #, c-format msgid " Your error-rate is too high. You have to achieve %.1f%%. " msgstr "Hata oranı çok yüksek. %.1f%% oranına ulaşmanız gerekiyor. " #: src/gtypist.c:2046 #, c-format msgid " You failed this test, so you need to go back to %s. " msgstr " Bu testi geçemediniz, %s bölümüne dönmeniz gerekiyor. " #: src/gtypist.c:2050 msgid " Press R to repeat, N for next exercise or E to exit " msgstr "" " Tekrarlamak için T'ye, devam etmek için D'ye, çıkmak içinse Ç'ye basın" #: src/gtypist.c:2054 msgid " Press R to repeat or E to exit " msgstr " Tekrarlamak için T'ye ya da çıkmak için Ç'ye basın " #: src/gtypist.c:2057 msgid " Are you sure you want to exit this lesson? [Y/N] " msgstr " Bu dersten çıkmak istediğinize emin misiniz? [E/H] " #: src/gtypist.c:2061 msgid " Sorry, gtypist is configured to forbid skipping exercises. " msgstr " Üzgünüm, gtypist alıştırmaları geçmenizi engellemek üzere ayarlandı. " #: src/gtypist.c:2066 #, c-format msgid " Raw speed = %6.2f wpm " msgstr " Ham sürat = %6.2f wpm " #: src/gtypist.c:2068 #, c-format msgid " Raw speed = %6.2f cpm " msgstr " Ham sürat = %6.2f cpm " #: src/gtypist.c:2073 #, c-format msgid " Adjusted speed = %6.2f wpm " msgstr " Düzenlenmiş sürat = %6.2f wpm " #: src/gtypist.c:2075 #, c-format msgid " Adjusted speed = %6.2f cpm " msgstr " Düzenlenmiş sürat = %6.2f cpm " #: src/gtypist.c:2080 #, c-format msgid " with %.1f%% errors " msgstr " %.1f%% hata oranı " #: src/gtypist.c:2085 #, c-format msgid " Personal best = %6.2f wpm " msgstr " Kişisel rekor = %6.2f wpm " #: src/gtypist.c:2087 #, c-format msgid " Personal best = %6.2f cpm " msgstr " Kişisel rekor = %6.2f cpm " #: src/gtypist.c:2092 msgid " new personal best " msgstr " yeni kişisel rekor " #: src/gtypist.c:2097 msgid "Y/N" msgstr "E/H" #: src/gtypist.c:2107 msgid "R/N/E" msgstr "T/D/Ç" #: src/gtypist.c:2170 msgid "can't find or open file" msgstr "dosya bulunamadı ya da açılamadı" #: src/gtypist.c:2185 #, fuzzy, c-format msgid "%s: %s environment variable not set\n" msgstr "%s: HOME çevre değişkeni ayarlanmamış\n" #: src/gtypist.c:2237 msgid "Loading the script..." msgstr "Betik yükleniyor..." #: src/gtypist.c:2278 src/gtypist.c:2295 src/gtypist.c:2311 src/gtypist.c:2353 #: src/gtypist.c:2370 src/script.c:142 src/script.c:166 src/script.c:256 msgid "internal error: malloc" msgstr "İç hata: malloc" #: src/gtypist.c:2362 msgid " internal error: fopen" msgstr " iç hata: fopen" #: src/cursmenu.c:324 msgid "" "Use arrowed keys to move around, SPACE or RETURN to select and ESCAPE to go " "back" msgstr "" "Gezinmek için ok tuşlarını, seçmek için SPACE ya da RETURN tuşlarını ve " "geriye gitmek için de ESC tuşunu kullanın." #: src/error.c:51 msgid "line" msgstr "satır" #: src/script.c:56 msgid "internal error: strdup" msgstr "iç hata: strdup" #: src/script.c:158 msgid "label contains space" msgstr "etiket boşluk içeriyor" #: src/script.c:184 msgid "label redefinition" msgstr "etiket tekrar tanımlanmış" #: src/script.c:228 msgid "Invalid multibyte sequence (wrong encoding?)" msgstr "Geçersiz çokbaytlı sıralama (yanlış kodlama?)" #: src/script.c:230 msgid "data shortage" msgstr "veri yetersiz" #: src/script.c:232 msgid "missing ':'" msgstr "eksik ':'" #: src/script.c:238 msgid "line too long for screen" msgstr "satır bu ekran için fazla uzun" #: src/script.c:330 src/script.c:334 #, c-format msgid "" "Happy Typing!\n" "\n" msgstr "" "Neşeli Yazmalar!\n" "\n" #: src/utf8.c:61 msgid "couldn't convert UTF-8 to wide characters" msgstr "UTF-8 geniş karaktere çevrilemedi" #: src/utf8.c:172 msgid "error in setcchar()" msgstr "setcchar() fonksiyonunda hata" gtypist-2.9.5/po/en@quot.header0000644000175000017500000000226312231002500013342 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # gtypist-2.9.5/po/zh_TW.gmo0000644000175000017500000001221512372333404012332 00000000000000;O3 = ] hs  !*Ll%u" 6L2[&2Y_x| r  V  !& %H n          #) M j } +    " "2 ^U / !  !  B cp%BI$O t0E)"u8* !d J.y 8IM c q| $/Hdt6'(8:;/)5 14#32 $!+"7,9 .-0 *&% If not supplied, script-file defaults to '%s/%s'. with %.1f%% errors Drill Query Adjusted speed = %6.2f wpm Raw speed = %6.2f wpm Tutorial %s: internal error: malloc %s: invalid colours value %s: invalid curs-flash value %s: invalid error-max value '%' must immediately follow value'*' must immediately follow '%'ExamplesInvalid value for "E:" (out of range)OptionsR/N/EReport bugs to bug-gtypist@gnu.orgSpeed testThe path $GTYPIST_PATH is searched for script files. To instruct gtypist to look for lesson `bar.typ' in a non standard directoryTo run the default lesson in english `gtypist.typ'To run the lesson in spanishTo run the lesson in the file `test.typ' of directory `temp', starting at label `TEST1', using the terminal's cursor, and run silentlyTry '%s --help' for more information. UsageWritten by Simon BaldwinY/N`gtypist' is a typing tutor with several lessons for different keyboards and languages. New lessons can be written by the user easily. can't find or open filecursor flash period P*.1 sec (default 10); valid values are between 0 and 512; this is ignored if -t is specifieddata exceeds screen lengthdata shortagedefault maximum error percentage (default 3.0); valid values are between 0.0 and 100.0don't beep on errorsforbid the user to skip exercisesinstructions are limited to two linesinternal error: fseekinternal error: mallocinvalid function key numberinvalid key bindinglabel '%s' not foundlabel redefinitionlineline too long for screenmissing '%'missing ':'output version information and exitoverflow in do_error_max_setprint this messagesame as -s, --silentscript-fileset initial display colours where availablestart the lesson at label 'L'try to mimic word processorsturn off WPM timer in drillsunknown commanduse the terminal's hardware cursorProject-Id-Version: GNU Typist 2.6 Report-Msgid-Bugs-To: bug-gtypist@gnu.org POT-Creation-Date: 2014-08-12 07:29+0100 PO-Revision-Date: 2011-08-11 13:50+0200 Last-Translator: OLS3 Language-Team: OLS3 Language: zh_TW MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 若沒有提供,指令檔預設為 '%s/%s'. 有 %.1f%% 錯誤 練習 查詢 已調整速度 = %6.2f wpm 原始速度 = %6.2f wpm 教學 %s: 內部錯誤: malloc %s: 無法的 colours 值 %s: 無效的 curs-flash 值 %s: 無效的 error-max 值 '%' 必須立即接著值'*' 必須立即接著 '%'範例無效的值 於 "E:" (超出範圍)選項R/N/E臭虫報告給 bug-gtypist@gnu.org 速度測驗路徑 $GTYPIST_PATH 為此指令檔被搜尋. 在一個非標準目錄中,命令 gtypist 去尋找 `bar.typ' 課程打開預設課程為英語 'gtypist.typ'打開 spanish 課程執行 'temp' 目錄中的 'test.typ' 的課程, 由 標示 `TEST1' 開始, 使用終端游標, 而且安靜地執行試 '%s --help' 可得到較多的資訊. 使用法作者 Simon BaldwinY/N'gtypist' 是一個打字教學軟體,支援不同的鍵盤和語言。新的課程可以由使用者很容易的設計出來。 找不到 或 無法開啟 檔案游標閃爍周期 P*1 秒 (預設 10); 有效值介於 0 和 512; 若 -t 有設定, 這將被忽略資料超出螢幕長度資料 不足預設最大的錯誤百分比 (預設 3.0); 有效值介於 9.0 和 100.0錯誤發生時不叫響禁止使用者跳過練習指令只限於二列長內部錯誤: fseek內部錯誤: malloc無效的功能鍵數字無效的按鍵組合標示 '%s' 沒有找到標示 重定義列列太長超出螢幕缺少了 '%'缺少 ':'輸出版本資訊然後離開溢位於 do_error_max_set顯示這個訊息和 -s, --silent 相同指令-檔設定可用的初始化顯示顏色由標示 'L' 的課程開始嘗試模擬字節處理關閉 WPM 計時於 drills未知的命令使用終端硬體游標gtypist-2.9.5/config.sub0000755000175000017500000010563412333512665012155 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-05-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gtypist-2.9.5/doc/0000755000175000017500000000000012372333426011005 500000000000000gtypist-2.9.5/doc/gtypist.es.html0000644000175000017500000032627412372333424013740 00000000000000 Manual de GNU Typist

Manual de GNU Typist

Índice General

GNU Typist, el tutor mecanográfico

Este es el manual de GNU Typist (versión 2.9.5, 18 August 2013), un programa para aprender a mecanografiar en varios idiomas y con distintas disposiciones de teclado.

Copyright © 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc.

Copyright © de la traducción 2010-11, TMJQ, SL.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.

GNU Typist es un tutor interactivo de mecanografiado que ayuda a escribir correctamente. Tiene varias lecciones para diversas disposiciones de teclado y en diferentes idiomas. Las lecciones de gtypist se describen en un lenguaje de script de fácil aprendizaje que el usuario puede emplear para modificar las lecciones existentes o crear nuevas.


Distribución

GNU Typist (o gtypist) es software libre; esto significa que cualquier persona es libre de usarlo y libre de redistribuirlo bajo ciertas condiciones. Las condiciones precisas se establecen en la Licencia General Pública de GNU que viene con este programa y sigue a esta sección.

GNU Typist se puede obtener de un amigo o de Internet:

Sitio de distribución oficial

ftp://ftp.gnu.org/gnu/gtypist/

Página web oficial

http://www.gnu.org/software/gtypist/gtypist.html

Página web oficial replicada en castellano

http://gnu.manticore.es/paginas-replica/gtypist/gtypist.es.html

Manual en la web (en inglés)

http://www.gnu.org/software/gtypist/doc/gtypist.html

Manual en la web (en español)

http://www.manticore.es/cgi-bin/info2html.cgi?(gtypist.es-utf8)Top

Página web de la sección de desarrollo (repositorio Git, tareas, asistencia...)

http://savannah.gnu.org/projects/gtypist/


GNU GENERAL PUBLIC LICENSE

Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. http://fsf.org/

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for software and other kinds of works.

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program—to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.

To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.

For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.

Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS

  1. Definitions.

    “This License” refers to version 3 of the GNU General Public License.

    “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

    “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

    To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

    A “covered work” means either the unmodified Program or a work based on the Program.

    To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

    To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

    An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

  2. Source Code.

    The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

    A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

    The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

    The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

    The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

    The Corresponding Source for a work in source code form is that same work.

  3. Basic Permissions.

    All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

    You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

    Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

  4. Protecting Users’ Legal Rights From Anti-Circumvention Law.

    No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

    When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures.

  5. Conveying Verbatim Copies.

    You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

    You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

  6. Conveying Modified Source Versions.

    You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

    1. The work must carry prominent notices stating that you modified it, and giving a relevant date.
    2. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
    3. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
    4. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.

    A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

  7. Conveying Non-Source Forms.

    You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

    1. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
    2. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
    3. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
    4. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
    5. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.

    A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

    A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

    “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

    If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

    The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

    Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

  8. Additional Terms.

    “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

    When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

    Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

    1. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
    2. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
    3. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
    4. Limiting the use for publicity purposes of names of licensors or authors of the material; or
    5. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
    6. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.

    All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

    If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

    Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

  9. Termination.

    You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

    However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

    Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

    Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

  10. Acceptance Not Required for Having Copies.

    You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

  11. Automatic Licensing of Downstream Recipients.

    Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

    An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

    You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

  12. Patents.

    A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”.

    A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

    Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

    In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

    If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

    If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

    A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

    Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

  13. No Surrender of Others’ Freedom.

    If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

  14. Use with the GNU Affero General Public License.

    Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

  15. Revised Versions of this License.

    The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

    Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

    If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

    Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

  16. Disclaimer of Warranty.

    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  17. Limitation of Liability.

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

  18. Interpretation of Sections 15 and 16.

    If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.

one line to give the program's name and a brief idea of what it does.
Copyright (C) year name of author

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see http://www.gnu.org/licenses/.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:

program Copyright (C) year name of author
This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
This is free software, and you are welcome to redistribute it
under certain conditions; type ‘show c’ for details.

The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”.

You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see http://www.gnu.org/licenses/.

The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read http://www.gnu.org/philosophy/why-not-lgpl.html.


1 Introducción

GNU Typist es un programa tutor interactivo de mecanografiado. Emplea un fichero de entrada para crear una serie de tutorías de mecanografiado, ejercicios y pruebas de velocidad. Está pensado para su uso en terminales sin gráficos. Ha sido compilado y usado en GNU/Linux y Unix (OpenBSD, AIX, Solaris) y también en DOS/Windows (DOS 6.22, Windows 95, 98, NT y XP).

El programa lee lecciones escritas en un lenguaje de script de fácil aprendizaje. Se distribuye con unas cuantas lecciones completas y de calidad. Se pueden usar como están, modificarlas o crear lecciones nuevas (véase Lecciones nuevas y véase Sintaxis de las lecciones).

Si no se especifica un fichero de script en la línea de comandos, se usará uno predeterminado gtypist.typ. (Véanse los detalles acerca de la ruta en la sección véase Variables de entorno).

La línea superior de la pantalla muestra una leyenda. La línea inferior muestra una línea de mensaje, consultas y otra información de estado. Las líneas intermedias se usan para las tutorías, los ejercicios y las pruebas de velocidad.

Existen dos tipos de ejercicios de tecleado: entrenamientos y pruebas de velocidad.

En un entrenamiento, gtypist muestra texto cada dos líneas de la pantalla y espera que el usuario teclee correctamente el mismo texto exacto en las líneas intermedias. Los errores de mecanografiado se indican con un ‘^’ inverso, o ‘>’ si el carácter es un salto de línea y al final del ejercicio calcula la tasa real y efectiva de palabras por minuto (WPM). Si hubiera demasiados errores, se re-ejecutará el entrenamiento.

No se permite la corrección de errores cometidos.

En las pruebas de velocidad, gtypist muestra texto en la pantalla, y espera a que el usuario sobre-escriba correctamente el mismo texto exacto. Indica los errores mecanográficos y al final de la prueba calcula la tasa real y efectiva en WPM. Si hubiera demasiados errores, se re-ejecuta la prueba de velocidad. Se permite la corrección de errores cometidos, pero aún así se acumulan.

Si ya se han cometido demasiadas equivocaciones, se puede usar ESC para salir y comenzar de nuevo. La manera de saltarse una lección es presionar dos veces ESC. Cuando se completa una lección, se le pregunta al usuario si quiere repetirla.

También hay unos ejercicios de “sólo prácticas” (tanto entrenamientos como pruebas de velocidad) que no se querrán repetir. Pero no decimos cuándo se presentan, así que habrá que seguir intentando superarse ;-)

En los informes de velocidad de escritura, se considera que una palabra tiene cinco caracteres, así que las WPM son el número de caracteres del pasaje de la prueba dividido por cinco y nuevamente dividido por la cantidad de minutos transcurridos en su escritura. Cada error se cuenta como una palabra mal escrita.

Si se prefiere, la velocidad se puede mostrar en Pulsaciones por Minuto (CPM) (caracteres por minuto, en inglés). Esto se puede especificar con “–scoring=cpm” en la línea de comandos.

[NdT: en España nunca he oído hablar de “palabras por minuto”, siempre de “pulsaciones por minuto”. La obligación de especificar esa opción en la línea de comandos es engorrosa para aquellos que sólo cuentan ppm. Lo propio es que hubiera un fichero de configuración o alguna otra vía para elegir de manera permanente.]


2 Invocación

La sintaxis para invocar GNU Typist es:

gtypist [ Opciones... ] [ fichero ]

A continuación se dan las opciones existentes (su forma larga no se admite en DOS):

-e, --error-max

Especifica el porcentaje de error máximo. El valor predeterminado es 3.0 y debe estar entre 0.0 y 100.0. Existe un comando de fichero de script (véase Sintaxis de las lecciones) que sólo sobre-escribe esto si es estrictamente (menor). Este valor se ignora en los ejercicios de “sólo práctica”.

-n, --notimer

Gtypist muestra la velocidad de escritura en WPM después de los tests de prácticas y de velocidad. Sin embargo, las lecciones parecen haber sido escritas para un programa que sólo hace esto para tests de velocidad. Para hacer que gtypist se comporte de manera que concuerde con las lecciones, esto es, para suprimir los informes de WPM en las prácticas, se usa -n o --notimer.

-t, --term-cursor

Gtypist crea su propio cursor parpadeante de bloque en la pantalla, para ayudar a distinguir entre el cursor y las indicaciones de error de vídeo inverso. Si se establece -t o --term-cursor se suprime esto y fuerza al programa a usar el cursor de la terminal.

-f, --curs-flash

Establece el periodo de parpadeo del cursor de bloque en décimas de segundo. El valor 0 indica que no haya parpadeo. El predeterminado es 10 y el máximo 512. Esta opción queda ignorada si se han establecido -t o --term-cursor.

-c, --colo[u]rs

En su estado normal, gtypist sólo usa atributos de vídeo normal e inverso en modo monocromo. Esta opción se puede usar para especificar en este orden los colores delantero y de fondo en terminales que admitan colores. Estos se especifican como dos enteros, en el intervalo entre 0 y 7, separados por comas. Los códigos de color del 0 al 7 indican negro, rojo, verde, amarillo, azul, magenta, cian y blanco, respectivamente. La cadena de colores predeterminada es 7,0 (blanco sobre negro). Se ignora esta opción si la terminal no admite colores.

-s, --silent

Cuando gtypist detecta un error mecanográfico, sonará la terminal. Esta opción se usa para silenciarla.

-q, --quiet

Lo mismo que -s o --silent.

-l, --start-label

Especifica la etiqueta del fichero de script en la que gtypist comienza la ejecución (hay información acerca de las etiquetas más abajo, donde se habla de los ficheros de script y de los comandos). Si esta opción no se usa, gtypist comienza la ejecución en la primera línea del fichero.

-w, --word-processor

Con esta opción, gtypist procura imitar a los procesadores de texto en ciertas maneras cuando ejecuta un ejercicio. Tratará el espacio al final de una línea como un carácter tecleado correctamente y con ajuste de párrafo. Tratará la tecla Retorno al final de una línea como señal de que se mueva al comienzo del siguiente párrafo si fuera de aplicación. Comprimirá los espacios múltiples en uno solo. Y se saltará sobre los guiones que encuentre al final de línea.

-k, --no-skip

Prohíbe al usuario saltarse las lecciones o salir de ellas por medio de ESC ESC.

-i, --show-errors

Resalta los errores con vídeo inverso.

-S, --always-sure

Salta las preguntas de confirmación.

--banner-colo[u]rs

Cambia el color de las leyendas situadas en la parte superior de la pantalla. Los valores de color son los mismos que los del comando –colo[u]rs. El predeterminado es 0,6,5,1; delantero en negro, fondo en cian, nombre de programa en magenta y nombre de la versión en rojo.

--scoring

Cambia la manera de medición. Puede ser WPM y CPM, siendo la predeterminada la WPM.

También se puede establecer la variable de entorno LANG si se desea ejecutar gtypist en el idioma nativo. Véase Variables de entorno.

En algunos idiomas como el español, los mensajes de la interfaz suelen ser más largos que en inglés. Por tanto, quizás sea necesario agrandar la terminal antes de invocar el programa. De lo contrario, el texto de abajo a la izquierda puede solaparse con la cadena de abajo a la derecha.

Ejemplos:

Para ejecutar las lecciones predeterminadas gtypist.typ:
gtypist

Para ejecutar la lección en español:
gtypist esp.typ

Para indicarle a gtypist que busque una lección bar.typ en un directorio no estándar /home/foo:
export GTYPIST_PATH="/home/foo" gtypist bar.typ

Para ejecutar las lecciones del fichero test.typ del directorio /tmp, comenzando con la etiqueta TEST1 y empleando el cursor de la terminal de manera silenciosa:
gtypist -t -q -l TEST1 /tmp/test.typ


3 Lecciones suministradas

GNU Typist viene con las siguientes lecciones:

q.typ

Curso rápido de QWERTY en inglés.

r.typ

Curso largo de QWERTY en inglés.

t.typ

Mecanografía al tacto QWERTY en inglés.

v.typ

Otro QWERTY en inglés.

w.typ

Repaso de QWERTY en inglés.

d.typ

Mecanografía al tacto Dvorak en inglés.

m.typ

Entrenamiento mecanográfico en inglés.

s.typ

Entrenamiento de velocidad en inglés.

n.typ

Teclado numérico en inglés.

gtypist.typ

Compendio de todas las lecciones anteriores en inglés.

esp.typ

Curso QWERTY en español.

cs.typ

Lecciones en checo.

ru.typ

Lecciones en ruso.

kt*.typ

Estas lecciones son las estándares de Ktouch 1.0, convertidas a formato de fichero gtypist mediante tools/ktouch2typ.pl.

Los ficheros se llaman ktde.typ (german.ktouch), kten.typ (english.ktouch), ktfr.typ (french.ktouch), ktfr2.typ (french-2.ktouch), ktno.typ (norwegian.ktouch) ktdk.typ (danish.ktouch), ktdk2.typ (danish-2.ktouch), ktdvorak.typ (dvorak.ktouch) and ktnumber.typ (number.ktouch).

ttde.typ

Se trata de la lección en alemán de tipptrainer, convertida mediante tools/tt2typ.pl.

De encontrarse errores en estas lecciones, o si se corrigen de algún modo o se escriben lecciones nuevas, rogamos que se publiquen con una licencia libre y nos lo comuniquen a bug-gtypist@gnu.org.


4 Uso de typefortune

typefortune permite practicar con textos del programa fortune.

SYNTAX: typefortune [-dslh] [-n count] [-o <gtypist_opts>]

-d

Usa D: en vez de S:.

-s

Ejecuta fortune con -s.

-l

Ejecuta fortune con -l.

-n cantidad

Practica esa cantidad de fortunas.

-o opción

Pasa opciones a gtypist, en la forma opción (opción booleana, e.d. -o word-processor), opción,valor (opción con valor, e.d. -o e,1.0) donde la opción es el nombre de la opción (corta o larga) removidos todos los guiones antepuestos. Hace falta entrecomillar el argumento de -o si se va a especificar más de uno: typefortune -n 3 -o 'silent e,5 word-processor'.


5 Comandos del fichero de script

GNU Typist lee los datos de sus lecciones de mecanografía desde un fichero. Con la excepción de los comentarios y de las líneas en blanco, cada línea del fichero está en el formato

carácter_del_comando : datos_del_comando

Aquí, carácter_del_comando es un código de carácter único que define una acción que ha de hacer gtypist, y datos_del_comando son los datos para ese comando. Si carácter_del_comando es un carácter de espacio, eso indica que la línea es continuación del comando precedente que no sea un espacio. El separador ‘:’ debe estar en la columna dos de la línea.

Las líneas de comentarios son aquellas que comienzan con un carácter ‘#’ y se ignoran, como se hace igualmente con las líneas en blanco. Las líneas de comentario pueden tener cualquier formato siempre que comiencen con ‘#’; las líneas restantes deben tener el formato de arriba.

Será conveniente leer la introducción para familiarizarse con los fundamentos: Véase Introduccion.

La siguiente es la lista de valores carácter_del_comando válidos:

B

Este comando limpia la pantalla entera. Si hay presente algún datos_del_comando, se muestra en la leyenda de una línea que hay en la parte superior de la pantalla y permanece ahí hasta el siguiente comando B. Este comando no se puede continuar en la línea siguiente; es un comando de una sola línea.

T

Presenta una tutoría y se trata de un comando multi-línea, hasta el límite de la longitud de la pantalla. Cada línea del comando simplemente se imprime en la pantalla. Este comando limpia toda la pantalla por debajo de la línea de la leyenda superior. Después de producirse la visualización, el programa espera antes de proceder.

*

Esto indica una etiqueta en el fichero. La etiqueta puede ser el destino de un comando G, Y, N o F. Las etiquetas pueden contener cualesquier caracteres, incluso espacios, y son comandos de una sola línea. Han de ser únicas dentro de los ficheros de lecciones. Se ignora el espacio en blanco al final de las etiquetas.

I

El comando I puede mostrar algunas breves instrucciones por encima de un entrenamiento o prueba de velocidad. Sólo se permite como máximo dos líneas. A diferencia del comando T, no espera por ninguna otra pulsación de tecla antes de proceder. Así que realmente siempre le debería seguir un ejercicio. Limpia el área entera de ejercicios de la pantalla, así que en este sentido es como un T de dos líneas.

M

Este comando es la nueva vía para crear menús (desde gtypist 2.7). Esta es la sintaxis:

M: [UP=ETIQUETA_DE-RETORNO|_EXIT] "título"
 :ETIQUETA1 "elemento1"
 :ETIQUETA2 "elemento2"
 ...

Esto muestra un menú conveniente compuesto por los elementos especificados y deja que el usuario elija uno de ellos. Si se selecciona un elemento, gtypist continúa la ejecución del script a partir de la etiqueta correspondiente. Si se presionó la tecla Escape y la etiqueta UP está definida, gtypist va igualmente a la etiqueta UP, o sale de allí, si hay un ``_EXIT'' en lugar de la etiqueta. Si la etiqueta UP no está definida, gtypist intenta regresar al menú anterior y salta a la última etiqueta encontrada en el script anterior al comando M previo. Si no hubiera tal etiqueta y se mostró algún menú antes del actual, gtypist se limitará a ir al comienzo del script. Si no se cumple ninguna de las condiciones anteriores, gtypist sale del script.

Los detalles de arriba hacen natural la creación de jerarquías de menús sin tener que usar etiquetas UP.

El título y todas las descripciones deben encerrarse entre comillas (""). Además debe haber como mínimo un espacio entre UP=XXX y "título" y entre las etiquetas y las descripciones correspondientes.

Este comando se introdujo como una vía para disponer fácilmente diversas partes de los ficheros de lecciones en una única jerarquía de menú, así como reemplazo para los antiguos menús de la tecla F. Hay ejemplos en los ficheros de lecciones.

D,d

Este comando se llama entrenamiento y es uno de los dos tipos de ejercicios mecanográficos.

Es un comando multi-línea. El texto se muestra en cada línea alterna, y el usuario escribe en las intermedias. Debido a ello, no se puede usar más de 11 líneas de contenido.

Este tipo de ejercicio se supone que está para el entrenamiento de los dedos (e.d. jfjfjjf), pero también puede contener palabras y frases completas si se usan para practicar algo (e.d. una letra/sílaba/"grip") y no son textos reales.

La versión en minúscula d es un entrenamiento de “sólo práctica”; el usuario no tiene que repetirlo si tiene demasiadas equivocaciones.

S,s

Este es el segundo tipo de ejercicio de mecanografía: la prueba de velocidad.

Es un comando multi-línea. Muestra su texto en pantalla y le pide al usuario que escriba sobre él. Es el motivo por lo que se puede tener hasta 22 líneas de texto en estos ejercicios. En las pruebas de velocidad se pueden corregir los fallos, pero con ello no se disminuye la cuenta de errores.

Las pruebas de velocidad se deberían usar para mecanografiar (principalmente) frases completas, textos o ficheros (e.d. cartas, ficheros texinfo/html/tex).

La versión en minúscula s es una prueba de velocidad de sólo práctica: el usuario no tiene que repetirla en el caso de cometer demasiados fallos.

G

Causa que ‘gtypist’ vaya a la etiqueta que hay en datos_del_comando y continúe allí la ejecución del script. Consiste en una única línea de comandos.

Q

Este comando presenta un texto en la línea de mensajes y espera por una respuesta de Y o N antes de proceder. Se ignora el resto de caracteres.

Como efecto colateral, se puede presionar una tecla de función si está asociada (una vía ya desaconsejada de crear el indicador de los menús).

Y

Es como G, excepto que el goto se ejecuta sólo si el resultado del último comando Q fue Y.

N

Es como G, excepto que el goto se ejecuta sólo si el resultado del último comando Q fue N.

K

Esta comando está desaconsejado en favor de M: Este comando asocia una tecla de función a una etiqueta. El formato de la línea de datos que sigue a este comando debe ser fkey_number:label, donde fkey_number es el número de una tecla de función entre 1 y 12, y label es una etiqueta a la que ir cuando se presiona este tecla. Si la etiqueta tiene el valor NULL, se elimina cualquier asociación que la tecla tenga con alguna etiqueta.

Si las teclas de función no están disponibles en la terminal, se pueden usar otras teclas: de 1 a 9 para reemplazar de F1 a F9, 0 para reemplazar F10, A para F11 y S para F12.

Otras alternativas para las teclas F1-F12 son las combinaciones: Ctrl-Q, Ctrl-W, Ctrl-E, Ctrl-R, Ctrl-T, Ctrl-Z, Ctrl-U, Ctrl-I, Ctrl-O, Ctrl-P, Ctrl-A y Ctrl-S.

Esto también es útil cuando las teclas de función quedan interceptadas por otros programas (por ejemplo, algunos gestores de ventanas).

E

Este comando se usa para establecer la tasa máxima de error permitida para el siguiente entrenamiento (E:<value>%) o para todas las prácticas posteriores hasta la siguiente E: (E:<value>%*).

Si se especifica --error-max/-e, entonces este comando sólo surte efecto si es ——–> stricter que el valor especificado en la línea de comandos.

Los datos_del_comando consisten en el valor (entre 0.0 y 100.0), seguido de ‘%’ (se requiere para que los scripts sean más legibles). La palabra default o Default lo re-establece en su valor predeterminado.

F

Este comando (“etiqueta de al-fallar”) se usa para decidir la etiqueta (en datos_del_comando) a donde el usuario habrá de ir si falla un ejercicio.

Lo habitual es que este comando sólo sea de aplicación en el ejercicio siguiente, pero el usuario puede convertirlo en persistente si pone un ‘*’ al final de los datos_del_comando.

Si se pone NULL, esto reinicia la etiqueta.

X

Este comando causa que Gtypist finalice. Es de una sola línea. Se ignoran los datos_del_comando. El programa también finaliza si se encuentra el final del fichero (así que también se podría poner una etiqueta allí y simplemente hacer G en ella)

Este es un script de ejemplo para mostrar los comandos disponibles en el fichero de lección (tinydemo.typ):

# Demostración mínima 
B: Demostración del tutor mecanográfico 
*:LOOP
K:1:QDONE
T:Este es un pequeño ejemplo de tutoría. Un ejemplo
 :mejor se encuentra en el fichero demo.typ que
 :acompaña a GNU Typist
I:Este es un ejemplo de un ejercicio: 
D:asdf ghjkl;
I:Y este lo es de una prueba de velocidad: 
S:qwe rt yu iop
*:QDONE
Q:¿Ha visto suficiente? [Y/N] 
N:LOOP 
X:

6 Creación de lecciones nuevas

Esta sección proporciona indicaciones y sugerencias para la creación de lecciones nuevas (o la mejora de las existentes).


6.1 Lecciones Ktouch

Una vía muy fácil de escribir lecciones es hacerlo en el formato que emplea ktouch y después convertirlas a lecciones de Gtypist usando tools/ktouch2typ.pl. Este programa se cuida de escribir las “tablas de saltos”, un menú y un poco más.

El formato ktouch consiste sólo en lecciones, que están precedidas por sus nombres y separadas por líneas en blanco y/o comentarios (‘#’ al principio de las líneas). Así que la primera línea del fichero que no esté en blanco y no sea un comentario es el nombre de la primera lección y esta primera lección consiste en todas las líneas hasta la siguiente que sea un comentario o esté en blanco. Tras el separador (comentario o línea en blanco) sigue el nombre de la segunda lección y así sucesivamente.

Esta es una muestra de un fichero ktouch con tres lecciones (extraídas de las tres primeras lecciones de german.ktouch):

#
# Deutsche Training-Datei für KTouch
#

Grundstellung
f f f f f f fff fff fff f f f f f f fff fff fff f f f f f f f fff
j j j j j j jjj jjj jjj j j j j j j jjj jjj jjj j j j j j j j jjj
fff jjj fff jjj jjj fff jjj fff fjf fjf fjf jfj jfj jfj fjf jfjfj

Grundstellung
fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd kkkff
fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jköfd
s s s s s s sss sss sss s s s s s s sss sss sss s s s s s s s sss

#Zwei wichtige Vokale: e und i
e und i
asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdfö
das dass lös fad dass lös als dass las lös fad dass als dass dass
ded ded ded dej dek del deö ded deö del dek dej ded dej dek delde

Una vez que esté hecha, se usa tools/ktouch2typ.pl para convertir el fichero : ‘ktouch2typ.pl lesson.ktouch’ convierte lesson.ktouch en lesson.typ. Es importante que el fichero de entrada finalice en ‘.ktouch’, de lo contrario ktouch2typ.pl lo saltará. Advertencia: esto sobre-escribe lesson.typ sin comunicarlo.

Se puede personalizar el número de líneas que emplea ktouch2typ.pl para cada práctica, modificando la variable pertinente en tools/ktouch2typ.pl.

Obviamente, la desventaja de este método es que no se pueden aprovechar todas las características de Gtypist (pero el fichero de salida es muy legible, así que se puede editar para introducirle más características del programa).


6.2 Ejercicios a partir de fortune

Con gtypist-mode.el se pueden crear rápidamente lecciones con texto del programa fortune (o el interno de Emacs yow si ni se tiene fortune, lo habitual en Windows).

Una vez instalado gtypist-mode.el (véase Modo para Emacs), se puede abrir un fichero con la extensión ‘.typ’ y ejecutar C-c C-f para crear una práctica (D: es la predeterminada, se usa C-u o C-u C-u para cambiarla).


6.3 Diseño de patrones para lecciones

[NdT: aquí se mezcla el contenido normal de un manual de uso del programa con asuntos específicos pedagógicos acerca de la mecanografía; y se hace de manera pobre. Sería preferible remitir a otro documento.]

6.3.1 Estructura de los ficheros de lecciones

  • Empléese una mezcla de entrenamientos y pruebas de velocidad (más divertido para el usuario).
  • Algunos ejercicios de “sólo práctica” (d:/s:) (mezclados posiblemente con algunos ejercicios “reales”) seguidos por un “test final”. esp.typ emplea este esquema.

6.3.2 Patrones para ejercicios

  • Cuando se introduce una tecla nueva, se comienza mezclando otras teclas (ya conocidas) para el mismo dedo. Este es un ejemplo de t.typ, línea 237:
    I:Emplee el dedo J para la tecla H.
    *:_T_R_L23
    D:jjj jhj jjj jhj jjj jhj
    
  • usar ’palabra, palabra.’ de manera repetida para practicar la ,/.

6.4 El script findwords

El script tools/findwords que se encuentra en las fuentes de GNU Typist está para asistir en la creación de lecciones nuevas.

6.4.1 Propósito

Al principio se crea un tutor desde cero, no es fácil formar palabras ni frases cuando el intervalo de letras que se pueden usar está restringido. A veces se quiere insertar algún párrafo “destinado” a alguna combinación especial de dos o tres letras. Esto es incluso más difícil.

Por este motivo hemos creado findwords. Este programa emplea los diccionarios de aspell (un corrector ortográfico multi-lingüe y libre).

6.4.2 Instalación

Se necesitan los paquetes aspell y aspell-LG, donde LG es el código de idioma ISO del idioma que se quiere usar.

Tras su correcta instalación habrá que hacer un pequeño cambio en la configuración para que el banco de datos maestro de aspell sea el del idioma elegido. Esto se puede hacer por dos vías:

  1. En el directorio personal se crea el fichero .aspell.conf y se le añade esta línea:
    master LANGUAGE
  2. Se crea /usr/share/pspell/LG-aspell.pwli y se le añade esta línea:
    /usr/lib/aspell/LG
    Hay que asegurarse de que el ajuste ‘locale’ es ‘LG’.

En lo de arriba, LG significa código de idioma ISO (vg. ‘en’, ‘fr’, ‘cs’) y LANGUAGE significa nombre del banco de datos que hay en /usr/lib/aspell (vg. english.multi, french, czech).

Se puede verificar si funciona escribiendo:

aspell dump master | less

6.4.3 Uso de findwords

La sintaxis es como sigue:

./findwords letras [combinación]

En el argumento letras, obligatorio, se deben listar las letras que se quieren usar, sin ningún espacio. Si se pone un punto (‘.’) nos referimos a ‘todas las letras’. El segundo argumento, combinación, es optativo y con él se especifican las combinaciones de teclas que se están buscando.

Algunos ejemplos:

  • ./findwords asdfjkleruio
    Buscamos todas las palabras compuestas con las letras listadas.
  • ./findwords asdfjkleruio sa
    Buscamos palabras que contengan la combinación ‘sa’, pero sólo aquellas compuestas con las letras especificadas.
  • ./findwords . col
    Palabras que contengan todas las letras, pero que tengan ‘col’ en alguna parte dentro de ellas.

7 El modo para Emacs

gtypist viene ahora con un modo mayor para Emacs que hace resaltado de sintaxis, sangrado y posee algunos comandos convenientes para contar etiquetas, ir a ellas, insertar leyendas centradas adecuadamente, comentarios especiales y un poco más.

Se copia el fichero tools/gtypist-mode.el a donde sea que se tengan los ficheros elisp locales (v.g. ~/elisp) y se pone esto en al ~/.emacs (adáptese la ruta):

(autoload 'gtypist-mode "~/elisp/gtypist-mode")

o se pone en la load-path (‘make install’ en las fuentes o el paquete Debian, que ya lo hace solo) y se usa esto:

(autoload 'gtypist-mode "gtypist-mode")

y se añade esto al ~/.emacs:

(setq auto-mode-alist       
      (cons '("\\.typ\\'" . gtypist-mode) auto-mode-alist))

Todo esto también se menciona en la sección README del fichero tools/gtypist-mode.el.

Estos son los comandos junto con sus asociaciones de teclas:

C-c C-i, M-x gtypist-mode-info

Con esto se muestra la documentación de gtypist, comenzando en el nodo “Sintaxis de las lecciones” (véase Sintaxis de las lecciones). Con prefijo, comienza en el nodo superior.

C-c M-g, M-x gtypist-mode-goto-label

Pide una etiqueta a la que ir (con completado).

C-c C-l, M-x gtypist-mode-next-label

Este comando inserta la siguiente etiqueta en una secuencia numerada. Por ejemplo, si se inserta

*:SERIES1_L1

y se presiona C-c C-l, entonces el modo gtypist insertará

*:SERIES1_L2
C-c C-b, M-x gtypist-mode-insert-banner

Este comando inserta un comando B: centrado. Se centra en 66 columnas porque “gtypist <version>” está en la esquema derecha (pide el contenido).

C-c C-r, M-x gtypist-mode-insert-hrule

Inserta una línea horizontal (comentario) consistente en guiones.

C-c C-n, M-x gtypist-mode-new-lesson

Inserta los comentarios (cabecera) y una etiqueta para empezar una lección nueva (pide el nombre).

C-c C-f, M-x gtypist-mode-fortune-to-drill

Inserta un entrenamiento (D:) con texto de fortune (o yow si fortune no está disponible). Se usa el prefijo C-u para obtener S:, y C-u C-u para obtener d:.

Ejecutando C-h m se consigue la lista completa de comandos y sus asociaciones de teclas.

Quien localice fallos o piense que hay alguna otra cosa que podría introducirse, puede escribir a bug-gtypist@gnu.org.


8 Variables de entorno

GNU Typist emplea las siguientes variables de entorno:

LANG

GNU Typist ofrece soporte en idioma nativo (Native Language Support, NLS) mediante la biblioteca ‘gettext’, esto significa que si el sistema lo admite, se puede elegir el idioma en que se muestren los mensajes. Por ahora gtypist se distribuye con mensajes en alemán, checo, español, francés, inglés y suomi. Para usar un NLS particular se emplea la variable de entorno LANG y se pone en la combinación apropiada de ‘LL_CC’, donde ‘LL’ es un código de idioma ISO 639 de dos letras y ‘CC’ es un código de país ISO 3166 de dos letras (v.g. ‘es_ES’ para España y de_DE para Alemania). En algunos sistemas también será necesario poner la variable de entorno LANGUAGE en el mismo valor.

Quien desee traducir los mensajes a otros idiomas (o corregir los ya traducidos), se puede comunicar con bug-gtypist@gnu.org.

GTYPIST_PATH

Lista los directorios en donde buscará el programa los ficheros. Tiene el formato estándar de las rutas, esto es, una lista de directorios separados por ‘:’. Para visitar un fichero, gtypist lo intentará como sigue: (1) usar sólo el nombre del fichero (2) agregará cada uno de los directorios especificados en a variable GTYPIST_PATH y (3) agregará el directorio usado durante el proceso de instalación (v.g. /usr/local/share/gtypist o /usr/share/gtypist).

TERM

Lo emplea curses para manejarse con la terminal.

TERMINFO

Es posible que esto tenga que establecerse si la ruta al banco de datos terminfo es diferente entre el sistema en el que se compiló el binario y aquel en que se ejecuta. Por ejemplo, en los sistemas Slackware antiguos, el banco de datos terminfo reside en /usr/lib/terminfo. En RedHat Linux, está en /usr/share/terminfo. Si el programa se queja acerca del tipo de terminal y el valor de TERM es correcto, hay que revisar esta variable.


9 Errores y omisiones

GNU Typist aún no admite codificación de caracteres multi-byte (como UTF-8). Para ver todos los caracteres de algunas de las lecciones, hay que asegurarse de que la terminal se ejecute en un entorno en donde la variable LANG no esté puesta en UTF-8. Los usuarios más perezosos pueden probar a ejecutar GNU Typist en otro tipo de terminal. A veces funciona.

GNU Typist no hace muchos esfuerzos en minimizar la salida de la terminal. En particular, el cursor de bloque que hace flash puede causar un montón de movimiento de cursor. El uso del cursor de la propia terminal puede ser de ayuda si esto se convierte en un problema.

En las pruebas de velocidad, el programa no permite el retroceso o eliminación más allá del comienzo de la línea de pantalla o regresar a través de caracteres de tabulación. Esto se debe puramente al deseo de simplificar la actualización de la pantalla.

Los modos de color de curses no parecen funcionar bien con UnixWare. En particular, el vídeo inverso no siempre se procesa correctamente en algunos tipos de terminales ni en xterms.


Appendix A Historia de GNU Typist

  • El programa inicial se escribió para VAX/VMS BASIC por alguien de Harris Corp (Ft. Lauderdale, FL).
  • D. Jason Penney lo re-escribió para Microsoft BASICA
  • D. Jason Penney lo re-escribió en C con la biblioteca curses
  • Simon Baldwin re-escribió la versión de D. Jason Penney, con aportaciones descritas en el fichero NEWS (versiones 2.2 a 2.2b). Fue el derecho-habiente del copyright de GNU Typist (que se distribuía bajo la GPL). Simon también escribió una versión de Typist en Java que se llamó inicialmente JTypist y posteriormente volvió a llamarse de nuevo Typist:

    [se ofrece una dirección en geocities que ya no existe]

  • A partir de 1997, Ben Armstrong ayudó a corregir fallos y a mantener el paquete Debian.
  • En 2000, Vladimir Támara y Igor Támara fueron los mantenedores de la versión en C. Antes de Noviembre de 2000, GNU Typist se mantenía como parte del proyecto Structio.
  • ¡En Noviembre de 2000 se aceptó como paquete GNU! Se renombró a GNU Typist (o gtypist).
  • En Mayo de 2001, Michael Opdenacker, que aprendió a mecanografiar con GNU Typist, se hizo el nuevo mantenedor. El desarrollo del proyecto pasa a alojarse en http://savannah.gnu.org/projects/gtypist/.
  • En Junio de 2001, Felix Natter se unió y realizó contribuciones importantes al proyecto: importación de lecciones de otros tutores, mejoras en las herramientas, nuevas capacidades de tutoría, el modo para Emacs, la interfaz basada en teclas de flechas y mucho más.
  • En 2003, Dmitry Rutsky se unió al equipo de desarrollo y difundió un número importante de ideas, hacks y mejoras.
  • En Abril de 2008, Paul Goins se hizo cargo del mantenimiento de GNU Typist, al que le añadió unas cuantas mejoras (especialmente la construcción bajo Windows con MinGW), actualizó algo la documentación y cambió la licencia a la versión 3 de la GPL.

Appendix B Licencia de Documentación Pública de GNU

Version 1.2, November 2002
Copyright © 2000,2001,2002 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
  1. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

  2. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

    A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

    The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

    A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”.

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

    The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

    A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition.

    The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

  3. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

  4. COPYING IN QUANTITY

    If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

  5. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
    4. Preserve all the copyright notices of the Document.
    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
    8. Include an unaltered copy of this License.
    9. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
    11. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
    13. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version.
    14. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section.
    15. Preserve any Warranty Disclaimers.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

    You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

  6. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.”

  7. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

  8. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

  9. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

    If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

  10. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

  11. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

  Copyright (C)  year  your name.
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
  Texts.  A copy of the license is included in the section entitled ``GNU
  Free Documentation License''.

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with…Texts.” line with this:

    with the Invariant Sections being list their titles, with
    the Front-Cover Texts being list, and with the Back-Cover Texts
    being list.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


gtypist-2.9.5/doc/gtypist.cs.texi0000644000175000017500000010433312204155736013733 00000000000000\input texinfo @c -*-mode:texinfo; coding: utf-8;-*- @setfilename gtypist.cs.info @settitle Příručka pro GTypist @documentlanguage cs @documentencoding UTF-8 @include version2.texi @copying Toto je manuál pro GNU Typist (verze @value{VERSION}, @value{UPDATED}), program určený k výuce psaní na klávesnici pro několik jazyků a různé klávesové rozložení. Copyright @copyright{} 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory Education @direntry Education * GNU Typist (cs): (gtypist.cs). Dokumentace k výukovému programu psaní na klávesnici gtypist. @end direntry @titlepage @title Příručka pro GNU Typist @subtitle Verze @value{VERSION} @author Poslední update: @value{UPDATED} @page @vskip 0pt plus 1filll @insertcopying Publikováno Nadací pro svobodný software @* 51 Franklin Street, Fifth Floor @* Boston, MA 02111-1301 @* USA @* @end titlepage @contents @page @ifnottex @node Top, Distribuce, (dir), (dir) @top GNU Typist - psaní všemi deseti @insertcopying GNU Typist je interaktivní výukový program, který vám pomůže osvojit si principy správného psaní na klávesnici všemi deseti prsty. Obsahuje několik lekcí pro různé typy klávesnic a různé jazyky. (Mezi nimi nechybí ani čeština.) Lekce pro gtypist jsou napsány ve snadno pochopitelném skriptovacím jazyku, takže je mohou uživatelé modifkovat či vytvářet nové. Pokud zadáte parametr cs.typ, spustíte lekce v češtině zaměřené na českou klávesnici. @end ifnottex @menu @c TODO: * Distribuce:: Kde najít gtypist: zdrojové kódy, balíčky apod. * Kopírování:: Kopírování a svobodné sdílení gtypist pod GPL * Úvod:: Co byste měli jako uživatelé vědět * Spouštění:: Jak spustit gtypist * Dostupné lekce:: Přehled lekcí v distribuci gtypistu * Používání typefortune:: Procvičování na textu z `fortune' (perl) * Příkazy skriptovacího jazyka:: Informace o syntaxi lekcí pro gtypist * Vytvořte nové lekce:: Jak přispět novými lekcemi * Mód Emacsu:: Mód Emacsu pro editaci skriptů do gtypistu * Proměnné prostředí:: Proměnné prostředí, které ovlivňují gtypist * Chyby a opominutí:: Známé problémy * Historie:: Historie GNU Typistu * Kopírování tohoto manuálu:: Licence svobodné dokumentace GNU. @end menu @node Distribuce, Kopírování, Top, Top @unnumbered Distribuce GNU Typist (či gtypist) je @dfn{svobodný software}; to znamená, že jej může za určitých podmínek každý svobodně používat a dále redistribuovat. Přesné podmínky můžete nalézt v GNU General Public Lincense, kterou jste obdrželi s tímto programem a která následuje tuto sekci. @noindent GNU Typist můžete získat od přítele nebo z Internetu: @table @asis @item Hlavní distribuční web: @url{ftp://ftp.gnu.org/gnu/gtypist/} @item Domovská stránka @url{http://www.gnu.org/software/gtypist/gtypist.cs.html} @item On-line manuál (aktualizace mezi vydáním jednotlivých verzí) @url{http://www.gnu.org/software/gtypist/doc/} @item Stránka vývojářů (CVS repozitář, úlohy, podpora...) @url{http://savannah.gnu.org/projects/gtypist/} @item Stažení GNU Typist (zdrojové kódy, binární verze, tutoriály) @url{http://gtypist.free.fr/} @item Obrázky @url{http://gtypist.free.fr/screenshots/} @end table @node Kopírování, Úvod, Distribuce, Top @unnumbered GNU GENERAL PUBLIC LICENSE @include gpl.texi @node Úvod, Spouštění, Kopírování, Top @chapter Úvod GNU Typist je interaktivní program pro výuku psaní na klávesnici všemi deseti prsty. Obsahuje výukové lekce, cvičení i rychlostní testy. Program je určen pro používání na terminálech bez grafiky. Byl zkompilován na GNU/Linuxu, Unixech (Aix, OpenBSD) a také na DOS/Windows (DOS 6.22, Windows 98, Windows NT). Program načítá lekce vytvořené ve snadno pochopitelném skritpovacím jazyku. Je distribuován spolu s několika dobrými a kompletními lekcemi, které můžete používat, modifikovat, nebo psát nové. (@pxref{Vytvořte nové lekce} @pxref{Příkazy skriptovacího jazyka}). Pokud nespecifikujete příslušný soubor lekcí na příkazové řádce, bude použit @file{gtypist.typ}. (Podrobnosti o cestě k souborům naleznete v sekci @pxref{Proměnné prostředí}). Na horní řádce obrazovky naleznete banner programu. Na nejspodnější řádce se potom nalézají různé zprávy, dotazy a další informace o stavu. Řádky mezi tím jsou používány pro tutoriály, cvičení a rychlostní testy. V programu jsou dva typy cvičení: drilové a rychlostní testy. V drilových vám gtypist zobrazí text v každé druhé řádce obrazovky a počká, až uživatel správně opíše text do zbývajících prázdných řádek. @c TODO: intention is ``Griff-Übung'' (finger exercise) Chybně zadaná písmena jsou indikována obráceným @code{^}, nebo @code{>}, pokud je špatně zadaným znakem konec řádky. Na konci cvičení program spočítá skutečnou a užitečnou rychlost v jednotkách slov za minutu. Pokud jste udělali příliš mnoho chyb, cvičení se spustí znova. @c TODO: make this less formal Není dovoleno zpětně opravovat špatně zadané znaky. V rychlostních testech zobrazuje gtypist text na obrazovce a čeká, až ho uživatel přepíše tím samým. Chyby se zobrazují a na konci testu se spočítá opravdová a užitečná rychlost ve WPM (words per minute -- slova za minutu). @c TODO: what is it used for ? Pokud se vyskytlo příliš mnoho chyb, test se spustí znovu. Opravování chyb je povoleno, ale takto opravené chyby budou stejně započítány do hodnocení. Jestli jste již udělali příliš mnoho chyb, můžete použít @key{ESC} a test se spustí znovu. Kdykoliv dokončíte lekci, butete dotázáni, zda ji chcete opakovat. @c TODO: indicate ``practice only'' exercises in modeline ? GNU Typist obsahuje i cvičení zaměřené pouze na procvičování (jak drilová cvičení, tak rychlostní testy), která možná nebudete muset vůbec opakovat. Nechceme ale říkat, zda se to týká zrovna vás, takže se stejně budete muset snažit, jak nejlépe umíte ;-) @c TODO: restart the drill from the beginning @c TODO: from the beginning. ?? @c There are two types of drills - one-time and ordinary. In an ordinary @c drill, gtypist displays text on the screen, and waits for the user to @c correctly type the exact same text, underneath. It indicates typing @c errors, and if at the end of the exercise there were errors, it will @c re-run the drill, up to a maximum number of tries. In a one-time drill, @c the procedure is the same, except that the program will not repeat the @c drill if it is not typed correctly. Backspace and delete are not @c permitted in drills. @c A speed test is run only once, no matter how many errors @c there were. Backspace and delete are permitted, but errors still @c accumulate. @c @item D @c This creates an ordinary typing drill. It is a multi-line command; @c as many lines may be used as available on the screen. @c The text is displayed alternate screen lines, and prompts @c you to type the same text in on the intermediate lines. Typing errors @c are indicated with an inverse @code{^}, or @code{>} if the character is a newline. @c The drill completes when it is typed correctly, or after a @c number of attempts. Delete and backspace are not recognised. @key{Escape} @c may be used to exit from the drill before completion. @c @item O @c This creates a one-time typing drill. It has the same behaviour as @c the @code{D} command, but it does not repeat until the text is @c typed correctly. @c @item P @c This creates a speed test. It is a multi-line command; as many lines @c may be used as are available to curses. It displays its text on the screen, @c and prompts you to type on top of it. Typing errors are highlighted in inverse @c colours. You get only one chance at this test, but delete and backspace @c are recognised (errors still accumulate, however). At the end @c of the test, the typing speed and accuracy are displayed. Ve výsledcích rychlosti znamená jedno slovo pět znaků, takže hrubé WPM je počet znaků v testovací oblasti dělené pěti a znovu dělené počtem uplynulých minut. Co se týče faktoru chyby, který WPM ovlivňuje, každá chyba je počítaná za špatné slovo. @node Spouštění, Dostupné lekce, Úvod, Top @chapter Spouštění Syntaxe pro spuštění GNU Typist je: @code{gtypist [ parametry... ] [ script_file ]} Podporované parametry jsou popsány níže (pozor, dlouhé tvary nejsou v DOSu podporovány). @table @code @item -e, --error-max Udává maximální procento chybovosti při zadávání textu. Defaultní hodnota je 3,0. Musí být mezi 0,0 a 100,0. Existuje i příkaz skriptovacího jazyka (@pxref{Příkazy skriptovacího jazyka}), který to může změnit, pokud je zadané číslo menší. Pro procvičovací lekce je tato hodnota ale ignorována. @item -n, --notimer Normálně GNU Typist zobrazuje rychlost ve WPM (slova za minutu) jak po drilových cvičeních, tak po rychlostních zkouškách. Lekce jsou ale zřejmě napsané pro program, který zobrazoval rychlost pouze při rychlostních testech. Abyste gtypist přinutili k takovémuto chování odpovídajícímu lekcím, tedy aby nezobrazoval počet slov za minutu u drilových testů, použijte tento parametr. @item -t, --term-cursor gtypist si vytváří vlastní obdélníčkový kurzor, aby pomohl uživateli rozlišit mezi kurzorem a označením chyb v inverzních barvách. Tímto parametrem takové chování potlačíme a donutíme program používat standardní kurzor terminálu. @item -f, --curs-flash Hodnota tohoto parametru nastavuje blikání obdélníkového kurzoru v desetinách sekund. Hodnota 0 znamená, že kurzor nebude blikat. Standardní hodnota je 10, maximální 512. Toto je ignorováno, pokud bylo nastaveno -t nebo --term-cursor. @item -c, --colo[u]rs Normálně používá gtypist pouze normální a převrácené monochromatické barvy. Tímto parametrem můžete nastavit barvu popředí a pozadí na terminálech, které podporují barevný výstup. Barvy jsou specifikovány jako dvě čísla mezi 0 a 7. Kódy barev od 0 do 7 znamenají barvu černou, červenou, zelenou, žlutou, modrou, magenta a modrozelenou a bílou. Defalutní nastavení je 7,0 -- bílá na černém pozadí. Toto nastavení je ignorováno pokud terminál nepodporuje barvy. @item -s, --silent Kdykoliv narazí gtypist na chybu, zapípá. Tímto nastavením můžete zvukový signál potlačit. @item -q, --quiet To samé jako -s, --silent. @item -w, --wpmode Tímto donutíte gtypist určitým způsobem napodobovat textový procesor, kdykoliv spouští nějaké cvičení. Mezeru na konci řádku bude brát jako korektní znak a přejde na další řádku. Pokud stisknete na konci řádky ENTER, přesune vás na následující odstavec. Vícenádobné mezery stlačí na jedinou a bude přeskakovat rozdělovací čárky na konci řádek. @item -l, --start-label Tento parametr udává návěstí ve skriptovém souboru, kde gtyping začne (pro informace o návěstí viz níže skriptovací jazyk). Pokud není start_label definováno, začne se od začátku souboru. @item -k, --no-skip Zakáže uživateli přeskakovat lekce nebo z nich utíkat pomocí @key{ESC ESC}. @end table @noindent Pokud chcete spouštět gtypist ve svém rodném jazyce, musíte také vhodně nastavit proměnnou prostředí @env{LANG} @xref{Proměnné prostředí}. @strong{Příklady:} @noindent Ke spuštění standardního anglického souboru lekcí @file{gtypist.typ}:@* @code{gtypist} @noindent Ke spuštění českých lekcí: @* @code{gtypist cs.typ} @noindent Donutíme gtypist, aby hledal lekci bar.typ v nestandardním adresáři @file{/home/foo}: @* @code{export GTYPIST_PATH="/home/foo"} @code{gtypist bar.typ} @noindent Abychom mohli spustit lekci @file{test.typ} v adresáři @file{/tmp}, a začít na návěstí @code{TEST1}, v tichém módu, za použití standardního kurzoru terminálu, zadáme toto:@* @code{gtypist -t -q -l TEST1 /tmp/test.typ} @node Dostupné lekce, Používání typefortune, Spouštění, Top @chapter Dostupné lekce S GNU Typist jsou dodávány tyto lekce : @table @file @item cs.typ Soubor QWERTY kurzů v češtině (+ numerická klávesnice) @item q.typ Rychlý QWERTY kurz v angličtině @item r.typ Dlouhý QWERTY kurz v angličtině @item t.typ QWERTY výuka v angličtině @item v.typ Ještě další QWERTY v angličtině @item w.typ QWERTY opakování v angličtině @item d.typ Výuka klávesnice Dvorak v angličtině @item m.typ Drilová cvičení v angličtině @item s.typ Rychlostní testy v angličtině @item n.typ Numerická klávesnice v angličtině @item gtypist.typ Soubor všech předchozích anglických lekcí @item esp.typ Kurz QWERTY ve španělštině @item kt*.typ Toto jsou standardní lekce z Ktouch 1.0 (@url{http://ktouch.sourceforge.net}), které byly do formátu gtypistu zkonvertovány s použitím @file{tools/ktouch2typ.pl}. Tyto soubory jsou ktde.typ (german.ktouch), kten.typ (english.ktouch), ktfr.typ (french.ktouch), ktlecten.typ (lecture_en.ktouch), ktno.typ (norwegian.ktouch) and ktnumber.typ (number.ktouch). @item ttde.typ To je německá lekce pro tipptrainer (@url{http://www.pingos.schulnetz.org/tipptrainer}), která byla zkonvertována s pomocí @file{tools/tt2typ.pl}. @end table @noindent Pokud v těchto lekcích najdete chyby, pokud nějakou upravíte, nebo pokud napíšete lekci novou, prosím vydejte ji pod svobodnou licencí a řekněte nám o tom -- můžete nám napsat mail na @email{bug-gtypist@@gnu.org}. @node Používání typefortune, Příkazy skriptovacího jazyka, Dostupné lekce, Top @chapter Používání typefortune `typefortune' vám dovolí cvičit s textem z `fortune'. @code{SYNTAX: typefortune [-dslh] [-n počet] [-o ]} @table @code @item -d Použije @code{D:} místo @code{S:}. @item -s Spustí fortune s @code{-s}. @item -l Spustí fortune s @code{-l}. @item -n Cvičení fortunes. @item -o Předej gtypistu nastavení ve formě @option{option} (nastavení přepínače, např. @code{-o word-processor}), @option{option,value} (nastavení hodnoty, např. @code{-o e,1.0}) kde @code{option} je jméno nastavení (zkrácené či dlouhé) s tím, že všechny úvodní pomlčky jsou odstraněny. Pokud uvádíte více než jeden parametr, musíte je uvést v apostrofech: @command{typefortune -n 3 -o 'silent e,5 word-processor'}. @end table @node Příkazy skriptovacího jazyka, Vytvořte nové lekce, Používání typefortune, Top @chapter Příkazy skriptovacího jazyka GNU Typist načítá data pro jednotlivé lekce ze skriptového souboru. Každá řádka s výjimkou komentářů a prázdných řádek má následující formát @code{znak_příkazu : data_příkazu} @noindent @code{Znak příkazu} je jeden znak, který určuje, co bude gtypist dělat, a @code{data_příkazu} jsou data, se kterými bude operovat. Pokud je @code{znak_příkazu} mezera, znamená to, že řádka je pokračováním předchozího příkazu. Oddělovač ':' musí být vždy v druhém sloupci řádky. Řádky komentářů jsou řádky začínající znakem '#' a stejně jako prázdné řádky jsou ignorovány. Komentáře mohou mít jakýkoliv formát, jediným požadavkem je, aby začínaly '#'. Všechny ostatní řádky musí mít výše uvedený formát. Abyste se seznámili se základy, měli byste si přečíst @xref{Úvod}. Následující výčet je seznamem platných hodnot @code{znaků_příkazu}: @table @code @item B Tento příkaz smaže celou obrazovku. Pokud má nějaká @code{data_příkazu}, ta jsou zobrazena v horním jednořádkovém banneru a zůstanou tam až do zavolání následujícího příkazu @code{B}. Tento příkaz nesmí pokračovat na následující řádce. @item T T znamená tutoriál. Příkaz může zpracovávat více řádek a to až do zaplnění obrazovky. Každá řádka příkazu je prostě vytištěna na obrazovku. Příkaz smaže obrazovku pod horním jednořádkovým bannerem. Když je zobrazování hotovo, program čeká na uživatelský vstup. Toho je také využíváno pro tisk položek menu. @item * Hvědička znamená návěstí v souboru. Návěstí může být cílem pro příkazy @code{G}, @code{Y}, @code{N} nebo @code{F}. Návěstí mohou zahrnovat jakékoliv znaky včetně mezer a jsou jednořádkovým příkazem. Mezery na konci návěstí jsou ignorovány. @item I Tento příkaz zobrazí stručné instrukce k drilovému či rychlostnímu testu. Je dovoleno použít pouze dvou řádek. Narozdíl od příkazu @code{T} se před pokračováním nečeká na stisk klávesy. Značka by tedy měla být vždy následována cvičením. Maže plochu obrazovky pro cvičení, v tomto ohledu se chová jako dvouřádkové @code{T}. @item M Tento příkaz je nový způsob, jak vytvářet menu (od gtypistu 2.7) Zde je jeho syntax: @example M: [UP=(LABEL|_EXIT)] "název" :LABEL1 "popis1" :LABEL2 "popis2" ... @end example UP-label označuje návěstí otcovského uzlu, které definuje poslední položku menu (pokud je to _EXIT, pak ,,Konec'', jinak bude poslední položka v menu ,,Zpět'' skákat na zadaný uzel). Tento argument je volitelný. Pokud není přítomen, použije se defaultní _EXIT. Název, stejně jako ostatní popis, musí být v uvozovkách (""). Navíc musí mezi UP=XXX a "název" či mezi návěstími a jejich popisem být alespoň jedna mezera. Příklady hledejte v existujících lekcích. @c TODO: more information about ``should be used for''... @item D,d Tento příkaz se nazývá ,,drill'' a je jedním ze dvou typů cvičení. Je to víceřádkový příkaz. Text je zobrazován v každé druhé řádce a uživatel jej opisuje do prostoru mezi nimi. To je důvod, proč nemůžete použít více jak 11 řádek obsahu. Tento typ cvičení by měl být používán pouze pro cvičení prstů (např. jfjfjjf), ale může obsahovat i celá slova a věty, když jsou využívány k procvičování (písmeno, slabika) a nejedná se o opravdové texty. Verze s malým písmenem @code{d} znamená ,,pouze procvičování'', uživatel nebude muset cvičení opakovat ani pokud udělal příliš mnoho chyb. @c TODO: more information about ``should be used for''... @item S,s To je druhý typ cvičení: ,,rychlostní test''. Jedná se o víceřádkový příkaz. Zobrazuje svůj obsah na obrazovce a čeká, až jej uživatel přepíše tím samým textem. Proto můžete na jeden rychlostní test použít až 22 řádek. V tomto druhu testu můžete své chyby opravovat, počítadlo ve statistice je ale stále bude počítat jako chyby. Rychlostní testy by měly být používány pro opisování kompletních vět, textů a souborů (např. dopis, texinfo, html či tex soubor). Verze s malým písmenem @code{s} je rychlostní test ,,pouze k procvičování'', což znamená, že ani uživatel, který udělá příliš mnoho chyb, jej nebude muset opakovat. @item G Toto přinutí gtypist přeskočit na návěstí v @code{datech_příkazu} a pokračovat ve vyvolávání skriptu odtud. Jde o jednořádkový příkaz. @item Q Tento příkaz vypíše svůj text na stavové řádce a před pokračováním čeká na klávesu @key{Y} nebo @key{N}. Ostatní znaky jsou ignorovány. Jako vedlejší efekt můžete také stisknout F-klávesu, pokud je potřeba (nyní by již neměl být tento příkaz používán pro vytváření promptu pro menu -- použijte raději příkaz M). @item Y Y Je podobné @code{G}, s výjimkou toho, že příkaz skoku je vyvolán pouze pokud odpověď na předchozí otázku @code{Q} byla @key{Y}. @item N N je podobné @code{G}, s výjimkou toho, že příkaz skoku je vyvolán pouze pokud odpověď na předchozí otázku @code{Q} byla @key{N}. @item K @emph{Tento příkaz by již neměl být používán, použijte M} Váže funkční klávesu na návěstí. Formát dat následujících tento příkaz musí být @code{Fklávesa:návěstí}, kde @code{Fklávesa} je číslo funkční klávesy mezi 1 a 12 a @code{návěstí} je místo, kam se přesunout po stisku této klávesy. Hodnota návěstí NULL klávesu znefunkční. Pokud na terminálu nejsou dostupné funkční klávesy, mohou být místo jich použity klávesy @key{1} až @key{9} pro @key{F1} až @key{F9}, @key{0} pro @key{F10}, @key{A} pro @key{F11} a @key{S} pro @key{F12}. Jinou alternativou pro @key{F1} až @key{F12} jsou kombinace: @key{Ctrl-Q}, @key{Ctrl-W}, @key{Ctrl-E}, @key{Ctrl-R}, @key{Ctrl-T}, @key{Ctrl-Z}, @key{Ctrl-U}, @key{Ctrl-I}, @key{Ctrl-O}, @key{Ctrl-P}, @key{Ctrl-A} a @key{Ctrl-S}. To je také užitečné, pokud jsou funkční klávesy odchytávány jinými programy (například window managery). @item E Tento příkaz je používán pro nastavení nejvyššího procenta chyb dovoleného pro úspěšné absolvování následující lekce (E:%) či pro všechny lekce až do dalšího výskytu E (E:%*). Pokud je nastaveno @option{--error-max/-e}, tak bute tento příkaz platit pouze tehdy, pokud je @emph{přísnější} než hodnota specifikovaná na příkazové řádce. @code{data_příkazu} se skládají z hodnoty (mezi 0.0 a 100.0) následované znakem '%' (toto je požadováno, aby byly skripty lépe čitelné). Existuje speciální hodnota @code{default} nebo @code{Default}, která nastavuje maximální procento chyb zpět na defaultní hodnotu. @item F Tento příkaz může být použit k nastavení návěstí (v @code{data_příkazu}), kam bude uživatel muset jít, pokud úspěšně neprojde cvičením. Tento příkaz se většinou vztahuje pouze k následujícímu cvičení, ale pokud na konec @code{dat_příkazu} vložíte '*', můžete jej tak učinit trvale platným. Pokud je návěstí NULL, pak příkaz návěstí resetuje. @item X Tento příkaz přinutí gtypist vyskočit. Je to jednořádkový příkaz. Jakékoliv @code{data_příkazu} jsou ignorována. Jiný způsob, jakým může dojít k opuštění programu, je když gtypist dojde na konec souboru (takže tam můžete také umístit návěstí a odkazovat na něj příkazem @code{G}) @end table @c TODO: more examples (i.e. one example for E:/F:, one for a menu, ...) Prohlédněte si malý příklad skriptu, který demonstruje dostupné příkazy (soubor lekce @file{tinydemo.typ}): @example # Malý příklad B: Demonstrace tutoriálu *:LOOP K:1:QDONE T:Zde je malý příklad skriptu pro lekci. :Lepší příklad můžete nalézt v souboru :demo.typ, který je dodáván s GNU Typist. I:Tady je drilové cvičení: D:asdf ghjkl; I:A tady je zas rychlostní test: S:qwe rt yu iop *:QDONE Q:Stačilo to již? [Y/N] N:LOOP X: @end example @node Vytvořte nové lekce, Mód Emacsu, Příkazy skriptovacího jazyka, Top @chapter Vytvořte nové lekce This section provides guidelines and hints for creating new lessons (or improving existing ones). @c TODO: better name for ``Design patterns'' ?? @menu * Ktouch lessons:: Generate lessons from a set of drills * Exercises from fortune:: Create drills/speedtests with text from fortune * Design patterns for lessons:: Hints/Design patterns for lessons @end menu @node Ktouch lessons, , Exercises from fortune, Vytvořte nové lekce @section Ktouch lessons A very easy way to write lessons is to write them in the format that @command{ktouch} uses, and then convert it to a gtypist lesson using @command{tools/ktouch2typ.pl}. This will take care of writing ``jump-tables'', a menu and a bit more. The ktouch-format consists only of lessons, which are preceded by their names, and separated by blank lines and/or comments (# at the beginning of the line). So the first non-blank, non-comment line in the file is the name of the first lesson, and the first lesson consists of all the lines up to the next comment or blank line. After the separator (comment or blank line) the name of the second lesson follows and so on. This is an example of a three-lesson ktouch file (excerpts from the first three lessons of german.ktouch): @example # # Deutsche Training-Datei für KTouch # Grundstellung f f f f f f fff fff fff f f f f f f fff fff fff f f f f f f f fff j j j j j j jjj jjj jjj j j j j j j jjj jjj jjj j j j j j j j jjj fff jjj fff jjj jjj fff jjj fff fjf fjf fjf jfj jfj jfj fjf jfjfj Grundstellung fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd kkkff fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jköfd s s s s s s sss sss sss s s s s s s sss sss sss s s s s s s s sss #Zwei wichtige Vokale: e und i e und i asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdfö das dass lös fad dass lös als dass las lös fad dass als dass dass ded ded ded dej dek del deö ded deö del dek dej ded dej dek delde @end example Once you are done, use @command{tools/ktouch2typ.pl} to convert the file: @samp{ktouch2typ.pl lesson.ktouch} converts @file{lesson.ktouch} to @file{lesson.typ}. It is important that the input file ends in ``.ktouch'', otherwise @command{ktouch2typ.pl} will skip it. Warning: this will overwrite @file{lesson.typ} without asking you ! You can customize the number of lines that @command{ktouch2typ.pl} uses for each drill by modifying the relevant variable in @file{tools/ktouch2typ.pl}. Obviously, the disadvantage of this is that you cannot make use of all of gtypist's features (but the output file is very readable, so you can edit it to use more of gtypist's features). @node Exercises from fortune, Ktouch lessons, Design patterns for lessons, Vytvořte nové lekce @section Exercises from fortune Using @file{gtypist-mode.el} you can quickly create lessons with text from the program @command{fortune} (or the emacs-internal @command{yow} if @command{fortune} isn't available, as is usually the case on Windows). Once you installed @file{gtypist-mode.el} (@pxref{Mód Emacsu}), you can open a file with it ``.typ'' extension and run @kbd{C-c C-f} to create a drill (@code{D:} by default, use @kbd{C-u} or @kbd{C-u C-u} prefix to change). @node Design patterns for lessons, Exercises from fortune, , Vytvořte nové lekce @section Design patterns for lessons @subsection Structure of lesson files @itemize @bullet @item use mixture of drills and speed tests (this is more fun for the user) @item use some ``practice-only'' exercises (d:/s:) (possibly mixed with ``real'' exercises) followed by a ``final test''. @file{esp.typ} uses this scheme. @end itemize @subsection Patterns for exercises @itemize @bullet @item when introducing a new key, start out by mixing other (known) keys of the same finger in with the new key in the first drill(s). Here is an example (from @file{t.typ}, line 237): @example I:Use your J-finger for the H key. *:_T_R_L23 D:jjj jhj jjj jhj jjj jhj @end example @item use 'word, word.' repeatedly to practice ,/. @end itemize @node Mód Emacsu, Proměnné prostředí, Vytvořte nové lekce, Top @chapter Mód Emacsu gtypist now comes with an Emacs major-mode which does syntax-highlighting, indentation and has some convenient commands for counting labels, a goto-label-command, inserting properly centered banners, special comments and a bit more. Copy this file from @file{tools/gtypist-mode.el} to wherever you put your local elisp files (e.g. @file{~/elisp}) and put this in your @file{~/.emacs} (adapt path!): @lisp (autoload 'gtypist-mode "~/elisp/gtypist-mode") @end lisp or put it in @code{load-path} (@samp{make install} in the sources should take care of this for GNU Emacs, or if you are using the Debian package, it installs it here for you) and use this instead: @lisp (autoload 'gtypist-mode "gtypist-mode") @end lisp @strong{and} add this to your @file{~/.emacs}: @lisp (setq auto-mode-alist (cons '("\\.typ\\'" . gtypist-mode) auto-mode-alist)) @end lisp @c If you want to, you can then byte-compile the file using @c @kbd{M-x byte-compile-file} (but @samp{make install} takes care of @c this). @noindent All this is also mentioned in the README-section of @file{tools/gtypist-mode.el}. @noindent Here are the commands along with the keybindings: @table @kbd @item C-c C-i, M-x gtypist-mode-info This shows gtypist's texinfo-documentation, starting at node ``Script file commands'' (@pxref{Příkazy skriptovacího jazyka}). With prefix, start at the top-node. @item C-c M-g, M-x gtypist-mode-goto-label Query for a label to go to (with completion). @item C-c C-l, M-x gtypist-mode-next-label This command inserts the next label in a numbered sequence of labels. For example, if you insert @example *:SERIES1_L1 @end example and hit @kbd{C-c C-l} then gtypist-mode will insert @example *:SERIES1_L2 @end example @item C-c C-b, M-x gtypist-mode-insert-banner This command inserts a centered @code{B:} command. It's centered on 66 columns because ``gtypist '' is in the right corner (prompts for content). @item C-c C-r, M-x gtypist-mode-insert-hrule Inserts a horizontal rule (comment) consisting of dashes. @item C-c C-n, M-x gtypist-mode-new-lesson Insert the comments (header) and a label to start a new lesson (prompts for name). @item C-c C-f, M-x gtypist-mode-fortune-to-drill Insert a drill (@code{D:}) with text from @command{fortune} (or @command{yow} if @command{fortune} isn't available). Use @kbd{C-u} prefix to get @code{S:}, and @kbd{C-u C-u} to get @code{d:}. @end table @noindent Run @kbd{C-h m} for a complete list of commands and their keybindings. If you find bugs or if you think there's something else this mode could do, please write to @email{bug-gtypist@@gnu.org}. @node Proměnné prostředí, Chyby a opominutí, Mód Emacsu, Top @section Proměnné prostředí GNU Typist používá tyto proměnné prostředí: @table @code @item LANG GNU Typist nabízí Native Language Support (NLS) s podporou knihovny gettext. To znamená, že pokud to váš systém podoruje, můžete si vybrat jazyk, ve kterém chcete zobrazovat hlášky gtypistu. Momentálně jsou k dispozici angličtina, španělština, němčina, finština a čeština. K použití konkrétní NLS je třeba nastavit proměnnou prostředí LANG na odpovídající LL_CC kombinaci, kde LL je dvouznakový kód jazyka podle ISO 639 a CC je dvoupísmenný znak země podle ISO 3166 (např. es_ES pro Španělsko nebo de_DE pro Německo). Na některých systémech budete muset asi nastavit na tu samou hodnotu i proměnnou LANGUAGE. Pokud chcete přeložit zprávy do nějakého jiného jazyka, nebo pokud chcete něco opravit, ozvěte se prosím na @email{bug-gtypist@@gnu.org}. @item GTYPIST_PATH Seznam adresářů, kde bude program hledovat skriptovací soubory. Dodržuje standardní způsob specifikace adresářů, to znamená seznam adresářů oddělených znaky ':'. GNU Typist se při spuštění nejprve pokusí skript spustit z aktuálního adresáře a poté bude hledat v adresářích specifikovaných proměnnou @code{GTYPIST_PATH}. Nakonec se podívá do adresáře vytvořeného při instalaci. (Např. @file{/usr/local/share/gtypist} nebo @file{/usr/share/gtypist}). @item TERM Tuto proměnnou používá knihovna curses k určení obrazovky. @item TERMINFO Tento parametr budete muset změnit, pokud jsou adresáře s @code{terminfo} rozdílné na systému, kde byl gtypist kompilován a na systému, kde má fungovat. Například na starších distribucích Slackware je terminfo umístěno v @file{/usr/lib/terminfo}. Na RedHat Linuxu je v @file{/usr/share/terminfo}. Pokud si program stěžuje na typ terminálu a má správně nastavenou hodnotu @code{TERM}, zkuste toto. @end table @node Chyby a opominutí, Historie, Proměnné prostředí, Top @section Chyby a opominutí GNU Typist se nijak nesnaží minimalizovat výstup na terminál. Speciálně blikající kurzor může působit hodně pohybu. Pokud by to byl problém, použijte kurzor terminálu. V rychlostních testech není možné používat backspace a delete za začátkem nové řádky nebo po klávese TAB. To je kvůli zjednodušení aktualizace obrazovky. Barevné módy zřejmě nepracují dobře s UnixWare. Někdy nejsou správně zobrazeny převrácené barvy. To se týká některých typů terminálů a xterminálů. @node Historie, Kopírování tohoto manuálu, Chyby a opominutí, Top @appendix Historie GNU Typist @itemize @bullet @item Původní program byl napsán pro VAX/VMS BASIC někým z Harris Corp (Ft. Lauderdale, FL). @item D. Jason Penney @email{penneyj@@slc.com} jej přepsal pro Microsoft BASICA @item D. Jason Penney @email{penneyj@@slc.com} jej přepsal pro C s knihovnou curses @item Simon Baldwin @email{simonb@@sco.com} přepsal verzi D. Jason Penneyho, jeho vylepšení jsou popsána v souboru NEWS (mezi verzí 2.2 a 2.2b). On je také držitelem copyrightu na GNU Typist (gtypist je distribuovaný pod podmínkami GNU GPL). Simon také napsal verzi Typistu v Javě, kterou původně nazýval JTypist, ale nyní se jmenuje Typist: @url{http://www.geocities.com/simon_baldwin/typist/} @item Since 1997, Ben Armstrong @email{synrg@@sanctuary.nslug.ns.ca} pomohl opravováním chyb a udržování balíčku pro Debian (podívejte se na @url{http://packages.debian.org/gtypist}). @item V roce 2000 se Vladimir Támara @email{vtamara@@users.sourceforge.net} a Igor Támara @email{ikks@@users.sourceforge.net} stali maintainery verze v C. Před listopadem 2000 byl GNU Typist spravován jako součást projektu Structio. @item Listopad 2000, program byl přijat do GNU! Byl přejmenován na GNU Typist (také gtypist). @item V květnu 2001 se stal novým maintainerem Michael Opdenacker @email{michaelo@@gnu.org}, který se také naučil psát na klávesnici s gtypistem. Vývoj projektu nyní probíhá na @url{http://savannah.gnu.org/projects/gtypist/}. @item V červnu 2001 se k projektu připojil Felix Natter @email{fnatter@@gmx.net} a výrazně mu přispěl portováním lekcí z jiných tutoriálů, vylepšením pomocných utilit, nových možností tutoriálů a módem pro Emacs. @end itemize @node Kopírování tohoto manuálu @appendix GNU Free Documentation License @include fdl.texi @bye @c LocalWords: xref QWERTY kt gtypist-2.9.5/doc/version2.texi0000644000175000017500000000014112372333406013361 00000000000000@set UPDATED 18 August 2013 @set UPDATED-MONTH August 2013 @set EDITION 2.9.5 @set VERSION 2.9.5 gtypist-2.9.5/doc/gpl.texi0000644000175000017500000010441312204155736012405 00000000000000@c The GNU General Public License. @center Version 3, 29 June 2007 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @heading Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program---to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. @heading TERMS AND CONDITIONS @enumerate 0 @item Definitions. ``This License'' refers to version 3 of the GNU General Public License. ``Copyright'' also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. ``The Program'' refers to any copyrightable work licensed under this License. Each licensee is addressed as ``you''. ``Licensees'' and ``recipients'' may be individuals or organizations. To ``modify'' a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a ``modified version'' of the earlier work or a work ``based on'' the earlier work. A ``covered work'' means either the unmodified Program or a work based on the Program. To ``propagate'' a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To ``convey'' a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays ``Appropriate Legal Notices'' to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. @item Source Code. The ``source code'' for a work means the preferred form of the work for making modifications to it. ``Object code'' means any non-source form of a work. A ``Standard Interface'' means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The ``System Libraries'' of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A ``Major Component'', in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The ``Corresponding Source'' for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. @item Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. @item Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. @item Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. @item Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: @enumerate a @item The work must carry prominent notices stating that you modified it, and giving a relevant date. @item The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to ``keep intact all notices''. @item You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. @item If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. @end enumerate A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. @item Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: @enumerate a @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. @item Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. @item Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. @item Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. @end enumerate A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A ``User Product'' is either (1) a ``consumer product'', which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, ``normally used'' refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. ``Installation Information'' for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. @item Additional Terms. ``Additional permissions'' are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: @enumerate a @item Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or @item Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or @item Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or @item Limiting the use for publicity purposes of names of licensors or authors of the material; or @item Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or @item Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. @end enumerate All other non-permissive additional terms are considered ``further restrictions'' within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. @item Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. @item Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. @item Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An ``entity transaction'' is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. @item Patents. A ``contributor'' is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's ``contributor version''. A contributor's ``essential patent claims'' are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, ``control'' includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a ``patent license'' is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To ``grant'' such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. ``Knowingly relying'' means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is ``discriminatory'' if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. @item No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. @item Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. @item Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. @item Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @item Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. @end enumerate @heading END OF TERMS AND CONDITIONS @heading How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) @var{year} @var{name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see @url{http://www.gnu.org/licenses/}. @end smallexample Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: @smallexample @var{program} Copyright (C) @var{year} @var{name of author} This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. This is free software, and you are welcome to redistribute it under certain conditions; type @samp{show c} for details. @end smallexample The hypothetical commands @samp{show w} and @samp{show c} should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an ``about box''. You should also get your employer (if you work as a programmer) or school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see @url{http://www.gnu.org/licenses/}. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. gtypist-2.9.5/doc/gtypist.es.info0000644000175000017500000031200312372333410013703 00000000000000This is gtypist.es.info, produced by makeinfo version 5.2 from gtypist.es.texi. Este es el manual de GNU Typist (versión 2.9.5, 18 August 2013), un programa para aprender a mecanografiar en varios idiomas y con distintas disposiciones de teclado. Copyright © 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc. Copyright © de la traducción 2010-11, TMJQ, SL. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”. INFO-DIR-SECTION Education START-INFO-DIR-ENTRY * GNU Typist (es): (gtypist.es). Documentación del tutor mecanográfico gtypist. END-INFO-DIR-ENTRY  File: gtypist.es.info, Node: Top, Next: Distribucion, Up: (dir) GNU Typist, el tutor mecanográfico ********************************** Este es el manual de GNU Typist (versión 2.9.5, 18 August 2013), un programa para aprender a mecanografiar en varios idiomas y con distintas disposiciones de teclado. Copyright © 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc. Copyright © de la traducción 2010-11, TMJQ, SL. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”. GNU Typist es un tutor interactivo de mecanografiado que ayuda a escribir correctamente. Tiene varias lecciones para diversas disposiciones de teclado y en diferentes idiomas. Las lecciones de gtypist se describen en un lenguaje de script de fácil aprendizaje que el usuario puede emplear para modificar las lecciones existentes o crear nuevas. * Menu: * Distribucion:: Localizar gtypist: fuentes, paquetes, etc. * Copiado:: La Licencia Pública General de GNU explica cómo se puede copiar y compartir gtypist * Introduccion:: Conceptos importantes para el usuario * Invocacion:: Cómo se invoca gtypist * Lecciones suministradas:: Descripción general de las lecciones contenidas en la distribución de gtypist * Uso de typefortune:: Prácticas con textos de ‘fortune’ (requiere perl) * Sintaxis de las lecciones:: La sintaxis de las lecciones de gtypist * Lecciones nuevas:: Cómo contribuir lecciones nuevas * Modo para Emacs:: Modo Emacs para la edición de los ficheros gtypist * Variables de entorno:: Variables de entorno que afectan a gtypist * Errores y omisiones:: Problemas conocidos * Historia:: Historia de GNU Typist * Copia del manual:: La Licencia de Documentación Pública de GNU  File: gtypist.es.info, Node: Distribucion, Next: Copiado, Prev: Top, Up: Top Distribución ************ GNU Typist (o gtypist) es "software libre"; esto significa que cualquier persona es libre de usarlo y libre de redistribuirlo bajo ciertas condiciones. Las condiciones precisas se establecen en la Licencia General Pública de GNU que viene con este programa y sigue a esta sección. GNU Typist se puede obtener de un amigo o de Internet: Sitio de distribución oficial Página web oficial Página web oficial replicada en castellano Manual en la web (en inglés) Manual en la web (en español) Página web de la sección de desarrollo (repositorio Git, tareas, asistencia...)  File: gtypist.es.info, Node: Copiado, Next: Introduccion, Prev: Distribucion, Up: Top GNU GENERAL PUBLIC LICENSE ************************** Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble ======== The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program—to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS ==================== 0. Definitions. “This License” refers to version 3 of the GNU General Public License. “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. A “covered work” means either the unmodified Program or a work based on the Program. To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users’ Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a. The work must carry prominent notices stating that you modified it, and giving a relevant date. b. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. c. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d. Limiting the use for publicity purposes of names of licensors or authors of the material; or e. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”. A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others’ Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS =========================== How to Apply These Terms to Your New Programs ============================================= If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. Copyright (C) YEAR NAME OF AUTHOR This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: PROGRAM Copyright (C) YEAR NAME OF AUTHOR This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’. This is free software, and you are welcome to redistribute it under certain conditions; type ‘show c’ for details. The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read .  File: gtypist.es.info, Node: Introduccion, Next: Invocacion, Prev: Copiado, Up: Top 1 Introducción ************** GNU Typist es un programa tutor interactivo de mecanografiado. Emplea un fichero de entrada para crear una serie de tutorías de mecanografiado, ejercicios y pruebas de velocidad. Está pensado para su uso en terminales sin gráficos. Ha sido compilado y usado en GNU/Linux y Unix (OpenBSD, AIX, Solaris) y también en DOS/Windows (DOS 6.22, Windows 95, 98, NT y XP). El programa lee lecciones escritas en un lenguaje de script de fácil aprendizaje. Se distribuye con unas cuantas lecciones completas y de calidad. Se pueden usar como están, modificarlas o crear lecciones nuevas (*note Lecciones nuevas:: y *note Sintaxis de las lecciones::). Si no se especifica un fichero de script en la línea de comandos, se usará uno predeterminado ‘gtypist.typ’. (Véanse los detalles acerca de la ruta en la sección *note Variables de entorno::). La línea superior de la pantalla muestra una leyenda. La línea inferior muestra una línea de mensaje, consultas y otra información de estado. Las líneas intermedias se usan para las tutorías, los ejercicios y las pruebas de velocidad. Existen dos tipos de ejercicios de tecleado: "entrenamientos" y "pruebas de velocidad". En un "entrenamiento", gtypist muestra texto cada dos líneas de la pantalla y espera que el usuario teclee correctamente el mismo texto exacto en las líneas intermedias. Los errores de mecanografiado se indican con un ‘^’ inverso, o ‘>’ si el carácter es un salto de línea y al final del ejercicio calcula la tasa real y efectiva de palabras por minuto (WPM). Si hubiera demasiados errores, se re-ejecutará el entrenamiento. No se permite la corrección de errores cometidos. En las pruebas de velocidad, gtypist muestra texto en la pantalla, y espera a que el usuario sobre-escriba correctamente el mismo texto exacto. Indica los errores mecanográficos y al final de la prueba calcula la tasa real y efectiva en WPM. Si hubiera demasiados errores, se re-ejecuta la prueba de velocidad. Se permite la corrección de errores cometidos, pero aún así se acumulan. Si ya se han cometido demasiadas equivocaciones, se puede usar para salir y comenzar de nuevo. La manera de saltarse una lección es presionar dos veces . Cuando se completa una lección, se le pregunta al usuario si quiere repetirla. También hay unos ejercicios de “sólo prácticas” (tanto entrenamientos como pruebas de velocidad) que no se querrán repetir. Pero no decimos cuándo se presentan, así que habrá que seguir intentando superarse ;-) En los informes de velocidad de escritura, se considera que una "palabra" tiene cinco caracteres, así que las WPM son el número de caracteres del pasaje de la prueba dividido por cinco y nuevamente dividido por la cantidad de minutos transcurridos en su escritura. Cada error se cuenta como una palabra mal escrita. Si se prefiere, la velocidad se puede mostrar en Pulsaciones por Minuto (CPM) (caracteres por minuto, en inglés). Esto se puede especificar con “–scoring=cpm” en la línea de comandos. [NdT: en España nunca he oído hablar de “palabras por minuto”, siempre de “pulsaciones por minuto”. La obligación de especificar esa opción en la línea de comandos es engorrosa para aquellos que sólo cuentan ppm. Lo propio es que hubiera un fichero de configuración o alguna otra vía para elegir de manera permanente.]  File: gtypist.es.info, Node: Invocacion, Next: Lecciones suministradas, Prev: Introduccion, Up: Top 2 Invocación ************ La sintaxis para invocar GNU Typist es: ‘gtypist [ Opciones... ] [ fichero ]’ A continuación se dan las opciones existentes (su forma larga no se admite en DOS): ‘-e, --error-max’ Especifica el porcentaje de error máximo. El valor predeterminado es 3.0 y debe estar entre 0.0 y 100.0. Existe un comando de fichero de script (*note Sintaxis de las lecciones::) que sólo sobre-escribe esto si es _estrictamente_ (menor). Este valor se ignora en los ejercicios de “sólo práctica”. ‘-n, --notimer’ Gtypist muestra la velocidad de escritura en WPM después de los tests de prácticas y de velocidad. Sin embargo, las lecciones parecen haber sido escritas para un programa que sólo hace esto para tests de velocidad. Para hacer que gtypist se comporte de manera que concuerde con las lecciones, esto es, para suprimir los informes de WPM en las prácticas, se usa ‘-n’ o ‘--notimer’. ‘-t, --term-cursor’ Gtypist crea su propio cursor parpadeante de bloque en la pantalla, para ayudar a distinguir entre el cursor y las indicaciones de error de vídeo inverso. Si se establece ‘-t’ o ‘--term-cursor’ se suprime esto y fuerza al programa a usar el cursor de la terminal. ‘-f, --curs-flash’ Establece el periodo de parpadeo del cursor de bloque en décimas de segundo. El valor 0 indica que no haya parpadeo. El predeterminado es 10 y el máximo 512. Esta opción queda ignorada si se han establecido ‘-t’ o ‘--term-cursor’. ‘-c, --colo[u]rs’ En su estado normal, gtypist sólo usa atributos de vídeo normal e inverso en modo monocromo. Esta opción se puede usar para especificar en este orden los colores delantero y de fondo en terminales que admitan colores. Estos se especifican como dos enteros, en el intervalo entre 0 y 7, separados por comas. Los códigos de color del 0 al 7 indican negro, rojo, verde, amarillo, azul, magenta, cian y blanco, respectivamente. La cadena de colores predeterminada es 7,0 (blanco sobre negro). Se ignora esta opción si la terminal no admite colores. ‘-s, --silent’ Cuando gtypist detecta un error mecanográfico, sonará la terminal. Esta opción se usa para silenciarla. ‘-q, --quiet’ Lo mismo que ‘-s’ o ‘--silent’. ‘-l, --start-label’ Especifica la etiqueta del fichero de script en la que gtypist comienza la ejecución (hay información acerca de las etiquetas más abajo, donde se habla de los ficheros de script y de los comandos). Si esta opción no se usa, gtypist comienza la ejecución en la primera línea del fichero. ‘-w, --word-processor’ Con esta opción, gtypist procura imitar a los procesadores de texto en ciertas maneras cuando ejecuta un ejercicio. Tratará el espacio al final de una línea como un carácter tecleado correctamente y con ajuste de párrafo. Tratará la tecla Retorno al final de una línea como señal de que se mueva al comienzo del siguiente párrafo si fuera de aplicación. Comprimirá los espacios múltiples en uno solo. Y se saltará sobre los guiones que encuentre al final de línea. ‘-k, --no-skip’ Prohíbe al usuario saltarse las lecciones o salir de ellas por medio de . ‘-i, --show-errors’ Resalta los errores con vídeo inverso. ‘-S, --always-sure’ Salta las preguntas de confirmación. ‘--banner-colo[u]rs’ Cambia el color de las leyendas situadas en la parte superior de la pantalla. Los valores de color son los mismos que los del comando –colo[u]rs. El predeterminado es 0,6,5,1; delantero en negro, fondo en cian, nombre de programa en magenta y nombre de la versión en rojo. ‘--scoring’ Cambia la manera de medición. Puede ser WPM y CPM, siendo la predeterminada la WPM. También se puede establecer la variable de entorno ‘LANG’ si se desea ejecutar gtypist en el idioma nativo. *Note Variables de entorno::. En algunos idiomas como el español, los mensajes de la interfaz suelen ser más largos que en inglés. Por tanto, quizás sea necesario agrandar la terminal antes de invocar el programa. De lo contrario, el texto de abajo a la izquierda puede solaparse con la cadena de abajo a la derecha. *Ejemplos:* Para ejecutar las lecciones predeterminadas ‘gtypist.typ’: ‘gtypist’ Para ejecutar la lección en español: ‘gtypist esp.typ’ Para indicarle a gtypist que busque una lección bar.typ en un directorio no estándar ‘/home/foo’: ‘export GTYPIST_PATH="/home/foo"’ ‘gtypist bar.typ’ Para ejecutar las lecciones del fichero ‘test.typ’ del directorio ‘/tmp’, comenzando con la etiqueta ‘TEST1’ y empleando el cursor de la terminal de manera silenciosa: ‘gtypist -t -q -l TEST1 /tmp/test.typ’  File: gtypist.es.info, Node: Lecciones suministradas, Next: Uso de typefortune, Prev: Invocacion, Up: Top 3 Lecciones suministradas ************************* GNU Typist viene con las siguientes lecciones: ‘q.typ’ Curso rápido de QWERTY en inglés. ‘r.typ’ Curso largo de QWERTY en inglés. ‘t.typ’ Mecanografía al tacto QWERTY en inglés. ‘v.typ’ Otro QWERTY en inglés. ‘w.typ’ Repaso de QWERTY en inglés. ‘d.typ’ Mecanografía al tacto Dvorak en inglés. ‘m.typ’ Entrenamiento mecanográfico en inglés. ‘s.typ’ Entrenamiento de velocidad en inglés. ‘n.typ’ Teclado numérico en inglés. ‘gtypist.typ’ Compendio de todas las lecciones anteriores en inglés. ‘esp.typ’ Curso QWERTY en español. ‘cs.typ’ Lecciones en checo. ‘ru.typ’ Lecciones en ruso. ‘kt*.typ’ Estas lecciones son las estándares de Ktouch 1.0 (http://ktouch.sourceforge.net/), convertidas a formato de fichero gtypist mediante ‘tools/ktouch2typ.pl’. Los ficheros se llaman ‘ktde.typ’ (‘german.ktouch’), ‘kten.typ’ (‘english.ktouch’), ‘ktfr.typ’ (‘french.ktouch’), ‘ktfr2.typ’ (‘french-2.ktouch’), ‘ktno.typ’ (‘norwegian.ktouch’) ‘ktdk.typ’ (‘danish.ktouch’), ‘ktdk2.typ’ (‘danish-2.ktouch’), ‘ktdvorak.typ’ (‘dvorak.ktouch’) and ‘ktnumber.typ’ (‘number.ktouch’). ‘ttde.typ’ Se trata de la lección en alemán de tipptrainer (http://www.pingos.schulnetz.org/tipptrainer/), convertida mediante ‘tools/tt2typ.pl’. De encontrarse errores en estas lecciones, o si se corrigen de algún modo o se escriben lecciones nuevas, rogamos que se publiquen con una licencia libre y nos lo comuniquen a .  File: gtypist.es.info, Node: Uso de typefortune, Next: Sintaxis de las lecciones, Prev: Lecciones suministradas, Up: Top 4 Uso de ‘typefortune’ ********************** ‘typefortune’ permite practicar con textos del programa ‘fortune’. ‘SYNTAX: typefortune [-dslh] [-n count] [-o ]’ ‘-d’ Usa ‘D:’ en vez de ‘S:’. ‘-s’ Ejecuta ‘fortune’ con ‘-s’. ‘-l’ Ejecuta ‘fortune’ con ‘-l’. ‘-n CANTIDAD’ Practica esa CANTIDAD de fortunas. ‘-o OPCIÓN’ Pasa opciones a ‘gtypist’, en la forma OPCIÓN (opción booleana, e.d. ‘-o word-processor’), OPCIÓN,VALOR (opción con valor, e.d. ‘-o e,1.0’) donde la OPCIÓN es el nombre de la opción (corta o larga) removidos todos los guiones antepuestos. Hace falta entrecomillar el argumento de ‘-o’ si se va a especificar más de uno: ‘typefortune -n 3 -o 'silent e,5 word-processor'’.  File: gtypist.es.info, Node: Sintaxis de las lecciones, Next: Lecciones nuevas, Prev: Uso de typefortune, Up: Top 5 Comandos del fichero de script ******************************** GNU Typist lee los datos de sus lecciones de mecanografía desde un fichero. Con la excepción de los comentarios y de las líneas en blanco, cada línea del fichero está en el formato ‘carácter_del_comando : datos_del_comando’ Aquí, ‘carácter_del_comando’ es un código de carácter único que define una acción que ha de hacer gtypist, y ‘datos_del_comando’ son los datos para ese comando. Si ‘carácter_del_comando’ es un carácter de espacio, eso indica que la línea es continuación del comando precedente que no sea un espacio. El separador ‘:’ debe estar en la columna dos de la línea. Las líneas de comentarios son aquellas que comienzan con un carácter ‘#’ y se ignoran, como se hace igualmente con las líneas en blanco. Las líneas de comentario pueden tener cualquier formato siempre que comiencen con ‘#’; las líneas restantes deben tener el formato de arriba. Será conveniente leer la introducción para familiarizarse con los fundamentos: *Note Introduccion::. La siguiente es la lista de valores ‘carácter_del_comando’ válidos: ‘B’ Este comando limpia la pantalla entera. Si hay presente algún ‘datos_del_comando’, se muestra en la leyenda de una línea que hay en la parte superior de la pantalla y permanece ahí hasta el siguiente comando ‘B’. Este comando no se puede continuar en la línea siguiente; es un comando de una sola línea. ‘T’ Presenta una tutoría y se trata de un comando multi-línea, hasta el límite de la longitud de la pantalla. Cada línea del comando simplemente se imprime en la pantalla. Este comando limpia toda la pantalla por debajo de la línea de la leyenda superior. Después de producirse la visualización, el programa espera antes de proceder. ‘*’ Esto indica una etiqueta en el fichero. La etiqueta puede ser el destino de un comando ‘G’, ‘Y’, ‘N’ o ‘F’. Las etiquetas pueden contener cualesquier caracteres, incluso espacios, y son comandos de una sola línea. Han de ser únicas dentro de los ficheros de lecciones. Se ignora el espacio en blanco al final de las etiquetas. ‘I’ El comando ‘I’ puede mostrar algunas breves instrucciones por encima de un entrenamiento o prueba de velocidad. Sólo se permite como máximo dos líneas. A diferencia del comando ‘T’, no espera por ninguna otra pulsación de tecla antes de proceder. Así que realmente siempre le debería seguir un ejercicio. Limpia el área entera de ejercicios de la pantalla, así que en este sentido es como un ‘T’ de dos líneas. ‘M’ Este comando es la nueva vía para crear menús (desde gtypist 2.7). Esta es la sintaxis: M: [UP=ETIQUETA_DE-RETORNO|_EXIT] "título" :ETIQUETA1 "elemento1" :ETIQUETA2 "elemento2" ... Esto muestra un menú conveniente compuesto por los elementos especificados y deja que el usuario elija uno de ellos. Si se selecciona un elemento, gtypist continúa la ejecución del script a partir de la etiqueta correspondiente. Si se presionó la tecla Escape y la etiqueta ‘UP’ está definida, gtypist va igualmente a la etiqueta ‘UP’, o sale de allí, si hay un ‘``_EXIT''’ en lugar de la etiqueta. Si la etiqueta ‘UP’ no está definida, gtypist intenta regresar al menú anterior y salta a la última etiqueta encontrada en el script anterior al comando ‘M’ previo. Si no hubiera tal etiqueta y se mostró algún menú antes del actual, gtypist se limitará a ir al comienzo del script. Si no se cumple ninguna de las condiciones anteriores, gtypist sale del script. Los detalles de arriba hacen natural la creación de jerarquías de menús sin tener que usar etiquetas ‘UP’. El título y todas las descripciones deben encerrarse entre comillas (""). Además debe haber como mínimo un espacio entre ‘UP=XXX’ y "título" y entre las etiquetas y las descripciones correspondientes. Este comando se introdujo como una vía para disponer fácilmente diversas partes de los ficheros de lecciones en una única jerarquía de menú, así como reemplazo para los antiguos menús de la tecla ‘F’. Hay ejemplos en los ficheros de lecciones. ‘D,d’ Este comando se llama "entrenamiento" y es uno de los dos tipos de ejercicios mecanográficos. Es un comando multi-línea. El texto se muestra en cada línea alterna, y el usuario escribe en las intermedias. Debido a ello, no se puede usar más de 11 líneas de contenido. Este tipo de ejercicio se supone que está para el entrenamiento de los dedos (e.d. jfjfjjf), pero también puede contener palabras y frases completas si se usan para practicar algo (e.d. una letra/sílaba/"grip") y no son textos reales. La versión en minúscula ‘d’ es un entrenamiento de “sólo práctica”; el usuario no tiene que repetirlo si tiene demasiadas equivocaciones. ‘S,s’ Este es el segundo tipo de ejercicio de mecanografía: la "prueba de velocidad". Es un comando multi-línea. Muestra su texto en pantalla y le pide al usuario que escriba sobre él. Es el motivo por lo que se puede tener hasta 22 líneas de texto en estos ejercicios. En las pruebas de velocidad se pueden corregir los fallos, pero con ello no se disminuye la cuenta de errores. Las pruebas de velocidad se deberían usar para mecanografiar (principalmente) frases completas, textos o ficheros (e.d. cartas, ficheros texinfo/html/tex). La versión en minúscula ‘s’ es una "prueba de velocidad de sólo práctica": el usuario no tiene que repetirla en el caso de cometer demasiados fallos. ‘G’ Causa que ‘gtypist’ vaya a la etiqueta que hay en ‘datos_del_comando’ y continúe allí la ejecución del script. Consiste en una única línea de comandos. ‘Q’ Este comando presenta un texto en la línea de mensajes y espera por una respuesta de o antes de proceder. Se ignora el resto de caracteres. Como efecto colateral, se puede presionar una tecla de función si está asociada (una vía ya desaconsejada de crear el indicador de los menús). ‘Y’ Es como ‘G’, excepto que el goto se ejecuta sólo si el resultado del último comando ‘Q’ fue . ‘N’ Es como ‘G’, excepto que el goto se ejecuta sólo si el resultado del último comando ‘Q’ fue . ‘K’ _Esta comando está desaconsejado en favor de ‘M’:_ Este comando asocia una tecla de función a una etiqueta. El formato de la línea de datos que sigue a este comando debe ser ‘fkey_number:label’, donde ‘fkey_number’ es el número de una tecla de función entre 1 y 12, y ‘label’ es una etiqueta a la que ir cuando se presiona este tecla. Si la etiqueta tiene el valor NULL, se elimina cualquier asociación que la tecla tenga con alguna etiqueta. Si las teclas de función no están disponibles en la terminal, se pueden usar otras teclas: de <1> a <9> para reemplazar de a , <0> para reemplazar , para y para . Otras alternativas para las teclas - son las combinaciones: , , , , , , , , , , y . Esto también es útil cuando las teclas de función quedan interceptadas por otros programas (por ejemplo, algunos gestores de ventanas). ‘E’ Este comando se usa para establecer la tasa máxima de error permitida para el siguiente entrenamiento (‘E:%’) o para todas las prácticas posteriores hasta la siguiente ‘E:’ (‘E:%*’). Si se especifica ‘--error-max/-e’, entonces este comando sólo surte efecto si es ——–> _stricter_ que el valor especificado en la línea de comandos. Los ‘datos_del_comando’ consisten en el valor (entre 0.0 y 100.0), seguido de ‘%’ (se requiere para que los scripts sean más legibles). La palabra ‘default’ o ‘Default’ lo re-establece en su valor predeterminado. ‘F’ Este comando (“etiqueta de al-fallar”) se usa para decidir la etiqueta (en ‘datos_del_comando’) a donde el usuario habrá de ir si falla un ejercicio. Lo habitual es que este comando sólo sea de aplicación en el ejercicio siguiente, pero el usuario puede convertirlo en persistente si pone un ‘*’ al final de los ‘datos_del_comando’. Si se pone NULL, esto reinicia la etiqueta. ‘X’ Este comando causa que Gtypist finalice. Es de una sola línea. Se ignoran los ‘datos_del_comando’. El programa también finaliza si se encuentra el final del fichero (así que también se podría poner una etiqueta allí y simplemente hacer ‘G’ en ella) Este es un script de ejemplo para mostrar los comandos disponibles en el fichero de lección (‘tinydemo.typ’): # Demostración mínima B: Demostración del tutor mecanográfico *:LOOP K:1:QDONE T:Este es un pequeño ejemplo de tutoría. Un ejemplo :mejor se encuentra en el fichero demo.typ que :acompaña a GNU Typist I:Este es un ejemplo de un ejercicio: D:asdf ghjkl; I:Y este lo es de una prueba de velocidad: S:qwe rt yu iop *:QDONE Q:¿Ha visto suficiente? [Y/N] N:LOOP X:  File: gtypist.es.info, Node: Lecciones nuevas, Next: Modo para Emacs, Prev: Sintaxis de las lecciones, Up: Top 6 Creación de lecciones nuevas ****************************** Esta sección proporciona indicaciones y sugerencias para la creación de lecciones nuevas (o la mejora de las existentes). * Menu: * Lecciones Ktouch:: Generación de lecciones a partir de ejercicios Ktouch * Ejercicios de fortune:: Creación de ejercicios y pruebas de velocidad a partir de galletitas de la fortuna * Patrones para lecciones:: Patrones de diseño para las lecciones * Findwords:: Un script simple que facilita encontrar palabras con ciertas letras  File: gtypist.es.info, Node: Lecciones Ktouch, Prev: Ejercicios de fortune, Up: Lecciones nuevas 6.1 Lecciones Ktouch ==================== Una vía muy fácil de escribir lecciones es hacerlo en el formato que emplea ‘ktouch’ y después convertirlas a lecciones de Gtypist usando ‘tools/ktouch2typ.pl’. Este programa se cuida de escribir las “tablas de saltos”, un menú y un poco más. El formato ktouch consiste sólo en lecciones, que están precedidas por sus nombres y separadas por líneas en blanco y/o comentarios (‘#’ al principio de las líneas). Así que la primera línea del fichero que no esté en blanco y no sea un comentario es el nombre de la primera lección y esta primera lección consiste en todas las líneas hasta la siguiente que sea un comentario o esté en blanco. Tras el separador (comentario o línea en blanco) sigue el nombre de la segunda lección y así sucesivamente. Esta es una muestra de un fichero ktouch con tres lecciones (extraídas de las tres primeras lecciones de ‘german.ktouch’): # # Deutsche Training-Datei für KTouch # Grundstellung f f f f f f fff fff fff f f f f f f fff fff fff f f f f f f f fff j j j j j j jjj jjj jjj j j j j j j jjj jjj jjj j j j j j j j jjj fff jjj fff jjj jjj fff jjj fff fjf fjf fjf jfj jfj jfj fjf jfjfj Grundstellung fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd kkkff fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jköfd s s s s s s sss sss sss s s s s s s sss sss sss s s s s s s s sss #Zwei wichtige Vokale: e und i e und i asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdfö das dass lös fad dass lös als dass las lös fad dass als dass dass ded ded ded dej dek del deö ded deö del dek dej ded dej dek delde Una vez que esté hecha, se usa ‘tools/ktouch2typ.pl’ para convertir el fichero : ‘ktouch2typ.pl lesson.ktouch’ convierte ‘lesson.ktouch’ en ‘lesson.typ’. Es importante que el fichero de entrada finalice en ‘.ktouch’, de lo contrario ‘ktouch2typ.pl’ lo saltará. Advertencia: esto sobre-escribe ‘lesson.typ’ sin comunicarlo. Se puede personalizar el número de líneas que emplea ‘ktouch2typ.pl’ para cada práctica, modificando la variable pertinente en ‘tools/ktouch2typ.pl’. Obviamente, la desventaja de este método es que no se pueden aprovechar todas las características de Gtypist (pero el fichero de salida es muy legible, así que se puede editar para introducirle más características del programa).  File: gtypist.es.info, Node: Ejercicios de fortune, Next: Lecciones Ktouch, Prev: Patrones para lecciones, Up: Lecciones nuevas 6.2 Ejercicios a partir de ‘fortune’ ==================================== Con ‘gtypist-mode.el’ se pueden crear rápidamente lecciones con texto del programa ‘fortune’ (o el interno de Emacs ‘yow’ si ni se tiene ‘fortune’, lo habitual en Windows). Una vez instalado ‘gtypist-mode.el’ (*note Modo para Emacs::), se puede abrir un fichero con la extensión ‘.typ’ y ejecutar ‘C-c C-f’ para crear una práctica (‘D:’ es la predeterminada, se usa ‘C-u’ o ‘C-u C-u’ para cambiarla).  File: gtypist.es.info, Node: Patrones para lecciones, Next: Ejercicios de fortune, Prev: Findwords, Up: Lecciones nuevas 6.3 Diseño de patrones para lecciones ===================================== [NdT: aquí se mezcla el contenido normal de un manual de uso del programa con asuntos específicos pedagógicos acerca de la mecanografía; y se hace de manera pobre. Sería preferible remitir a otro documento.] 6.3.1 Estructura de los ficheros de lecciones --------------------------------------------- • Empléese una mezcla de entrenamientos y pruebas de velocidad (más divertido para el usuario). • Algunos ejercicios de “sólo práctica” (‘d:’/‘s:’) (mezclados posiblemente con algunos ejercicios “reales”) seguidos por un “test final”. ‘esp.typ’ emplea este esquema. 6.3.2 Patrones para ejercicios ------------------------------ • Cuando se introduce una tecla nueva, se comienza mezclando otras teclas (ya conocidas) para el mismo dedo. Este es un ejemplo de ‘t.typ’, línea 237: I:Emplee el dedo J para la tecla H. *:_T_R_L23 D:jjj jhj jjj jhj jjj jhj • usar ’palabra, palabra.’ de manera repetida para practicar la ,/.  File: gtypist.es.info, Node: Findwords, Next: Patrones para lecciones, Up: Lecciones nuevas 6.4 El script ‘findwords’ ========================= El script ‘tools/findwords’ que se encuentra en las fuentes de GNU Typist está para asistir en la creación de lecciones nuevas. 6.4.1 Propósito --------------- Al principio se crea un tutor desde cero, no es fácil formar palabras ni frases cuando el intervalo de letras que se pueden usar está restringido. A veces se quiere insertar algún párrafo “destinado” a alguna combinación especial de dos o tres letras. Esto es incluso más difícil. Por este motivo hemos creado ‘findwords’. Este programa emplea los diccionarios de ‘aspell’ (un corrector ortográfico multi-lingüe y libre). 6.4.2 Instalación ----------------- Se necesitan los paquetes ‘aspell’ y ‘aspell-LG’, donde LG es el código de idioma ISO del idioma que se quiere usar. Tras su correcta instalación habrá que hacer un pequeño cambio en la configuración para que el banco de datos maestro de aspell sea el del idioma elegido. Esto se puede hacer por dos vías: 1. En el directorio personal se crea el fichero ‘.aspell.conf’ y se le añade esta línea: ‘master LANGUAGE’ 2. Se crea ‘/usr/share/pspell/LG-aspell.pwli’ y se le añade esta línea: ‘/usr/lib/aspell/LG’ Hay que asegurarse de que el ajuste ‘locale’ es ‘LG’. En lo de arriba, LG significa código de idioma ISO (vg. ‘en’, ‘fr’, ‘cs’) y LANGUAGE significa nombre del banco de datos que hay en ‘/usr/lib/aspell’ (vg. ‘english.multi’, ‘french’, ‘czech’). Se puede verificar si funciona escribiendo: aspell dump master | less 6.4.3 Uso de ‘findwords’ ------------------------ La sintaxis es como sigue: ‘./findwords LETRAS [COMBINACIÓN]’ En el argumento LETRAS, obligatorio, se deben listar las letras que se quieren usar, sin ningún espacio. Si se pone un punto (‘.’) nos referimos a ‘todas las letras’. El segundo argumento, COMBINACIÓN, es optativo y con él se especifican las combinaciones de teclas que se están buscando. Algunos ejemplos: • ‘./findwords asdfjkleruio’ Buscamos todas las palabras compuestas con las letras listadas. • ‘./findwords asdfjkleruio sa’ Buscamos palabras que contengan la combinación ‘sa’, pero sólo aquellas compuestas con las letras especificadas. • ‘./findwords . col’ Palabras que contengan todas las letras, pero que tengan ‘col’ en alguna parte dentro de ellas.  File: gtypist.es.info, Node: Modo para Emacs, Next: Variables de entorno, Prev: Lecciones nuevas, Up: Top 7 El modo para Emacs ******************** gtypist viene ahora con un modo mayor para Emacs que hace resaltado de sintaxis, sangrado y posee algunos comandos convenientes para contar etiquetas, ir a ellas, insertar leyendas centradas adecuadamente, comentarios especiales y un poco más. Se copia el fichero ‘tools/gtypist-mode.el’ a donde sea que se tengan los ficheros elisp locales (v.g. ‘~/elisp’) y se pone esto en al ‘~/.emacs’ (adáptese la ruta): (autoload 'gtypist-mode "~/elisp/gtypist-mode") o se pone en la ‘load-path’ (‘make install’ en las fuentes o el paquete Debian, que ya lo hace solo) y se usa esto: (autoload 'gtypist-mode "gtypist-mode") *y* se añade esto al ‘~/.emacs’: (setq auto-mode-alist (cons '("\\.typ\\'" . gtypist-mode) auto-mode-alist)) Todo esto también se menciona en la sección README del fichero ‘tools/gtypist-mode.el’. Estos son los comandos junto con sus asociaciones de teclas: ‘C-c C-i, M-x gtypist-mode-info’ Con esto se muestra la documentación de gtypist, comenzando en el nodo “Sintaxis de las lecciones” (*note Sintaxis de las lecciones::). Con prefijo, comienza en el nodo superior. ‘C-c M-g, M-x gtypist-mode-goto-label’ Pide una etiqueta a la que ir (con completado). ‘C-c C-l, M-x gtypist-mode-next-label’ Este comando inserta la siguiente etiqueta en una secuencia numerada. Por ejemplo, si se inserta *:SERIES1_L1 y se presiona ‘C-c C-l’, entonces el modo gtypist insertará *:SERIES1_L2 ‘C-c C-b, M-x gtypist-mode-insert-banner’ Este comando inserta un comando ‘B:’ centrado. Se centra en 66 columnas porque “gtypist ” está en la esquema derecha (pide el contenido). ‘C-c C-r, M-x gtypist-mode-insert-hrule’ Inserta una línea horizontal (comentario) consistente en guiones. ‘C-c C-n, M-x gtypist-mode-new-lesson’ Inserta los comentarios (cabecera) y una etiqueta para empezar una lección nueva (pide el nombre). ‘C-c C-f, M-x gtypist-mode-fortune-to-drill’ Inserta un entrenamiento (‘D:’) con texto de ‘fortune’ (o ‘yow’ si ‘fortune’ no está disponible). Se usa el prefijo ‘C-u’ para obtener ‘S:’, y ‘C-u C-u’ para obtener ‘d:’. Ejecutando ‘C-h m’ se consigue la lista completa de comandos y sus asociaciones de teclas. Quien localice fallos o piense que hay alguna otra cosa que podría introducirse, puede escribir a .  File: gtypist.es.info, Node: Variables de entorno, Next: Errores y omisiones, Prev: Modo para Emacs, Up: Top 8 Variables de entorno ********************** GNU Typist emplea las siguientes variables de entorno: ‘LANG’ GNU Typist ofrece soporte en idioma nativo (Native Language Support, NLS) mediante la biblioteca ‘gettext’, esto significa que si el sistema lo admite, se puede elegir el idioma en que se muestren los mensajes. Por ahora ‘gtypist’ se distribuye con mensajes en alemán, checo, español, francés, inglés y suomi. Para usar un NLS particular se emplea la variable de entorno LANG y se pone en la combinación apropiada de ‘LL_CC’, donde ‘LL’ es un código de idioma ISO 639 de dos letras y ‘CC’ es un código de país ISO 3166 de dos letras (v.g. ‘es_ES’ para España y ‘de_DE’ para Alemania). En algunos sistemas también será necesario poner la variable de entorno LANGUAGE en el mismo valor. Quien desee traducir los mensajes a otros idiomas (o corregir los ya traducidos), se puede comunicar con . ‘GTYPIST_PATH’ Lista los directorios en donde buscará el programa los ficheros. Tiene el formato estándar de las rutas, esto es, una lista de directorios separados por ‘:’. Para visitar un fichero, gtypist lo intentará como sigue: (1) usar sólo el nombre del fichero (2) agregará cada uno de los directorios especificados en a variable ‘GTYPIST_PATH’ y (3) agregará el directorio usado durante el proceso de instalación (v.g. ‘/usr/local/share/gtypist’ o ‘/usr/share/gtypist’). ‘TERM’ Lo emplea curses para manejarse con la terminal. ‘TERMINFO’ Es posible que esto tenga que establecerse si la ruta al banco de datos ‘terminfo’ es diferente entre el sistema en el que se compiló el binario y aquel en que se ejecuta. Por ejemplo, en los sistemas Slackware antiguos, el banco de datos terminfo reside en ‘/usr/lib/terminfo’. En RedHat Linux, está en ‘/usr/share/terminfo’. Si el programa se queja acerca del tipo de terminal y el valor de ‘TERM’ es correcto, hay que revisar esta variable.  File: gtypist.es.info, Node: Errores y omisiones, Next: Historia, Prev: Variables de entorno, Up: Top 9 Errores y omisiones ********************* GNU Typist aún no admite codificación de caracteres multi-byte (como UTF-8). Para ver todos los caracteres de algunas de las lecciones, hay que asegurarse de que la terminal se ejecute en un entorno en donde la variable LANG no esté puesta en UTF-8. Los usuarios más perezosos pueden probar a ejecutar GNU Typist en otro tipo de terminal. A veces funciona. GNU Typist no hace muchos esfuerzos en minimizar la salida de la terminal. En particular, el cursor de bloque que hace flash puede causar un montón de movimiento de cursor. El uso del cursor de la propia terminal puede ser de ayuda si esto se convierte en un problema. En las pruebas de velocidad, el programa no permite el retroceso o eliminación más allá del comienzo de la línea de pantalla o regresar a través de caracteres de tabulación. Esto se debe puramente al deseo de simplificar la actualización de la pantalla. Los modos de color de curses no parecen funcionar bien con UnixWare. En particular, el vídeo inverso no siempre se procesa correctamente en algunos tipos de terminales ni en xterms.  File: gtypist.es.info, Node: Historia, Next: Copia del manual, Prev: Errores y omisiones, Up: Top Appendix A Historia de GNU Typist ********************************* • El programa inicial se escribió para VAX/VMS BASIC por alguien de Harris Corp (Ft. Lauderdale, FL). • D. Jason Penney lo re-escribió para Microsoft BASICA • D. Jason Penney lo re-escribió en C con la biblioteca curses • Simon Baldwin re-escribió la versión de D. Jason Penney, con aportaciones descritas en el fichero NEWS (versiones 2.2 a 2.2b). Fue el derecho-habiente del copyright de GNU Typist (que se distribuía bajo la GPL). Simon también escribió una versión de Typist en Java que se llamó inicialmente JTypist y posteriormente volvió a llamarse de nuevo Typist: [se ofrece una dirección en geocities que ya no existe] • A partir de 1997, Ben Armstrong ayudó a corregir fallos y a mantener el paquete Debian (http://packages.debian.org/gtypist/). • En 2000, Vladimir Támara y Igor Támara fueron los mantenedores de la versión en C. Antes de Noviembre de 2000, GNU Typist se mantenía como parte del proyecto Structio. • ¡En Noviembre de 2000 se aceptó como paquete GNU! Se renombró a GNU Typist (o gtypist). • En Mayo de 2001, Michael Opdenacker , que aprendió a mecanografiar con GNU Typist, se hizo el nuevo mantenedor. El desarrollo del proyecto pasa a alojarse en . • En Junio de 2001, Felix Natter se unió y realizó contribuciones importantes al proyecto: importación de lecciones de otros tutores, mejoras en las herramientas, nuevas capacidades de tutoría, el modo para Emacs, la interfaz basada en teclas de flechas y mucho más. • En 2003, Dmitry Rutsky se unió al equipo de desarrollo y difundió un número importante de ideas, hacks y mejoras. • En Abril de 2008, Paul Goins se hizo cargo del mantenimiento de GNU Typist, al que le añadió unas cuantas mejoras (especialmente la construcción bajo Windows con MinGW), actualizó algo la documentación y cambió la licencia a la versión 3 de la GPL.  File: gtypist.es.info, Node: Copia del manual, Prev: Historia, Up: Top Appendix B Licencia de Documentación Pública de GNU *************************************************** Version 1.2, November 2002 Copyright © 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text. A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles. You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.” 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with…Texts.” line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  Tag Table: Node: Top974 Node: Distribucion3267 Node: Copiado4312 Node: Introduccion42061 Node: Invocacion45619 Node: Lecciones suministradas50738 Node: Uso de typefortune52594 Node: Sintaxis de las lecciones53575 Node: Lecciones nuevas63564 Node: Lecciones Ktouch64350 Node: Ejercicios de fortune66991 Node: Patrones para lecciones67654 Node: Findwords68908 Node: Modo para Emacs71543 Node: Variables de entorno74239 Node: Errores y omisiones76528 Node: Historia77776 Node: Copia del manual80284  End Tag Table  Local Variables: coding: utf-8 End: gtypist-2.9.5/doc/version.texi0000644000175000017500000000014112372333404013275 00000000000000@set UPDATED 18 August 2013 @set UPDATED-MONTH August 2013 @set EDITION 2.9.5 @set VERSION 2.9.5 gtypist-2.9.5/doc/gtypist.es.texi0000644000175000017500000012071312204155736013735 00000000000000\input texinfo @c -*-mode:texinfo; coding: utf-8;-*- @setfilename gtypist.es.info @settitle Manual de GNU Typist @documentlanguage es @documentencoding UTF-8 @include version3.texi @copying Este es el manual de GNU Typist (versión @value{VERSION}, @value{UPDATED}), un programa para aprender a mecanografiar en varios idiomas y con distintas disposiciones de teclado. Copyright @copyright{} 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc. Copyright @copyright{} de la traducción 2010-11, TMJQ, SL. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory Education @direntry Education * GNU Typist (es): (gtypist.es). Documentación del tutor mecanográfico gtypist. @end direntry @titlepage @title Manual de GNU Typist @subtitle Versión @value{VERSION} @author Última actualización: @value{UPDATED} @page @vskip 0pt plus 1filll @insertcopying Published by the Free Software Foundation @* 51 Franklin Street, Fifth Floor @* Boston, MA 02110-1301 @* USA @* @end titlepage @contents @page @ifnottex @node Top @top GNU Typist, el tutor mecanográfico @insertcopying GNU Typist es un tutor interactivo de mecanografiado que ayuda a escribir correctamente. Tiene varias lecciones para diversas disposiciones de teclado y en diferentes idiomas. Las lecciones de gtypist se describen en un lenguaje de script de fácil aprendizaje que el usuario puede emplear para modificar las lecciones existentes o crear nuevas. @end ifnottex @menu * Distribucion:: Localizar gtypist: fuentes, paquetes, etc. * Copiado:: La Licencia Pública General de GNU explica cómo se puede copiar y compartir gtypist * Introduccion:: Conceptos importantes para el usuario * Invocacion:: Cómo se invoca gtypist * Lecciones suministradas:: Descripción general de las lecciones contenidas en la distribución de gtypist * Uso de typefortune:: Prácticas con textos de `fortune' (requiere perl) * Sintaxis de las lecciones:: La sintaxis de las lecciones de gtypist * Lecciones nuevas:: Cómo contribuir lecciones nuevas * Modo para Emacs:: Modo Emacs para la edición de los ficheros gtypist * Variables de entorno:: Variables de entorno que afectan a gtypist * Errores y omisiones:: Problemas conocidos * Historia:: Historia de GNU Typist * Copia del manual:: La Licencia de Documentación Pública de GNU @end menu @node Distribucion, Copiado, Top, Top @unnumbered Distribución GNU Typist (o gtypist) es @dfn{software libre}; esto significa que cualquier persona es libre de usarlo y libre de redistribuirlo bajo ciertas condiciones. Las condiciones precisas se establecen en la Licencia General Pública de GNU que viene con este programa y sigue a esta sección. @noindent GNU Typist se puede obtener de un amigo o de Internet: @table @asis @item Sitio de distribución oficial @uref{ftp://ftp.gnu.org/gnu/gtypist/} @item Página web oficial @uref{http://www.gnu.org/software/gtypist/gtypist.html} @item Página web oficial replicada en castellano @uref{http://gnu.manticore.es/paginas-replica/gtypist/gtypist.es.html} @item Manual en la web (en inglés) @uref{http://www.gnu.org/software/gtypist/doc/gtypist.html} @item Manual en la web (en español) @uref{http://www.manticore.es/cgi-bin/info2html.cgi?(gtypist.es-utf8)Top} @item Página web de la sección de desarrollo (repositorio Git, tareas, asistencia...) @uref{http://savannah.gnu.org/projects/gtypist/} @end table @node Copiado, Introduccion, Distribucion, Top @unnumbered GNU GENERAL PUBLIC LICENSE @include gpl.texi @node Introduccion, Invocacion, Copiado, Top @chapter Introducción GNU Typist es un programa tutor interactivo de mecanografiado. Emplea un fichero de entrada para crear una serie de tutorías de mecanografiado, ejercicios y pruebas de velocidad. Está pensado para su uso en terminales sin gráficos. Ha sido compilado y usado en GNU/Linux y Unix (OpenBSD, AIX, Solaris) y también en DOS/Windows (DOS 6.22, Windows 95, 98, NT y XP). El programa lee lecciones escritas en un lenguaje de script de fácil aprendizaje. Se distribuye con unas cuantas lecciones completas y de calidad. Se pueden usar como están, modificarlas o crear lecciones nuevas (@pxref{Lecciones nuevas} y @pxref{Sintaxis de las lecciones}). Si no se especifica un fichero de script en la línea de comandos, se usará uno predeterminado @file{gtypist.typ}. (Véanse los detalles acerca de la ruta en la sección @pxref{Variables de entorno}). La línea superior de la pantalla muestra una leyenda. La línea inferior muestra una línea de mensaje, consultas y otra información de estado. Las líneas intermedias se usan para las tutorías, los ejercicios y las pruebas de velocidad. Existen dos tipos de ejercicios de tecleado: @dfn{entrenamientos} y @dfn{pruebas de velocidad}. En un @dfn{entrenamiento}, gtypist muestra texto cada dos líneas de la pantalla y espera que el usuario teclee correctamente el mismo texto exacto en las líneas intermedias. @c TODO: intention is ``Griff-Übung'' (finger exercise) Los errores de mecanografiado se indican con un @samp{^} inverso, o @samp{>} si el carácter es un salto de línea y al final del ejercicio calcula la tasa real y efectiva de palabras por minuto (@acronym{WPM}). Si hubiera demasiados errores, se re-ejecutará el entrenamiento. @c TODO: make this less formal No se permite la corrección de errores cometidos. En las pruebas de velocidad, gtypist muestra texto en la pantalla, y espera a que el usuario sobre-escriba correctamente el mismo texto exacto. Indica los errores mecanográficos y al final de la prueba calcula la tasa real y efectiva en @acronym{WPM}. @c TODO: what is it used for ? Si hubiera demasiados errores, se re-ejecuta la prueba de velocidad. Se permite la corrección de errores cometidos, pero aún así se acumulan. Si ya se han cometido demasiadas equivocaciones, se puede usar @key{ESC} para salir y comenzar de nuevo. La manera de saltarse una lección es presionar dos veces @key{ESC}. Cuando se completa una lección, se le pregunta al usuario si quiere repetirla. @c TODO: indicate ``practice only'' exercises in modeline ? También hay unos ejercicios de ``sólo prácticas'' (tanto entrenamientos como pruebas de velocidad) que no se querrán repetir. Pero no decimos cuándo se presentan, así que habrá que seguir intentando superarse ;-) En los informes de velocidad de escritura, se considera que una @dfn{palabra} tiene cinco caracteres, así que las @acronym{WPM} son el número de caracteres del pasaje de la prueba dividido por cinco y nuevamente dividido por la cantidad de minutos transcurridos en su escritura. Cada error se cuenta como una palabra mal escrita. Si se prefiere, la velocidad se puede mostrar en Pulsaciones por Minuto (@acronym{CPM}) (caracteres por minuto, en inglés). Esto se puede especificar con ``--scoring=cpm'' en la línea de comandos. [NdT: en España nunca he oído hablar de ``palabras por minuto'', siempre de ``pulsaciones por minuto''. La obligación de especificar esa opción en la línea de comandos es engorrosa para aquellos que sólo cuentan ppm. Lo propio es que hubiera un fichero de configuración o alguna otra vía para elegir de manera permanente.] @node Invocacion, Lecciones suministradas, Introduccion, Top @chapter Invocación La sintaxis para invocar GNU Typist es: @code{gtypist [ Opciones... ] [ fichero ]} A continuación se dan las opciones existentes (su forma larga no se admite en DOS): @table @code @item -e, --error-max Especifica el porcentaje de error máximo. El valor predeterminado es 3.0 y debe estar entre 0.0 y 100.0. Existe un comando de fichero de script (@pxref{Sintaxis de las lecciones}) que sólo sobre-escribe esto si es @emph{estrictamente} (menor). Este valor se ignora en los ejercicios de ``sólo práctica''. @item -n, --notimer Gtypist muestra la velocidad de escritura en @acronym{WPM} después de los tests de prácticas y de velocidad. Sin embargo, las lecciones parecen haber sido escritas para un programa que sólo hace esto para tests de velocidad. Para hacer que gtypist se comporte de manera que concuerde con las lecciones, esto es, para suprimir los informes de @acronym{WPM} en las prácticas, se usa @option{-n} o @option{--notimer}. @item -t, --term-cursor Gtypist crea su propio cursor parpadeante de bloque en la pantalla, para ayudar a distinguir entre el cursor y las indicaciones de error de vídeo inverso. Si se establece @option{-t} o @option{--term-cursor} se suprime esto y fuerza al programa a usar el cursor de la terminal. @item -f, --curs-flash Establece el periodo de parpadeo del cursor de bloque en décimas de segundo. El valor 0 indica que no haya parpadeo. El predeterminado es 10 y el máximo 512. Esta opción queda ignorada si se han establecido @option{-t} o @option{--term-cursor}. @item -c, --colo[u]rs En su estado normal, gtypist sólo usa atributos de vídeo normal e inverso en modo monocromo. Esta opción se puede usar para especificar en este orden los colores delantero y de fondo en terminales que admitan colores. Estos se especifican como dos enteros, en el intervalo entre 0 y 7, separados por comas. Los códigos de color del 0 al 7 indican negro, rojo, verde, amarillo, azul, magenta, cian y blanco, respectivamente. La cadena de colores predeterminada es 7,0 (blanco sobre negro). Se ignora esta opción si la terminal no admite colores. @item -s, --silent Cuando gtypist detecta un error mecanográfico, sonará la terminal. Esta opción se usa para silenciarla. @item -q, --quiet Lo mismo que @option{-s} o @option{--silent}. @item -l, --start-label Especifica la etiqueta del fichero de script en la que gtypist comienza la ejecución (hay información acerca de las etiquetas más abajo, donde se habla de los ficheros de script y de los comandos). Si esta opción no se usa, gtypist comienza la ejecución en la primera línea del fichero. @item -w, --word-processor Con esta opción, gtypist procura imitar a los procesadores de texto en ciertas maneras cuando ejecuta un ejercicio. Tratará el espacio al final de una línea como un carácter tecleado correctamente y con ajuste de párrafo. Tratará la tecla Retorno al final de una línea como señal de que se mueva al comienzo del siguiente párrafo si fuera de aplicación. Comprimirá los espacios múltiples en uno solo. Y se saltará sobre los guiones que encuentre al final de línea. @item -k, --no-skip Prohíbe al usuario saltarse las lecciones o salir de ellas por medio de @key{ESC ESC}. @item -i, --show-errors Resalta los errores con vídeo inverso. @item -S, --always-sure Salta las preguntas de confirmación. @item --banner-colo[u]rs Cambia el color de las leyendas situadas en la parte superior de la pantalla. Los valores de color son los mismos que los del comando --colo[u]rs. El predeterminado es 0,6,5,1; delantero en negro, fondo en cian, nombre de programa en magenta y nombre de la versión en rojo. @item --scoring Cambia la manera de medición. Puede ser @acronym{WPM} y @acronym{CPM}, siendo la predeterminada la @acronym{WPM}. @end table @noindent También se puede establecer la variable de entorno @env{LANG} si se desea ejecutar gtypist en el idioma nativo. @xref{Variables de entorno}. @noindent En algunos idiomas como el español, los mensajes de la interfaz suelen ser más largos que en inglés. Por tanto, quizás sea necesario agrandar la terminal antes de invocar el programa. De lo contrario, el texto de abajo a la izquierda puede solaparse con la cadena de abajo a la derecha. @strong{Ejemplos:} @noindent Para ejecutar las lecciones predeterminadas @file{gtypist.typ}:@* @code{gtypist} @noindent Para ejecutar la lección en español: @* @code{gtypist esp.typ} @noindent Para indicarle a gtypist que busque una lección bar.typ en un directorio no estándar @file{/home/foo}: @* @code{export GTYPIST_PATH="/home/foo"} @code{gtypist bar.typ} @noindent Para ejecutar las lecciones del fichero @file{test.typ} del directorio @file{/tmp}, comenzando con la etiqueta @code{TEST1} y empleando el cursor de la terminal de manera silenciosa:@* @code{gtypist -t -q -l TEST1 /tmp/test.typ} @node Lecciones suministradas, Uso de typefortune, Invocacion, Top @chapter Lecciones suministradas GNU Typist viene con las siguientes lecciones: @table @file @item q.typ Curso rápido de QWERTY en inglés. @item r.typ Curso largo de QWERTY en inglés. @item t.typ Mecanografía al tacto QWERTY en inglés. @item v.typ Otro QWERTY en inglés. @item w.typ Repaso de QWERTY en inglés. @item d.typ Mecanografía al tacto Dvorak en inglés. @item m.typ Entrenamiento mecanográfico en inglés. @item s.typ Entrenamiento de velocidad en inglés. @item n.typ Teclado numérico en inglés. @item gtypist.typ Compendio de todas las lecciones anteriores en inglés. @item esp.typ Curso QWERTY en español. @item cs.typ Lecciones en checo. @item ru.typ Lecciones en ruso. @item kt*.typ Estas lecciones son las estándares de @uref{http://ktouch.sourceforge.net/, Ktouch 1.0}, convertidas a formato de fichero gtypist mediante @file{tools/ktouch2typ.pl}. Los ficheros se llaman @file{ktde.typ} (@file{german.ktouch}), @file{kten.typ} (@file{english.ktouch}), @file{ktfr.typ} (@file{french.ktouch}), @file{ktfr2.typ} (@file{french-2.ktouch}), @file{ktno.typ} (@file{norwegian.ktouch}) @file{ktdk.typ} (@file{danish.ktouch}), @file{ktdk2.typ} (@file{danish-2.ktouch}), @file{ktdvorak.typ} (@file{dvorak.ktouch}) and @file{ktnumber.typ} (@file{number.ktouch}). @item ttde.typ Se trata de la lección en alemán de @uref{http://www.pingos.schulnetz.org/tipptrainer/, tipptrainer}, convertida mediante @file{tools/tt2typ.pl}. @end table @noindent De encontrarse errores en estas lecciones, o si se corrigen de algún modo o se escriben lecciones nuevas, rogamos que se publiquen con una licencia libre y nos lo comuniquen a @email{bug-gtypist@@gnu.org}. @node Uso de typefortune, Sintaxis de las lecciones, Lecciones suministradas, Top @chapter Uso de @command{typefortune} @command{typefortune} permite practicar con textos del programa @command{fortune}. @code{SYNTAX: typefortune [-dslh] [-n count] [-o ]} @table @code @item -d Usa @code{D:} en vez de @code{S:}. @item -s Ejecuta @code{fortune} con @code{-s}. @item -l Ejecuta @code{fortune} con @code{-l}. @item -n @var{cantidad} Practica esa @var{cantidad} de fortunas. @item -o @var{opción} Pasa opciones a @code{gtypist}, en la forma @var{opción} (opción booleana, e.d. @code{-o word-processor}), @var{opción,valor} (opción con valor, e.d. @code{-o e,1.0}) donde la @var{opción} es el nombre de la opción (corta o larga) removidos todos los guiones antepuestos. Hace falta entrecomillar el argumento de @option{-o} si se va a especificar más de uno: @code{typefortune -n 3 -o 'silent e,5 word-processor'}. @end table @node Sintaxis de las lecciones, Lecciones nuevas, Uso de typefortune, Top @chapter Comandos del fichero de script GNU Typist lee los datos de sus lecciones de mecanografía desde un fichero. Con la excepción de los comentarios y de las líneas en blanco, cada línea del fichero está en el formato @code{carácter_del_comando : datos_del_comando} @noindent Aquí, @code{carácter_del_comando} es un código de carácter único que define una acción que ha de hacer gtypist, y @code{datos_del_comando} son los datos para ese comando. Si @code{carácter_del_comando} es un carácter de espacio, eso indica que la línea es continuación del comando precedente que no sea un espacio. El separador @samp{:} debe estar en la columna dos de la línea. Las líneas de comentarios son aquellas que comienzan con un carácter @samp{#} y se ignoran, como se hace igualmente con las líneas en blanco. Las líneas de comentario pueden tener cualquier formato siempre que comiencen con @samp{#}; las líneas restantes deben tener el formato de arriba. Será conveniente leer la introducción para familiarizarse con los fundamentos: @xref{Introduccion}. La siguiente es la lista de valores @code{carácter_del_comando} válidos: @table @code @item B Este comando limpia la pantalla entera. Si hay presente algún @code{datos_del_comando}, se muestra en la leyenda de una línea que hay en la parte superior de la pantalla y permanece ahí hasta el siguiente comando @code{B}. Este comando no se puede continuar en la línea siguiente; es un comando de una sola línea. @item T Presenta una tutoría y se trata de un comando multi-línea, hasta el límite de la longitud de la pantalla. Cada línea del comando simplemente se imprime en la pantalla. Este comando limpia toda la pantalla por debajo de la línea de la leyenda superior. Después de producirse la visualización, el programa espera antes de proceder. @item * Esto indica una etiqueta en el fichero. La etiqueta puede ser el destino de un comando @code{G}, @code{Y}, @code{N} o @code{F}. Las etiquetas pueden contener cualesquier caracteres, incluso espacios, y son comandos de una sola línea. Han de ser únicas dentro de los ficheros de lecciones. Se ignora el espacio en blanco al final de las etiquetas. @item I El comando @code{I} puede mostrar algunas breves instrucciones por encima de un entrenamiento o prueba de velocidad. Sólo se permite como máximo dos líneas. A diferencia del comando @code{T}, no espera por ninguna otra pulsación de tecla antes de proceder. Así que realmente siempre le debería seguir un ejercicio. Limpia el área entera de ejercicios de la pantalla, así que en este sentido es como un @code{T} de dos líneas. @item M Este comando es la nueva vía para crear menús (desde gtypist 2.7). Esta es la sintaxis: @example M: [UP=ETIQUETA_DE-RETORNO|_EXIT] "título" :ETIQUETA1 "elemento1" :ETIQUETA2 "elemento2" ... @end example Esto muestra un menú conveniente compuesto por los elementos especificados y deja que el usuario elija uno de ellos. Si se selecciona un elemento, gtypist continúa la ejecución del script a partir de la etiqueta correspondiente. Si se presionó la tecla Escape y la etiqueta @code{UP} está definida, gtypist va igualmente a la etiqueta @code{UP}, o sale de allí, si hay un @code{``_EXIT''} en lugar de la etiqueta. Si la etiqueta @code{UP} no está definida, gtypist intenta regresar al menú anterior y salta a la última etiqueta encontrada en el script anterior al comando @code{M} previo. Si no hubiera tal etiqueta y se mostró algún menú antes del actual, gtypist se limitará a ir al comienzo del script. Si no se cumple ninguna de las condiciones anteriores, gtypist sale del script. Los detalles de arriba hacen natural la creación de jerarquías de menús sin tener que usar etiquetas @code{UP}. El título y todas las descripciones deben encerrarse entre comillas (""). Además debe haber como mínimo un espacio entre @code{UP=XXX} y "título" y entre las etiquetas y las descripciones correspondientes. Este comando se introdujo como una vía para disponer fácilmente diversas partes de los ficheros de lecciones en una única jerarquía de menú, así como reemplazo para los antiguos menús de la tecla @code{F}. Hay ejemplos en los ficheros de lecciones. @c TODO: more information about ``should be used for''... @item D,d Este comando se llama @dfn{entrenamiento} y es uno de los dos tipos de ejercicios mecanográficos. Es un comando multi-línea. El texto se muestra en cada línea alterna, y el usuario escribe en las intermedias. Debido a ello, no se puede usar más de 11 líneas de contenido. Este tipo de ejercicio se supone que está para el entrenamiento de los dedos (e.d. jfjfjjf), pero también puede contener palabras y frases completas @c TODO: grip si se usan para practicar algo (e.d. una letra/sílaba/"grip") y no son textos reales. La versión en minúscula @code{d} es un entrenamiento de ``sólo práctica''; el usuario no tiene que repetirlo si tiene demasiadas equivocaciones. @c TODO: more information about ``should be used for''... @item S,s Este es el segundo tipo de ejercicio de mecanografía: la @dfn{prueba de velocidad}. Es un comando multi-línea. Muestra su texto en pantalla y le pide al usuario que escriba sobre él. Es el motivo por lo que se puede tener hasta 22 líneas de texto en estos ejercicios. En las pruebas de velocidad se pueden corregir los fallos, pero con ello no se disminuye la cuenta de errores. Las pruebas de velocidad se deberían usar para mecanografiar (principalmente) frases completas, textos o ficheros (e.d. cartas, ficheros texinfo/html/tex). La versión en minúscula @code{s} es una @dfn{prueba de velocidad de sólo práctica}: el usuario no tiene que repetirla en el caso de cometer demasiados fallos. @item G Causa que @samp{gtypist} vaya a la etiqueta que hay en @code{datos_del_comando} y continúe allí la ejecución del script. Consiste en una única línea de comandos. @item Q Este comando presenta un texto en la línea de mensajes y espera por una respuesta de @key{Y} o @key{N} antes de proceder. Se ignora el resto de caracteres. Como efecto colateral, se puede presionar una tecla de función si está asociada (una vía ya desaconsejada de crear el indicador de los menús). @item Y Es como @code{G}, excepto que el goto se ejecuta sólo si el resultado del último comando @code{Q} fue @key{Y}. @item N Es como @code{G}, excepto que el goto se ejecuta sólo si el resultado del último comando @code{Q} fue @key{N}. @item K @emph{Esta comando está desaconsejado en favor de @kbd{M}:} Este comando asocia una tecla de función a una etiqueta. El formato de la línea de datos que sigue a este comando debe ser @code{fkey_number:label}, donde @code{fkey_number} es el número de una tecla de función entre 1 y 12, y @code{label} es una etiqueta a la que ir cuando se presiona este tecla. Si la etiqueta tiene el valor NULL, se elimina cualquier asociación que la tecla tenga con alguna etiqueta. Si las teclas de función no están disponibles en la terminal, se pueden usar otras teclas: de @key{1} a @key{9} para reemplazar de @key{F1} a @key{F9}, @key{0} para reemplazar @key{F10}, @key{A} para @key{F11} y @key{S} para @key{F12}. Otras alternativas para las teclas @key{F1}-@key{F12} son las combinaciones: @key{Ctrl-Q}, @key{Ctrl-W}, @key{Ctrl-E}, @key{Ctrl-R}, @key{Ctrl-T}, @key{Ctrl-Z}, @key{Ctrl-U}, @key{Ctrl-I}, @key{Ctrl-O}, @key{Ctrl-P}, @key{Ctrl-A} y @key{Ctrl-S}. Esto también es útil cuando las teclas de función quedan interceptadas por otros programas (por ejemplo, algunos gestores de ventanas). @item E Este comando se usa para establecer la tasa máxima de error permitida para el siguiente entrenamiento (@code{E:%}) o para todas las prácticas posteriores hasta la siguiente @code{E:} (@code{E:%*}). Si se especifica @option{--error-max/-e}, entonces este comando sólo surte efecto si es --------> @emph{stricter} que el valor especificado en la línea de comandos. Los @code{datos_del_comando} consisten en el valor (entre 0.0 y 100.0), seguido de @samp{%} (se requiere para que los scripts sean más legibles). La palabra @code{default} o @code{Default} lo re-establece en su valor predeterminado. @item F Este comando (``etiqueta de al-fallar'') se usa para decidir la etiqueta (en @code{datos_del_comando}) a donde el usuario habrá de ir si falla un ejercicio. Lo habitual es que este comando sólo sea de aplicación en el ejercicio siguiente, pero el usuario puede convertirlo en persistente si pone un @samp{*} al final de los @code{datos_del_comando}. Si se pone NULL, esto reinicia la etiqueta. @item X Este comando causa que Gtypist finalice. Es de una sola línea. Se ignoran los @code{datos_del_comando}. El programa también finaliza si se encuentra el final del fichero (así que también se podría poner una etiqueta allí y simplemente hacer @code{G} en ella) @end table @c TODO: more examples (e.d. one example for E:/F:, one for a menu, ...) Este es un script de ejemplo para mostrar los comandos disponibles en el fichero de lección (@file{tinydemo.typ}): @example # Demostración mínima B: Demostración del tutor mecanográfico *:LOOP K:1:QDONE T:Este es un pequeño ejemplo de tutoría. Un ejemplo :mejor se encuentra en el fichero demo.typ que :acompaña a GNU Typist I:Este es un ejemplo de un ejercicio: D:asdf ghjkl; I:Y este lo es de una prueba de velocidad: S:qwe rt yu iop *:QDONE Q:¿Ha visto suficiente? [Y/N] N:LOOP X: @end example @node Lecciones nuevas, Modo para Emacs, Sintaxis de las lecciones, Top @chapter Creación de lecciones nuevas Esta sección proporciona indicaciones y sugerencias para la creación de lecciones nuevas (o la mejora de las existentes). @c TODO: better name for ``Design patterns'' ?? @menu * Lecciones Ktouch:: Generación de lecciones a partir de ejercicios Ktouch * Ejercicios de fortune:: Creación de ejercicios y pruebas de velocidad a partir de galletitas de la fortuna * Patrones para lecciones:: Patrones de diseño para las lecciones * Findwords:: Un script simple que facilita encontrar palabras con ciertas letras @end menu @node Lecciones Ktouch, , Ejercicios de fortune, Lecciones nuevas @section Lecciones Ktouch Una vía muy fácil de escribir lecciones es hacerlo en el formato que emplea @command{ktouch} y después convertirlas a lecciones de Gtypist usando @command{tools/ktouch2typ.pl}. Este programa se cuida de escribir las ``tablas de saltos'', un menú y un poco más. El formato ktouch consiste sólo en lecciones, que están precedidas por sus nombres y separadas por líneas en blanco y/o comentarios (@samp{#} al principio de las líneas). Así que la primera línea del fichero que no esté en blanco y no sea un comentario es el nombre de la primera lección y esta primera lección consiste en todas las líneas hasta la siguiente que sea un comentario o esté en blanco. Tras el separador (comentario o línea en blanco) sigue el nombre de la segunda lección y así sucesivamente. Esta es una muestra de un fichero ktouch con tres lecciones (extraídas de las tres primeras lecciones de @file{german.ktouch}): @example # # Deutsche Training-Datei für KTouch # Grundstellung f f f f f f fff fff fff f f f f f f fff fff fff f f f f f f f fff j j j j j j jjj jjj jjj j j j j j j jjj jjj jjj j j j j j j j jjj fff jjj fff jjj jjj fff jjj fff fjf fjf fjf jfj jfj jfj fjf jfjfj Grundstellung fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd kkkff fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jköfd s s s s s s sss sss sss s s s s s s sss sss sss s s s s s s s sss #Zwei wichtige Vokale: e und i e und i asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdfö das dass lös fad dass lös als dass las lös fad dass als dass dass ded ded ded dej dek del deö ded deö del dek dej ded dej dek delde @end example Una vez que esté hecha, se usa @command{tools/ktouch2typ.pl} para convertir el fichero : @samp{ktouch2typ.pl lesson.ktouch} convierte @file{lesson.ktouch} en @file{lesson.typ}. Es importante que el fichero de entrada finalice en @samp{.ktouch}, de lo contrario @command{ktouch2typ.pl} lo saltará. Advertencia: esto sobre-escribe @file{lesson.typ} sin comunicarlo. Se puede personalizar el número de líneas que emplea @command{ktouch2typ.pl} para cada práctica, modificando la variable pertinente en @file{tools/ktouch2typ.pl}. Obviamente, la desventaja de este método es que no se pueden aprovechar todas las características de Gtypist (pero el fichero de salida es muy legible, así que se puede editar para introducirle más características del programa). @node Ejercicios de fortune, Lecciones Ktouch, Patrones para lecciones, Lecciones nuevas @section Ejercicios a partir de @command{fortune} Con @file{gtypist-mode.el} se pueden crear rápidamente lecciones con texto del programa @command{fortune} (o el interno de Emacs @command{yow} si ni se tiene @command{fortune}, lo habitual en Windows). Una vez instalado @file{gtypist-mode.el} (@pxref{Modo para Emacs}), se puede abrir un fichero con la extensión @samp{.typ} y ejecutar @kbd{C-c C-f} para crear una práctica (@code{D:} es la predeterminada, se usa @kbd{C-u} o @kbd{C-u C-u} para cambiarla). @node Patrones para lecciones, Ejercicios de fortune, Findwords, Lecciones nuevas @section Diseño de patrones para lecciones [NdT: aquí se mezcla el contenido normal de un manual de uso del programa con asuntos específicos pedagógicos acerca de la mecanografía; y se hace de manera pobre. Sería preferible remitir a otro documento.] @subsection Estructura de los ficheros de lecciones @itemize @bullet @item Empléese una mezcla de entrenamientos y pruebas de velocidad (más divertido para el usuario). @item Algunos ejercicios de ``sólo práctica'' (@code{d:}/@code{s:}) (mezclados posiblemente con algunos ejercicios ``reales'') seguidos por un ``test final''. @file{esp.typ} emplea este esquema. @end itemize @subsection Patrones para ejercicios @itemize @bullet @item Cuando se introduce una tecla nueva, se comienza mezclando otras teclas (ya conocidas) para el mismo dedo. Este es un ejemplo de @file{t.typ}, línea 237: @example I:Emplee el dedo J para la tecla H. *:_T_R_L23 D:jjj jhj jjj jhj jjj jhj @end example @item usar 'palabra, palabra.' de manera repetida para practicar la ,/. @end itemize @node Findwords, Patrones para lecciones, , Lecciones nuevas @section El script @command{findwords} El script @file{tools/findwords} que se encuentra en las fuentes de GNU Typist está para asistir en la creación de lecciones nuevas. @subsection Propósito Al principio se crea un tutor desde cero, no es fácil formar palabras ni frases cuando el intervalo de letras que se pueden usar está restringido. A veces se quiere insertar algún párrafo ``destinado'' a alguna combinación especial de dos o tres letras. Esto es incluso más difícil. Por este motivo hemos creado @command{findwords}. Este programa emplea los diccionarios de @command{aspell} (un corrector ortográfico multi-lingüe y libre). @subsection Instalación Se necesitan los paquetes @file{aspell} y @file{aspell-LG}, donde LG es el código de idioma ISO del idioma que se quiere usar. Tras su correcta instalación habrá que hacer un pequeño cambio en la configuración para que el banco de datos maestro de aspell sea el del idioma elegido. Esto se puede hacer por dos vías: @enumerate @item En el directorio personal se crea el fichero @file{.aspell.conf} y se le añade esta línea: @* @code{master LANGUAGE} @item Se crea @file{/usr/share/pspell/LG-aspell.pwli} y se le añade esta línea: @* @code{/usr/lib/aspell/LG} @* Hay que asegurarse de que el ajuste @samp{locale} es @samp{LG}. @end enumerate En lo de arriba, LG significa código de idioma ISO (vg. @samp{en}, @samp{fr}, @samp{cs}) y LANGUAGE significa nombre del banco de datos que hay en @file{/usr/lib/aspell} (vg. @file{english.multi}, @file{french}, @file{czech}). Se puede verificar si funciona escribiendo: @example aspell dump master | less @end example @subsection Uso de @command{findwords} La sintaxis es como sigue: @* @command{./findwords @var{letras} [@var{combinación}]} En el argumento @var{letras}, obligatorio, se deben listar las letras que se quieren usar, sin ningún espacio. Si se pone un punto (`.') nos referimos a `todas las letras'. El segundo argumento, @var{combinación}, es optativo y con él se especifican las combinaciones de teclas que se están buscando. Algunos ejemplos: @itemize @item @code{./findwords asdfjkleruio} @* Buscamos todas las palabras compuestas con las letras listadas. @item @code{./findwords asdfjkleruio sa} @* Buscamos palabras que contengan la combinación @samp{sa}, pero sólo aquellas compuestas con las letras especificadas. @item @code{./findwords . col} @* Palabras que contengan todas las letras, pero que tengan @samp{col} en alguna parte dentro de ellas. @end itemize @node Modo para Emacs, Variables de entorno, Lecciones nuevas, Top @chapter El modo para Emacs gtypist viene ahora con un modo mayor para Emacs que hace resaltado de sintaxis, sangrado y posee algunos comandos convenientes para contar etiquetas, ir a ellas, insertar leyendas centradas adecuadamente, comentarios especiales y un poco más. Se copia el fichero @file{tools/gtypist-mode.el} a donde sea que se tengan los ficheros elisp locales (v.g. @file{~/elisp}) y se pone esto en al @file{~/.emacs} (adáptese la ruta): @lisp (autoload 'gtypist-mode "~/elisp/gtypist-mode") @end lisp o se pone en la @code{load-path} (@samp{make install} en las fuentes o el paquete Debian, que ya lo hace solo) y se usa esto: @lisp (autoload 'gtypist-mode "gtypist-mode") @end lisp @strong{y} se añade esto al @file{~/.emacs}: @lisp (setq auto-mode-alist (cons '("\\.typ\\'" . gtypist-mode) auto-mode-alist)) @end lisp @c If you want to, you can then byte-compile the file using @c @kbd{M-x byte-compile-file} (but @samp{make install} takes care of @c this). @noindent Todo esto también se menciona en la sección README del fichero @file{tools/gtypist-mode.el}. @noindent Estos son los comandos junto con sus asociaciones de teclas: @table @kbd @item C-c C-i, M-x gtypist-mode-info Con esto se muestra la documentación de gtypist, comenzando en el nodo ``Sintaxis de las lecciones'' (@pxref{Sintaxis de las lecciones}). Con prefijo, comienza en el nodo superior. @item C-c M-g, M-x gtypist-mode-goto-label Pide una etiqueta a la que ir (con completado). @item C-c C-l, M-x gtypist-mode-next-label Este comando inserta la siguiente etiqueta en una secuencia numerada. Por ejemplo, si se inserta @example *:SERIES1_L1 @end example y se presiona @kbd{C-c C-l}, entonces el modo gtypist insertará @example *:SERIES1_L2 @end example @item C-c C-b, M-x gtypist-mode-insert-banner Este comando inserta un comando @code{B:} centrado. Se centra en 66 columnas porque ``gtypist '' está en la esquema derecha (pide el contenido). @item C-c C-r, M-x gtypist-mode-insert-hrule Inserta una línea horizontal (comentario) consistente en guiones. @item C-c C-n, M-x gtypist-mode-new-lesson Inserta los comentarios (cabecera) y una etiqueta para empezar una lección nueva (pide el nombre). @item C-c C-f, M-x gtypist-mode-fortune-to-drill Inserta un entrenamiento (@code{D:}) con texto de @command{fortune} (o @command{yow} si @command{fortune} no está disponible). Se usa el prefijo @kbd{C-u} para obtener @code{S:}, y @kbd{C-u C-u} para obtener @code{d:}. @end table @noindent Ejecutando @kbd{C-h m} se consigue la lista completa de comandos y sus asociaciones de teclas. Quien localice fallos o piense que hay alguna otra cosa que podría introducirse, puede escribir a @email{bug-gtypist@@gnu.org}. @node Variables de entorno, Errores y omisiones, Modo para Emacs, Top @chapter Variables de entorno GNU Typist emplea las siguientes variables de entorno: @table @code @item LANG GNU Typist ofrece soporte en idioma nativo (Native Language Support, NLS) mediante la biblioteca @samp{gettext}, esto significa que si el sistema lo admite, se puede elegir el idioma en que se muestren los mensajes. Por ahora @code{gtypist} se distribuye con mensajes en alemán, checo, español, francés, inglés y suomi. Para usar un NLS particular se emplea la variable de entorno LANG y se pone en la combinación apropiada de @samp{LL_CC}, donde @samp{LL} es un código de idioma ISO 639 de dos letras y @samp{CC} es un código de país ISO 3166 de dos letras (v.g. @samp{es_ES} para España y @code{de_DE} para Alemania). En algunos sistemas también será necesario poner la variable de entorno LANGUAGE en el mismo valor. Quien desee traducir los mensajes a otros idiomas (o corregir los ya traducidos), se puede comunicar con @email{bug-gtypist@@gnu.org}. @item GTYPIST_PATH Lista los directorios en donde buscará el programa los ficheros. Tiene el formato estándar de las rutas, esto es, una lista de directorios separados por @samp{:}. Para visitar un fichero, gtypist lo intentará como sigue: (1) usar sólo el nombre del fichero (2) agregará cada uno de los directorios especificados en a variable @code{GTYPIST_PATH} y (3) agregará el directorio usado durante el proceso de instalación (v.g. @file{/usr/local/share/gtypist} o @file{/usr/share/gtypist}). @item TERM Lo emplea curses para manejarse con la terminal. @item TERMINFO Es posible que esto tenga que establecerse si la ruta al banco de datos @code{terminfo} es diferente entre el sistema en el que se compiló el binario y aquel en que se ejecuta. Por ejemplo, en los sistemas Slackware antiguos, el banco de datos terminfo reside en @file{/usr/lib/terminfo}. En RedHat Linux, está en @file{/usr/share/terminfo}. Si el programa se queja acerca del tipo de terminal y el valor de @code{TERM} es correcto, hay que revisar esta variable. @end table @node Errores y omisiones, Historia, Variables de entorno, Top @chapter Errores y omisiones GNU Typist aún no admite codificación de caracteres multi-byte (como UTF-8). Para ver todos los caracteres de algunas de las lecciones, hay que asegurarse de que la terminal se ejecute en un entorno en donde la variable LANG no esté puesta en UTF-8. Los usuarios más perezosos pueden probar a ejecutar GNU Typist en otro tipo de terminal. A veces funciona. GNU Typist no hace muchos esfuerzos en minimizar la salida de la terminal. En particular, el cursor de bloque que hace flash puede causar un montón de movimiento de cursor. El uso del cursor de la propia terminal puede ser de ayuda si esto se convierte en un problema. En las pruebas de velocidad, el programa no permite el retroceso o eliminación más allá del comienzo de la línea de pantalla o regresar a través de caracteres de tabulación. Esto se debe puramente al deseo de simplificar la actualización de la pantalla. Los modos de color de curses no parecen funcionar bien con UnixWare. En particular, el vídeo inverso no siempre se procesa correctamente en algunos tipos de terminales ni en xterms. @node Historia, Copia del manual, Errores y omisiones, Top @appendix Historia de GNU Typist @itemize @bullet @item El programa inicial se escribió para VAX/VMS BASIC por alguien de Harris Corp (Ft. Lauderdale, FL). @item @email{penneyj@@slc.com, D. Jason Penney} lo re-escribió para Microsoft BASICA @item @email{penneyj@@slc.com, D. Jason Penney} lo re-escribió en C con la biblioteca curses @item @email{simonb@@sco.com, Simon Baldwin} re-escribió la versión de D. Jason Penney, con aportaciones descritas en el fichero NEWS (versiones 2.2 a 2.2b). Fue el derecho-habiente del copyright de GNU Typist (que se distribuía bajo la GPL). Simon también escribió una versión de Typist en Java que se llamó inicialmente JTypist y posteriormente volvió a llamarse de nuevo Typist: [se ofrece una dirección en geocities que ya no existe] @item A partir de 1997, @email{synrg@@sanctuary.nslug.ns.ca, Ben Armstrong} ayudó a corregir fallos y a mantener el @uref{http://packages.debian.org/gtypist/, paquete Debian}. @item En 2000, @email{vtamara@@users.sourceforge.net, Vladimir Támara} y @email{ikks@@users.sourceforge.net, Igor Támara} fueron los mantenedores de la versión en C. Antes de Noviembre de 2000, GNU Typist se mantenía como parte del proyecto Structio. @item ¡En Noviembre de 2000 se aceptó como paquete GNU! Se renombró a GNU Typist (o gtypist). @item En Mayo de 2001, @email{michaelo@@gnu.org, Michael Opdenacker}, que aprendió a mecanografiar con GNU Typist, se hizo el nuevo mantenedor. El desarrollo del proyecto pasa a alojarse en @uref{http://savannah.gnu.org/projects/gtypist/}. @item En Junio de 2001, @email{fnatter@@gmx.net, Felix Natter} se unió y realizó contribuciones importantes al proyecto: importación de lecciones de otros tutores, mejoras en las herramientas, nuevas capacidades de tutoría, el modo para Emacs, la interfaz basada en teclas de flechas y mucho más. @item En 2003, @email{rutsky@@school.ioffe.rssi.ru, Dmitry Rutsky} se unió al equipo de desarrollo y difundió un número importante de ideas, hacks y mejoras. @item En Abril de 2008, @email{general@@vultaire.net, Paul Goins} se hizo cargo del mantenimiento de GNU Typist, al que le añadió unas cuantas mejoras (especialmente la construcción bajo Windows con MinGW), actualizó algo la documentación y cambió la licencia a la versión 3 de la GPL. @end itemize @node Copia del manual @appendix Licencia de Documentación Pública de GNU @include fdl.texi @bye @c LocalWords: xref QWERTY kt gtypist-2.9.5/doc/fdl.texi0000644000175000017500000005103012204155736012364 00000000000000@c The GNU Free Documentation License. @center Version 1.2, November 2002 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain @sc{ascii} without markup, Texinfo input format, La@TeX{} input format, @acronym{SGML} or @acronym{XML} using a publicly available @acronym{DTD}, and standard-conforming simple @acronym{HTML}, PostScript or @acronym{PDF} designed for human modification. Examples of transparent image formats include @acronym{PNG}, @acronym{XCF} and @acronym{JPG}. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, @acronym{SGML} or @acronym{XML} for which the @acronym{DTD} and/or processing tools are not generally available, and the machine-generated @acronym{HTML}, PostScript or @acronym{PDF} produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled ``History'' in the various original documents, forming one section Entitled ``History''; likewise combine any sections Entitled ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See @uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. @end enumerate @page @heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.'' line with this: @smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group @end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: gtypist-2.9.5/doc/Makefile.in0000644000175000017500000006537112372333377013013 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(gtypist_TEXINFOS) mdate-sh $(srcdir)/version.texi \ $(srcdir)/stamp-vti $(srcdir)/version2.texi $(srcdir)/stamp-1 \ $(srcdir)/version3.texi $(srcdir)/stamp-2 texinfo.tex \ ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = INFO_DEPS = $(srcdir)/gtypist.info $(srcdir)/gtypist.cs.info \ $(srcdir)/gtypist.es.info am__TEXINFO_TEX_DIR = $(srcdir) DVIS = gtypist.dvi gtypist.cs.dvi gtypist.es.dvi PDFS = gtypist.pdf gtypist.cs.pdf gtypist.es.pdf PSS = gtypist.ps gtypist.cs.ps gtypist.es.ps HTMLS = gtypist.html gtypist.cs.html gtypist.es.html TEXINFOS = gtypist.texi gtypist.cs.texi gtypist.es.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__installdirs = "$(DESTDIR)$(infodir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EMACSLOADPATH = @EMACSLOADPATH@ EXEEXT = @EXEEXT@ GEN_MAN = @GEN_MAN@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ lispdir = @lispdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ info_TEXINFOS = gtypist.texi gtypist.cs.texi gtypist.es.texi gtypist_TEXINFOS = gpl.texi fdl.texi EXTRA_DIST = gtypist.html gtypist.cs.html gtypist.es.html html_docs = gtypist.html gtypist.cs.html gtypist.es.html all: all-am .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): .texi.info: $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ $< .texi.pdf: $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ $< $(srcdir)/gtypist.info: gtypist.texi $(srcdir)/version.texi $(gtypist_TEXINFOS) gtypist.dvi: gtypist.texi $(srcdir)/version.texi $(gtypist_TEXINFOS) gtypist.pdf: gtypist.texi $(srcdir)/version.texi $(gtypist_TEXINFOS) gtypist.html: gtypist.texi $(srcdir)/version.texi $(gtypist_TEXINFOS) $(srcdir)/version.texi: $(srcdir)/stamp-vti $(srcdir)/stamp-vti: gtypist.texi $(top_srcdir)/configure @(dir=.; test -f ./gtypist.texi || dir=$(srcdir); \ set `$(SHELL) $(srcdir)/mdate-sh $$dir/gtypist.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp @cmp -s vti.tmp $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi"; \ cp vti.tmp $(srcdir)/version.texi) -@rm -f vti.tmp @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp maintainer-clean-vti: -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi $(srcdir)/gtypist.cs.info: gtypist.cs.texi $(srcdir)/version2.texi gtypist.cs.dvi: gtypist.cs.texi $(srcdir)/version2.texi gtypist.cs.pdf: gtypist.cs.texi $(srcdir)/version2.texi gtypist.cs.html: gtypist.cs.texi $(srcdir)/version2.texi $(srcdir)/version2.texi: $(srcdir)/stamp-1 $(srcdir)/stamp-1: gtypist.cs.texi $(top_srcdir)/configure @(dir=.; test -f ./gtypist.cs.texi || dir=$(srcdir); \ set `$(SHELL) $(srcdir)/mdate-sh $$dir/gtypist.cs.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > 1.tmp @cmp -s 1.tmp $(srcdir)/version2.texi \ || (echo "Updating $(srcdir)/version2.texi"; \ cp 1.tmp $(srcdir)/version2.texi) -@rm -f 1.tmp @cp $(srcdir)/version2.texi $@ mostlyclean-1: -rm -f 1.tmp maintainer-clean-1: -rm -f $(srcdir)/stamp-1 $(srcdir)/version2.texi $(srcdir)/gtypist.es.info: gtypist.es.texi $(srcdir)/version3.texi gtypist.es.dvi: gtypist.es.texi $(srcdir)/version3.texi gtypist.es.pdf: gtypist.es.texi $(srcdir)/version3.texi gtypist.es.html: gtypist.es.texi $(srcdir)/version3.texi $(srcdir)/version3.texi: $(srcdir)/stamp-2 $(srcdir)/stamp-2: gtypist.es.texi $(top_srcdir)/configure @(dir=.; test -f ./gtypist.es.texi || dir=$(srcdir); \ set `$(SHELL) $(srcdir)/mdate-sh $$dir/gtypist.es.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > 2.tmp @cmp -s 2.tmp $(srcdir)/version3.texi \ || (echo "Updating $(srcdir)/version3.texi"; \ cp 2.tmp $(srcdir)/version3.texi) -@rm -f 2.tmp @cp $(srcdir)/version3.texi $@ mostlyclean-2: -rm -f 2.tmp maintainer-clean-2: -rm -f $(srcdir)/stamp-2 $(srcdir)/version3.texi .dvi.ps: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf gtypist.t2d gtypist.t2p gtypist.cs.t2d gtypist.cs.t2p \ gtypist.es.t2d gtypist.es.t2p clean-aminfo: -test -z "gtypist.dvi gtypist.pdf gtypist.ps gtypist.html gtypist.cs.dvi \ gtypist.cs.pdf gtypist.cs.ps gtypist.cs.html gtypist.es.dvi \ gtypist.es.pdf gtypist.es.ps gtypist.es.html" \ || rm -rf gtypist.dvi gtypist.pdf gtypist.ps gtypist.html gtypist.cs.dvi \ gtypist.cs.pdf gtypist.cs.ps gtypist.cs.html gtypist.es.dvi \ gtypist.es.pdf gtypist.es.ps gtypist.es.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: check-am all-am: Makefile $(INFO_DEPS) installdirs: for dir in "$(DESTDIR)$(infodir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-aminfo clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: $(DVIS) html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-info-am install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-1 \ maintainer-clean-2 maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-1 mostlyclean-2 mostlyclean-aminfo \ mostlyclean-generic mostlyclean-vti pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-pdf-am uninstall-ps-am .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-aminfo clean-generic \ cscopelist-am ctags-am dist-info distclean distclean-generic \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-1 maintainer-clean-2 \ maintainer-clean-aminfo maintainer-clean-generic \ maintainer-clean-vti mostlyclean mostlyclean-1 mostlyclean-2 \ mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-pdf-am uninstall-ps-am .texi.html: $(MAKEINFO) --html --no-split --no-headers -o gtypist.html gtypist.texi $(MAKEINFO) --html --no-split --no-headers -o gtypist.cs.html gtypist.cs.texi $(MAKEINFO) --html --no-split --no-headers -o gtypist.es.html gtypist.es.texi all: info html .PHONY: html html: version.texi version2.texi version3.texi $(html_docs) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gtypist-2.9.5/doc/ChangeLog0000644000175000017500000002240212204155736012477 000000000000002013-06-04 Tim Marston * gtypist.es.text: fixed warning about unknown FASE value. 2012-12-17 Tim Marston * gtypist.texi, gtypist.cs.text, gtypist.es.texi: Changed the licensing so that there are no invarient sections. 2011-08-19 Felix Natter * gtypist.texi: Update node "Supplied lessons" for new lessons * gtypist.texi: Update node "Ktouch lessons" for distinction between old 1.0 format and new 1.6 XML format * gtypist.texi: convert to UTF-8 2011-06-28 Tim Marston * gtypist.es.texi: added, thanks to smc for the good work. 2011-03-24 Tim Marston * gtypist.cs.texi: (renamed from gtypist-cs.texi) specified the wrong filename for it's .info which prevented make install from running (reported by Fredrik ). 2008-05-27 Paul Goins * gtypist*.texi: Updated a couple of remaining FDL 1.1 references to FDL 1.2. 2008-05-17 Paul Goins * Makefile.am: Added --no-headers flag to makeinfo invocation. This should give us a manual very close to the last published one, and avoids a "duplicate menu" which appears in the HTML version otherwise. 2008-05-12 Paul Goins * gtypist.texi: Updated FSF address, renamed/updated links (and removed some obsolete ones, added mention of CPM scoring, updated command line options section, added myself to the history section, and did some minor reformatting. * ChangeLog: Minor formatting update. 2008-05-06 Paul Goins * gtypist*.texi: Slightly modified so the manuals will correctly import unaltered texinfo source for GPL and FDL. 2008-05-04 Paul Goins * gpl.texi: Updated to GNU GPL v3 * fdl.texi: Updated to GNU FDL v1.2 2003-10-31 Dmitry Rutsky * gtypist.texi: updated the information about the `M' command. 2003-10-25 Hynek Hanke * gtypist-cs.texi: Renamed from gtypist.cs.texi. The reason is not to cause automake errors related to invalid suffix. * gtypist.cs.texi: Include version2.texi, not version.texi, so that the auto-tools don't complain. It seems this is some ugly workaround for something, but it is advised in the documentation and it shouldn't break anything as ver*.texi files are generated automatically. * Makefile.am: Handle also the HTML target so that we don't have to do it manually in autogen.sh. The target `all' now depends on target `info' AND `html'. * gtypist.cs.texi: Build into gtypist.cs.info, not gtypist.info. 2003-10-24 Hynek Hanke * gtypist.cs.texi: @documentencoding and @documentlanguage moved to the beginning of the file so that the auto-tools don't complain about it. 2003-09-28 Michael Opdenacker * gtypist*.texi: added a table of contents at the beginning * gtypist.texi: mentioned the lessons in Russian. * Makefile.am: now ships the html manuals in the source package. 2003-04-06 Felix Natter * gtypist.texi: added documentation for M: command + mark old menus (K:) as deprecated 2002-06-28 Hynek Hanke * gtypist.texi: Added section Findwords script to the chapter Creating lessons. 2002-04-23 Michael Opdenacker * gtypist.cz.texi: fixed to support the original fdl.texi file * gtypist.cz.texi, gtypist.texi: added @documentlanguage and @documentencoding settings. This makes sure that html manuals are automatically generated with the right language and charset settings. 2002-04-21 Michael Opdenacker * gtypist.texi: fixed to include the original fdl.texi file. * gtypist.texi: changes to let makeinfo use the best output in supported formats, as recommended in the texinfo manual: Replaced all @url calls by @uref (@url doesn't create http links in the makeinfo html output; I was using texi2html to create the html manual, but only makeinfo should be used). Replaced 'Name @email{address}' by '@mail{address, Name}. Used @option everywhere for command line options. Used @samp to introduce single characters. Small fixes to use texinfo commands when needed. * gtypist.texi: updated Felix Natter's email address. 2002-04-08 Michael Opdenacker * gtypist.texi: uses the new @copying command provided by texinfo-4.2. The manual is now released under the GNU Free Documentation license (with no Invariant Sections) which is now included in the manual. 2002-04-07 Michael Opdenacker * gtypist.cz.texi: Czech translation of the manual from Hynek Hanke 2002-02-23 Felix Natter * gtypist.texi (Emacs mode): do not mention that C-c C-f can be used to quickly create lesson for oneself to practice with (That will be typefortune's purpose) * gtypist.texi: put node Script file commands after Supplied lessons (swap Supplied lessons and Script file commands) to make the order more logical 2002-01-19 Michael Opdenacker * gtypist.texi: Added French to the list of interface languages. Recommended to use a wider terminal for languages such as French. 2001-11-03 Felix Natter * gtypist.texi (many nodes): changed the node-names to be shorter and add descriptions in the menus (i.e. Emacs mode for editing gtypist scripts => Emacs mode) * gtypist.texi (Technical Information): remove this node, because it contains two subnodes that are completely unrelated (Environment Variables and Known bugs); put the two subnodes in the toplevel menu instead * gtypist.texi (Distribution): use @asis instead of @emph because @emph results in "_Primary distribution site_" 2001-10-20 Felix Natter * gtypist.texi: fix some TODO's * gtypist.texi: rename node "Emacs mode for editing gtypist lessons" to "Emacs mode for editing gtypist scripts" * gtypist.texi (VIM Syntax highlighting for gtypist scripts): new node which explains how to install tools/gtypist.vim 2001-09-17 Felix Natter * gtypist.texi: new node "Design-patterns for lessons" which has hints about all kinds of things for writing lessons 2001-08-22 Felix Natter * gtypist.texi (Introduction): as Kevin Gallagher (and Eli Zaretskii ) suggested, do not mention and explicitly (because leads to confusion). Instead, just mention ("Backward deleting") 2001-08-16 Michael Opdenacker * Renamed manual sources to `gtypist.texi' (more standard). 2001-08-15 Felix Natter * node Introduction: start of rewrite * some spelling fixes 2001-08-15 Michael Opdenacker * GPL text now taken from a separate file, gpl.texi, copied from GNU hello. Renamed manual sources to `gtypist.texi' (more standard). 2001-08-12 Felix Natter * node Emacs mode for editing gtypist-lessons: add info about gtypist-mode-help and change the informatin about gtypist-mode-fortune-to-drill * node Script-file commands: mention that Q: accepts fkeys as a side-effect, and that this is used to set the prompt for menus * many nodes: rename "Script files and commands" to "Script-file commands" 2001-07-28 Felix Natter * node Emacs mode for editing gtypist-lessons: mention that "make install" puts gtypist-mode.el in load-path 2001-07-27 Felix Natter * node How to contribute new lessons: add menu with nodes "Ktouch-lessons" and "Create drills from fortune". * node Ktouch-lessons: add example of .ktouch-lesson 2001-07-26 Felix Natter * node Supplied Lessons: mention kt*.typ * node How to contribute new lessons: remove "not yet there" notice, tell user about ktouch-files and ktouch2typ.pl * node Emacs mode for editing gtypist-lessons: improve English * generate gtypist.info 2001-07-21 Felix Natter * node Emacs mode for editing gtypist-lessons: use @strong for and + add note that people should submit feature-suggestions * node Invoking: use '-' as word-separator in long options * node Distribution: add structio.sourceforge.net * node Script files and commands: mention that trailing whitespace is ignored in labels 2001-07-20 Felix Natter * node Introduction: some English fixes * node Invoking: mention $LANG * node Environment Variables: an English fix * generate gtypist.info 2001-07-19 Felix Natter * node Script files and commands: correct a few errors * node Environment Variables: use LANG=LL_CC * node Invoking: --wpmode is now disabled by default * new node: Emacs mode for editing gtypist-lessons 2001-06-26 Michael Opdenacker * Fixed errors and improved the manual. 2001-05-24 Michael Opdenacker * Replaced `typist' by `gtypist' in the documentation (the `typist' executable is no longer built in 2.3.2) * Corrected a few spelling and typing mistakes * Added recent changes to project history 2000-11-29 Vladimir Tamara * New structure and change of name to GNU Typist (gtypist) 2000-10-29 Igor Tamara * First version of texinfo documentation gtypist-2.9.5/doc/gtypist.info0000644000175000017500000031213212372333406013305 00000000000000This is gtypist.info, produced by makeinfo version 5.2 from gtypist.texi. This manual is for GNU Typist (version 2.9.5, 18 August 2013), a program to learn typing in several languages and for different keyboard layouts. Copyright © 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”. INFO-DIR-SECTION Education START-INFO-DIR-ENTRY * GNU Typist: (gtypist). Documentation of the typing tutor gtypist. END-INFO-DIR-ENTRY  File: gtypist.info, Node: Top, Next: Distribution, Up: (dir) GNU Typist - Typing Tutor ************************* This manual is for GNU Typist (version 2.9.5, 18 August 2013), a program to learn typing in several languages and for different keyboard layouts. Copyright © 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”. GNU Typist is an interactive typing tutor that can help you to type correctly. It has several lessons for different keyboard layouts and in different languages. The lessons for gtypist are described in a easy-to-learn scripting language that the user can use to modify the existing lessons or create new ones. * Menu: * Distribution:: Where to find gtypist: source, packages etc. * Copying:: The GNU General Public License says how you can copy and share gtypist * Introduction:: Important concepts you need to know as a user * Invoking:: How to invoke gtypist * Supplied lessons:: Overview of the lessons in the gtypist distribution * Using typefortune:: Practising with text from ‘fortune’ (requires perl) * Script file commands:: Information about the syntax of gtypist lessons * Create new lessons:: How to contribute new lessons * Emacs mode:: Emacs mode for editing gtypist scripts * VIM Syntax highlighting:: VIM Syntax highlighting for gtypist scripts * Environment Variables:: Environment variables which affect gtypist * Errors and omissions:: Known problems * History:: History of GNU Typist * Copying this manual:: The GNU Free Documentation License  File: gtypist.info, Node: Distribution, Next: Copying, Prev: Top, Up: Top Distribution ************ GNU Typist (or gtypist) is "free software"; this means that everyone is free to use it and free to redistribute it on certain conditions. The precise conditions are found in the GNU General Public License that comes with this program and also follows this section. You can obtain GNU Typist from a friend or from the Internet: Official distribution site Official home page On-line manual (updates between program releases) Developers’ home page (Git repository, tasks, support...)  File: gtypist.info, Node: Copying, Next: Introduction, Prev: Distribution, Up: Top GNU GENERAL PUBLIC LICENSE ************************** Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble ======== The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program—to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS ==================== 0. Definitions. “This License” refers to version 3 of the GNU General Public License. “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. A “covered work” means either the unmodified Program or a work based on the Program. To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users’ Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a. The work must carry prominent notices stating that you modified it, and giving a relevant date. b. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. c. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d. Limiting the use for publicity purposes of names of licensors or authors of the material; or e. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”. A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others’ Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS =========================== How to Apply These Terms to Your New Programs ============================================= If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. Copyright (C) YEAR NAME OF AUTHOR This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: PROGRAM Copyright (C) YEAR NAME OF AUTHOR This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’. This is free software, and you are welcome to redistribute it under certain conditions; type ‘show c’ for details. The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read .  File: gtypist.info, Node: Introduction, Next: Invoking, Prev: Copying, Up: Top 1 Introduction ************** GNU Typist is an interactive typing tutor program. It uses an input file to create a series of typing tutorials, drills, and speed tests. It is intended to be used on raw terminals without graphics. It has been compiled and used on GNU/Linux and Unix (OpenBSD, AIX, Solaris) and also on Windows. The program reads lessons written in an easy-to-learn scripting language. It is distributed with several complete and good lessons. You can use them, modify them or create new lessons (*note Create new lessons:: and *note Script file commands::). If a script file is not specified on the command line, a default file ‘gtypist.typ’ will be used. (See details about the path in the section *note Environment Variables::). The top line of the screen displays a banner. The bottom line of the screen displays a message line, queries, and other status information. The lines in between are used for the tutorials, drills, and speed tests. There are two types of typing exercises: "drills" and "speed tests". In a "drill", gtypist displays text in every other line on the screen, and waits for the user to correctly type the exact same text in the intermediate lines. Typing errors are indicated with an inverse ‘^’, or ‘>’ if the character is a newline and at the end of the exercise it calculates the real and effective rate in Words Per Minute (WPM). If there were too many errors, it will re-run the drill. Backward deleting of previously typed characters to correct errors is not allowed. In a speed test, gtypist displays text on the screen, and waits for the user to correctly over-type the exact same text. It indicates typing errors, and at the end of the test it calculates the real and effective rate in WPM. If there were too many errors, it will re-run the speed test. Backward deleting of previously typed characters to correct errors is permitted, but errors still accumulate. If you already made too many mistakes, then you can use to give up and start again. You can also skip a lesson by pressing twice. Once you complete a lesson, you will be asked whether you want to repeat it. There are also “practice only” exercises (of both drills and speed tests) which you won’t have to repeat at all. But we won’t tell you when this is the case, so you’ll have to give your best anyway ;-) In typing speed reports, a "word" is deemed to be five characters, so the raw (gross) WPM is the number of characters in the test passage, divided by five, then divided again by the number of minutes elapsed in typing the passage. The adjusted WPM factors in the errors; each error is counted as a mistyped word. If preferred, speeds can be displayed in Characters Per Minute (CPM). This can be done by specifying “–scoring=cpm” at the command line.  File: gtypist.info, Node: Invoking, Next: Supplied lessons, Prev: Introduction, Up: Top 2 Invoking ********** The syntax to invoke GNU Typist is: ‘gtypist [ Options... ] [ script_file ]’ ‘-b, --personal-best’ gtypist will keep track of your personal best typing speeds and tell you when you’ve beaten them. Best typing speeds are saved in a “bestlog” in the user’s home directory. ‘-e, --error-max’ Specifies the default maximum error percentage. The default value is 3.0 and it must be between 0.0 and 100.0. There is a corresponding script file command (*note Script file commands::) which only overrides this if it is _stricter_ (smaller). This value is ignored for “practice only” drills. ‘-n, --notimer’ gtypist will display the typing speeds in WPM after both drills and speed tests. However, the lessons appear to be written for a program that only does this for speed tests. To make gtypist behave in a manner that matches the lessons, that is, to sup WPM reports on drills, use ‘-n’ or ‘--notimer’. ‘-t, --term-cursor’ gtypist creates its own flashing block cursor on the screen, to help distinguish between the cursor and reverse video error indications. Setting ‘-t’ or ‘--term-cursor’ suppresses this, and forces the program to use the terminal’s cursor instead. ‘-f, --curs-flash’ Sets the block cursor flash period in tenths of a second. A value of 0 indicates no cursor flashing. The default is 10, and the maximum is 512. This option is ignored if ‘-t’ or ‘--term-cursor’ has been set. ‘-c, --colo[u]rs’ In normal operation, gtypist uses only normal and reverse video attributes in monochrome mode. This option may be used to specify the foreground and background colours on terminals that support colours. The colours are specified as two integers, in the range 0 to 7, separated by commas, setting the foreground and background colours. The colour codes 0 to 7 indicate black, red, green, yellow, blue, magenta, cyan, and white respectively. The default colours string is 7,0 - white on black. The option is ignored if the terminal does not support colours. ‘-s, --silent’ When gtypist detects a typing error, it will beep the terminal. Use this option to silence the beep. ‘-q, --quiet’ Same as ‘-s’ or ‘--silent’. ‘-l, --start-label’ Specifies the label in the script file at which gtypist begins executing (see script files and commands below for information on labels). If this option is not used, gtypist begins execution at the first line of the file. ‘-w, --word-processor’ With this option, gtypist will try to mimic a word processor in certain ways when executing an exercise. It will treat space at the end of a line as a correctly typed character, and word wrap. It will treat return at the end of a line as a signal to move to the start of the next paragraph if applicable. It will compress multiple spaces into a single space. And it will skip over hyphens found at the end of a line. ‘-k, --no-skip’ Prohibit the user from skipping lessons or exiting from lessons via . ‘-i, --show-errors’ Highlight errors with reverse video. ‘-S, --always-sure’ Skips confirmation questions. ‘--banner-colo[u]rs’ Change the color of the banner at the top of the screen. Color values are the same as for the –colo[u]rs command. The default value is 0,6,5,1 - black foreground, cyan background, magenta program name and red version name. ‘--scoring’ Change the scoring mode. WPM and CPM modes are available, with the default being WPM. You also have to set the environment variable ‘LANG’ if you want to run gtypist in your native language. *Note Environment Variables::. In some languages like French, some interface messages are longer than in English. Therefore, you may need to make your terminal larger before invoking the tool. Otherwise, the text on the lower left may overlap with the string on the lower right. *Examples:* To run the default lessons of lesson ‘gtypist.typ’: ‘gtypist’ To run the lesson in Spanish: ‘gtypist esp.typ’ To instruct gtypist to look for lesson bar.typ in a non standard directory ‘/home/foo’: ‘export GTYPIST_PATH="/home/foo"’ ‘gtypist bar.typ’ To run the lessons in the file ‘test.typ’ of directory ‘/tmp’, starting at label ‘TEST1’, using the terminal’s cursor, and running silently: ‘gtypist -t -q -l TEST1 /tmp/test.typ’  File: gtypist.info, Node: Supplied lessons, Next: Using typefortune, Prev: Invoking, Up: Top 3 Supplied lessons ****************** The following lessons are supplied with GNU Typist : ‘q.typ’ Quick QWERTY course in English ‘r.typ’ Long QWERTY course in English ‘t.typ’ QWERTY touch typing in English ‘v.typ’ Yet Another QWERTY in English ‘u.typ’ QWERTY Review in English ‘d.typ’ Dvorak touch typing in English ‘c.typ’ Colemak touch typing in English ‘m.typ’ Typing drills in English ‘s.typ’ Speed drills in English ‘n.typ’ Calculator keypad in English ‘gtypist.typ’ Compendium of all previous lessons in English ‘cs.typ’ Lessons in Czech ‘esp.typ’ QWERTY course in Spanish ‘ru.typ’ Lessons in Russian ‘kt*.typ’ These lessons are the standard lessons from Ktouch 1.6 (http://ktouch.sourceforge.net/), which have been converted to gtypist’s file format with the included script, ‘tools/ktouch2typ.pl’. The files are: ‘ktbg.typ’ (‘bulgarian.ktouch.xml’), ‘ktbg_long.typ’ (‘bulgarian_long.ktouch.xml’), ‘ktde.typ’ (‘german.ktouch.xml’), ‘ktde2.typ’ (‘german3.ktouch.xml’), ‘ktde_neo.typ’ (‘german.neo.ktouch.xml’), ‘ktde_number.typ’ (‘german.number.ktouch.xml’), ‘ktdk.typ’ (‘danish.ktouch.xml’), ‘ktdk2.typ’ (‘danish2.ktouch.xml’), ‘ktdvorak.typ’ (‘dvorak.ktouch.xml’), ‘ktdvorak_es.typ’ (‘dvorak_es.ktouch.xml’), ‘ktdvorak_abcd.typ’ (‘dvorak_ABCD.ktouch.xml’), ‘kten.typ’ (‘english.ktouch.xml’), ‘ktes.typ’ (‘spanish.ktouch.xml’), ‘ktes_cat.typ’ (‘catalan.ktouch.xml’), ‘ktfi.typ’ (‘finnish.ktouch.xml’), ‘ktfi_kids.typ’ (‘finnish_for_kids.ktouch.xml’), ‘ktfr.typ’ (‘french.ktouch.xml’), ‘ktfr2.typ’ (‘french2.ktouch.xml’), ‘kthu.typ’ (‘hungarian.ktouch.xml’), ‘kthu_expert.typ’ (‘hungarian_expert.ktouch.xml’), ‘ktit.typ’ (‘italian.ktouch.xml’), ‘ktnl.typ’ (‘nederlands.ktouch.xml’), ‘ktnl_junior.typ’ (‘nederlands_junior.ktouch.xml’), ‘ktno.typ’ (‘norwegian.ktouch.xml’), ‘ktpl.typ’ (‘polish.ktouch.xml’), ‘ktru.typ’ (‘russian.ktouch.xml’), ‘ktru_long.typ’ (‘russian_long.ktouch.xml’), ‘ktru_slava.typ’ (‘russian_slava.ktouch.xml’), ‘ktsi.typ’ (‘slovenian.ktouch.xml’), ‘kttr.typ’ (‘tr.ktouch.xml’), ‘german2.ktouch.xml’ has not been included because it is from the same source as ‘ttde.typ’ and ‘ttde.typ’ contains more information. ‘ttde.typ’ This is the German lesson of tipptrainer 0.6.0 (http://www.pingos.schulnetz.org/tipptrainer/), which has been converted using ‘tools/tt2typ.pl’. It is quite extensive and has good explanations along the way. If you find errors in these lessons, if you modify any of them or if you write a new lesson, please release it with a free license and tell us about it, by writing an email to .  File: gtypist.info, Node: Using typefortune, Next: Script file commands, Prev: Supplied lessons, Up: Top 4 Using typefortune ******************* ‘typefortune’ lets you practice with text from ‘fortune’. ‘SYNTAX: typefortune [-dslh] [-n count] [-o ]’ ‘-d’ Use ‘D:’ instead of ‘S:’. ‘-s’ Run fortune with ‘-s’. ‘-l’ Run fortune with ‘-l’. ‘-n ’ Practice fortunes. ‘-o ’ Pass options to gtypist, in the form ‘option’ (boolean option, i.e. ‘-o word-processor’), ‘option,value’ (option with value, i.e. ‘-o e,1.0’) where ‘option’ is the name of the option (short or long) with all leading dashes removed. You need to quote the argument to ‘-o’ if you are specifying more than one argument: ‘typefortune -n 3 -o 'silent e,5 word-processor'’.  File: gtypist.info, Node: Script file commands, Next: Create new lessons, Prev: Using typefortune, Up: Top 5 Script file commands ********************** GNU Typist reads in the data for its typing lessons from a script file. With the exception of comments and blank lines, each line in the file is of the format ‘command_char : command_data’ Here, ‘command_char’ is a single character code that defines an action for gtypist to take, and ‘command_data’ is data for that command. If ‘command_char’ is a space character, this indicates that the line is a continuation of the preceding non-space command. The ‘:’ separator must be in column two of the line. Comment lines are lines beginning with a ‘#’ character, and are ignored, as are blank lines. Comment lines may have any format provided that they begin with ‘#’; other lines must have the above format. You should read the introduction so that you are familiar with the basics: *Note Introduction::. The following is a list of valid ‘command_char’ values: ‘B’ This command clears the complete screen. If any ‘command_data’ is present, it is displayed in the one-line banner at the top of the screen, and remains in place until the next ‘B’ command. This command may not be continued on the following line; it is a single line command. ‘T’ This presents a tutorial, and is a multi-line command, up to the limit of the screen length. Each line in the command is simply printed to the screen. This command clears the screen beneath the top banner line. After the display is done, the program waits before proceeding. ‘*’ This indicates a label in the file. The label may be the target of a ‘G’, ‘Y’, ‘N’ or ‘F’ command. Labels may contain any character except space (this restriction was added in gtypist 2.9), and are a single line command. Labels must be unique within lesson files. White-space at the end of labels is ignored. ‘I’ The ‘I’ command can display some brief instructions above a drill or a speed test. Only two lines or less are permitted. Unlike the ‘T’ command, it does not wait for any further key-presses before proceeding. So it should really always be followed by an exercise. It clears the whole screen exercise area, so in this respect it’s just like a two-line ‘T’. ‘M’ This command is the new way to create menus (since gtypist 2.7). Here is the syntax: M: [UP=RETURN_LABEL|_EXIT] "title" :LABEL1 "item1" :LABEL2 "item2" ... This will display a convenient menu made from the specified items and let the user to choose from them. If an item was selected, gtypist will continue script execution from the corresponding label. If the Escape key was pressed and ‘UP’ label is defined, gtypist will go to the ‘UP’ label likewise, or quit from, if there is ‘``_EXIT''’ in the place of the label. If the ‘UP’ label is not defined, gtypist will try to return to the previous menu and jump to the last label met in the script before previous ‘M’ command. If there is no such label and some menu was displayed before the current one, gtypist will just go to the beginning of the script. If none of the previous conditions were met, gtypist will just exit from the script. The above details make it natural to create menu hierarchies without using ‘UP’ labels. The title and all descriptions must be wrapped in quotes (""). Additionally, there must be at least one space between ‘UP=XXX’ and "title" and between the labels and the corresponding descriptions. This command was introduced as an easy way to arrange various parts of lesson files into single menu hierarchy which can be easily navigated, as well as a replacement for ancient ‘F’-key menus. See the existing lesson-files for examples. ‘D,d’ This command is called "drill", and it is one of two types of typing exercises. It is a multi-line command. The text is displayed in every second line, and you type in the intermediate lines. Because of this, you cannot use more than 11 lines of drill content. This type of exercise is supposed to be used for finger training (i.e. jfjfjjf), but may also contain complete words and sentences if they are used to practice something (i.e. a letter/syllable/"grip"), and aren’t real texts. The lowercase version ‘d’ is a “practice only” drill - the user will not have not repeat this drill if he/she made too many mistakes. ‘S,s’ This is the second type of typing exercise: the "speed test". It is a multi-line command. It displays its text on the screen, and prompts the user to type on top of it. That’s why you can use up to 22 lines of text for one speed test. In a speed test you can correct your mistakes, but this will not decrease the error-count. Speed tests should be used for typing (mostly) complete sentences, texts or files (i.e. a letter, texinfo/html/tex files). The lowercase version ‘s’ is a "practice only speed test": the user will not have not repeat this drill if (s)he made too many mistakes. ‘G’ This causes gtypist to go to the label in ‘command_data’, and continue execution of the script there. This is a single line command. ‘Q’ This command command prompts its text on the message line, and waits for a or an before proceeding. Other characters are ignored. As a side effect, you can hit an F-key if it is bound (a deprecated way to create the prompt for menus). ‘Y’ This is like ‘G’, except that the goto is executed only if the result of the last ‘Q’ command was . ‘N’ This is like ‘G’, except that the goto is executed only if the result of the last ‘Q’ command was . ‘K’ _This command is deprecated in favor of M:_ This binds a function key to a label. The format of the data line following this command must be ‘fkey_number:label’, where ‘fkey_number’ is a function key number in the range 1 to 12, and ‘label’ is a label to go to when this key is pressed. A value of NULL for label removes any label binding from the key. If function keys are not available on the terminal other keys can be used: <1> to <9> to replace to , <0> to replace , for and for . Other alternatives for the keys to are the combinations: , , , , , , , , , , and . This is also useful where function keys are intercepted by other programs (for example by a window manager). ‘E’ This command is used to set the highest error-rate permitted for the next drill (‘E:%’) or for all following drills until the next ‘E:’ (‘E:%*’). If ‘--error-max/-e’ is specified then this command will only have an effect if it is _stricter_ than the value specified on the command-line. ‘command_data’ consists of the value (between 0.0 and 100.0), followed by ‘%’ (this is required so that scripts are more readable). A special value of ‘default’ or ‘Default’ sets the error-max value back to the default. ‘F’ This command (“set on-failure label”) is used to set the label (in ‘command_data’) where the user will have to go to if (s)he fails an exercise. Usually, this command only applies to the next exercise, but you can make it persistent by putting a ‘*’ at the end of ‘command_data’. If label is NULL then this resets the label. ‘X’ This command causes gtypist to exit. It is a single line command. Any ‘command_data’ is ignored. The program also exits if the end of the file is found (so you could also place a label there and just ‘G’ to it) Here is a tiny example script to demonstrate the available commands (‘tinydemo.typ’ lesson file): # Minimal demonstration B: Typing tutor demonstration *:LOOP K:1:QDONE T:This is a small example tutor script. A better :example may be found in the demo.typ file that :accompanies GNU Typist I:Here is an example of a drill: D:asdf ghjkl; I:And here is an example of a speed test: S:qwe rt yu iop *:QDONE Q:Seen enough yet? [Y/N] N:LOOP X:  File: gtypist.info, Node: Create new lessons, Next: Emacs mode, Prev: Script file commands, Up: Top 6 Create new lessons ******************** This section provides guidelines and hints for creating new lessons (or improving existing ones). * Menu: * Ktouch lessons:: Generate lessons from a set of drills * Exercises from fortune:: Create drills/speed-tests with text from fortune * Design patterns for lessons:: Hints/Design patterns for lessons * Findwords script:: Simple script designed to help you find words with certain letters  File: gtypist.info, Node: Ktouch lessons, Prev: Exercises from fortune, Up: Create new lessons 6.1 Ktouch lessons ================== A very easy way to write lessons is to write them in the format that ‘ktouch’ *1.0* uses, and then convert it to a gtypist lesson using ‘tools/ktouchOLD2typ.pl’. This will take care of writing “jump-tables”, a menu and a bit more. The ktouch-1.0-format consists only of lessons, which are preceded by their names, and separated by blank lines and/or comments (‘#’ at the beginning of the line). So the first non-blank, non-comment line in the file is the name of the first lesson, and the first lesson consists of all the lines up to the next comment or blank line. After the separator (comment or blank line) the name of the second lesson follows and so on. This is an example of a three-lesson ktouch file (excerpts from the first three lessons of ‘german.ktouch’): # # Deutsche Training-Datei für KTouch # Grundstellung f f f f f f fff fff fff f f f f f f fff fff fff f f f f f f f fff j j j j j j jjj jjj jjj j j j j j j jjj jjj jjj j j j j j j j jjj fff jjj fff jjj jjj fff jjj fff fjf fjf fjf jfj jfj jfj fjf jfjfj Grundstellung fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd kkkff fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jköfd s s s s s s sss sss sss s s s s s s sss sss sss s s s s s s s sss #Zwei wichtige Vokale: e und i e und i asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdfö das dass lös fad dass lös als dass las lös fad dass als dass dass ded ded ded dej dek del deö ded deö del dek dej ded dej dek delde Once you are done, use ‘tools/ktouchOLD2typ.pl’ to convert the file: ‘ktouchOLD2typ.pl lesson.ktouch’ converts ‘lesson.ktouch’ to ‘lesson.typ’. It is important that the input file ends in ‘.ktouch’, otherwise ‘ktouchOLD2typ.pl’ will skip it. Warning: this will overwrite ‘lesson.typ’ without asking you ! You can customize the number of lines that ‘ktouchOLD2typ.pl’ uses for each drill by modifying the relevant variable in ‘tools/ktouchOLD2typ.pl’. Obviously, the disadvantage of this is that you cannot make use of all of gtypist’s features (but the output file is very readable, so you can edit it to use more of gtypist’s features). If you prefer, you can use the new ktouch 1.6 XML file format, which looks like this (from ‘english.ktouch.xml’: SAMPLE TITLE SAMPLE COMMENT jf ff jjj jf jfj j jff fjjf ff jfj j jff ff jjj fjj fjj fjf jfj jjj f fjjf jjj fjjf jfj fjjf f j fjj jff j fjj jf jjj fjjf f f fjf fjjf jff jjj ff jf fjjf fjjf f fjj fjj jf fjf j jj f j fjj jj jjj ... kd jjd fdfj rd djd jk jd k dd fjk fd fk k jfkd dkkf fk dkd dd jk k dfj djd fkkk fk dff d dkkf fd fk fdfj fk k dkkf djd dff dkd dff dkd kdk k dkkf k jk fkkk jd k jfkd fk fk jd k d dkd jd k dd rd dffd ... In this format, the content of the tag acts as a title for the following drill. You can convert ‘*.ktouch.xml’ to ‘*.typ’ with ‘ktouch2typ.pl lesson.ktouch.xml’, which will create ‘lesson.ktouch.typ’ (again, this may overwrite without asking you).  File: gtypist.info, Node: Exercises from fortune, Next: Ktouch lessons, Prev: Design patterns for lessons, Up: Create new lessons 6.2 Exercises from fortune ========================== Using ‘gtypist-mode.el’ you can quickly create lessons with text from the program ‘fortune’ (or the Emacs-internal ‘yow’ if ‘fortune’ isn’t available, as is usually the case on Windows). Once you installed ‘gtypist-mode.el’ (*note Emacs mode::), you can open a file with the ‘.typ’ extension and run ‘C-c C-f’ to create a drill (‘D:’ by default, use ‘C-u’ or ‘C-u C-u’ prefix to change).  File: gtypist.info, Node: Design patterns for lessons, Next: Exercises from fortune, Prev: Findwords script, Up: Create new lessons 6.3 Design patterns for lessons =============================== 6.3.1 Structure of lesson files ------------------------------- • Use mixture of drills and speed tests (this is more fun for the user) • Use some “practice-only” exercises (‘d:’/‘s:’) (possibly mixed with “real” exercises) followed by a “final test”. ‘esp.typ’ uses this scheme. 6.3.2 Patterns for exercises ---------------------------- • When introducing a new key, start out by mixing other (known) keys of the same finger in with the new key in the first drill(s). Here is an example (from ‘t.typ’, line 237): I:Use your J-finger for the H key. *:_T_R_L23 D:jjj jhj jjj jhj jjj jhj • use ’word, word.’ repeatedly to practice ,/.  File: gtypist.info, Node: Findwords script, Next: Design patterns for lessons, Up: Create new lessons 6.4 Findwords script ==================== The ‘tools/findwords’ script in the GNU Typist sources is there to assist you in creating new lessons. 6.4.1 Purpose ------------- In the beginning when you are creating a new tutorial from scratch, it’s not very easy to form words and even sentences while the range of letters you can use is restricted. Sometimes you want to insert some paragraph “targeted” at some special combination of two or three letters. This is even harder. For this purpose we created findwords. It uses the dictionaries from the aspell database (free multilingual spellchecker). 6.4.2 Installing ---------------- You will need the ‘aspell’ and ‘aspell-LG’ packages, where LG is the ISO language code for the language you want to use. After a successful installation, you will have to make a little change in your configuration so that aspell’s master database is the one of your language. This can be done two different ways: 1. In your home directory create the file .aspell.conf and add this line: ‘master LANGUAGE’ 2. Create /usr/share/pspell/LG-aspell.pwli and add this line: ‘/usr/lib/aspell/LG’ Make sure your locale setting is LG. In the above, LG means ISO language code (eg. ‘en’, ‘fr’, ‘cs’) and LANGUAGE means name of the database in /usr/lib/aspell (eg. ‘english.multi’, ‘french’, ‘czech’). You can try if it works by typing: aspell dump master | less 6.4.3 Using findwords --------------------- The syntax is as follows: ‘./findwords letters [combination]’ In the mandatory ‘letters’ argument you must list the letters that you want use without any spaces. You may use the dot (‘.’) to say ‘all letters’. The second argument combination is optional and you can specify there what combination of letters are you searching for. Some examples: • ‘./findwords asdfjkleruio’ We are looking for all words composed from the listed letters. • ‘./findwords asdfjkleruio sa’ We search words containing the combination ‘sa’, but only these composed from specified letters. • ‘./findwords . col’ Words can contain all letters, but must have ‘col’ somewhere inside.  File: gtypist.info, Node: Emacs mode, Next: VIM Syntax highlighting, Prev: Create new lessons, Up: Top 7 Emacs mode ************ gtypist now comes with an Emacs major-mode which does syntax-highlighting, indentation and has some convenient commands for counting labels, a goto-label-command, inserting properly centered banners, special comments and a bit more. Copy this file from ‘tools/gtypist-mode.el’ to wherever you put your local elisp files (e.g. ‘~/elisp’) and put this in your ‘~/.emacs’ (adapt path!): (autoload 'gtypist-mode "~/elisp/gtypist-mode") or put it in ‘load-path’ (‘make install’ in the sources should take care of this for GNU Emacs, or if you are using the Debian package, it installs it here for you) and use this instead: (autoload 'gtypist-mode "gtypist-mode") *and* add this to your ‘~/.emacs’: (setq auto-mode-alist (cons '("\\.typ\\'" . gtypist-mode) auto-mode-alist)) All this is also mentioned in the README-section of ‘tools/gtypist-mode.el’. Here are the commands along with the keybindings: ‘C-c C-i, M-x gtypist-mode-info’ This shows gtypist’s texinfo-documentation, starting at node “Script file commands” (*note Script file commands::). With prefix, start at the top-node. ‘C-c M-g, M-x gtypist-mode-goto-label’ Query for a label to go to (with completion). ‘C-c C-l, M-x gtypist-mode-next-label’ This command inserts the next label in a numbered sequence of labels. For example, if you insert *:SERIES1_L1 and hit ‘C-c C-l’ then gtypist-mode will insert *:SERIES1_L2 ‘C-c C-b, M-x gtypist-mode-insert-banner’ This command inserts a centered ‘B:’ command. It’s centered on 66 columns because “gtypist ” is in the right corner (prompts for content). ‘C-c C-r, M-x gtypist-mode-insert-hrule’ Inserts a horizontal rule (comment) consisting of dashes. ‘C-c C-n, M-x gtypist-mode-new-lesson’ Insert the comments (header) and a label to start a new lesson (prompts for name). ‘C-c C-f, M-x gtypist-mode-fortune-to-drill’ Insert a drill (‘D:’) with text from ‘fortune’ (or ‘yow’ if ‘fortune’ isn’t available). Use ‘C-u’ prefix to get ‘S:’, and ‘C-u C-u’ to get ‘d:’. Run ‘C-h m’ for a complete list of commands and their keybindings. If you find bugs or if you think there’s something else this mode could do, please write to .  File: gtypist.info, Node: VIM Syntax highlighting, Next: Environment Variables, Prev: Emacs mode, Up: Top 8 VIM Syntax highlighting ************************* File ‘tools/gtypist.vim’ provides vim syntax highlighting for gtypist lesson files (vim 5.x, 6.x and 7.x (and higher)). To install it for version 5.x (or any version on Windows), copy the file to where the syntax-files go (for example ‘/usr/share/vim/vim56/syntax/’ for Vim 5.6; if everything else fails you can search for e.g. ‘xml.vim’) and add this to ‘~/.vimrc’ (‘$HOME/_vimrc’ on Windows): autocmd BufNewFile,BufRead *.typ set ft=gtypist Installation for Vim >= 6.x is simpler: first create ‘~/.vim/syntax/’: ‘mkdir -p ~/.vim/syntax’ and put ‘tools/gtypist.vim’ in there. Finally add this to ‘~/.vimrc’: autocmd BufNewFile,BufRead *.typ setf gtypist In case you are using the debian package, ‘gtypist.vim’ will already be installed for you, but you need to enable it explicitly: sudo apt-get install vim-addon-manager vim-addons install gtypist In any case, make sure that the ‘vimrc’ file has the following command at the top ahead of all other ‘autocmd’-commands: autocmd! " Remove ALL autocommands for the current group (which avoids problems if ‘vimrc’ is sourced more than once). And if you haven\’t done it already, you need to enable syntax highlighting (this may need to be _before_ the autocmd ... gtypist). syntax on " turn on syntax highlighting You can verify that ‘tools/gtypist.vim’ is active by running ‘:set ft?’ in vim, which should return _filetype=gtypist_. All of this is also mentioned in the README-section of ‘tools/gtypist.vim’.  File: gtypist.info, Node: Environment Variables, Next: Errors and omissions, Prev: VIM Syntax highlighting, Up: Top 9 Environment Variables *********************** GNU Typist uses the following environment variables: ‘LANG’ GNU Typist offers Native Language Support (NLS) with support of the gettext library, this means that if your system supports it, the language of the messages shown by gtypist can be chosen. By now gtypist is distributed with messages in English, Czech, Finnish, French, German and Spanish. To use a particular NLS use the environment variable LANG and set it to the appropriate ‘LL_CC’ combination where ‘LL’ is an ISO 639 two-letter language code and ‘CC’ is an ISO 3166 two-letter country code (e.g. ‘es_ES’ for Spain and ‘de_DE’ for Germany). In some systems it will be also necessary to set the environment variable LANGUAGE to the same value. If you want to translate messages to a different language (or if you want to correct a message), please communicate it to . ‘GTYPIST_PATH’ Lists the directories that the program will look in for script files. It has the standard format for paths, that is, a list of directories separated by ‘:’s. To open a script, gtypist will try the following paths: (1) to use the script name alone (2) it will append each one of the directories specified in the variable ‘GTYPIST_PATH’ and (3) it will append the directory used during the installation process (e.g. ‘/usr/local/share/gtypist’ or ‘/usr/share/gtypist’). ‘TERM’ Used by curses to manage the display. ‘TERMINFO’ This may need to be set if the path to the ‘terminfo’ database is different between the system the binary was compiled on and the one it is being run on. For example, in older Slackware systems, the terminfo database resides in ‘/usr/lib/terminfo’. On RedHat Linux, it is in ‘/usr/share/terminfo’. If the program complains about the terminal type, and the value of ‘TERM’ is correct, check into this.  File: gtypist.info, Node: Errors and omissions, Next: History, Prev: Environment Variables, Up: Top 10 Errors and omissions *********************** GNU Typist does not go to much effort to minimize terminal output. In particular, the flashing block cursor can cause a lot of cursor movement. Using the terminal’s own cursor will help if this becomes a problem. In speed tests, the program does not allow backspacing or deletion past the beginning of the screen line, or back through Tab characters. This is purely to simplify screen updating. Colour curses modes do not seem to work well with UnixWare. In particular, reverse video is not always rendered correctly on some terminal types, and xterms. Please see the TODO file in the source distribution for more things that need to be fixed.  File: gtypist.info, Node: History, Next: Copying this manual, Prev: Errors and omissions, Up: Top Appendix A History of GNU Typist ******************************** • The initial program was written for VAX/VMS BASIC by someone at Harris Corp (Ft. Lauderdale, FL). • D. Jason Penney rewrote it for Microsoft BASICA • D. Jason Penney rewrote it in C and the curses library • Simon Baldwin rewrote the version of D. Jason Penney, his innovations are described in the NEWS file (versions 2.2 to 2.2b). He is the holder of the copyright for GNU Typist (that is distributed under the GPL). Simon also wrote a version of Typist in Java that initially he called JTypist but that now is called Typist again: • Since 1997, Ben Armstrong has helped by fixing bugs and maintaining a Debian package (http://packages.debian.org/gtypist/). • In 2000, Vladimir Támara and Igor Támara became the maintainers of the C version. Before November 2000, GNU Typist was maintained as part of the Structio project. • November 2000, accepted as a GNU package! Renamed to GNU Typist (or gtypist). • In May 2001, Michael Opdenacker , who learned touch typing with GNU Typist, became the new maintainer. Project development is now hosted on . • In June 2001, Felix Natter joined and made major contributions to the project: lesson imports from other tutors, tool enhancements, new tutorial capabilities, , Emacs mode, arrow key based interface, and many more! • In 2003, Dmitry Rutsky joined joined the development team and brought in a dramatic number ideas, hacks and improvements, and he’s not done yet! • In April 2008, Paul Goins took over as maintainer of GNU Typist, adding a few enhancements (especially building under Windows with MinGW), making some documentation updates and changing the license to GPL version 3. • In December 2010, Tim Marston took over as maintainer of GNU Typist, adding some enhancements and support for the Colemak keyboard layout.  File: gtypist.info, Node: Copying this manual, Prev: History, Up: Top Appendix B GNU Free Documentation License ***************************************** Version 1.2, November 2002 Copyright © 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text. A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles. You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.” 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with…Texts.” line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  Tag Table: Node: Top878 Node: Distribution2980 Node: Copying3757 Node: Introduction41503 Node: Invoking44459 Node: Supplied lessons49236 Node: Using typefortune52458 Node: Script file commands53386 Node: Create new lessons62247 Node: Ktouch lessons62834 Node: Exercises from fortune66543 Node: Design patterns for lessons67170 Node: Findwords script68120 Node: Emacs mode70524 Node: VIM Syntax highlighting73098 Node: Environment Variables74852 Node: Errors and omissions77047 Node: History77865 Node: Copying this manual80362  End Tag Table  Local Variables: coding: utf-8 End: gtypist-2.9.5/doc/stamp-10000644000175000017500000000014112372333406012124 00000000000000@set UPDATED 18 August 2013 @set UPDATED-MONTH August 2013 @set EDITION 2.9.5 @set VERSION 2.9.5 gtypist-2.9.5/doc/mdate-sh0000755000175000017500000001363712302342414012355 00000000000000#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2010-08-21.06; # UTC # Copyright (C) 1995-2013 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST fi case $1 in '') echo "$0: No file. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification day of FILE, in the format: 1 January 1970 Report bugs to . EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume 'unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" fi # A 'ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named "Jan", or "Feb", etc. However, it's unlikely that '/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`$ls_command /` # Find which argument is the month. month= command= until test $month do test $# -gt 0 || error "failed parsing '$ls_command /' output" shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done test -n "$month" || error "failed parsing '$ls_command /' output" # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\\\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gtypist-2.9.5/doc/Makefile.am0000644000175000017500000000113112204155736012755 00000000000000## Process this file with automake to produce Makefile.in info_TEXINFOS=gtypist.texi gtypist.cs.texi gtypist.es.texi gtypist_TEXINFOS=gpl.texi fdl.texi EXTRA_DIST=gtypist.html gtypist.cs.html gtypist.es.html html_docs=gtypist.html gtypist.cs.html gtypist.es.html .texi.html: $(MAKEINFO) --html --no-split --no-headers -o gtypist.html gtypist.texi $(MAKEINFO) --html --no-split --no-headers -o gtypist.cs.html gtypist.cs.texi $(MAKEINFO) --html --no-split --no-headers -o gtypist.es.html gtypist.es.texi all: info html .PHONY: html html: version.texi version2.texi version3.texi $(html_docs) gtypist-2.9.5/doc/texinfo.tex0000644000175000017500000116703612302342414013127 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2013-02-01.11} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % http://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment % \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} % \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ptexslash \fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\normaldash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % ctrl is no longer a Texinfo command, but leave this definition for fun. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = ectt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\abbr \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\image \definedummyword\indicateurl \definedummyword\inforef \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\lbracechar{|a}% % \def\}{|b}% \def\rbracechar{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% \nobreak\bigskip \nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % % ... and for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \endgroup} \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.BLAH for each BLAH % in the params list to some hook where the argument si to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. % % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } % \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing missing arguments are set to empty \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else \ifnum\paramno<10\relax % at most 9 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % at most 9 \ifnum\paramno<10\relax \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg). % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \edef\pdfxrefdest{#1}% \ifx\pdfxrefdest\empty \def\pdfxrefdest{Top}% no empty targets \else \txiescapepdf\pdfxrefdest % escape PDF special chars \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % The story here is that in math mode, the \char of \backslashcurfont % ends up printing the roman \ from the math symbol font (because \char % in math mode uses the \mathcode, and plain.tex sets % \mathcode`\\="026E). It seems better for @backslashchar{} to always % print a typewriter backslash, hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. Also revert - to its normal character, in % case the active - from code has slipped in. % {@catcode`- = @active @gdef@normalturnoffactive{% @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore gtypist-2.9.5/doc/gtypist.cs.info0000644000175000017500000027144212372333407013722 00000000000000This is gtypist.cs.info, produced by makeinfo version 5.2 from gtypist.cs.texi. Toto je manuál pro GNU Typist (verze 2.9.5, 18 August 2013), program určený k výuce psaní na klávesnici pro několik jazyků a různé klávesové rozložení. Copyright © 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”. INFO-DIR-SECTION Education START-INFO-DIR-ENTRY * GNU Typist (cs): (gtypist.cs). Dokumentace k výukovému programu psaní na klávesnici gtypist. END-INFO-DIR-ENTRY  File: gtypist.cs.info, Node: Top, Next: Distribuce, Prev: (dir), Up: (dir) GNU Typist - psaní všemi deseti ******************************* Toto je manuál pro GNU Typist (verze 2.9.5, 18 August 2013), program určený k výuce psaní na klávesnici pro několik jazyků a různé klávesové rozložení. Copyright © 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”. GNU Typist je interaktivní výukový program, který vám pomůže osvojit si principy správného psaní na klávesnici všemi deseti prsty. Obsahuje několik lekcí pro různé typy klávesnic a různé jazyky. (Mezi nimi nechybí ani čeština.) Lekce pro gtypist jsou napsány ve snadno pochopitelném skriptovacím jazyku, takže je mohou uživatelé modifkovat či vytvářet nové. Pokud zadáte parametr cs.typ, spustíte lekce v češtině zaměřené na českou klávesnici. * Menu: * Distribuce:: Kde najít gtypist: zdrojové kódy, balíčky apod. * Kopírování:: Kopírování a svobodné sdílení gtypist pod GPL * Úvod:: Co byste měli jako uživatelé vědět * Spouštění:: Jak spustit gtypist * Dostupné lekce:: Přehled lekcí v distribuci gtypistu * Používání typefortune:: Procvičování na textu z ‘fortune’ (perl) * Příkazy skriptovacího jazyka:: Informace o syntaxi lekcí pro gtypist * Vytvořte nové lekce:: Jak přispět novými lekcemi * Mód Emacsu:: Mód Emacsu pro editaci skriptů do gtypistu * Proměnné prostředí:: Proměnné prostředí, které ovlivňují gtypist * Chyby a opominutí:: Známé problémy * Historie:: Historie GNU Typistu * Kopírování tohoto manuálu:: Licence svobodné dokumentace GNU.  File: gtypist.cs.info, Node: Distribuce, Next: Kopírování, Prev: Top, Up: Top Distribuce ********** GNU Typist (či gtypist) je "svobodný software"; to znamená, že jej může za určitých podmínek každý svobodně používat a dále redistribuovat. Přesné podmínky můžete nalézt v GNU General Public Lincense, kterou jste obdrželi s tímto programem a která následuje tuto sekci. GNU Typist můžete získat od přítele nebo z Internetu: Hlavní distribuční web: Domovská stránka On-line manuál (aktualizace mezi vydáním jednotlivých verzí) Stránka vývojářů (CVS repozitář, úlohy, podpora...) Stažení GNU Typist (zdrojové kódy, binární verze, tutoriály) Obrázky  File: gtypist.cs.info, Node: Kopírování, Next: Úvod, Prev: Distribuce, Up: Top GNU GENERAL PUBLIC LICENSE ************************** Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble ======== The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program—to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS ==================== 0. Definitions. “This License” refers to version 3 of the GNU General Public License. “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. A “covered work” means either the unmodified Program or a work based on the Program. To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users’ Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a. The work must carry prominent notices stating that you modified it, and giving a relevant date. b. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. c. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d. Limiting the use for publicity purposes of names of licensors or authors of the material; or e. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”. A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others’ Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS =========================== How to Apply These Terms to Your New Programs ============================================= If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. Copyright (C) YEAR NAME OF AUTHOR This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: PROGRAM Copyright (C) YEAR NAME OF AUTHOR This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’. This is free software, and you are welcome to redistribute it under certain conditions; type ‘show c’ for details. The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read .  File: gtypist.cs.info, Node: Úvod, Next: Spouštění, Prev: Kopírování, Up: Top 1 Úvod ****** GNU Typist je interaktivní program pro výuku psaní na klávesnici všemi deseti prsty. Obsahuje výukové lekce, cvičení i rychlostní testy. Program je určen pro používání na terminálech bez grafiky. Byl zkompilován na GNU/Linuxu, Unixech (Aix, OpenBSD) a také na DOS/Windows (DOS 6.22, Windows 98, Windows NT). Program načítá lekce vytvořené ve snadno pochopitelném skritpovacím jazyku. Je distribuován spolu s několika dobrými a kompletními lekcemi, které můžete používat, modifikovat, nebo psát nové. (*note Vytvořte nové lekce:: *note Příkazy skriptovacího jazyka::). Pokud nespecifikujete příslušný soubor lekcí na příkazové řádce, bude použit ‘gtypist.typ’. (Podrobnosti o cestě k souborům naleznete v sekci *note Proměnné prostředí::). Na horní řádce obrazovky naleznete banner programu. Na nejspodnější řádce se potom nalézají různé zprávy, dotazy a další informace o stavu. Řádky mezi tím jsou používány pro tutoriály, cvičení a rychlostní testy. V programu jsou dva typy cvičení: drilové a rychlostní testy. V drilových vám gtypist zobrazí text v každé druhé řádce obrazovky a počká, až uživatel správně opíše text do zbývajících prázdných řádek. Chybně zadaná písmena jsou indikována obráceným ‘^’, nebo ‘>’, pokud je špatně zadaným znakem konec řádky. Na konci cvičení program spočítá skutečnou a užitečnou rychlost v jednotkách slov za minutu. Pokud jste udělali příliš mnoho chyb, cvičení se spustí znova. Není dovoleno zpětně opravovat špatně zadané znaky. V rychlostních testech zobrazuje gtypist text na obrazovce a čeká, až ho uživatel přepíše tím samým. Chyby se zobrazují a na konci testu se spočítá opravdová a užitečná rychlost ve WPM (words per minute – slova za minutu). Pokud se vyskytlo příliš mnoho chyb, test se spustí znovu. Opravování chyb je povoleno, ale takto opravené chyby budou stejně započítány do hodnocení. Jestli jste již udělali příliš mnoho chyb, můžete použít a test se spustí znovu. Kdykoliv dokončíte lekci, butete dotázáni, zda ji chcete opakovat. GNU Typist obsahuje i cvičení zaměřené pouze na procvičování (jak drilová cvičení, tak rychlostní testy), která možná nebudete muset vůbec opakovat. Nechceme ale říkat, zda se to týká zrovna vás, takže se stejně budete muset snažit, jak nejlépe umíte ;-) Ve výsledcích rychlosti znamená jedno slovo pět znaků, takže hrubé WPM je počet znaků v testovací oblasti dělené pěti a znovu dělené počtem uplynulých minut. Co se týče faktoru chyby, který WPM ovlivňuje, každá chyba je počítaná za špatné slovo.  File: gtypist.cs.info, Node: Spouštění, Next: Dostupné lekce, Prev: Úvod, Up: Top 2 Spouštění *********** Syntaxe pro spuštění GNU Typist je: ‘gtypist [ parametry... ] [ script_file ]’ Podporované parametry jsou popsány níže (pozor, dlouhé tvary nejsou v DOSu podporovány). ‘-e, --error-max’ Udává maximální procento chybovosti při zadávání textu. Defaultní hodnota je 3,0. Musí být mezi 0,0 a 100,0. Existuje i příkaz skriptovacího jazyka (*note Příkazy skriptovacího jazyka::), který to může změnit, pokud je zadané číslo menší. Pro procvičovací lekce je tato hodnota ale ignorována. ‘-n, --notimer’ Normálně GNU Typist zobrazuje rychlost ve WPM (slova za minutu) jak po drilových cvičeních, tak po rychlostních zkouškách. Lekce jsou ale zřejmě napsané pro program, který zobrazoval rychlost pouze při rychlostních testech. Abyste gtypist přinutili k takovémuto chování odpovídajícímu lekcím, tedy aby nezobrazoval počet slov za minutu u drilových testů, použijte tento parametr. ‘-t, --term-cursor’ gtypist si vytváří vlastní obdélníčkový kurzor, aby pomohl uživateli rozlišit mezi kurzorem a označením chyb v inverzních barvách. Tímto parametrem takové chování potlačíme a donutíme program používat standardní kurzor terminálu. ‘-f, --curs-flash’ Hodnota tohoto parametru nastavuje blikání obdélníkového kurzoru v desetinách sekund. Hodnota 0 znamená, že kurzor nebude blikat. Standardní hodnota je 10, maximální 512. Toto je ignorováno, pokud bylo nastaveno -t nebo –term-cursor. ‘-c, --colo[u]rs’ Normálně používá gtypist pouze normální a převrácené monochromatické barvy. Tímto parametrem můžete nastavit barvu popředí a pozadí na terminálech, které podporují barevný výstup. Barvy jsou specifikovány jako dvě čísla mezi 0 a 7. Kódy barev od 0 do 7 znamenají barvu černou, červenou, zelenou, žlutou, modrou, magenta a modrozelenou a bílou. Defalutní nastavení je 7,0 – bílá na černém pozadí. Toto nastavení je ignorováno pokud terminál nepodporuje barvy. ‘-s, --silent’ Kdykoliv narazí gtypist na chybu, zapípá. Tímto nastavením můžete zvukový signál potlačit. ‘-q, --quiet’ To samé jako -s, –silent. ‘-w, --wpmode’ Tímto donutíte gtypist určitým způsobem napodobovat textový procesor, kdykoliv spouští nějaké cvičení. Mezeru na konci řádku bude brát jako korektní znak a přejde na další řádku. Pokud stisknete na konci řádky ENTER, přesune vás na následující odstavec. Vícenádobné mezery stlačí na jedinou a bude přeskakovat rozdělovací čárky na konci řádek. ‘-l, --start-label’ Tento parametr udává návěstí ve skriptovém souboru, kde gtyping začne (pro informace o návěstí viz níže skriptovací jazyk). Pokud není start_label definováno, začne se od začátku souboru. ‘-k, --no-skip’ Zakáže uživateli přeskakovat lekce nebo z nich utíkat pomocí . Pokud chcete spouštět gtypist ve svém rodném jazyce, musíte také vhodně nastavit proměnnou prostředí ‘LANG’ *Note Proměnné prostředí::. *Příklady:* Ke spuštění standardního anglického souboru lekcí ‘gtypist.typ’: ‘gtypist’ Ke spuštění českých lekcí: ‘gtypist cs.typ’ Donutíme gtypist, aby hledal lekci bar.typ v nestandardním adresáři ‘/home/foo’: ‘export GTYPIST_PATH="/home/foo"’ ‘gtypist bar.typ’ Abychom mohli spustit lekci ‘test.typ’ v adresáři ‘/tmp’, a začít na návěstí ‘TEST1’, v tichém módu, za použití standardního kurzoru terminálu, zadáme toto: ‘gtypist -t -q -l TEST1 /tmp/test.typ’  File: gtypist.cs.info, Node: Dostupné lekce, Next: Používání typefortune, Prev: Spouštění, Up: Top 3 Dostupné lekce **************** S GNU Typist jsou dodávány tyto lekce : ‘cs.typ’ Soubor QWERTY kurzů v češtině (+ numerická klávesnice) ‘q.typ’ Rychlý QWERTY kurz v angličtině ‘r.typ’ Dlouhý QWERTY kurz v angličtině ‘t.typ’ QWERTY výuka v angličtině ‘v.typ’ Ještě další QWERTY v angličtině ‘w.typ’ QWERTY opakování v angličtině ‘d.typ’ Výuka klávesnice Dvorak v angličtině ‘m.typ’ Drilová cvičení v angličtině ‘s.typ’ Rychlostní testy v angličtině ‘n.typ’ Numerická klávesnice v angličtině ‘gtypist.typ’ Soubor všech předchozích anglických lekcí ‘esp.typ’ Kurz QWERTY ve španělštině ‘kt*.typ’ Toto jsou standardní lekce z Ktouch 1.0 (), které byly do formátu gtypistu zkonvertovány s použitím ‘tools/ktouch2typ.pl’. Tyto soubory jsou ktde.typ (german.ktouch), kten.typ (english.ktouch), ktfr.typ (french.ktouch), ktlecten.typ (lecture_en.ktouch), ktno.typ (norwegian.ktouch) and ktnumber.typ (number.ktouch). ‘ttde.typ’ To je německá lekce pro tipptrainer (), která byla zkonvertována s pomocí ‘tools/tt2typ.pl’. Pokud v těchto lekcích najdete chyby, pokud nějakou upravíte, nebo pokud napíšete lekci novou, prosím vydejte ji pod svobodnou licencí a řekněte nám o tom – můžete nám napsat mail na .  File: gtypist.cs.info, Node: Používání typefortune, Next: Příkazy skriptovacího jazyka, Prev: Dostupné lekce, Up: Top 4 Používání typefortune *********************** ‘typefortune’ vám dovolí cvičit s textem z ‘fortune’. ‘SYNTAX: typefortune [-dslh] [-n počet] [-o ]’ ‘-d’ Použije ‘D:’ místo ‘S:’. ‘-s’ Spustí fortune s ‘-s’. ‘-l’ Spustí fortune s ‘-l’. ‘-n ’ Cvičení fortunes. ‘-o ’ Předej gtypistu nastavení ve formě ‘option’ (nastavení přepínače, např. ‘-o word-processor’), ‘option,value’ (nastavení hodnoty, např. ‘-o e,1.0’) kde ‘option’ je jméno nastavení (zkrácené či dlouhé) s tím, že všechny úvodní pomlčky jsou odstraněny. Pokud uvádíte více než jeden parametr, musíte je uvést v apostrofech: ‘typefortune -n 3 -o 'silent e,5 word-processor'’.  File: gtypist.cs.info, Node: Příkazy skriptovacího jazyka, Next: Vytvořte nové lekce, Prev: Používání typefortune, Up: Top 5 Příkazy skriptovacího jazyka ****************************** GNU Typist načítá data pro jednotlivé lekce ze skriptového souboru. Každá řádka s výjimkou komentářů a prázdných řádek má následující formát ‘znak_příkazu : data_příkazu’ ‘Znak příkazu’ je jeden znak, který určuje, co bude gtypist dělat, a ‘data_příkazu’ jsou data, se kterými bude operovat. Pokud je ‘znak_příkazu’ mezera, znamená to, že řádka je pokračováním předchozího příkazu. Oddělovač ’:’ musí být vždy v druhém sloupci řádky. Řádky komentářů jsou řádky začínající znakem ’#’ a stejně jako prázdné řádky jsou ignorovány. Komentáře mohou mít jakýkoliv formát, jediným požadavkem je, aby začínaly ’#’. Všechny ostatní řádky musí mít výše uvedený formát. Abyste se seznámili se základy, měli byste si přečíst *Note Úvod::. Následující výčet je seznamem platných hodnot ‘znaků_příkazu’: ‘B’ Tento příkaz smaže celou obrazovku. Pokud má nějaká ‘data_příkazu’, ta jsou zobrazena v horním jednořádkovém banneru a zůstanou tam až do zavolání následujícího příkazu ‘B’. Tento příkaz nesmí pokračovat na následující řádce. ‘T’ T znamená tutoriál. Příkaz může zpracovávat více řádek a to až do zaplnění obrazovky. Každá řádka příkazu je prostě vytištěna na obrazovku. Příkaz smaže obrazovku pod horním jednořádkovým bannerem. Když je zobrazování hotovo, program čeká na uživatelský vstup. Toho je také využíváno pro tisk položek menu. ‘*’ Hvědička znamená návěstí v souboru. Návěstí může být cílem pro příkazy ‘G’, ‘Y’, ‘N’ nebo ‘F’. Návěstí mohou zahrnovat jakékoliv znaky včetně mezer a jsou jednořádkovým příkazem. Mezery na konci návěstí jsou ignorovány. ‘I’ Tento příkaz zobrazí stručné instrukce k drilovému či rychlostnímu testu. Je dovoleno použít pouze dvou řádek. Narozdíl od příkazu ‘T’ se před pokračováním nečeká na stisk klávesy. Značka by tedy měla být vždy následována cvičením. Maže plochu obrazovky pro cvičení, v tomto ohledu se chová jako dvouřádkové ‘T’. ‘M’ Tento příkaz je nový způsob, jak vytvářet menu (od gtypistu 2.7) Zde je jeho syntax: M: [UP=(LABEL|_EXIT)] "název" :LABEL1 "popis1" :LABEL2 "popis2" ... UP-label označuje návěstí otcovského uzlu, které definuje poslední položku menu (pokud je to _EXIT, pak ,,Konec”, jinak bude poslední položka v menu ,,Zpět” skákat na zadaný uzel). Tento argument je volitelný. Pokud není přítomen, použije se defaultní _EXIT. Název, stejně jako ostatní popis, musí být v uvozovkách (""). Navíc musí mezi UP=XXX a "název" či mezi návěstími a jejich popisem být alespoň jedna mezera. Příklady hledejte v existujících lekcích. ‘D,d’ Tento příkaz se nazývá ,,drill” a je jedním ze dvou typů cvičení. Je to víceřádkový příkaz. Text je zobrazován v každé druhé řádce a uživatel jej opisuje do prostoru mezi nimi. To je důvod, proč nemůžete použít více jak 11 řádek obsahu. Tento typ cvičení by měl být používán pouze pro cvičení prstů (např. jfjfjjf), ale může obsahovat i celá slova a věty, když jsou využívány k procvičování (písmeno, slabika) a nejedná se o opravdové texty. Verze s malým písmenem ‘d’ znamená ,,pouze procvičování”, uživatel nebude muset cvičení opakovat ani pokud udělal příliš mnoho chyb. ‘S,s’ To je druhý typ cvičení: ,,rychlostní test”. Jedná se o víceřádkový příkaz. Zobrazuje svůj obsah na obrazovce a čeká, až jej uživatel přepíše tím samým textem. Proto můžete na jeden rychlostní test použít až 22 řádek. V tomto druhu testu můžete své chyby opravovat, počítadlo ve statistice je ale stále bude počítat jako chyby. Rychlostní testy by měly být používány pro opisování kompletních vět, textů a souborů (např. dopis, texinfo, html či tex soubor). Verze s malým písmenem ‘s’ je rychlostní test ,,pouze k procvičování”, což znamená, že ani uživatel, který udělá příliš mnoho chyb, jej nebude muset opakovat. ‘G’ Toto přinutí gtypist přeskočit na návěstí v ‘datech_příkazu’ a pokračovat ve vyvolávání skriptu odtud. Jde o jednořádkový příkaz. ‘Q’ Tento příkaz vypíše svůj text na stavové řádce a před pokračováním čeká na klávesu nebo . Ostatní znaky jsou ignorovány. Jako vedlejší efekt můžete také stisknout F-klávesu, pokud je potřeba (nyní by již neměl být tento příkaz používán pro vytváření promptu pro menu – použijte raději příkaz M). ‘Y’ Y Je podobné ‘G’, s výjimkou toho, že příkaz skoku je vyvolán pouze pokud odpověď na předchozí otázku ‘Q’ byla . ‘N’ N je podobné ‘G’, s výjimkou toho, že příkaz skoku je vyvolán pouze pokud odpověď na předchozí otázku ‘Q’ byla . ‘K’ _Tento příkaz by již neměl být používán, použijte M_ Váže funkční klávesu na návěstí. Formát dat následujících tento příkaz musí být ‘Fklávesa:návěstí’, kde ‘Fklávesa’ je číslo funkční klávesy mezi 1 a 12 a ‘návěstí’ je místo, kam se přesunout po stisku této klávesy. Hodnota návěstí NULL klávesu znefunkční. Pokud na terminálu nejsou dostupné funkční klávesy, mohou být místo jich použity klávesy <1> až <9> pro , <0> pro , pro a pro . Jinou alternativou pro jsou kombinace: , , , , , , , , , , a . To je také užitečné, pokud jsou funkční klávesy odchytávány jinými programy (například window managery). ‘E’ Tento příkaz je používán pro nastavení nejvyššího procenta chyb dovoleného pro úspěšné absolvování následující lekce (E:%) či pro všechny lekce až do dalšího výskytu E (E:%*). Pokud je nastaveno ‘--error-max/-e’, tak bute tento příkaz platit pouze tehdy, pokud je _přísnější_ než hodnota specifikovaná na příkazové řádce. ‘data_příkazu’ se skládají z hodnoty (mezi 0.0 a 100.0) následované znakem ’%’ (toto je požadováno, aby byly skripty lépe čitelné). Existuje speciální hodnota ‘default’ nebo ‘Default’, která nastavuje maximální procento chyb zpět na defaultní hodnotu. ‘F’ Tento příkaz může být použit k nastavení návěstí (v ‘data_příkazu’), kam bude uživatel muset jít, pokud úspěšně neprojde cvičením. Tento příkaz se většinou vztahuje pouze k následujícímu cvičení, ale pokud na konec ‘dat_příkazu’ vložíte ’*’, můžete jej tak učinit trvale platným. Pokud je návěstí NULL, pak příkaz návěstí resetuje. ‘X’ Tento příkaz přinutí gtypist vyskočit. Je to jednořádkový příkaz. Jakékoliv ‘data_příkazu’ jsou ignorována. Jiný způsob, jakým může dojít k opuštění programu, je když gtypist dojde na konec souboru (takže tam můžete také umístit návěstí a odkazovat na něj příkazem ‘G’) Prohlédněte si malý příklad skriptu, který demonstruje dostupné příkazy (soubor lekce ‘tinydemo.typ’): # Malý příklad B: Demonstrace tutoriálu *:LOOP K:1:QDONE T:Zde je malý příklad skriptu pro lekci. :Lepší příklad můžete nalézt v souboru :demo.typ, který je dodáván s GNU Typist. I:Tady je drilové cvičení: D:asdf ghjkl; I:A tady je zas rychlostní test: S:qwe rt yu iop *:QDONE Q:Stačilo to již? [Y/N] N:LOOP X:  File: gtypist.cs.info, Node: Vytvořte nové lekce, Next: Mód Emacsu, Prev: Příkazy skriptovacího jazyka, Up: Top 6 Vytvořte nové lekce ********************* This section provides guidelines and hints for creating new lessons (or improving existing ones). * Menu: * Ktouch lessons:: Generate lessons from a set of drills * Exercises from fortune:: Create drills/speedtests with text from fortune * Design patterns for lessons:: Hints/Design patterns for lessons  File: gtypist.cs.info, Node: Ktouch lessons, Prev: Exercises from fortune, Up: Vytvořte nové lekce 6.1 Ktouch lessons ================== A very easy way to write lessons is to write them in the format that ‘ktouch’ uses, and then convert it to a gtypist lesson using ‘tools/ktouch2typ.pl’. This will take care of writing “jump-tables”, a menu and a bit more. The ktouch-format consists only of lessons, which are preceded by their names, and separated by blank lines and/or comments (# at the beginning of the line). So the first non-blank, non-comment line in the file is the name of the first lesson, and the first lesson consists of all the lines up to the next comment or blank line. After the separator (comment or blank line) the name of the second lesson follows and so on. This is an example of a three-lesson ktouch file (excerpts from the first three lessons of german.ktouch): # # Deutsche Training-Datei für KTouch # Grundstellung f f f f f f fff fff fff f f f f f f fff fff fff f f f f f f f fff j j j j j j jjj jjj jjj j j j j j j jjj jjj jjj j j j j j j j jjj fff jjj fff jjj jjj fff jjj fff fjf fjf fjf jfj jfj jfj fjf jfjfj Grundstellung fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd kkkff fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jköfd s s s s s s sss sss sss s s s s s s sss sss sss s s s s s s s sss #Zwei wichtige Vokale: e und i e und i asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdfö das dass lös fad dass lös als dass las lös fad dass als dass dass ded ded ded dej dek del deö ded deö del dek dej ded dej dek delde Once you are done, use ‘tools/ktouch2typ.pl’ to convert the file: ‘ktouch2typ.pl lesson.ktouch’ converts ‘lesson.ktouch’ to ‘lesson.typ’. It is important that the input file ends in “.ktouch”, otherwise ‘ktouch2typ.pl’ will skip it. Warning: this will overwrite ‘lesson.typ’ without asking you ! You can customize the number of lines that ‘ktouch2typ.pl’ uses for each drill by modifying the relevant variable in ‘tools/ktouch2typ.pl’. Obviously, the disadvantage of this is that you cannot make use of all of gtypist’s features (but the output file is very readable, so you can edit it to use more of gtypist’s features).  File: gtypist.cs.info, Node: Exercises from fortune, Next: Ktouch lessons, Prev: Design patterns for lessons, Up: Vytvořte nové lekce 6.2 Exercises from fortune ========================== Using ‘gtypist-mode.el’ you can quickly create lessons with text from the program ‘fortune’ (or the emacs-internal ‘yow’ if ‘fortune’ isn’t available, as is usually the case on Windows). Once you installed ‘gtypist-mode.el’ (*note Mód Emacsu::), you can open a file with it “.typ” extension and run ‘C-c C-f’ to create a drill (‘D:’ by default, use ‘C-u’ or ‘C-u C-u’ prefix to change).  File: gtypist.cs.info, Node: Design patterns for lessons, Next: Exercises from fortune, Up: Vytvořte nové lekce 6.3 Design patterns for lessons =============================== 6.3.1 Structure of lesson files ------------------------------- • use mixture of drills and speed tests (this is more fun for the user) • use some “practice-only” exercises (d:/s:) (possibly mixed with “real” exercises) followed by a “final test”. ‘esp.typ’ uses this scheme. 6.3.2 Patterns for exercises ---------------------------- • when introducing a new key, start out by mixing other (known) keys of the same finger in with the new key in the first drill(s). Here is an example (from ‘t.typ’, line 237): I:Use your J-finger for the H key. *:_T_R_L23 D:jjj jhj jjj jhj jjj jhj • use ’word, word.’ repeatedly to practice ,/.  File: gtypist.cs.info, Node: Mód Emacsu, Next: Proměnné prostředí, Prev: Vytvořte nové lekce, Up: Top 7 Mód Emacsu ************ gtypist now comes with an Emacs major-mode which does syntax-highlighting, indentation and has some convenient commands for counting labels, a goto-label-command, inserting properly centered banners, special comments and a bit more. Copy this file from ‘tools/gtypist-mode.el’ to wherever you put your local elisp files (e.g. ‘~/elisp’) and put this in your ‘~/.emacs’ (adapt path!): (autoload 'gtypist-mode "~/elisp/gtypist-mode") or put it in ‘load-path’ (‘make install’ in the sources should take care of this for GNU Emacs, or if you are using the Debian package, it installs it here for you) and use this instead: (autoload 'gtypist-mode "gtypist-mode") *and* add this to your ‘~/.emacs’: (setq auto-mode-alist (cons '("\\.typ\\'" . gtypist-mode) auto-mode-alist)) All this is also mentioned in the README-section of ‘tools/gtypist-mode.el’. Here are the commands along with the keybindings: ‘C-c C-i, M-x gtypist-mode-info’ This shows gtypist’s texinfo-documentation, starting at node “Script file commands” (*note Příkazy skriptovacího jazyka::). With prefix, start at the top-node. ‘C-c M-g, M-x gtypist-mode-goto-label’ Query for a label to go to (with completion). ‘C-c C-l, M-x gtypist-mode-next-label’ This command inserts the next label in a numbered sequence of labels. For example, if you insert *:SERIES1_L1 and hit ‘C-c C-l’ then gtypist-mode will insert *:SERIES1_L2 ‘C-c C-b, M-x gtypist-mode-insert-banner’ This command inserts a centered ‘B:’ command. It’s centered on 66 columns because “gtypist ” is in the right corner (prompts for content). ‘C-c C-r, M-x gtypist-mode-insert-hrule’ Inserts a horizontal rule (comment) consisting of dashes. ‘C-c C-n, M-x gtypist-mode-new-lesson’ Insert the comments (header) and a label to start a new lesson (prompts for name). ‘C-c C-f, M-x gtypist-mode-fortune-to-drill’ Insert a drill (‘D:’) with text from ‘fortune’ (or ‘yow’ if ‘fortune’ isn’t available). Use ‘C-u’ prefix to get ‘S:’, and ‘C-u C-u’ to get ‘d:’. Run ‘C-h m’ for a complete list of commands and their keybindings. If you find bugs or if you think there’s something else this mode could do, please write to .  File: gtypist.cs.info, Node: Proměnné prostředí, Next: Chyby a opominutí, Prev: Mód Emacsu, Up: Top 7.1 Proměnné prostředí ====================== GNU Typist používá tyto proměnné prostředí: ‘LANG’ GNU Typist nabízí Native Language Support (NLS) s podporou knihovny gettext. To znamená, že pokud to váš systém podoruje, můžete si vybrat jazyk, ve kterém chcete zobrazovat hlášky gtypistu. Momentálně jsou k dispozici angličtina, španělština, němčina, finština a čeština. K použití konkrétní NLS je třeba nastavit proměnnou prostředí LANG na odpovídající LL_CC kombinaci, kde LL je dvouznakový kód jazyka podle ISO 639 a CC je dvoupísmenný znak země podle ISO 3166 (např. es_ES pro Španělsko nebo de_DE pro Německo). Na některých systémech budete muset asi nastavit na tu samou hodnotu i proměnnou LANGUAGE. Pokud chcete přeložit zprávy do nějakého jiného jazyka, nebo pokud chcete něco opravit, ozvěte se prosím na . ‘GTYPIST_PATH’ Seznam adresářů, kde bude program hledovat skriptovací soubory. Dodržuje standardní způsob specifikace adresářů, to znamená seznam adresářů oddělených znaky ’:’. GNU Typist se při spuštění nejprve pokusí skript spustit z aktuálního adresáře a poté bude hledat v adresářích specifikovaných proměnnou ‘GTYPIST_PATH’. Nakonec se podívá do adresáře vytvořeného při instalaci. (Např. ‘/usr/local/share/gtypist’ nebo ‘/usr/share/gtypist’). ‘TERM’ Tuto proměnnou používá knihovna curses k určení obrazovky. ‘TERMINFO’ Tento parametr budete muset změnit, pokud jsou adresáře s ‘terminfo’ rozdílné na systému, kde byl gtypist kompilován a na systému, kde má fungovat. Například na starších distribucích Slackware je terminfo umístěno v ‘/usr/lib/terminfo’. Na RedHat Linuxu je v ‘/usr/share/terminfo’. Pokud si program stěžuje na typ terminálu a má správně nastavenou hodnotu ‘TERM’, zkuste toto.  File: gtypist.cs.info, Node: Chyby a opominutí, Next: Historie, Prev: Proměnné prostředí, Up: Top 7.2 Chyby a opominutí ===================== GNU Typist se nijak nesnaží minimalizovat výstup na terminál. Speciálně blikající kurzor může působit hodně pohybu. Pokud by to byl problém, použijte kurzor terminálu. V rychlostních testech není možné používat backspace a delete za začátkem nové řádky nebo po klávese TAB. To je kvůli zjednodušení aktualizace obrazovky. Barevné módy zřejmě nepracují dobře s UnixWare. Někdy nejsou správně zobrazeny převrácené barvy. To se týká některých typů terminálů a xterminálů.  File: gtypist.cs.info, Node: Historie, Next: Kopírování tohoto manuálu, Prev: Chyby a opominutí, Up: Top Appendix A Historie GNU Typist ****************************** • Původní program byl napsán pro VAX/VMS BASIC někým z Harris Corp (Ft. Lauderdale, FL). • D. Jason Penney jej přepsal pro Microsoft BASICA • D. Jason Penney jej přepsal pro C s knihovnou curses • Simon Baldwin přepsal verzi D. Jason Penneyho, jeho vylepšení jsou popsána v souboru NEWS (mezi verzí 2.2 a 2.2b). On je také držitelem copyrightu na GNU Typist (gtypist je distribuovaný pod podmínkami GNU GPL). Simon také napsal verzi Typistu v Javě, kterou původně nazýval JTypist, ale nyní se jmenuje Typist: • Since 1997, Ben Armstrong pomohl opravováním chyb a udržování balíčku pro Debian (podívejte se na ). • V roce 2000 se Vladimir Támara a Igor Támara stali maintainery verze v C. Před listopadem 2000 byl GNU Typist spravován jako součást projektu Structio. • Listopad 2000, program byl přijat do GNU! Byl přejmenován na GNU Typist (také gtypist). • V květnu 2001 se stal novým maintainerem Michael Opdenacker , který se také naučil psát na klávesnici s gtypistem. Vývoj projektu nyní probíhá na . • V červnu 2001 se k projektu připojil Felix Natter a výrazně mu přispěl portováním lekcí z jiných tutoriálů, vylepšením pomocných utilit, nových možností tutoriálů a módem pro Emacs.  File: gtypist.cs.info, Node: Kopírování tohoto manuálu, Prev: Historie, Up: Top Appendix B GNU Free Documentation License ***************************************** Version 1.2, November 2002 Copyright © 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text. A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles. You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.” 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with…Texts.” line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  Tag Table: Node: Top935 Node: Distribuce3161 Node: Kopírování4151 Node: Úvod41897 Node: Spouštění44811 Node: Dostupné lekce48795 Node: Používání typefortune50464 Node: Příkazy skriptovacího jazyka51461 Node: Vytvořte nové lekce60063 Node: Ktouch lessons60560 Node: Exercises from fortune62969 Node: Design patterns for lessons63602 Node: Mód Emacsu64521 Node: Proměnné prostředí67112 Node: Chyby a opominutí69294 Node: Historie69983 Node: Kopírování tohoto manuálu71876  End Tag Table  Local Variables: coding: utf-8 End: gtypist-2.9.5/doc/gtypist.cs.html0000644000175000017500000030342412372333423013725 00000000000000 Příručka pro GTypist

Příručka pro GTypist

Table of Contents

GNU Typist - psaní všemi deseti

Toto je manuál pro GNU Typist (verze 2.9.5, 18 August 2013), program určený k výuce psaní na klávesnici pro několik jazyků a různé klávesové rozložení.

Copyright © 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.

GNU Typist je interaktivní výukový program, který vám pomůže osvojit si principy správného psaní na klávesnici všemi deseti prsty. Obsahuje několik lekcí pro různé typy klávesnic a různé jazyky. (Mezi nimi nechybí ani čeština.) Lekce pro gtypist jsou napsány ve snadno pochopitelném skriptovacím jazyku, takže je mohou uživatelé modifkovat či vytvářet nové. Pokud zadáte parametr cs.typ, spustíte lekce v češtině zaměřené na českou klávesnici.


Distribuce

GNU Typist (či gtypist) je svobodný software; to znamená, že jej může za určitých podmínek každý svobodně používat a dále redistribuovat. Přesné podmínky můžete nalézt v GNU General Public Lincense, kterou jste obdrželi s tímto programem a která následuje tuto sekci.

GNU Typist můžete získat od přítele nebo z Internetu:

Hlavní distribuční web:

ftp://ftp.gnu.org/gnu/gtypist/

Domovská stránka

http://www.gnu.org/software/gtypist/gtypist.cs.html

On-line manuál (aktualizace mezi vydáním jednotlivých verzí)

http://www.gnu.org/software/gtypist/doc/

Stránka vývojářů (CVS repozitář, úlohy, podpora...)

http://savannah.gnu.org/projects/gtypist/

Stažení GNU Typist (zdrojové kódy, binární verze, tutoriály)

http://gtypist.free.fr/

Obrázky

http://gtypist.free.fr/screenshots/


GNU GENERAL PUBLIC LICENSE

Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. http://fsf.org/

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for software and other kinds of works.

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program—to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.

To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.

For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.

Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS

  1. Definitions.

    “This License” refers to version 3 of the GNU General Public License.

    “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

    “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

    To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

    A “covered work” means either the unmodified Program or a work based on the Program.

    To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

    To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

    An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

  2. Source Code.

    The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

    A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

    The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

    The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

    The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

    The Corresponding Source for a work in source code form is that same work.

  3. Basic Permissions.

    All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

    You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

    Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

  4. Protecting Users’ Legal Rights From Anti-Circumvention Law.

    No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

    When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures.

  5. Conveying Verbatim Copies.

    You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

    You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

  6. Conveying Modified Source Versions.

    You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

    1. The work must carry prominent notices stating that you modified it, and giving a relevant date.
    2. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
    3. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
    4. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.

    A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

  7. Conveying Non-Source Forms.

    You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

    1. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
    2. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
    3. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
    4. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
    5. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.

    A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

    A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

    “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

    If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

    The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

    Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

  8. Additional Terms.

    “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

    When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

    Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

    1. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
    2. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
    3. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
    4. Limiting the use for publicity purposes of names of licensors or authors of the material; or
    5. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
    6. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.

    All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

    If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

    Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

  9. Termination.

    You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

    However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

    Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

    Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

  10. Acceptance Not Required for Having Copies.

    You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

  11. Automatic Licensing of Downstream Recipients.

    Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

    An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

    You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

  12. Patents.

    A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”.

    A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

    Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

    In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

    If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

    If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

    A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

    Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

  13. No Surrender of Others’ Freedom.

    If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

  14. Use with the GNU Affero General Public License.

    Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

  15. Revised Versions of this License.

    The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

    Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

    If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

    Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

  16. Disclaimer of Warranty.

    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  17. Limitation of Liability.

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

  18. Interpretation of Sections 15 and 16.

    If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.

one line to give the program's name and a brief idea of what it does.
Copyright (C) year name of author

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see http://www.gnu.org/licenses/.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:

program Copyright (C) year name of author
This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
This is free software, and you are welcome to redistribute it
under certain conditions; type ‘show c’ for details.

The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”.

You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see http://www.gnu.org/licenses/.

The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read http://www.gnu.org/philosophy/why-not-lgpl.html.


1 Úvod

GNU Typist je interaktivní program pro výuku psaní na klávesnici všemi deseti prsty. Obsahuje výukové lekce, cvičení i rychlostní testy. Program je určen pro používání na terminálech bez grafiky. Byl zkompilován na GNU/Linuxu, Unixech (Aix, OpenBSD) a také na DOS/Windows (DOS 6.22, Windows 98, Windows NT).

Program načítá lekce vytvořené ve snadno pochopitelném skritpovacím jazyku. Je distribuován spolu s několika dobrými a kompletními lekcemi, které můžete používat, modifikovat, nebo psát nové. (see Vytvořte nové lekce see Příkazy skriptovacího jazyka).

Pokud nespecifikujete příslušný soubor lekcí na příkazové řádce, bude použit gtypist.typ. (Podrobnosti o cestě k souborům naleznete v sekci see Proměnné prostředí).

Na horní řádce obrazovky naleznete banner programu. Na nejspodnější řádce se potom nalézají různé zprávy, dotazy a další informace o stavu. Řádky mezi tím jsou používány pro tutoriály, cvičení a rychlostní testy.

V programu jsou dva typy cvičení: drilové a rychlostní testy.

V drilových vám gtypist zobrazí text v každé druhé řádce obrazovky a počká, až uživatel správně opíše text do zbývajících prázdných řádek. Chybně zadaná písmena jsou indikována obráceným ^, nebo >, pokud je špatně zadaným znakem konec řádky. Na konci cvičení program spočítá skutečnou a užitečnou rychlost v jednotkách slov za minutu. Pokud jste udělali příliš mnoho chyb, cvičení se spustí znova.

Není dovoleno zpětně opravovat špatně zadané znaky.

V rychlostních testech zobrazuje gtypist text na obrazovce a čeká, až ho uživatel přepíše tím samým. Chyby se zobrazují a na konci testu se spočítá opravdová a užitečná rychlost ve WPM (words per minute – slova za minutu). Pokud se vyskytlo příliš mnoho chyb, test se spustí znovu. Opravování chyb je povoleno, ale takto opravené chyby budou stejně započítány do hodnocení.

Jestli jste již udělali příliš mnoho chyb, můžete použít ESC a test se spustí znovu. Kdykoliv dokončíte lekci, butete dotázáni, zda ji chcete opakovat.

GNU Typist obsahuje i cvičení zaměřené pouze na procvičování (jak drilová cvičení, tak rychlostní testy), která možná nebudete muset vůbec opakovat. Nechceme ale říkat, zda se to týká zrovna vás, takže se stejně budete muset snažit, jak nejlépe umíte ;-)

Ve výsledcích rychlosti znamená jedno slovo pět znaků, takže hrubé WPM je počet znaků v testovací oblasti dělené pěti a znovu dělené počtem uplynulých minut. Co se týče faktoru chyby, který WPM ovlivňuje, každá chyba je počítaná za špatné slovo.


2 Spouštění

Syntaxe pro spuštění GNU Typist je:

gtypist [ parametry... ] [ script_file ]

Podporované parametry jsou popsány níže (pozor, dlouhé tvary nejsou v DOSu podporovány).

-e, --error-max

Udává maximální procento chybovosti při zadávání textu. Defaultní hodnota je 3,0. Musí být mezi 0,0 a 100,0. Existuje i příkaz skriptovacího jazyka (see Příkazy skriptovacího jazyka), který to může změnit, pokud je zadané číslo menší. Pro procvičovací lekce je tato hodnota ale ignorována.

-n, --notimer

Normálně GNU Typist zobrazuje rychlost ve WPM (slova za minutu) jak po drilových cvičeních, tak po rychlostních zkouškách. Lekce jsou ale zřejmě napsané pro program, který zobrazoval rychlost pouze při rychlostních testech. Abyste gtypist přinutili k takovémuto chování odpovídajícímu lekcím, tedy aby nezobrazoval počet slov za minutu u drilových testů, použijte tento parametr.

-t, --term-cursor

gtypist si vytváří vlastní obdélníčkový kurzor, aby pomohl uživateli rozlišit mezi kurzorem a označením chyb v inverzních barvách. Tímto parametrem takové chování potlačíme a donutíme program používat standardní kurzor terminálu.

-f, --curs-flash

Hodnota tohoto parametru nastavuje blikání obdélníkového kurzoru v desetinách sekund. Hodnota 0 znamená, že kurzor nebude blikat. Standardní hodnota je 10, maximální 512. Toto je ignorováno, pokud bylo nastaveno -t nebo –term-cursor.

-c, --colo[u]rs

Normálně používá gtypist pouze normální a převrácené monochromatické barvy. Tímto parametrem můžete nastavit barvu popředí a pozadí na terminálech, které podporují barevný výstup. Barvy jsou specifikovány jako dvě čísla mezi 0 a 7. Kódy barev od 0 do 7 znamenají barvu černou, červenou, zelenou, žlutou, modrou, magenta a modrozelenou a bílou. Defalutní nastavení je 7,0 – bílá na černém pozadí. Toto nastavení je ignorováno pokud terminál nepodporuje barvy.

-s, --silent

Kdykoliv narazí gtypist na chybu, zapípá. Tímto nastavením můžete zvukový signál potlačit.

-q, --quiet

To samé jako -s, –silent.

-w, --wpmode

Tímto donutíte gtypist určitým způsobem napodobovat textový procesor, kdykoliv spouští nějaké cvičení. Mezeru na konci řádku bude brát jako korektní znak a přejde na další řádku. Pokud stisknete na konci řádky ENTER, přesune vás na následující odstavec. Vícenádobné mezery stlačí na jedinou a bude přeskakovat rozdělovací čárky na konci řádek.

-l, --start-label

Tento parametr udává návěstí ve skriptovém souboru, kde gtyping začne (pro informace o návěstí viz níže skriptovací jazyk). Pokud není start_label definováno, začne se od začátku souboru.

-k, --no-skip

Zakáže uživateli přeskakovat lekce nebo z nich utíkat pomocí ESC ESC.

Pokud chcete spouštět gtypist ve svém rodném jazyce, musíte také vhodně nastavit proměnnou prostředí LANG See Proměnné prostředí.

Příklady:

Ke spuštění standardního anglického souboru lekcí gtypist.typ:
gtypist

Ke spuštění českých lekcí:
gtypist cs.typ

Donutíme gtypist, aby hledal lekci bar.typ v nestandardním adresáři /home/foo:
export GTYPIST_PATH="/home/foo" gtypist bar.typ

Abychom mohli spustit lekci test.typ v adresáři /tmp, a začít na návěstí TEST1, v tichém módu, za použití standardního kurzoru terminálu, zadáme toto:
gtypist -t -q -l TEST1 /tmp/test.typ


3 Dostupné lekce

S GNU Typist jsou dodávány tyto lekce :

cs.typ

Soubor QWERTY kurzů v češtině (+ numerická klávesnice)

q.typ

Rychlý QWERTY kurz v angličtině

r.typ

Dlouhý QWERTY kurz v angličtině

t.typ

QWERTY výuka v angličtině

v.typ

Ještě další QWERTY v angličtině

w.typ

QWERTY opakování v angličtině

d.typ

Výuka klávesnice Dvorak v angličtině

m.typ

Drilová cvičení v angličtině

s.typ

Rychlostní testy v angličtině

n.typ

Numerická klávesnice v angličtině

gtypist.typ

Soubor všech předchozích anglických lekcí

esp.typ

Kurz QWERTY ve španělštině

kt*.typ

Toto jsou standardní lekce z Ktouch 1.0 (http://ktouch.sourceforge.net), které byly do formátu gtypistu zkonvertovány s použitím tools/ktouch2typ.pl.

Tyto soubory jsou ktde.typ (german.ktouch), kten.typ (english.ktouch), ktfr.typ (french.ktouch), ktlecten.typ (lecture_en.ktouch), ktno.typ (norwegian.ktouch) and ktnumber.typ (number.ktouch).

ttde.typ

To je německá lekce pro tipptrainer (http://www.pingos.schulnetz.org/tipptrainer), která byla zkonvertována s pomocí tools/tt2typ.pl.

Pokud v těchto lekcích najdete chyby, pokud nějakou upravíte, nebo pokud napíšete lekci novou, prosím vydejte ji pod svobodnou licencí a řekněte nám o tom – můžete nám napsat mail na bug-gtypist@gnu.org.


4 Používání typefortune

‘typefortune’ vám dovolí cvičit s textem z ‘fortune’.

SYNTAX: typefortune [-dslh] [-n počet] [-o <parametry_gtp>]

-d

Použije D: místo S:.

-s

Spustí fortune s -s.

-l

Spustí fortune s -l.

-n <počet>

Cvičení <počet> fortunes.

-o <gtypist_options>

Předej gtypistu nastavení ve formě option (nastavení přepínače, např. -o word-processor), option,value (nastavení hodnoty, např. -o e,1.0) kde option je jméno nastavení (zkrácené či dlouhé) s tím, že všechny úvodní pomlčky jsou odstraněny. Pokud uvádíte více než jeden parametr, musíte je uvést v apostrofech: typefortune -n 3 -o 'silent e,5 word-processor'.


5 Příkazy skriptovacího jazyka

GNU Typist načítá data pro jednotlivé lekce ze skriptového souboru. Každá řádka s výjimkou komentářů a prázdných řádek má následující formát

znak_příkazu : data_příkazu

Znak příkazu je jeden znak, který určuje, co bude gtypist dělat, a data_příkazu jsou data, se kterými bude operovat. Pokud je znak_příkazu mezera, znamená to, že řádka je pokračováním předchozího příkazu. Oddělovač ’:’ musí být vždy v druhém sloupci řádky.

Řádky komentářů jsou řádky začínající znakem ’#’ a stejně jako prázdné řádky jsou ignorovány. Komentáře mohou mít jakýkoliv formát, jediným požadavkem je, aby začínaly ’#’. Všechny ostatní řádky musí mít výše uvedený formát.

Abyste se seznámili se základy, měli byste si přečíst See Úvod.

Následující výčet je seznamem platných hodnot znaků_příkazu:

B

Tento příkaz smaže celou obrazovku. Pokud má nějaká data_příkazu, ta jsou zobrazena v horním jednořádkovém banneru a zůstanou tam až do zavolání následujícího příkazu B. Tento příkaz nesmí pokračovat na následující řádce.

T

T znamená tutoriál. Příkaz může zpracovávat více řádek a to až do zaplnění obrazovky. Každá řádka příkazu je prostě vytištěna na obrazovku. Příkaz smaže obrazovku pod horním jednořádkovým bannerem. Když je zobrazování hotovo, program čeká na uživatelský vstup. Toho je také využíváno pro tisk položek menu.

*

Hvědička znamená návěstí v souboru. Návěstí může být cílem pro příkazy G, Y, N nebo F. Návěstí mohou zahrnovat jakékoliv znaky včetně mezer a jsou jednořádkovým příkazem. Mezery na konci návěstí jsou ignorovány.

I

Tento příkaz zobrazí stručné instrukce k drilovému či rychlostnímu testu. Je dovoleno použít pouze dvou řádek. Narozdíl od příkazu T se před pokračováním nečeká na stisk klávesy. Značka by tedy měla být vždy následována cvičením. Maže plochu obrazovky pro cvičení, v tomto ohledu se chová jako dvouřádkové T.

M

Tento příkaz je nový způsob, jak vytvářet menu (od gtypistu 2.7) Zde je jeho syntax:

M: [UP=(LABEL|_EXIT)] "název"
 :LABEL1 "popis1"
 :LABEL2 "popis2"
 ...

UP-label označuje návěstí otcovského uzlu, které definuje poslední položku menu (pokud je to _EXIT, pak ,,Konec”, jinak bude poslední položka v menu ,,Zpět” skákat na zadaný uzel). Tento argument je volitelný. Pokud není přítomen, použije se defaultní _EXIT.

Název, stejně jako ostatní popis, musí být v uvozovkách (""). Navíc musí mezi UP=XXX a "název" či mezi návěstími a jejich popisem být alespoň jedna mezera.

Příklady hledejte v existujících lekcích.

D,d

Tento příkaz se nazývá ,,drill” a je jedním ze dvou typů cvičení.

Je to víceřádkový příkaz. Text je zobrazován v každé druhé řádce a uživatel jej opisuje do prostoru mezi nimi. To je důvod, proč nemůžete použít více jak 11 řádek obsahu.

Tento typ cvičení by měl být používán pouze pro cvičení prstů (např. jfjfjjf), ale může obsahovat i celá slova a věty, když jsou využívány k procvičování (písmeno, slabika) a nejedná se o opravdové texty.

Verze s malým písmenem d znamená ,,pouze procvičování”, uživatel nebude muset cvičení opakovat ani pokud udělal příliš mnoho chyb.

S,s

To je druhý typ cvičení: ,,rychlostní test”.

Jedná se o víceřádkový příkaz. Zobrazuje svůj obsah na obrazovce a čeká, až jej uživatel přepíše tím samým textem. Proto můžete na jeden rychlostní test použít až 22 řádek. V tomto druhu testu můžete své chyby opravovat, počítadlo ve statistice je ale stále bude počítat jako chyby.

Rychlostní testy by měly být používány pro opisování kompletních vět, textů a souborů (např. dopis, texinfo, html či tex soubor).

Verze s malým písmenem s je rychlostní test ,,pouze k procvičování”, což znamená, že ani uživatel, který udělá příliš mnoho chyb, jej nebude muset opakovat.

G

Toto přinutí gtypist přeskočit na návěstí v datech_příkazu a pokračovat ve vyvolávání skriptu odtud. Jde o jednořádkový příkaz.

Q

Tento příkaz vypíše svůj text na stavové řádce a před pokračováním čeká na klávesu Y nebo N. Ostatní znaky jsou ignorovány.

Jako vedlejší efekt můžete také stisknout F-klávesu, pokud je potřeba (nyní by již neměl být tento příkaz používán pro vytváření promptu pro menu – použijte raději příkaz M).

Y

Y Je podobné G, s výjimkou toho, že příkaz skoku je vyvolán pouze pokud odpověď na předchozí otázku Q byla Y.

N

N je podobné G, s výjimkou toho, že příkaz skoku je vyvolán pouze pokud odpověď na předchozí otázku Q byla N.

K

Tento příkaz by již neměl být používán, použijte M Váže funkční klávesu na návěstí. Formát dat následujících tento příkaz musí být Fklávesa:návěstí, kde Fklávesa je číslo funkční klávesy mezi 1 a 12 a návěstí je místo, kam se přesunout po stisku této klávesy. Hodnota návěstí NULL klávesu znefunkční.

Pokud na terminálu nejsou dostupné funkční klávesy, mohou být místo jich použity klávesy 19 pro F1F9, 0 pro F10, A pro F11 a S pro F12.

Jinou alternativou pro F1F12 jsou kombinace: Ctrl-Q, Ctrl-W, Ctrl-E, Ctrl-R, Ctrl-T, Ctrl-Z, Ctrl-U, Ctrl-I, Ctrl-O, Ctrl-P, Ctrl-A a Ctrl-S.

To je také užitečné, pokud jsou funkční klávesy odchytávány jinými programy (například window managery).

E

Tento příkaz je používán pro nastavení nejvyššího procenta chyb dovoleného pro úspěšné absolvování následující lekce (E:<value>%) či pro všechny lekce až do dalšího výskytu E (E:<value>%*).

Pokud je nastaveno --error-max/-e, tak bute tento příkaz platit pouze tehdy, pokud je přísnější než hodnota specifikovaná na příkazové řádce.

data_příkazu se skládají z hodnoty (mezi 0.0 a 100.0) následované znakem ’%’ (toto je požadováno, aby byly skripty lépe čitelné). Existuje speciální hodnota default nebo Default, která nastavuje maximální procento chyb zpět na defaultní hodnotu.

F

Tento příkaz může být použit k nastavení návěstí (v data_příkazu), kam bude uživatel muset jít, pokud úspěšně neprojde cvičením.

Tento příkaz se většinou vztahuje pouze k následujícímu cvičení, ale pokud na konec dat_příkazu vložíte ’*’, můžete jej tak učinit trvale platným.

Pokud je návěstí NULL, pak příkaz návěstí resetuje.

X

Tento příkaz přinutí gtypist vyskočit. Je to jednořádkový příkaz. Jakékoliv data_příkazu jsou ignorována. Jiný způsob, jakým může dojít k opuštění programu, je když gtypist dojde na konec souboru (takže tam můžete také umístit návěstí a odkazovat na něj příkazem G)

Prohlédněte si malý příklad skriptu, který demonstruje dostupné příkazy (soubor lekce tinydemo.typ):

# Malý příklad
B: Demonstrace tutoriálu
*:LOOP
K:1:QDONE
T:Zde je malý příklad skriptu pro lekci.
 :Lepší příklad můžete nalézt v souboru
 :demo.typ, který je dodáván s GNU Typist.
I:Tady je drilové cvičení: 
D:asdf ghjkl;
I:A tady je zas rychlostní test: 
S:qwe rt yu iop
*:QDONE
Q:Stačilo to již? [Y/N] 
N:LOOP 
X:

6 Vytvořte nové lekce

This section provides guidelines and hints for creating new lessons (or improving existing ones).


6.1 Ktouch lessons

A very easy way to write lessons is to write them in the format that ktouch uses, and then convert it to a gtypist lesson using tools/ktouch2typ.pl. This will take care of writing “jump-tables”, a menu and a bit more.

The ktouch-format consists only of lessons, which are preceded by their names, and separated by blank lines and/or comments (# at the beginning of the line). So the first non-blank, non-comment line in the file is the name of the first lesson, and the first lesson consists of all the lines up to the next comment or blank line. After the separator (comment or blank line) the name of the second lesson follows and so on.

This is an example of a three-lesson ktouch file (excerpts from the first three lessons of german.ktouch):

#
# Deutsche Training-Datei für KTouch
#

Grundstellung
f f f f f f fff fff fff f f f f f f fff fff fff f f f f f f f fff
j j j j j j jjj jjj jjj j j j j j j jjj jjj jjj j j j j j j j jjj
fff jjj fff jjj jjj fff jjj fff fjf fjf fjf jfj jfj jfj fjf jfjfj

Grundstellung
fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd kkkff
fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jköfd
s s s s s s sss sss sss s s s s s s sss sss sss s s s s s s s sss

#Zwei wichtige Vokale: e und i
e und i
asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdfö
das dass lös fad dass lös als dass las lös fad dass als dass dass
ded ded ded dej dek del deö ded deö del dek dej ded dej dek delde

Once you are done, use tools/ktouch2typ.pl to convert the file: ‘ktouch2typ.pl lesson.ktouch’ converts lesson.ktouch to lesson.typ. It is important that the input file ends in “.ktouch”, otherwise ktouch2typ.pl will skip it. Warning: this will overwrite lesson.typ without asking you !

You can customize the number of lines that ktouch2typ.pl uses for each drill by modifying the relevant variable in tools/ktouch2typ.pl.

Obviously, the disadvantage of this is that you cannot make use of all of gtypist’s features (but the output file is very readable, so you can edit it to use more of gtypist’s features).


6.2 Exercises from fortune

Using gtypist-mode.el you can quickly create lessons with text from the program fortune (or the emacs-internal yow if fortune isn’t available, as is usually the case on Windows).

Once you installed gtypist-mode.el (see Mód Emacsu), you can open a file with it “.typ” extension and run C-c C-f to create a drill (D: by default, use C-u or C-u C-u prefix to change).


6.3 Design patterns for lessons

6.3.1 Structure of lesson files

  • use mixture of drills and speed tests (this is more fun for the user)
  • use some “practice-only” exercises (d:/s:) (possibly mixed with “real” exercises) followed by a “final test”. esp.typ uses this scheme.

6.3.2 Patterns for exercises

  • when introducing a new key, start out by mixing other (known) keys of the same finger in with the new key in the first drill(s). Here is an example (from t.typ, line 237):
    I:Use your J-finger for the H key.
    *:_T_R_L23
    D:jjj jhj jjj jhj jjj jhj
    
  • use ’word, word.’ repeatedly to practice ,/.

7 Mód Emacsu

gtypist now comes with an Emacs major-mode which does syntax-highlighting, indentation and has some convenient commands for counting labels, a goto-label-command, inserting properly centered banners, special comments and a bit more.

Copy this file from tools/gtypist-mode.el to wherever you put your local elisp files (e.g. ~/elisp) and put this in your ~/.emacs (adapt path!):

(autoload 'gtypist-mode "~/elisp/gtypist-mode")

or put it in load-path (‘make install’ in the sources should take care of this for GNU Emacs, or if you are using the Debian package, it installs it here for you) and use this instead:

(autoload 'gtypist-mode "gtypist-mode")

and add this to your ~/.emacs:

(setq auto-mode-alist       
      (cons '("\\.typ\\'" . gtypist-mode) auto-mode-alist))

All this is also mentioned in the README-section of tools/gtypist-mode.el.

Here are the commands along with the keybindings:

C-c C-i, M-x gtypist-mode-info

This shows gtypist’s texinfo-documentation, starting at node “Script file commands” (see Příkazy skriptovacího jazyka). With prefix, start at the top-node.

C-c M-g, M-x gtypist-mode-goto-label

Query for a label to go to (with completion).

C-c C-l, M-x gtypist-mode-next-label

This command inserts the next label in a numbered sequence of labels. For example, if you insert

*:SERIES1_L1

and hit C-c C-l then gtypist-mode will insert

*:SERIES1_L2
C-c C-b, M-x gtypist-mode-insert-banner

This command inserts a centered B: command. It’s centered on 66 columns because “gtypist <version>” is in the right corner (prompts for content).

C-c C-r, M-x gtypist-mode-insert-hrule

Inserts a horizontal rule (comment) consisting of dashes.

C-c C-n, M-x gtypist-mode-new-lesson

Insert the comments (header) and a label to start a new lesson (prompts for name).

C-c C-f, M-x gtypist-mode-fortune-to-drill

Insert a drill (D:) with text from fortune (or yow if fortune isn’t available). Use C-u prefix to get S:, and C-u C-u to get d:.

Run C-h m for a complete list of commands and their keybindings.

If you find bugs or if you think there’s something else this mode could do, please write to bug-gtypist@gnu.org.


7.1 Proměnné prostředí

GNU Typist používá tyto proměnné prostředí:

LANG

GNU Typist nabízí Native Language Support (NLS) s podporou knihovny gettext. To znamená, že pokud to váš systém podoruje, můžete si vybrat jazyk, ve kterém chcete zobrazovat hlášky gtypistu. Momentálně jsou k dispozici angličtina, španělština, němčina, finština a čeština. K použití konkrétní NLS je třeba nastavit proměnnou prostředí LANG na odpovídající LL_CC kombinaci, kde LL je dvouznakový kód jazyka podle ISO 639 a CC je dvoupísmenný znak země podle ISO 3166 (např. es_ES pro Španělsko nebo de_DE pro Německo). Na některých systémech budete muset asi nastavit na tu samou hodnotu i proměnnou LANGUAGE.

Pokud chcete přeložit zprávy do nějakého jiného jazyka, nebo pokud chcete něco opravit, ozvěte se prosím na bug-gtypist@gnu.org.

GTYPIST_PATH

Seznam adresářů, kde bude program hledovat skriptovací soubory. Dodržuje standardní způsob specifikace adresářů, to znamená seznam adresářů oddělených znaky ’:’. GNU Typist se při spuštění nejprve pokusí skript spustit z aktuálního adresáře a poté bude hledat v adresářích specifikovaných proměnnou GTYPIST_PATH. Nakonec se podívá do adresáře vytvořeného při instalaci. (Např. /usr/local/share/gtypist nebo /usr/share/gtypist).

TERM

Tuto proměnnou používá knihovna curses k určení obrazovky.

TERMINFO

Tento parametr budete muset změnit, pokud jsou adresáře s terminfo rozdílné na systému, kde byl gtypist kompilován a na systému, kde má fungovat. Například na starších distribucích Slackware je terminfo umístěno v /usr/lib/terminfo. Na RedHat Linuxu je v /usr/share/terminfo. Pokud si program stěžuje na typ terminálu a má správně nastavenou hodnotu TERM, zkuste toto.


7.2 Chyby a opominutí

GNU Typist se nijak nesnaží minimalizovat výstup na terminál. Speciálně blikající kurzor může působit hodně pohybu. Pokud by to byl problém, použijte kurzor terminálu.

V rychlostních testech není možné používat backspace a delete za začátkem nové řádky nebo po klávese TAB. To je kvůli zjednodušení aktualizace obrazovky.

Barevné módy zřejmě nepracují dobře s UnixWare. Někdy nejsou správně zobrazeny převrácené barvy. To se týká některých typů terminálů a xterminálů.


Appendix A Historie GNU Typist

  • Původní program byl napsán pro VAX/VMS BASIC někým z Harris Corp (Ft. Lauderdale, FL).
  • D. Jason Penney penneyj@slc.com jej přepsal pro Microsoft BASICA
  • D. Jason Penney penneyj@slc.com jej přepsal pro C s knihovnou curses
  • Simon Baldwin simonb@sco.com přepsal verzi D. Jason Penneyho, jeho vylepšení jsou popsána v souboru NEWS (mezi verzí 2.2 a 2.2b). On je také držitelem copyrightu na GNU Typist (gtypist je distribuovaný pod podmínkami GNU GPL). Simon také napsal verzi Typistu v Javě, kterou původně nazýval JTypist, ale nyní se jmenuje Typist: http://www.geocities.com/simon_baldwin/typist/
  • Since 1997, Ben Armstrong synrg@sanctuary.nslug.ns.ca pomohl opravováním chyb a udržování balíčku pro Debian (podívejte se na http://packages.debian.org/gtypist).
  • V roce 2000 se Vladimir Támara vtamara@users.sourceforge.net a Igor Támara ikks@users.sourceforge.net stali maintainery verze v C. Před listopadem 2000 byl GNU Typist spravován jako součást projektu Structio.
  • Listopad 2000, program byl přijat do GNU! Byl přejmenován na GNU Typist (také gtypist).
  • V květnu 2001 se stal novým maintainerem Michael Opdenacker michaelo@gnu.org, který se také naučil psát na klávesnici s gtypistem. Vývoj projektu nyní probíhá na http://savannah.gnu.org/projects/gtypist/.
  • V červnu 2001 se k projektu připojil Felix Natter fnatter@gmx.net a výrazně mu přispěl portováním lekcí z jiných tutoriálů, vylepšením pomocných utilit, nových možností tutoriálů a módem pro Emacs.

Appendix B GNU Free Documentation License

Version 1.2, November 2002
Copyright © 2000,2001,2002 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
  1. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

  2. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

    A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

    The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

    A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”.

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

    The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

    A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition.

    The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

  3. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

  4. COPYING IN QUANTITY

    If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

  5. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
    4. Preserve all the copyright notices of the Document.
    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
    8. Include an unaltered copy of this License.
    9. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
    11. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
    13. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version.
    14. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section.
    15. Preserve any Warranty Disclaimers.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

    You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

  6. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.”

  7. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

  8. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

  9. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

    If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

  10. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

  11. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

  Copyright (C)  year  your name.
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
  Texts.  A copy of the license is included in the section entitled ``GNU
  Free Documentation License''.

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with…Texts.” line with this:

    with the Invariant Sections being list their titles, with
    the Front-Cover Texts being list, and with the Back-Cover Texts
    being list.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


gtypist-2.9.5/doc/stamp-vti0000644000175000017500000000014112372333404012564 00000000000000@set UPDATED 18 August 2013 @set UPDATED-MONTH August 2013 @set EDITION 2.9.5 @set VERSION 2.9.5 gtypist-2.9.5/doc/gtypist.texi0000644000175000017500000012105312204155736013325 00000000000000^\input texinfo @c -*-mode:texinfo; compile-command: "makeinfo gtypist.texi"-*- @setfilename gtypist.info @settitle GNU Typist Manual @documentlanguage en @documentencoding UTF-8 @include version.texi @copying This manual is for GNU Typist (version @value{VERSION}, @value{UPDATED}), a program to learn typing in several languages and for different keyboard layouts. Copyright @copyright{} 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory Education @direntry Education * GNU Typist: (gtypist). Documentation of the typing tutor gtypist. @end direntry @titlepage @title GNU Typist Manual @subtitle Version @value{VERSION} @author Latest update: @value{UPDATED} @page @vskip 0pt plus 1filll @insertcopying Published by the Free Software Foundation @* 51 Franklin Street, Fifth Floor @* Boston, MA 02110-1301 @* USA @* @end titlepage @contents @page @ifnottex @node Top @top GNU Typist - Typing Tutor @insertcopying GNU Typist is an interactive typing tutor that can help you to type correctly. It has several lessons for different keyboard layouts and in different languages. The lessons for gtypist are described in a easy-to-learn scripting language that the user can use to modify the existing lessons or create new ones. @end ifnottex @menu * Distribution:: Where to find gtypist: source, packages etc. * Copying:: The GNU General Public License says how you can copy and share gtypist * Introduction:: Important concepts you need to know as a user * Invoking:: How to invoke gtypist * Supplied lessons:: Overview of the lessons in the gtypist distribution * Using typefortune:: Practising with text from `fortune' (requires perl) * Script file commands:: Information about the syntax of gtypist lessons * Create new lessons:: How to contribute new lessons * Emacs mode:: Emacs mode for editing gtypist scripts * VIM Syntax highlighting:: VIM Syntax highlighting for gtypist scripts * Environment Variables:: Environment variables which affect gtypist * Errors and omissions:: Known problems * History:: History of GNU Typist * Copying this manual:: The GNU Free Documentation License @end menu @node Distribution, Copying, Top, Top @unnumbered Distribution GNU Typist (or gtypist) is @dfn{free software}; this means that everyone is free to use it and free to redistribute it on certain conditions. The precise conditions are found in the GNU General Public License that comes with this program and also follows this section. @noindent You can obtain GNU Typist from a friend or from the Internet: @table @asis @item Official distribution site @uref{ftp://ftp.gnu.org/gnu/gtypist/} @item Official home page @uref{http://www.gnu.org/software/gtypist/} @item On-line manual (updates between program releases) @uref{http://www.gnu.org/software/gtypist/doc/} @item Developers' home page (Git repository, tasks, support...) @uref{http://savannah.gnu.org/projects/gtypist/} @end table @node Copying, Introduction, Distribution, Top @unnumbered GNU GENERAL PUBLIC LICENSE @include gpl.texi @node Introduction, Invoking, Copying, Top @chapter Introduction GNU Typist is an interactive typing tutor program. It uses an input file to create a series of typing tutorials, drills, and speed tests. It is intended to be used on raw terminals without graphics. It has been compiled and used on GNU/Linux and Unix (OpenBSD, AIX, Solaris) and also on Windows. The program reads lessons written in an easy-to-learn scripting language. It is distributed with several complete and good lessons. You can use them, modify them or create new lessons (@pxref{Create new lessons} and @pxref{Script file commands}). If a script file is not specified on the command line, a default file @file{gtypist.typ} will be used. (See details about the path in the section @pxref{Environment Variables}). The top line of the screen displays a banner. The bottom line of the screen displays a message line, queries, and other status information. The lines in between are used for the tutorials, drills, and speed tests. There are two types of typing exercises: @dfn{drills} and @dfn{speed tests}. In a @dfn{drill}, gtypist displays text in every other line on the screen, and waits for the user to correctly type the exact same text in the intermediate lines. @c TODO: intention is ``Griff-Übung'' (finger exercise) Typing errors are indicated with an inverse @samp{^}, or @samp{>} if the character is a newline and at the end of the exercise it calculates the real and effective rate in Words Per Minute (@acronym{WPM}). If there were too many errors, it will re-run the drill. @c TODO: make this less formal Backward deleting of previously typed characters to correct errors is not allowed. In a speed test, gtypist displays text on the screen, and waits for the user to correctly over-type the exact same text. It indicates typing errors, and at the end of the test it calculates the real and effective rate in @acronym{WPM}. @c TODO: what is it used for ? If there were too many errors, it will re-run the speed test. Backward deleting of previously typed characters to correct errors is permitted, but errors still accumulate. If you already made too many mistakes, then you can use @key{ESC} to give up and start again. You can also skip a lesson by pressing @key{ESC} twice. Once you complete a lesson, you will be asked whether you want to repeat it. @c TODO: indicate ``practice only'' exercises in modeline ? There are also ``practice only'' exercises (of both drills and speed tests) which you won't have to repeat at all. But we won't tell you when this is the case, so you'll have to give your best anyway ;-) In typing speed reports, a @dfn{word} is deemed to be five characters, so the raw (gross) @acronym{WPM} is the number of characters in the test passage, divided by five, then divided again by the number of minutes elapsed in typing the passage. The adjusted @acronym{WPM} factors in the errors; each error is counted as a mistyped word. If preferred, speeds can be displayed in Characters Per Minute (@acronym{CPM}). This can be done by specifying ``--scoring=cpm'' at the command line. @node Invoking, Supplied lessons, Introduction, Top @chapter Invoking The syntax to invoke GNU Typist is: @code{gtypist [ Options... ] [ script_file ]} @table @code @item -b, --personal-best gtypist will keep track of your personal best typing speeds and tell you when you've beaten them. Best typing speeds are saved in a ``bestlog'' in the user's home directory. @item -e, --error-max Specifies the default maximum error percentage. The default value is 3.0 and it must be between 0.0 and 100.0. There is a corresponding script file command (@pxref{Script file commands}) which only overrides this if it is @emph{stricter} (smaller). This value is ignored for ``practice only'' drills. @item -n, --notimer gtypist will display the typing speeds in @acronym{WPM} after both drills and speed tests. However, the lessons appear to be written for a program that only does this for speed tests. To make gtypist behave in a manner that matches the lessons, that is, to sup @acronym{WPM} reports on drills, use @option{-n} or @option{--notimer}. @item -t, --term-cursor gtypist creates its own flashing block cursor on the screen, to help distinguish between the cursor and reverse video error indications. Setting @option{-t} or @option{--term-cursor} suppresses this, and forces the program to use the terminal's cursor instead. @item -f, --curs-flash Sets the block cursor flash period in tenths of a second. A value of 0 indicates no cursor flashing. The default is 10, and the maximum is 512. This option is ignored if @option{-t} or @option{--term-cursor} has been set. @item -c, --colo[u]rs In normal operation, gtypist uses only normal and reverse video attributes in monochrome mode. This option may be used to specify the foreground and background colours on terminals that support colours. The colours are specified as two integers, in the range 0 to 7, separated by commas, setting the foreground and background colours. The colour codes 0 to 7 indicate black, red, green, yellow, blue, magenta, cyan, and white respectively. The default colours string is 7,0 - white on black. The option is ignored if the terminal does not support colours. @item -s, --silent When gtypist detects a typing error, it will beep the terminal. Use this option to silence the beep. @item -q, --quiet Same as @option{-s} or @option{--silent}. @item -l, --start-label Specifies the label in the script file at which gtypist begins executing (see script files and commands below for information on labels). If this option is not used, gtypist begins execution at the first line of the file. @item -w, --word-processor With this option, gtypist will try to mimic a word processor in certain ways when executing an exercise. It will treat space at the end of a line as a correctly typed character, and word wrap. It will treat return at the end of a line as a signal to move to the start of the next paragraph if applicable. It will compress multiple spaces into a single space. And it will skip over hyphens found at the end of a line. @item -k, --no-skip Prohibit the user from skipping lessons or exiting from lessons via @key{ESC ESC}. @item -i, --show-errors Highlight errors with reverse video. @item -S, --always-sure Skips confirmation questions. @item --banner-colo[u]rs Change the color of the banner at the top of the screen. Color values are the same as for the --colo[u]rs command. The default value is 0,6,5,1 - black foreground, cyan background, magenta program name and red version name. @item --scoring Change the scoring mode. @acronym{WPM} and @acronym{CPM} modes are available, with the default being @acronym{WPM}. @end table @noindent You also have to set the environment variable @env{LANG} if you want to run gtypist in your native language. @xref{Environment Variables}. @noindent In some languages like French, some interface messages are longer than in English. Therefore, you may need to make your terminal larger before invoking the tool. Otherwise, the text on the lower left may overlap with the string on the lower right. @strong{Examples:} @noindent To run the default lessons of lesson @file{gtypist.typ}:@* @code{gtypist} @noindent To run the lesson in Spanish: @* @code{gtypist esp.typ} @noindent To instruct gtypist to look for lesson bar.typ in a non standard directory @file{/home/foo}: @* @code{export GTYPIST_PATH="/home/foo"} @code{gtypist bar.typ} @noindent To run the lessons in the file @file{test.typ} of directory @file{/tmp}, starting at label @code{TEST1}, using the terminal's cursor, and running silently:@* @code{gtypist -t -q -l TEST1 /tmp/test.typ} @node Supplied lessons, Using typefortune, Invoking, Top @chapter Supplied lessons The following lessons are supplied with GNU Typist : @table @file @item q.typ Quick QWERTY course in English @item r.typ Long QWERTY course in English @item t.typ QWERTY touch typing in English @item v.typ Yet Another QWERTY in English @item u.typ QWERTY Review in English @item d.typ Dvorak touch typing in English @item c.typ Colemak touch typing in English @item m.typ Typing drills in English @item s.typ Speed drills in English @item n.typ Calculator keypad in English @item gtypist.typ Compendium of all previous lessons in English @item cs.typ Lessons in Czech @item esp.typ QWERTY course in Spanish @item ru.typ Lessons in Russian @item kt*.typ These lessons are the standard lessons from @uref{http://ktouch.sourceforge.net/, Ktouch 1.6}, which have been converted to gtypist's file format with the included script, @file{tools/ktouch2typ.pl}. The files are: @file{ktbg.typ} (@file{bulgarian.ktouch.xml}), @file{ktbg_long.typ} (@file{bulgarian_long.ktouch.xml}), @file{ktde.typ} (@file{german.ktouch.xml}), @file{ktde2.typ} (@file{german3.ktouch.xml}), @file{ktde_neo.typ} (@file{german.neo.ktouch.xml}), @file{ktde_number.typ} (@file{german.number.ktouch.xml}), @file{ktdk.typ} (@file{danish.ktouch.xml}), @file{ktdk2.typ} (@file{danish2.ktouch.xml}), @file{ktdvorak.typ} (@file{dvorak.ktouch.xml}), @file{ktdvorak_es.typ} (@file{dvorak_es.ktouch.xml}), @file{ktdvorak_abcd.typ} (@file{dvorak_ABCD.ktouch.xml}), @file{kten.typ} (@file{english.ktouch.xml}), @file{ktes.typ} (@file{spanish.ktouch.xml}), @file{ktes_cat.typ} (@file{catalan.ktouch.xml}), @file{ktfi.typ} (@file{finnish.ktouch.xml}), @file{ktfi_kids.typ} (@file{finnish_for_kids.ktouch.xml}), @file{ktfr.typ} (@file{french.ktouch.xml}), @file{ktfr2.typ} (@file{french2.ktouch.xml}), @file{kthu.typ} (@file{hungarian.ktouch.xml}), @file{kthu_expert.typ} (@file{hungarian_expert.ktouch.xml}), @file{ktit.typ} (@file{italian.ktouch.xml}), @file{ktnl.typ} (@file{nederlands.ktouch.xml}), @file{ktnl_junior.typ} (@file{nederlands_junior.ktouch.xml}), @file{ktno.typ} (@file{norwegian.ktouch.xml}), @file{ktpl.typ} (@file{polish.ktouch.xml}), @file{ktru.typ} (@file{russian.ktouch.xml}), @file{ktru_long.typ} (@file{russian_long.ktouch.xml}), @file{ktru_slava.typ} (@file{russian_slava.ktouch.xml}), @file{ktsi.typ} (@file{slovenian.ktouch.xml}), @file{kttr.typ} (@file{tr.ktouch.xml}), @file{german2.ktouch.xml} has not been included because it is from the same source as @file{ttde.typ} and @file{ttde.typ} contains more information. @item ttde.typ This is the German lesson of @uref{http://www.pingos.schulnetz.org/tipptrainer/, tipptrainer 0.6.0}, which has been converted using @file{tools/tt2typ.pl}. It is quite extensive and has good explanations along the way. @end table @noindent If you find errors in these lessons, if you modify any of them or if you write a new lesson, please release it with a free license and tell us about it, by writing an email to @email{bug-gtypist@@gnu.org}. @node Using typefortune, Script file commands, Supplied lessons, Top @chapter Using typefortune @command{typefortune} lets you practice with text from @command{fortune}. @code{SYNTAX: typefortune [-dslh] [-n count] [-o ]} @table @code @item -d Use @code{D:} instead of @code{S:}. @item -s Run fortune with @code{-s}. @item -l Run fortune with @code{-l}. @item -n Practice fortunes. @item -o Pass options to gtypist, in the form @option{option} (boolean option, i.e. @code{-o word-processor}), @option{option,value} (option with value, i.e. @code{-o e,1.0}) where @code{option} is the name of the option (short or long) with all leading dashes removed. You need to quote the argument to @option{-o} if you are specifying more than one argument: @code{typefortune -n 3 -o 'silent e,5 word-processor'}. @end table @node Script file commands, Create new lessons, Using typefortune, Top @chapter Script file commands GNU Typist reads in the data for its typing lessons from a script file. With the exception of comments and blank lines, each line in the file is of the format @code{command_char : command_data} @noindent Here, @code{command_char} is a single character code that defines an action for gtypist to take, and @code{command_data} is data for that command. If @code{command_char} is a space character, this indicates that the line is a continuation of the preceding non-space command. The @samp{:} separator must be in column two of the line. Comment lines are lines beginning with a @samp{#} character, and are ignored, as are blank lines. Comment lines may have any format provided that they begin with @samp{#}; other lines must have the above format. You should read the introduction so that you are familiar with the basics: @xref{Introduction}. The following is a list of valid @code{command_char} values: @table @code @item B This command clears the complete screen. If any @code{command_data} is present, it is displayed in the one-line banner at the top of the screen, and remains in place until the next @code{B} command. This command may not be continued on the following line; it is a single line command. @item T This presents a tutorial, and is a multi-line command, up to the limit of the screen length. Each line in the command is simply printed to the screen. This command clears the screen beneath the top banner line. After the display is done, the program waits before proceeding. @item * This indicates a label in the file. The label may be the target of a @code{G}, @code{Y}, @code{N} or @code{F} command. Labels may contain any character except space (this restriction was added in gtypist 2.9), and are a single line command. Labels must be unique within lesson files. White-space at the end of labels is ignored. @item I The @code{I} command can display some brief instructions above a drill or a speed test. Only two lines or less are permitted. Unlike the @code{T} command, it does not wait for any further key-presses before proceeding. So it should really always be followed by an exercise. It clears the whole screen exercise area, so in this respect it's just like a two-line @code{T}. @item M This command is the new way to create menus (since gtypist 2.7). Here is the syntax: @example M: [UP=RETURN_LABEL|_EXIT] "title" :LABEL1 "item1" :LABEL2 "item2" ... @end example This will display a convenient menu made from the specified items and let the user to choose from them. If an item was selected, gtypist will continue script execution from the corresponding label. If the Escape key was pressed and @code{UP} label is defined, gtypist will go to the @code{UP} label likewise, or quit from, if there is @code{``_EXIT''} in the place of the label. If the @code{UP} label is not defined, gtypist will try to return to the previous menu and jump to the last label met in the script before previous @code{M} command. If there is no such label and some menu was displayed before the current one, gtypist will just go to the beginning of the script. If none of the previous conditions were met, gtypist will just exit from the script. The above details make it natural to create menu hierarchies without using @code{UP} labels. The title and all descriptions must be wrapped in quotes (""). Additionally, there must be at least one space between @code{UP=XXX} and "title" and between the labels and the corresponding descriptions. This command was introduced as an easy way to arrange various parts of lesson files into single menu hierarchy which can be easily navigated, as well as a replacement for ancient @code{F}-key menus. See the existing lesson-files for examples. @c TODO: more information about ``should be used for''... @item D,d This command is called @dfn{drill}, and it is one of two types of typing exercises. It is a multi-line command. The text is displayed in every second line, and you type in the intermediate lines. Because of this, you cannot use more than 11 lines of drill content. This type of exercise is supposed to be used for finger training (i.e. jfjfjjf), but may also contain complete words and sentences @c TODO: grip if they are used to practice something (i.e. a letter/syllable/"grip"), and aren't real texts. The lowercase version @code{d} is a ``practice only'' drill - the user will not have not repeat this drill if he/she made too many mistakes. @c TODO: more information about ``should be used for''... @item S,s This is the second type of typing exercise: the @dfn{speed test}. It is a multi-line command. It displays its text on the screen, and prompts the user to type on top of it. That's why you can use up to 22 lines of text for one speed test. In a speed test you can correct your mistakes, but this will not decrease the error-count. Speed tests should be used for typing (mostly) complete sentences, texts or files (i.e. a letter, texinfo/html/tex files). The lowercase version @code{s} is a @dfn{practice only speed test}: the user will not have not repeat this drill if (s)he made too many mistakes. @item G This causes gtypist to go to the label in @code{command_data}, and continue execution of the script there. This is a single line command. @item Q This command command prompts its text on the message line, and waits for a @key{Y} or an @key{N} before proceeding. Other characters are ignored. As a side effect, you can hit an F-key if it is bound (a deprecated way to create the prompt for menus). @item Y This is like @code{G}, except that the goto is executed only if the result of the last @code{Q} command was @key{Y}. @item N This is like @code{G}, except that the goto is executed only if the result of the last @code{Q} command was @key{N}. @item K @emph{This command is deprecated in favor of M:} This binds a function key to a label. The format of the data line following this command must be @code{fkey_number:label}, where @code{fkey_number} is a function key number in the range 1 to 12, and @code{label} is a label to go to when this key is pressed. A value of NULL for label removes any label binding from the key. If function keys are not available on the terminal other keys can be used: @key{1} to @key{9} to replace @key{F1} to @key{F9}, @key{0} to replace @key{F10}, @key{A} for @key{F11} and @key{S} for @key{F12}. Other alternatives for the keys @key{F1} to @key{F12} are the combinations: @key{Ctrl-Q}, @key{Ctrl-W}, @key{Ctrl-E}, @key{Ctrl-R}, @key{Ctrl-T}, @key{Ctrl-Z}, @key{Ctrl-U}, @key{Ctrl-I}, @key{Ctrl-O}, @key{Ctrl-P}, @key{Ctrl-A} and @key{Ctrl-S}. This is also useful where function keys are intercepted by other programs (for example by a window manager). @item E This command is used to set the highest error-rate permitted for the next drill (@code{E:%}) or for all following drills until the next @code{E:} (@code{E:%*}). If @option{--error-max/-e} is specified then this command will only have an effect if it is @emph{stricter} than the value specified on the command-line. @code{command_data} consists of the value (between 0.0 and 100.0), followed by @samp{%} (this is required so that scripts are more readable). A special value of @code{default} or @code{Default} sets the error-max value back to the default. @item F This command (``set on-failure label'') is used to set the label (in @code{command_data}) where the user will have to go to if (s)he fails an exercise. Usually, this command only applies to the next exercise, but you can make it persistent by putting a @samp{*} at the end of @code{command_data}. If label is NULL then this resets the label. @item X This command causes gtypist to exit. It is a single line command. Any @code{command_data} is ignored. The program also exits if the end of the file is found (so you could also place a label there and just @code{G} to it) @end table @c TODO: more examples (i.e. one example for E:/F:, one for a menu, ...) Here is a tiny example script to demonstrate the available commands (@file{tinydemo.typ} lesson file): @example # Minimal demonstration B: Typing tutor demonstration *:LOOP K:1:QDONE T:This is a small example tutor script. A better :example may be found in the demo.typ file that :accompanies GNU Typist I:Here is an example of a drill: D:asdf ghjkl; I:And here is an example of a speed test: S:qwe rt yu iop *:QDONE Q:Seen enough yet? [Y/N] N:LOOP X: @end example @node Create new lessons, Emacs mode, Script file commands, Top @chapter Create new lessons This section provides guidelines and hints for creating new lessons (or improving existing ones). @c TODO: better name for ``Design patterns'' ?? @menu * Ktouch lessons:: Generate lessons from a set of drills * Exercises from fortune:: Create drills/speed-tests with text from fortune * Design patterns for lessons:: Hints/Design patterns for lessons * Findwords script:: Simple script designed to help you find words with certain letters @end menu @node Ktouch lessons, , Exercises from fortune, Create new lessons @section Ktouch lessons A very easy way to write lessons is to write them in the format that @command{ktouch} @strong{1.0} uses, and then convert it to a gtypist lesson using @command{tools/ktouchOLD2typ.pl}. This will take care of writing ``jump-tables'', a menu and a bit more. The ktouch-1.0-format consists only of lessons, which are preceded by their names, and separated by blank lines and/or comments (@samp{#} at the beginning of the line). So the first non-blank, non-comment line in the file is the name of the first lesson, and the first lesson consists of all the lines up to the next comment or blank line. After the separator (comment or blank line) the name of the second lesson follows and so on. This is an example of a three-lesson ktouch file (excerpts from the first three lessons of @file{german.ktouch}): @example # # Deutsche Training-Datei für KTouch # Grundstellung f f f f f f fff fff fff f f f f f f fff fff fff f f f f f f f fff j j j j j j jjj jjj jjj j j j j j j jjj jjj jjj j j j j j j j jjj fff jjj fff jjj jjj fff jjj fff fjf fjf fjf jfj jfj jfj fjf jfjfj Grundstellung fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd kkkff fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jköfd s s s s s s sss sss sss s s s s s s sss sss sss s s s s s s s sss #Zwei wichtige Vokale: e und i e und i asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdfö das dass lös fad dass lös als dass las lös fad dass als dass dass ded ded ded dej dek del deö ded deö del dek dej ded dej dek delde @end example Once you are done, use @command{tools/ktouchOLD2typ.pl} to convert the file: @samp{ktouchOLD2typ.pl lesson.ktouch} converts @file{lesson.ktouch} to @file{lesson.typ}. It is important that the input file ends in @samp{.ktouch}, otherwise @command{ktouchOLD2typ.pl} will skip it. Warning: this will overwrite @file{lesson.typ} without asking you ! You can customize the number of lines that @command{ktouchOLD2typ.pl} uses for each drill by modifying the relevant variable in @file{tools/ktouchOLD2typ.pl}. Obviously, the disadvantage of this is that you cannot make use of all of gtypist's features (but the output file is very readable, so you can edit it to use more of gtypist's features). If you prefer, you can use the new ktouch 1.6 XML file format, which looks like this (from @file{english.ktouch.xml}: @example SAMPLE TITLE SAMPLE COMMENT jf ff jjj jf jfj j jff fjjf ff jfj j jff ff jjj fjj fjj fjf jfj jjj f fjjf jjj fjjf jfj fjjf f j fjj jff j fjj jf jjj fjjf f f fjf fjjf jff jjj ff jf fjjf fjjf f fjj fjj jf fjf j jj f j fjj jj jjj ... kd jjd fdfj rd djd jk jd k dd fjk fd fk k jfkd dkkf fk dkd dd jk k dfj djd fkkk fk dff d dkkf fd fk fdfj fk k dkkf djd dff dkd dff dkd kdk k dkkf k jk fkkk jd k jfkd fk fk jd k d dkd jd k dd rd dffd ... @end example In this format, the content of the tag acts as a title for the following drill. You can convert @file{*.ktouch.xml} to @file{*.typ} with @samp{ktouch2typ.pl lesson.ktouch.xml}, which will create @file{lesson.ktouch.typ} (again, this may overwrite without asking you). @node Exercises from fortune, Ktouch lessons, Design patterns for lessons, Create new lessons @section Exercises from fortune Using @file{gtypist-mode.el} you can quickly create lessons with text from the program @command{fortune} (or the Emacs-internal @command{yow} if @command{fortune} isn't available, as is usually the case on Windows). Once you installed @file{gtypist-mode.el} (@pxref{Emacs mode}), you can open a file with the @samp{.typ} extension and run @kbd{C-c C-f} to create a drill (@code{D:} by default, use @kbd{C-u} or @kbd{C-u C-u} prefix to change). @node Design patterns for lessons, Exercises from fortune, Findwords script, Create new lessons @section Design patterns for lessons @subsection Structure of lesson files @itemize @bullet @item Use mixture of drills and speed tests (this is more fun for the user) @item Use some ``practice-only'' exercises (@code{d:}/@code{s:}) (possibly mixed with ``real'' exercises) followed by a ``final test''. @file{esp.typ} uses this scheme. @end itemize @subsection Patterns for exercises @itemize @bullet @item When introducing a new key, start out by mixing other (known) keys of the same finger in with the new key in the first drill(s). Here is an example (from @file{t.typ}, line 237): @example I:Use your J-finger for the H key. *:_T_R_L23 D:jjj jhj jjj jhj jjj jhj @end example @item use 'word, word.' repeatedly to practice ,/. @end itemize @node Findwords script, Design patterns for lessons, , Create new lessons @section Findwords script The @file{tools/findwords} script in the GNU Typist sources is there to assist you in creating new lessons. @subsection Purpose In the beginning when you are creating a new tutorial from scratch, it's not very easy to form words and even sentences while the range of letters you can use is restricted. Sometimes you want to insert some paragraph ``targeted'' at some special combination of two or three letters. This is even harder. For this purpose we created findwords. It uses the dictionaries from the aspell database (free multilingual spellchecker). @subsection Installing You will need the @file{aspell} and @file{aspell-LG} packages, where LG is the ISO language code for the language you want to use. After a successful installation, you will have to make a little change in your configuration so that aspell's master database is the one of your language. This can be done two different ways: @enumerate @item In your home directory create the file @* .aspell.conf and add this line: @* @code{master LANGUAGE} @item Create /usr/share/pspell/LG-aspell.pwli @* and add this line: @* @code{/usr/lib/aspell/LG} @* Make sure your locale setting is LG. @end enumerate In the above, LG means ISO language code (eg. `en', `fr', `cs') and LANGUAGE means name of the database in /usr/lib/aspell (eg. `english.multi', `french', `czech'). You can try if it works by typing: @example aspell dump master | less @end example @subsection Using findwords The syntax is as follows: @* @code{./findwords letters [combination]} In the mandatory @option{letters} argument you must list the letters that you want use without any spaces. You may use the dot (`.') to say `all letters'. The second argument combination is optional and you can specify there what combination of letters are you searching for. Some examples: @itemize @item @code{./findwords asdfjkleruio} @* We are looking for all words composed from the listed letters. @item @code{./findwords asdfjkleruio sa} @* We search words containing the combination `sa', but only these composed from specified letters. @item @code{./findwords . col} @* Words can contain all letters, but must have `col' somewhere inside. @end itemize @node Emacs mode, VIM Syntax highlighting, Create new lessons, Top @chapter Emacs mode gtypist now comes with an Emacs major-mode which does syntax-highlighting, indentation and has some convenient commands for counting labels, a goto-label-command, inserting properly centered banners, special comments and a bit more. Copy this file from @file{tools/gtypist-mode.el} to wherever you put your local elisp files (e.g. @file{~/elisp}) and put this in your @file{~/.emacs} (adapt path!): @lisp (autoload 'gtypist-mode "~/elisp/gtypist-mode") @end lisp or put it in @code{load-path} (@samp{make install} in the sources should take care of this for GNU Emacs, or if you are using the Debian package, it installs it here for you) and use this instead: @lisp (autoload 'gtypist-mode "gtypist-mode") @end lisp @strong{and} add this to your @file{~/.emacs}: @lisp (setq auto-mode-alist (cons '("\\.typ\\'" . gtypist-mode) auto-mode-alist)) @end lisp @c If you want to, you can then byte-compile the file using @c @kbd{M-x byte-compile-file} (but @samp{make install} takes care of @c this). @noindent All this is also mentioned in the README-section of @file{tools/gtypist-mode.el}. @noindent Here are the commands along with the keybindings: @table @kbd @item C-c C-i, M-x gtypist-mode-info This shows gtypist's texinfo-documentation, starting at node ``Script file commands'' (@pxref{Script file commands}). With prefix, start at the top-node. @item C-c M-g, M-x gtypist-mode-goto-label Query for a label to go to (with completion). @item C-c C-l, M-x gtypist-mode-next-label This command inserts the next label in a numbered sequence of labels. For example, if you insert @example *:SERIES1_L1 @end example and hit @kbd{C-c C-l} then gtypist-mode will insert @example *:SERIES1_L2 @end example @item C-c C-b, M-x gtypist-mode-insert-banner This command inserts a centered @code{B:} command. It's centered on 66 columns because ``gtypist '' is in the right corner (prompts for content). @item C-c C-r, M-x gtypist-mode-insert-hrule Inserts a horizontal rule (comment) consisting of dashes. @item C-c C-n, M-x gtypist-mode-new-lesson Insert the comments (header) and a label to start a new lesson (prompts for name). @item C-c C-f, M-x gtypist-mode-fortune-to-drill Insert a drill (@code{D:}) with text from @command{fortune} (or @command{yow} if @command{fortune} isn't available). Use @kbd{C-u} prefix to get @code{S:}, and @kbd{C-u C-u} to get @code{d:}. @end table @noindent Run @kbd{C-h m} for a complete list of commands and their keybindings. If you find bugs or if you think there's something else this mode could do, please write to @email{bug-gtypist@@gnu.org}. @node VIM Syntax highlighting, Environment Variables, Emacs mode, Top @chapter VIM Syntax highlighting @noindent File @file{tools/gtypist.vim} provides vim syntax highlighting for gtypist lesson files (vim 5.x, 6.x and 7.x (and higher)). To install it for version 5.x (or any version on Windows), copy the file to where the syntax-files go (for example @file{/usr/share/vim/vim56/syntax/} for Vim 5.6; if everything else fails you can search for e.g. @file{xml.vim}) and add this to @file{~/.vimrc} (@file{$HOME/_vimrc} on Windows): @example autocmd BufNewFile,BufRead *.typ set ft=gtypist @end example Installation for Vim >= 6.x is simpler: first create @file{~/.vim/syntax/}: @code{mkdir -p ~/.vim/syntax} and put @file{tools/gtypist.vim} in there. Finally add this to @file{~/.vimrc}: @example autocmd BufNewFile,BufRead *.typ setf gtypist @end example In case you are using the debian package, @file{gtypist.vim} will already be installed for you, but you need to enable it explicitly: @example sudo apt-get install vim-addon-manager vim-addons install gtypist @end example In any case, make sure that the @file{vimrc} file has the following command at the top ahead of all other @code{autocmd}-commands: @example autocmd! " Remove ALL autocommands for the current group @end example (which avoids problems if @file{vimrc} is sourced more than once). And if you haven\'t done it already, you need to enable syntax highlighting (this may need to be @emph{before} the autocmd ... gtypist). @example syntax on " turn on syntax highlighting @end example You can verify that @file{tools/gtypist.vim} is active by running @code{:set ft?} in vim, which should return @emph{filetype=gtypist}. @noindent All of this is also mentioned in the README-section of @file{tools/gtypist.vim}. @node Environment Variables, Errors and omissions, VIM Syntax highlighting, Top @chapter Environment Variables GNU Typist uses the following environment variables: @table @code @item LANG GNU Typist offers Native Language Support (NLS) with support of the gettext library, this means that if your system supports it, the language of the messages shown by gtypist can be chosen. By now gtypist is distributed with messages in English, Czech, Finnish, French, German and Spanish. To use a particular NLS use the environment variable LANG and set it to the appropriate @samp{LL_CC} combination where @samp{LL} is an ISO 639 two-letter language code and @samp{CC} is an ISO 3166 two-letter country code (e.g. @samp{es_ES} for Spain and @code{de_DE} for Germany). In some systems it will be also necessary to set the environment variable LANGUAGE to the same value. If you want to translate messages to a different language (or if you want to correct a message), please communicate it to @email{bug-gtypist@@gnu.org}. @item GTYPIST_PATH Lists the directories that the program will look in for script files. It has the standard format for paths, that is, a list of directories separated by @samp{:}s. To open a script, gtypist will try the following paths: (1) to use the script name alone (2) it will append each one of the directories specified in the variable @code{GTYPIST_PATH} and (3) it will append the directory used during the installation process (e.g. @file{/usr/local/share/gtypist} or @file{/usr/share/gtypist}). @item TERM Used by curses to manage the display. @item TERMINFO This may need to be set if the path to the @code{terminfo} database is different between the system the binary was compiled on and the one it is being run on. For example, in older Slackware systems, the terminfo database resides in @file{/usr/lib/terminfo}. On RedHat Linux, it is in @file{/usr/share/terminfo}. If the program complains about the terminal type, and the value of @code{TERM} is correct, check into this. @end table @node Errors and omissions, History, Environment Variables, Top @chapter Errors and omissions GNU Typist does not go to much effort to minimize terminal output. In particular, the flashing block cursor can cause a lot of cursor movement. Using the terminal's own cursor will help if this becomes a problem. In speed tests, the program does not allow backspacing or deletion past the beginning of the screen line, or back through Tab characters. This is purely to simplify screen updating. Colour curses modes do not seem to work well with UnixWare. In particular, reverse video is not always rendered correctly on some terminal types, and xterms. Please see the TODO file in the source distribution for more things that need to be fixed. @node History, Copying this manual, Errors and omissions, Top @appendix History of GNU Typist @itemize @bullet @item The initial program was written for VAX/VMS BASIC by someone at Harris Corp (Ft. Lauderdale, FL). @item @email{penneyj@@slc.com, D. Jason Penney} rewrote it for Microsoft BASICA @item @email{penneyj@@slc.com, D. Jason Penney} rewrote it in C and the curses library @item @email{simonb@@sco.com, Simon Baldwin} rewrote the version of D. Jason Penney, his innovations are described in the NEWS file (versions 2.2 to 2.2b). He is the holder of the copyright for GNU Typist (that is distributed under the GPL). Simon also wrote a version of Typist in Java that initially he called JTypist but that now is called Typist again: @uref{http://www.geocities.com/simon_baldwin/typist/} @item Since 1997, @email{synrg@@sanctuary.nslug.ns.ca, Ben Armstrong} has helped by fixing bugs and maintaining a @uref{http://packages.debian.org/gtypist/, Debian package}. @item In 2000, @email{vtamara@@users.sourceforge.net, Vladimir Támara} and @email{ikks@@users.sourceforge.net, Igor Támara} became the maintainers of the C version. Before November 2000, GNU Typist was maintained as part of the Structio project. @item November 2000, accepted as a GNU package! Renamed to GNU Typist (or gtypist). @item In May 2001, @email{michaelo@@gnu.org, Michael Opdenacker}, who learned touch typing with GNU Typist, became the new maintainer. Project development is now hosted on @uref{http://savannah.gnu.org/projects/gtypist/}. @item In June 2001, @email{fnatter@@gmx.net, Felix Natter} joined and made major contributions to the project: lesson imports from other tutors, tool enhancements, new tutorial capabilities, , Emacs mode, arrow key based interface, and many more! @item In 2003, @email{rutsky@@school.ioffe.rssi.ru, Dmitry Rutsky} joined joined the development team and brought in a dramatic number ideas, hacks and improvements, and he's not done yet! @item In April 2008, @email{general@@vultaire.net, Paul Goins} took over as maintainer of GNU Typist, adding a few enhancements (especially building under Windows with MinGW), making some documentation updates and changing the license to GPL version 3. @item In December 2010, @email{edam@@waxworlds.org, Tim Marston} took over as maintainer of GNU Typist, adding some enhancements and support for the Colemak keyboard layout. @end itemize @node Copying this manual @appendix GNU Free Documentation License @include fdl.texi @bye @c LocalWords: xref QWERTY kt gtypist-2.9.5/doc/version3.texi0000644000175000017500000000014112372333407013363 00000000000000@set UPDATED 18 August 2013 @set UPDATED-MONTH August 2013 @set EDITION 2.9.5 @set VERSION 2.9.5 gtypist-2.9.5/doc/stamp-20000644000175000017500000000014112372333407012126 00000000000000@set UPDATED 18 August 2013 @set UPDATED-MONTH August 2013 @set EDITION 2.9.5 @set VERSION 2.9.5 gtypist-2.9.5/doc/gtypist.html0000644000175000017500000032752712372333422013332 00000000000000 GNU Typist Manual

GNU Typist Manual

Table of Contents

GNU Typist - Typing Tutor

This manual is for GNU Typist (version 2.9.5, 18 August 2013), a program to learn typing in several languages and for different keyboard layouts.

Copyright © 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2008, 2011, 2012 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.

GNU Typist is an interactive typing tutor that can help you to type correctly. It has several lessons for different keyboard layouts and in different languages. The lessons for gtypist are described in a easy-to-learn scripting language that the user can use to modify the existing lessons or create new ones.


Distribution

GNU Typist (or gtypist) is free software; this means that everyone is free to use it and free to redistribute it on certain conditions. The precise conditions are found in the GNU General Public License that comes with this program and also follows this section.

You can obtain GNU Typist from a friend or from the Internet:

Official distribution site

ftp://ftp.gnu.org/gnu/gtypist/

Official home page

http://www.gnu.org/software/gtypist/

On-line manual (updates between program releases)

http://www.gnu.org/software/gtypist/doc/

Developers’ home page (Git repository, tasks, support...)

http://savannah.gnu.org/projects/gtypist/


GNU GENERAL PUBLIC LICENSE

Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. http://fsf.org/

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for software and other kinds of works.

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program—to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.

To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.

For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.

Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS

  1. Definitions.

    “This License” refers to version 3 of the GNU General Public License.

    “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

    “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

    To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

    A “covered work” means either the unmodified Program or a work based on the Program.

    To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

    To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

    An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

  2. Source Code.

    The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

    A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

    The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

    The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

    The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

    The Corresponding Source for a work in source code form is that same work.

  3. Basic Permissions.

    All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

    You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

    Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

  4. Protecting Users’ Legal Rights From Anti-Circumvention Law.

    No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

    When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures.

  5. Conveying Verbatim Copies.

    You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

    You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

  6. Conveying Modified Source Versions.

    You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

    1. The work must carry prominent notices stating that you modified it, and giving a relevant date.
    2. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
    3. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
    4. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.

    A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

  7. Conveying Non-Source Forms.

    You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

    1. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
    2. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
    3. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
    4. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
    5. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.

    A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

    A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

    “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

    If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

    The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

    Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

  8. Additional Terms.

    “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

    When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

    Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

    1. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
    2. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
    3. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
    4. Limiting the use for publicity purposes of names of licensors or authors of the material; or
    5. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
    6. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.

    All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

    If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

    Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

  9. Termination.

    You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

    However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

    Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

    Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

  10. Acceptance Not Required for Having Copies.

    You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

  11. Automatic Licensing of Downstream Recipients.

    Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

    An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

    You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

  12. Patents.

    A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”.

    A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

    Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

    In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

    If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

    If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

    A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

    Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

  13. No Surrender of Others’ Freedom.

    If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

  14. Use with the GNU Affero General Public License.

    Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

  15. Revised Versions of this License.

    The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

    Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

    If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

    Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

  16. Disclaimer of Warranty.

    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  17. Limitation of Liability.

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

  18. Interpretation of Sections 15 and 16.

    If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.

one line to give the program's name and a brief idea of what it does.
Copyright (C) year name of author

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see http://www.gnu.org/licenses/.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:

program Copyright (C) year name of author
This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
This is free software, and you are welcome to redistribute it
under certain conditions; type ‘show c’ for details.

The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”.

You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see http://www.gnu.org/licenses/.

The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read http://www.gnu.org/philosophy/why-not-lgpl.html.


1 Introduction

GNU Typist is an interactive typing tutor program. It uses an input file to create a series of typing tutorials, drills, and speed tests. It is intended to be used on raw terminals without graphics. It has been compiled and used on GNU/Linux and Unix (OpenBSD, AIX, Solaris) and also on Windows.

The program reads lessons written in an easy-to-learn scripting language. It is distributed with several complete and good lessons. You can use them, modify them or create new lessons (see Create new lessons and see Script file commands).

If a script file is not specified on the command line, a default file gtypist.typ will be used. (See details about the path in the section see Environment Variables).

The top line of the screen displays a banner. The bottom line of the screen displays a message line, queries, and other status information. The lines in between are used for the tutorials, drills, and speed tests.

There are two types of typing exercises: drills and speed tests.

In a drill, gtypist displays text in every other line on the screen, and waits for the user to correctly type the exact same text in the intermediate lines. Typing errors are indicated with an inverse ‘^’, or ‘>’ if the character is a newline and at the end of the exercise it calculates the real and effective rate in Words Per Minute (WPM). If there were too many errors, it will re-run the drill.

Backward deleting of previously typed characters to correct errors is not allowed.

In a speed test, gtypist displays text on the screen, and waits for the user to correctly over-type the exact same text. It indicates typing errors, and at the end of the test it calculates the real and effective rate in WPM. If there were too many errors, it will re-run the speed test. Backward deleting of previously typed characters to correct errors is permitted, but errors still accumulate.

If you already made too many mistakes, then you can use ESC to give up and start again. You can also skip a lesson by pressing ESC twice. Once you complete a lesson, you will be asked whether you want to repeat it.

There are also “practice only” exercises (of both drills and speed tests) which you won’t have to repeat at all. But we won’t tell you when this is the case, so you’ll have to give your best anyway ;-)

In typing speed reports, a word is deemed to be five characters, so the raw (gross) WPM is the number of characters in the test passage, divided by five, then divided again by the number of minutes elapsed in typing the passage. The adjusted WPM factors in the errors; each error is counted as a mistyped word.

If preferred, speeds can be displayed in Characters Per Minute (CPM). This can be done by specifying “–scoring=cpm” at the command line.


2 Invoking

The syntax to invoke GNU Typist is:

gtypist [ Options... ] [ script_file ]

-b, --personal-best

gtypist will keep track of your personal best typing speeds and tell you when you’ve beaten them. Best typing speeds are saved in a “bestlog” in the user’s home directory.

-e, --error-max

Specifies the default maximum error percentage. The default value is 3.0 and it must be between 0.0 and 100.0. There is a corresponding script file command (see Script file commands) which only overrides this if it is stricter (smaller). This value is ignored for “practice only” drills.

-n, --notimer

gtypist will display the typing speeds in WPM after both drills and speed tests. However, the lessons appear to be written for a program that only does this for speed tests. To make gtypist behave in a manner that matches the lessons, that is, to sup WPM reports on drills, use -n or --notimer.

-t, --term-cursor

gtypist creates its own flashing block cursor on the screen, to help distinguish between the cursor and reverse video error indications. Setting -t or --term-cursor suppresses this, and forces the program to use the terminal’s cursor instead.

-f, --curs-flash

Sets the block cursor flash period in tenths of a second. A value of 0 indicates no cursor flashing. The default is 10, and the maximum is 512. This option is ignored if -t or --term-cursor has been set.

-c, --colo[u]rs

In normal operation, gtypist uses only normal and reverse video attributes in monochrome mode. This option may be used to specify the foreground and background colours on terminals that support colours. The colours are specified as two integers, in the range 0 to 7, separated by commas, setting the foreground and background colours. The colour codes 0 to 7 indicate black, red, green, yellow, blue, magenta, cyan, and white respectively. The default colours string is 7,0 - white on black. The option is ignored if the terminal does not support colours.

-s, --silent

When gtypist detects a typing error, it will beep the terminal. Use this option to silence the beep.

-q, --quiet

Same as -s or --silent.

-l, --start-label

Specifies the label in the script file at which gtypist begins executing (see script files and commands below for information on labels). If this option is not used, gtypist begins execution at the first line of the file.

-w, --word-processor

With this option, gtypist will try to mimic a word processor in certain ways when executing an exercise. It will treat space at the end of a line as a correctly typed character, and word wrap. It will treat return at the end of a line as a signal to move to the start of the next paragraph if applicable. It will compress multiple spaces into a single space. And it will skip over hyphens found at the end of a line.

-k, --no-skip

Prohibit the user from skipping lessons or exiting from lessons via ESC ESC.

-i, --show-errors

Highlight errors with reverse video.

-S, --always-sure

Skips confirmation questions.

--banner-colo[u]rs

Change the color of the banner at the top of the screen. Color values are the same as for the –colo[u]rs command. The default value is 0,6,5,1 - black foreground, cyan background, magenta program name and red version name.

--scoring

Change the scoring mode. WPM and CPM modes are available, with the default being WPM.

You also have to set the environment variable LANG if you want to run gtypist in your native language. See Environment Variables.

In some languages like French, some interface messages are longer than in English. Therefore, you may need to make your terminal larger before invoking the tool. Otherwise, the text on the lower left may overlap with the string on the lower right.

Examples:

To run the default lessons of lesson gtypist.typ:
gtypist

To run the lesson in Spanish:
gtypist esp.typ

To instruct gtypist to look for lesson bar.typ in a non standard directory /home/foo:
export GTYPIST_PATH="/home/foo" gtypist bar.typ

To run the lessons in the file test.typ of directory /tmp, starting at label TEST1, using the terminal’s cursor, and running silently:
gtypist -t -q -l TEST1 /tmp/test.typ


3 Supplied lessons

The following lessons are supplied with GNU Typist :

q.typ

Quick QWERTY course in English

r.typ

Long QWERTY course in English

t.typ

QWERTY touch typing in English

v.typ

Yet Another QWERTY in English

u.typ

QWERTY Review in English

d.typ

Dvorak touch typing in English

c.typ

Colemak touch typing in English

m.typ

Typing drills in English

s.typ

Speed drills in English

n.typ

Calculator keypad in English

gtypist.typ

Compendium of all previous lessons in English

cs.typ

Lessons in Czech

esp.typ

QWERTY course in Spanish

ru.typ

Lessons in Russian

kt*.typ

These lessons are the standard lessons from Ktouch 1.6, which have been converted to gtypist’s file format with the included script, tools/ktouch2typ.pl.

The files are: ktbg.typ (bulgarian.ktouch.xml), ktbg_long.typ (bulgarian_long.ktouch.xml), ktde.typ (german.ktouch.xml), ktde2.typ (german3.ktouch.xml), ktde_neo.typ (german.neo.ktouch.xml), ktde_number.typ (german.number.ktouch.xml), ktdk.typ (danish.ktouch.xml), ktdk2.typ (danish2.ktouch.xml), ktdvorak.typ (dvorak.ktouch.xml), ktdvorak_es.typ (dvorak_es.ktouch.xml), ktdvorak_abcd.typ (dvorak_ABCD.ktouch.xml), kten.typ (english.ktouch.xml), ktes.typ (spanish.ktouch.xml), ktes_cat.typ (catalan.ktouch.xml), ktfi.typ (finnish.ktouch.xml), ktfi_kids.typ (finnish_for_kids.ktouch.xml), ktfr.typ (french.ktouch.xml), ktfr2.typ (french2.ktouch.xml), kthu.typ (hungarian.ktouch.xml), kthu_expert.typ (hungarian_expert.ktouch.xml), ktit.typ (italian.ktouch.xml), ktnl.typ (nederlands.ktouch.xml), ktnl_junior.typ (nederlands_junior.ktouch.xml), ktno.typ (norwegian.ktouch.xml), ktpl.typ (polish.ktouch.xml), ktru.typ (russian.ktouch.xml), ktru_long.typ (russian_long.ktouch.xml), ktru_slava.typ (russian_slava.ktouch.xml), ktsi.typ (slovenian.ktouch.xml), kttr.typ (tr.ktouch.xml),

german2.ktouch.xml has not been included because it is from the same source as ttde.typ and ttde.typ contains more information.

ttde.typ

This is the German lesson of tipptrainer 0.6.0, which has been converted using tools/tt2typ.pl. It is quite extensive and has good explanations along the way.

If you find errors in these lessons, if you modify any of them or if you write a new lesson, please release it with a free license and tell us about it, by writing an email to bug-gtypist@gnu.org.


4 Using typefortune

typefortune lets you practice with text from fortune.

SYNTAX: typefortune [-dslh] [-n count] [-o <gtypist_opts>]

-d

Use D: instead of S:.

-s

Run fortune with -s.

-l

Run fortune with -l.

-n <count>

Practice <count> fortunes.

-o <gtypist_options>

Pass options to gtypist, in the form option (boolean option, i.e. -o word-processor), option,value (option with value, i.e. -o e,1.0) where option is the name of the option (short or long) with all leading dashes removed. You need to quote the argument to -o if you are specifying more than one argument: typefortune -n 3 -o 'silent e,5 word-processor'.


5 Script file commands

GNU Typist reads in the data for its typing lessons from a script file. With the exception of comments and blank lines, each line in the file is of the format

command_char : command_data

Here, command_char is a single character code that defines an action for gtypist to take, and command_data is data for that command. If command_char is a space character, this indicates that the line is a continuation of the preceding non-space command. The ‘:’ separator must be in column two of the line.

Comment lines are lines beginning with a ‘#’ character, and are ignored, as are blank lines. Comment lines may have any format provided that they begin with ‘#’; other lines must have the above format.

You should read the introduction so that you are familiar with the basics: See Introduction.

The following is a list of valid command_char values:

B

This command clears the complete screen. If any command_data is present, it is displayed in the one-line banner at the top of the screen, and remains in place until the next B command. This command may not be continued on the following line; it is a single line command.

T

This presents a tutorial, and is a multi-line command, up to the limit of the screen length. Each line in the command is simply printed to the screen. This command clears the screen beneath the top banner line. After the display is done, the program waits before proceeding.

*

This indicates a label in the file. The label may be the target of a G, Y, N or F command. Labels may contain any character except space (this restriction was added in gtypist 2.9), and are a single line command. Labels must be unique within lesson files. White-space at the end of labels is ignored.

I

The I command can display some brief instructions above a drill or a speed test. Only two lines or less are permitted. Unlike the T command, it does not wait for any further key-presses before proceeding. So it should really always be followed by an exercise. It clears the whole screen exercise area, so in this respect it’s just like a two-line T.

M

This command is the new way to create menus (since gtypist 2.7). Here is the syntax:

M: [UP=RETURN_LABEL|_EXIT] "title"
 :LABEL1 "item1"
 :LABEL2 "item2"
 ...

This will display a convenient menu made from the specified items and let the user to choose from them. If an item was selected, gtypist will continue script execution from the corresponding label. If the Escape key was pressed and UP label is defined, gtypist will go to the UP label likewise, or quit from, if there is ``_EXIT'' in the place of the label. If the UP label is not defined, gtypist will try to return to the previous menu and jump to the last label met in the script before previous M command. If there is no such label and some menu was displayed before the current one, gtypist will just go to the beginning of the script. If none of the previous conditions were met, gtypist will just exit from the script.

The above details make it natural to create menu hierarchies without using UP labels.

The title and all descriptions must be wrapped in quotes (""). Additionally, there must be at least one space between UP=XXX and "title" and between the labels and the corresponding descriptions.

This command was introduced as an easy way to arrange various parts of lesson files into single menu hierarchy which can be easily navigated, as well as a replacement for ancient F-key menus. See the existing lesson-files for examples.

D,d

This command is called drill, and it is one of two types of typing exercises.

It is a multi-line command. The text is displayed in every second line, and you type in the intermediate lines. Because of this, you cannot use more than 11 lines of drill content.

This type of exercise is supposed to be used for finger training (i.e. jfjfjjf), but may also contain complete words and sentences if they are used to practice something (i.e. a letter/syllable/"grip"), and aren’t real texts.

The lowercase version d is a “practice only” drill - the user will not have not repeat this drill if he/she made too many mistakes.

S,s

This is the second type of typing exercise: the speed test.

It is a multi-line command. It displays its text on the screen, and prompts the user to type on top of it. That’s why you can use up to 22 lines of text for one speed test. In a speed test you can correct your mistakes, but this will not decrease the error-count.

Speed tests should be used for typing (mostly) complete sentences, texts or files (i.e. a letter, texinfo/html/tex files).

The lowercase version s is a practice only speed test: the user will not have not repeat this drill if (s)he made too many mistakes.

G

This causes gtypist to go to the label in command_data, and continue execution of the script there. This is a single line command.

Q

This command command prompts its text on the message line, and waits for a Y or an N before proceeding. Other characters are ignored.

As a side effect, you can hit an F-key if it is bound (a deprecated way to create the prompt for menus).

Y

This is like G, except that the goto is executed only if the result of the last Q command was Y.

N

This is like G, except that the goto is executed only if the result of the last Q command was N.

K

This command is deprecated in favor of M: This binds a function key to a label. The format of the data line following this command must be fkey_number:label, where fkey_number is a function key number in the range 1 to 12, and label is a label to go to when this key is pressed. A value of NULL for label removes any label binding from the key.

If function keys are not available on the terminal other keys can be used: 1 to 9 to replace F1 to F9, 0 to replace F10, A for F11 and S for F12.

Other alternatives for the keys F1 to F12 are the combinations: Ctrl-Q, Ctrl-W, Ctrl-E, Ctrl-R, Ctrl-T, Ctrl-Z, Ctrl-U, Ctrl-I, Ctrl-O, Ctrl-P, Ctrl-A and Ctrl-S.

This is also useful where function keys are intercepted by other programs (for example by a window manager).

E

This command is used to set the highest error-rate permitted for the next drill (E:<value>%) or for all following drills until the next E: (E:<value>%*).

If --error-max/-e is specified then this command will only have an effect if it is stricter than the value specified on the command-line.

command_data consists of the value (between 0.0 and 100.0), followed by ‘%’ (this is required so that scripts are more readable). A special value of default or Default sets the error-max value back to the default.

F

This command (“set on-failure label”) is used to set the label (in command_data) where the user will have to go to if (s)he fails an exercise.

Usually, this command only applies to the next exercise, but you can make it persistent by putting a ‘*’ at the end of command_data.

If label is NULL then this resets the label.

X

This command causes gtypist to exit. It is a single line command. Any command_data is ignored. The program also exits if the end of the file is found (so you could also place a label there and just G to it)

Here is a tiny example script to demonstrate the available commands (tinydemo.typ lesson file):

# Minimal demonstration 
B: Typing tutor demonstration 
*:LOOP
K:1:QDONE
T:This is a small example tutor script. A better
 :example may be found in the demo.typ file that
 :accompanies GNU Typist
I:Here is an example of a drill: 
D:asdf ghjkl;
I:And here is an example of a speed test: 
S:qwe rt yu iop
*:QDONE
Q:Seen enough yet? [Y/N] 
N:LOOP 
X:

6 Create new lessons

This section provides guidelines and hints for creating new lessons (or improving existing ones).


6.1 Ktouch lessons

A very easy way to write lessons is to write them in the format that ktouch 1.0 uses, and then convert it to a gtypist lesson using tools/ktouchOLD2typ.pl. This will take care of writing “jump-tables”, a menu and a bit more.

The ktouch-1.0-format consists only of lessons, which are preceded by their names, and separated by blank lines and/or comments (‘#’ at the beginning of the line). So the first non-blank, non-comment line in the file is the name of the first lesson, and the first lesson consists of all the lines up to the next comment or blank line. After the separator (comment or blank line) the name of the second lesson follows and so on.

This is an example of a three-lesson ktouch file (excerpts from the first three lessons of german.ktouch):

#
# Deutsche Training-Datei für KTouch
#

Grundstellung
f f f f f f fff fff fff f f f f f f fff fff fff f f f f f f f fff
j j j j j j jjj jjj jjj j j j j j j jjj jjj jjj j j j j j j j jjj
fff jjj fff jjj jjj fff jjj fff fjf fjf fjf jfj jfj jfj fjf jfjfj

Grundstellung
fff jjj ddd kkk aaa ööö fff jjj ddd kkk aaa ööö fff jjj ddd kkkff
fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jkö fda jköfd
s s s s s s sss sss sss s s s s s s sss sss sss s s s s s s s sss

#Zwei wichtige Vokale: e und i
e und i
asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdf ölkj fdsa jklö asdfö
das dass lös fad dass lös als dass las lös fad dass als dass dass
ded ded ded dej dek del deö ded deö del dek dej ded dej dek delde

Once you are done, use tools/ktouchOLD2typ.pl to convert the file: ‘ktouchOLD2typ.pl lesson.ktouch’ converts lesson.ktouch to lesson.typ. It is important that the input file ends in ‘.ktouch’, otherwise ktouchOLD2typ.pl will skip it. Warning: this will overwrite lesson.typ without asking you !

You can customize the number of lines that ktouchOLD2typ.pl uses for each drill by modifying the relevant variable in tools/ktouchOLD2typ.pl.

Obviously, the disadvantage of this is that you cannot make use of all of gtypist’s features (but the output file is very readable, so you can edit it to use more of gtypist’s features).

If you prefer, you can use the new ktouch 1.6 XML file format, which looks like this (from english.ktouch.xml:

<KTouchLecture>
 <Title>SAMPLE TITLE</Title>
 <Comment>SAMPLE COMMENT</Comment>
 <Levels>
  <Level>
   <NewCharacters>jf</NewCharacters>
   <Line>ff jjj jf jfj j jff fjjf ff jfj j jff ff jjj fjj fjj fjf jfj jjj</Line>
   <Line>f fjjf jjj fjjf jfj fjjf f j fjj jff j fjj jf jjj fjjf f f fjf</Line>
   <Line>fjjf jff jjj ff jf fjjf fjjf f fjj fjj jf fjf j jj f j fjj jj jjj</Line>
   <Line>...</Line>
  </Level>
  <Level>
   <NewCharacters>kd</NewCharacters>
   <Line>jjd fdfj rd djd jk jd k dd fjk fd fk k jfkd dkkf fk dkd dd jk k</Line>
   <Line>dfj djd fkkk fk dff d dkkf fd fk fdfj fk k dkkf djd dff dkd dff</Line>
   <Line>dkd kdk k dkkf k jk fkkk jd k jfkd fk fk jd k d dkd jd k dd rd dffd</Line>
   <Line>...</Line>
  </Level>
 </Levels>
</KTouchLecture>

In this format, the content of the <NewCharacters> tag acts as a title for the following drill. You can convert *.ktouch.xml to *.typ with ‘ktouch2typ.pl lesson.ktouch.xml’, which will create lesson.ktouch.typ (again, this may overwrite without asking you).


6.2 Exercises from fortune

Using gtypist-mode.el you can quickly create lessons with text from the program fortune (or the Emacs-internal yow if fortune isn’t available, as is usually the case on Windows).

Once you installed gtypist-mode.el (see Emacs mode), you can open a file with the ‘.typ’ extension and run C-c C-f to create a drill (D: by default, use C-u or C-u C-u prefix to change).


6.3 Design patterns for lessons

6.3.1 Structure of lesson files

  • Use mixture of drills and speed tests (this is more fun for the user)
  • Use some “practice-only” exercises (d:/s:) (possibly mixed with “real” exercises) followed by a “final test”. esp.typ uses this scheme.

6.3.2 Patterns for exercises

  • When introducing a new key, start out by mixing other (known) keys of the same finger in with the new key in the first drill(s). Here is an example (from t.typ, line 237):
    I:Use your J-finger for the H key.
    *:_T_R_L23
    D:jjj jhj jjj jhj jjj jhj
    
  • use ’word, word.’ repeatedly to practice ,/.

6.4 Findwords script

The tools/findwords script in the GNU Typist sources is there to assist you in creating new lessons.

6.4.1 Purpose

In the beginning when you are creating a new tutorial from scratch, it’s not very easy to form words and even sentences while the range of letters you can use is restricted. Sometimes you want to insert some paragraph “targeted” at some special combination of two or three letters. This is even harder.

For this purpose we created findwords. It uses the dictionaries from the aspell database (free multilingual spellchecker).

6.4.2 Installing

You will need the aspell and aspell-LG packages, where LG is the ISO language code for the language you want to use.

After a successful installation, you will have to make a little change in your configuration so that aspell’s master database is the one of your language. This can be done two different ways:

  1. In your home directory create the file
    .aspell.conf and add this line:
    master LANGUAGE
  2. Create /usr/share/pspell/LG-aspell.pwli
    and add this line:
    /usr/lib/aspell/LG
    Make sure your locale setting is LG.

In the above, LG means ISO language code (eg. ‘en’, ‘fr’, ‘cs’) and LANGUAGE means name of the database in /usr/lib/aspell (eg. ‘english.multi’, ‘french’, ‘czech’).

You can try if it works by typing:

        aspell dump master | less

6.4.3 Using findwords

The syntax is as follows:
./findwords letters [combination]

In the mandatory letters argument you must list the letters that you want use without any spaces. You may use the dot (‘.’) to say ‘all letters’. The second argument combination is optional and you can specify there what combination of letters are you searching for.

Some examples:

  • ./findwords asdfjkleruio
    We are looking for all words composed from the listed letters.
  • ./findwords asdfjkleruio sa
    We search words containing the combination ‘sa’, but only these composed from specified letters.
  • ./findwords . col
    Words can contain all letters, but must have ‘col’ somewhere inside.

7 Emacs mode

gtypist now comes with an Emacs major-mode which does syntax-highlighting, indentation and has some convenient commands for counting labels, a goto-label-command, inserting properly centered banners, special comments and a bit more.

Copy this file from tools/gtypist-mode.el to wherever you put your local elisp files (e.g. ~/elisp) and put this in your ~/.emacs (adapt path!):

(autoload 'gtypist-mode "~/elisp/gtypist-mode")

or put it in load-path (‘make install’ in the sources should take care of this for GNU Emacs, or if you are using the Debian package, it installs it here for you) and use this instead:

(autoload 'gtypist-mode "gtypist-mode")

and add this to your ~/.emacs:

(setq auto-mode-alist       
      (cons '("\\.typ\\'" . gtypist-mode) auto-mode-alist))

All this is also mentioned in the README-section of tools/gtypist-mode.el.

Here are the commands along with the keybindings:

C-c C-i, M-x gtypist-mode-info

This shows gtypist’s texinfo-documentation, starting at node “Script file commands” (see Script file commands). With prefix, start at the top-node.

C-c M-g, M-x gtypist-mode-goto-label

Query for a label to go to (with completion).

C-c C-l, M-x gtypist-mode-next-label

This command inserts the next label in a numbered sequence of labels. For example, if you insert

*:SERIES1_L1

and hit C-c C-l then gtypist-mode will insert

*:SERIES1_L2
C-c C-b, M-x gtypist-mode-insert-banner

This command inserts a centered B: command. It’s centered on 66 columns because “gtypist <version>” is in the right corner (prompts for content).

C-c C-r, M-x gtypist-mode-insert-hrule

Inserts a horizontal rule (comment) consisting of dashes.

C-c C-n, M-x gtypist-mode-new-lesson

Insert the comments (header) and a label to start a new lesson (prompts for name).

C-c C-f, M-x gtypist-mode-fortune-to-drill

Insert a drill (D:) with text from fortune (or yow if fortune isn’t available). Use C-u prefix to get S:, and C-u C-u to get d:.

Run C-h m for a complete list of commands and their keybindings.

If you find bugs or if you think there’s something else this mode could do, please write to bug-gtypist@gnu.org.


8 VIM Syntax highlighting

File tools/gtypist.vim provides vim syntax highlighting for gtypist lesson files (vim 5.x, 6.x and 7.x (and higher)).

To install it for version 5.x (or any version on Windows), copy the file to where the syntax-files go (for example /usr/share/vim/vim56/syntax/ for Vim 5.6; if everything else fails you can search for e.g. xml.vim) and add this to ~/.vimrc ($HOME/_vimrc on Windows):

autocmd BufNewFile,BufRead *.typ set ft=gtypist 

Installation for Vim >= 6.x is simpler: first create ~/.vim/syntax/: mkdir -p ~/.vim/syntax and put tools/gtypist.vim in there. Finally add this to ~/.vimrc:

autocmd BufNewFile,BufRead *.typ setf gtypist

In case you are using the debian package, gtypist.vim will already be installed for you, but you need to enable it explicitly:

sudo apt-get install vim-addon-manager
vim-addons install gtypist

In any case, make sure that the vimrc file has the following command at the top ahead of all other autocmd-commands:

autocmd!  " Remove ALL autocommands for the current group

(which avoids problems if vimrc is sourced more than once). And if you haven\’t done it already, you need to enable syntax highlighting (this may need to be before the autocmd ... gtypist).

syntax on " turn on syntax highlighting

You can verify that tools/gtypist.vim is active by running :set ft? in vim, which should return filetype=gtypist.

All of this is also mentioned in the README-section of tools/gtypist.vim.


9 Environment Variables

GNU Typist uses the following environment variables:

LANG

GNU Typist offers Native Language Support (NLS) with support of the gettext library, this means that if your system supports it, the language of the messages shown by gtypist can be chosen. By now gtypist is distributed with messages in English, Czech, Finnish, French, German and Spanish. To use a particular NLS use the environment variable LANG and set it to the appropriate ‘LL_CC’ combination where ‘LL’ is an ISO 639 two-letter language code and ‘CC’ is an ISO 3166 two-letter country code (e.g. ‘es_ES’ for Spain and de_DE for Germany). In some systems it will be also necessary to set the environment variable LANGUAGE to the same value.

If you want to translate messages to a different language (or if you want to correct a message), please communicate it to bug-gtypist@gnu.org.

GTYPIST_PATH

Lists the directories that the program will look in for script files. It has the standard format for paths, that is, a list of directories separated by ‘:’s. To open a script, gtypist will try the following paths: (1) to use the script name alone (2) it will append each one of the directories specified in the variable GTYPIST_PATH and (3) it will append the directory used during the installation process (e.g. /usr/local/share/gtypist or /usr/share/gtypist).

TERM

Used by curses to manage the display.

TERMINFO

This may need to be set if the path to the terminfo database is different between the system the binary was compiled on and the one it is being run on. For example, in older Slackware systems, the terminfo database resides in /usr/lib/terminfo. On RedHat Linux, it is in /usr/share/terminfo. If the program complains about the terminal type, and the value of TERM is correct, check into this.


10 Errors and omissions

GNU Typist does not go to much effort to minimize terminal output. In particular, the flashing block cursor can cause a lot of cursor movement. Using the terminal’s own cursor will help if this becomes a problem.

In speed tests, the program does not allow backspacing or deletion past the beginning of the screen line, or back through Tab characters. This is purely to simplify screen updating.

Colour curses modes do not seem to work well with UnixWare. In particular, reverse video is not always rendered correctly on some terminal types, and xterms.

Please see the TODO file in the source distribution for more things that need to be fixed.


Appendix A History of GNU Typist

  • The initial program was written for VAX/VMS BASIC by someone at Harris Corp (Ft. Lauderdale, FL).
  • D. Jason Penney rewrote it for Microsoft BASICA
  • D. Jason Penney rewrote it in C and the curses library
  • Simon Baldwin rewrote the version of D. Jason Penney, his innovations are described in the NEWS file (versions 2.2 to 2.2b). He is the holder of the copyright for GNU Typist (that is distributed under the GPL). Simon also wrote a version of Typist in Java that initially he called JTypist but that now is called Typist again:

    http://www.geocities.com/simon_baldwin/typist/

  • Since 1997, Ben Armstrong has helped by fixing bugs and maintaining a Debian package.
  • In 2000, Vladimir Támara and Igor Támara became the maintainers of the C version. Before November 2000, GNU Typist was maintained as part of the Structio project.
  • November 2000, accepted as a GNU package! Renamed to GNU Typist (or gtypist).
  • In May 2001, Michael Opdenacker, who learned touch typing with GNU Typist, became the new maintainer. Project development is now hosted on http://savannah.gnu.org/projects/gtypist/.
  • In June 2001, Felix Natter joined and made major contributions to the project: lesson imports from other tutors, tool enhancements, new tutorial capabilities, , Emacs mode, arrow key based interface, and many more!
  • In 2003, Dmitry Rutsky joined joined the development team and brought in a dramatic number ideas, hacks and improvements, and he’s not done yet!
  • In April 2008, Paul Goins took over as maintainer of GNU Typist, adding a few enhancements (especially building under Windows with MinGW), making some documentation updates and changing the license to GPL version 3.
  • In December 2010, Tim Marston took over as maintainer of GNU Typist, adding some enhancements and support for the Colemak keyboard layout.

Appendix B GNU Free Documentation License

Version 1.2, November 2002
Copyright © 2000,2001,2002 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
  1. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

  2. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

    A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

    The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

    A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”.

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

    The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

    A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition.

    The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

  3. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

  4. COPYING IN QUANTITY

    If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

  5. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
    4. Preserve all the copyright notices of the Document.
    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
    8. Include an unaltered copy of this License.
    9. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
    11. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
    13. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version.
    14. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section.
    15. Preserve any Warranty Disclaimers.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

    You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

  6. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.”

  7. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

  8. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

  9. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

    If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

  10. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

  11. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

  Copyright (C)  year  your name.
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
  Texts.  A copy of the license is included in the section entitled ``GNU
  Free Documentation License''.

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with…Texts.” line with this:

    with the Invariant Sections being list their titles, with
    the Front-Cover Texts being list, and with the Back-Cover Texts
    being list.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


gtypist-2.9.5/COPYING0000644000175000017500000010451312204155736011217 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gtypist-2.9.5/AUTHORS0000644000175000017500000000026712204155736011235 00000000000000Authors of GNU Typist. See also the files THANKS and ChangeLog. Original author: Simon Baldwin Current maintainer: GNU Typist Development Team gtypist-2.9.5/README0000644000175000017500000000165612204155736011050 00000000000000 GNU Typist - Typing Tutor Introduction ------------ GNU Typist (or gtypist) is free software that assist you in learning to type correctly. It is intended to be used on a raw terminal without graphics. It has been compiled and used in Unix (GNU/Linux, Aix, Solaris, openBSD) and also in DOS/Windows (DOS 6.22, Windows 98, Windows XP). GNU Typist is GNU software. You can read recent news about this software in its homepage: http://www.gnu.org/software/gtypist/ Files in this package which provide further information: -------------------------------------------------------- - INSTALL: compiling and installation instructions. - COPYING: copying conditions - NEWS: description of major changes in this release. - AUTHORS, THANKS: list of authors and other contributors. - TODO: ideas on how you could help us improve gtypist. Feedback -------- Send your suggestions, bug reports or patches to bug-gtypist@gnu.org gtypist-2.9.5/typefortune.10000644000175000017500000000175312204155736012634 00000000000000.TH TYPEFORTUNE "1" "March 2002" "typefortune" FSF .SH NAME typefortune \- manual page for typefortune (part of gtypist) .SH SYNOPSIS .B typefortune [ \fIOptions\fR... ] .SH DESCRIPTION typefortune creates a gtypist lesson-file from `fortune' and runs `gtypist' on it. .SH OPTIONS .TP \fB\-d\fR use D: (instead of S:) .TP \fB\-s\fR use `fortune -s' .TP \fB\-l\fR use `fortune -l' .TP \fB\-n\fR practice fortunes (default=1) .TP \fB\-o\fR pass options to gtypist .SH EXAMPLE .IP To practice 3 fortunes and run gtypist as --silent -e 5 --word-processor: .IP `typefortune -n 3 -o 'silent e,5 word-processor' .IP .SH "SEE ALSO" The full documentation for .B gtypist (and typefortune) is maintained as a Texinfo manual. If the .B info and .B gtypist programs are properly installed at your site, the command .IP .B info gtypist .PP (section "Using typefortune") should give you access to the complete manual. gtypist-2.9.5/aclocal.m40000644000175000017500000013011612351567440012024 00000000000000# generated automatically by aclocal 1.14.1 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.14' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.14.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.14.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PATH_LISPDIR # --------------- AC_DEFUN([AM_PATH_LISPDIR], [AC_PREREQ([2.60])dnl # If set to t, that means we are running in a shell under Emacs. # If you have an Emacs named "t", then use the full path. test x"$EMACS" = xt && EMACS= AC_CHECK_PROGS([EMACS], [emacs xemacs], [no]) AC_ARG_VAR([EMACS], [the Emacs editor command]) AC_ARG_VAR([EMACSLOADPATH], [the Emacs library search path]) AC_ARG_WITH([lispdir], [AS_HELP_STRING([--with-lispdir], [override the default lisp directory])], [ lispdir="$withval" AC_MSG_CHECKING([where .elc files should go]) AC_MSG_RESULT([$lispdir])], [ AC_CACHE_CHECK([where .elc files should go], [am_cv_lispdir], [ if test $EMACS != "no"; then if test x${lispdir+set} != xset; then # If $EMACS isn't GNU Emacs or XEmacs, this can blow up pretty badly # Some emacsen will start up in interactive mode, requiring C-x C-c to exit, # which is non-obvious for non-emacs users. # Redirecting /dev/null should help a bit; pity we can't detect "broken" # emacsen earlier and avoid running this altogether. AC_RUN_LOG([$EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' conftest.out]) am_cv_lispdir=`sed -n \ -e 's,/$,,' \ -e '/.*\/lib\/x*emacs\/site-lisp$/{s,.*/lib/\(x*emacs/site-lisp\)$,${libdir}/\1,;p;q;}' \ -e '/.*\/share\/x*emacs\/site-lisp$/{s,.*/share/\(x*emacs/site-lisp\),${datarootdir}/\1,;p;q;}' \ conftest.out` rm conftest.out fi fi test -z "$am_cv_lispdir" && am_cv_lispdir='${datadir}/emacs/site-lisp' ]) lispdir="$am_cv_lispdir" ]) AC_SUBST([lispdir]) ])# AM_PATH_LISPDIR # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # -*- Autoconf -*- # Obsolete and "removed" macros, that must however still report explicit # error messages when used, to smooth transition. # # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([AM_CONFIG_HEADER], [AC_DIAGNOSE([obsolete], ['$0': this macro is obsolete. You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl AC_CONFIG_HEADERS($@)]) AC_DEFUN([AM_PROG_CC_STDC], [AC_PROG_CC am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc AC_DIAGNOSE([obsolete], ['$0': this macro is obsolete. You should simply use the 'AC][_PROG_CC' macro instead. Also, your code should no longer depend upon 'am_cv_prog_cc_stdc', but upon 'ac_cv_prog_cc_stdc'.])]) AC_DEFUN([AM_C_PROTOTYPES], [AC_FATAL([automatic de-ANSI-fication support has been removed])]) AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/gettext.m4]) m4_include([m4/iconv.m4]) m4_include([m4/intlmacosx.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/nls.m4]) m4_include([m4/po.m4]) m4_include([m4/progtest.m4]) gtypist-2.9.5/TODO0000644000175000017500000001535512204155736010661 00000000000000------------------------------------------------------------------------- THINGS TO DO for GNU Typist See our latest TODO file at http://git.savannah.gnu.org/gitweb/?p=gtypist.git;a=blob_plain;f=TODO;hb=master If you are interested in helping for some of the below items, we will be glad to have you in the development team! You can contact us by writing to bug-gtypist@gnu.org. Your suggestions are welcome too! ------------------------------------------------------------------------- FOR 2.9.2 RELEASE * test UTF-8 character input on MinGW build * fix this weird bug on the MinGW build: - on Windows, run "gtypist.exe cs.typ" - press ENTER 7 times (this should enter the lesson "Lekce T1") - press ESCAPE, E, Y (to return to the menu) - press ESCAPE (to go back to the previous menu) - press ENTER (to select "Série T") almost immediately, the first lesson on the "Série T" menu is selected, automatically, without any further key presses. FOR 2.10 RELEASE * support multibyte encodings other than UTF8?? * add a "beginner mode" which is enabled by default, and can be turned off by --expert/-x * this would explicitly show "return characters" (patch exists) * this would set -e 10 * includes a help page that explains drills/speedtests, how to resize a terminal window, ... * how is that help page shown? * either we have a beginner.typ that is executed before gtypist.typ in beginner mode (requires switching of *.typ during runtime!), OR * we have special T:[BEGINNER] commands that are only executed in beginner mode * Show correct line numbers when nonexistent label was hit in the M command. SHORT TERM * Show the label of the last exercise on exit (so that the user can easily return to it using -l). Currently, restarting at one of these labels won't set the banner, though. * Show a warning when caps lock is active * I'd like an option that only enabled wordwrapping. The -w option does enable wordwrapping, but it also changes how paragraph breaks and spaces after periods are handled, which I don't want. Requested by Adam Olsen * Make sure that all source files come with a suitable copyright statement (may be different with lessons?) * Make sure that the numpad's [ENTER] key is accepted in numpad lessons. (Reported by gherald@myway.com) * Another idea is to generate our lessons files directly in our format from spelling dictionaries, as they do in KTouch. * Reuse lessons from dvorak7min and possibly other typing tutors. * Replace 'getopt' by 'GNU gengetopt' * Improve the French translation of "lesson file", which includes both Drills (translated by "Exercice") and Speed tests ("Tests de vitesse"). * Make a separate package for lessons, so that lessons compatible with a given gtypist version can be released without having to release the tool again. This is already done by other packages: gimp plug-ins or TeTeX fonts are released separately. This is definitely need for this tool, for which tutorial files are at least as valuable as the raw program itself. * Provide a variant of the `n.typ' calculator keypad lesson, in which the `.' character is replaced by `,'. Useful for some european keyboards. * Add configuration file support. Should be very useful, in particular for teachers! * allow strings from a .typ file to be translated (things like "lesson: ") * Mac OS X Package? => there is already macports or similar! * Test wpemu option in combination with multibyte lessons MEDIUM TERM * Windows installer, shortcuts for different lessons and manual? * Improve the interface by adding 2 interfaces: * Graphical interface (Probably GTK) The benefits we can expect from a GTK interface are: - Much attractive than the `ncurses' interface. - Not using `ncurses' should avoid problems supporting different terminal types. - We could have a graphical control panel, to change settings that are so far only available in the command line (keyboard type, silent mode...) - Easy access to help and manual - Could still be compiled on Win32 on which GTK has been ported. * Audio interface Could use a system like Speech Dispatcher to read the lessons for visually impaired people or people living in very dense fog. We could also support audio typing exercises. Users would type from a text read by a speaker. Several audio files would be need, according to the language and the targeted typing speeded. That would be useful for people like secretaries and journalists. All this could be implemented in a clean way by implementing an event based mechanism. The core application could send interface messages to a generic interface manager, which could according to user settings, ask the graphical, text or audio interface to send it to the user. Specifications are on going. * Add support for saving the last lesson (or part of a lesson) the user was working on, so the user can easily pick up where s/he left off. (idea by Enrique Pedroso) * Improve the documentation of course files * Broaden our lesson database: - Create new lessons for other languages and keyboard types. - Translate lessons in other languages (for languages that share the same keyboard, you can reuse instructions and drills) - We can also look for teachers who are ready to contribute lessons or let us reuse theirs... - Reuse lessons from old typing teaching books which copyrights have expired (how much time does it take?). - This will most likely require UTF-8 support * Better typing statistics. Speed and accuracy for individual keys, and individual fingers. This helps to indicate where extra practice may be useful to the user (see Jtypist which displays this as graphical bars, using color to indicate areas that need work). A measure of typing rhythm would also be useful. * Emulate other keyboard types. For example, Jtypist can pretend that you have a French, German, or Dvorak keyboard on the system even if you don't. It will translate keypresses between keyboard types before checking them for correctness, and registering timings. This work requires that the program should have keyboard layout maps available to it, and arises as a result of maintaining typing statistics by key and by finger (the program needs to know what key is operated by which finger). LONG TERM * While typing, graphically show the finger that is supposed to be used. * Read lessons in the file formats of other free typing tutors (such as Jtypist). gtypist-2.9.5/ABOUT-NLS0000644000175000017500000026713312231002477011414 000000000000001 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. 1.1 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. Installers may use special options at configuration time for changing the default behaviour. The command: ./configure --disable-nls will _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl' library and will decide to use it. If not, you may have to to use the `--with-libintl-prefix' option to tell `configure' where to look for it. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.2 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.3 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.4 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of June 2010. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca +--------------------------------------------------+ a2ps | [] [] | aegis | | ant-phone | | anubis | | aspell | [] [] | bash | | bfd | | bibshelf | [] | binutils | | bison | | bison-runtime | [] | bluez-pin | [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] [] | cpio | | cppi | | cpplib | [] | cryptsetup | | dfarc | | dialog | [] [] | dico | | diffutils | [] | dink | | doodle | | e2fsprogs | [] | enscript | [] | exif | | fetchmail | [] | findutils | [] | flex | [] | freedink | | gas | | gawk | [] [] | gcal | [] | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] [] | gettext-tools | [] [] | gip | [] | gjay | | gliv | [] | glunarclock | [] [] | gnubiff | | gnucash | [] | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | | gold | | gpe-aerial | | gpe-beam | | gpe-bluetooth | | gpe-calendar | | gpe-clock | [] | gpe-conf | | gpe-contacts | | gpe-edit | | gpe-filemanager | | gpe-go | | gpe-login | | gpe-ownerinfo | [] | gpe-package | | gpe-sketchbook | | gpe-su | [] | gpe-taskmanager | [] | gpe-timesheet | [] | gpe-today | [] | gpe-todo | | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | [] [] | gsasl | | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] [] [] | gtick | | gtkam | [] | gtkorphan | [] | gtkspell | [] [] [] | gutenprint | | hello | [] | help2man | | hylafax | | idutils | | indent | [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | | iso_639 | [] [] [] [] | iso_639_3 | | jwhois | | kbd | | keytouch | [] | keytouch-editor | | keytouch-keyboa... | [] | klavaro | [] | latrine | | ld | [] | leafpad | [] [] | libc | [] [] | libexif | () | libextractor | | libgnutls | | libgpewidget | | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | [] | libidn | | lifelines | | liferea | [] [] | lilypond | | linkdr | [] | lordsawar | | lprng | | lynx | [] | m4 | | mailfromd | | mailutils | | make | | man-db | | man-db-manpages | | minicom | | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | | psmisc | | pspp | [] | pwdutils | | radius | [] | recode | [] [] | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] [] | sed | [] [] | sharutils | [] [] | shishi | | skencil | | solfege | | solfege-manual | | soundtracker | | sp | | sysstat | | tar | [] | texinfo | | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] [] | wyslij-po | | xchat | [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] | +--------------------------------------------------+ af am an ar as ast az be be@latin bg bn_IN bs ca 6 0 1 2 3 19 1 10 3 28 3 1 38 crh cs da de el en en_GB en_ZA eo es et eu fa +-------------------------------------------------+ a2ps | [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] () | anubis | [] [] | aspell | [] [] [] [] [] | bash | [] [] [] | bfd | [] | bibshelf | [] [] [] | binutils | [] | bison | [] [] | bison-runtime | [] [] [] [] | bluez-pin | [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] [] [] | cflow | [] [] | clisp | [] [] [] [] | coreutils | [] [] [] [] | cpio | | cppi | | cpplib | [] [] [] | cryptsetup | [] | dfarc | [] [] [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] | dink | [] [] [] | doodle | [] | e2fsprogs | [] [] [] | enscript | [] [] [] | exif | () [] [] | fetchmail | [] [] () [] [] [] | findutils | [] [] [] | flex | [] [] | freedink | [] [] [] | gas | [] | gawk | [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] [] | gip | [] [] [] [] | gjay | [] | gliv | [] [] [] | glunarclock | [] [] | gnubiff | () | gnucash | [] () () () () | gnuedu | [] [] | gnulib | [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] | gpe-aerial | [] [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] [] [] | gpe-edit | [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] () [] [] [] | gprof | [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] | grub | [] [] | gsasl | [] | gss | | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] () [] | gtkam | [] [] () [] [] | gtkorphan | [] [] [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | [] [] [] | hello | [] [] [] [] | help2man | [] | hylafax | [] [] | idutils | [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] [] [] [] () [] [] [] () | iso_3166_2 | () | iso_4217 | [] [] [] () [] [] | iso_639 | [] [] [] [] () [] [] | iso_639_3 | [] | jwhois | [] | kbd | [] [] [] [] [] | keytouch | [] [] | keytouch-editor | [] [] | keytouch-keyboa... | [] | klavaro | [] [] [] [] | latrine | [] () | ld | [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | [] [] | libgphoto2 | [] () | libgphoto2_port | [] () [] | libgsasl | | libiconv | [] [] [] [] [] | libidn | [] [] [] | lifelines | [] () | liferea | [] [] [] [] [] | lilypond | [] [] [] | linkdr | [] [] [] | lordsawar | [] | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] [] | man-db | | man-db-manpages | | minicom | [] [] [] [] | mkisofs | | myserver | | nano | [] [] [] | opcodes | [] [] | parted | [] [] | pies | | popt | [] [] [] [] [] | psmisc | [] [] [] | pspp | [] | pwdutils | [] | radius | [] | recode | [] [] [] [] [] [] | rosegarden | () () () | rpm | [] [] [] | rush | | sarg | | screem | | scrollkeeper | [] [] [] [] [] | sed | [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | | skencil | [] () [] | solfege | [] [] [] | solfege-manual | [] [] | soundtracker | [] [] [] | sp | [] | sysstat | [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] | tin | [] [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] | vice | () () | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] | wyslij-po | | xchat | [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ crh cs da de el en en_GB en_ZA eo es et eu fa 5 64 105 117 18 1 8 0 28 89 18 19 0 fi fr ga gl gu he hi hr hu hy id is it ja ka kn +----------------------------------------------------+ a2ps | [] [] [] [] | aegis | [] [] | ant-phone | [] [] | anubis | [] [] [] [] | aspell | [] [] [] [] | bash | [] [] [] [] | bfd | [] [] [] | bibshelf | [] [] [] [] [] | binutils | [] [] [] | bison | [] [] [] [] | bison-runtime | [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] | cflow | [] [] [] | clisp | [] | coreutils | [] [] [] [] [] | cpio | [] [] [] [] | cppi | [] [] | cpplib | [] [] [] | cryptsetup | [] [] [] | dfarc | [] [] [] | dialog | [] [] [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] [] [] [] | dink | [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] | freedink | [] [] [] | gas | [] [] | gawk | [] [] [] [] () [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] [] [] | gjay | [] | gliv | [] () | glunarclock | [] [] [] [] | gnubiff | () [] () | gnucash | () () () () () [] | gnuedu | [] [] | gnulib | [] [] [] [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] [] | gpe-aerial | [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] [] [] | gpe-calendar | [] [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] [] | gpe-go | [] [] [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] [] [] [] [] | gprof | [] [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] [] | grub | [] [] [] [] | gsasl | [] [] [] [] [] | gss | [] [] [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] [] [] | gtkam | [] [] [] [] [] | gtkorphan | [] [] [] | gtkspell | [] [] [] [] [] [] [] [] [] | gutenprint | [] [] [] [] | hello | [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] [] | indent | [] [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | () [] [] [] | iso_4217 | [] () [] [] [] [] | iso_639 | [] () [] [] [] [] [] [] [] | iso_639_3 | () [] [] | jwhois | [] [] [] [] [] | kbd | [] [] | keytouch | [] [] [] [] [] [] | keytouch-editor | [] [] [] [] [] | keytouch-keyboa... | [] [] [] [] [] | klavaro | [] [] | latrine | [] [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] [] () | libc | [] [] [] [] [] | libexif | [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] [] | libidn | [] [] [] [] | lifelines | () | liferea | [] [] [] [] | lilypond | [] [] | linkdr | [] [] [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] [] [] | m4 | [] [] [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] [] | man-db | [] [] | man-db-manpages | [] | minicom | [] [] [] [] [] | mkisofs | [] [] [] [] | myserver | | nano | [] [] [] [] [] [] | opcodes | [] [] [] [] | parted | [] [] [] [] | pies | | popt | [] [] [] [] [] [] [] [] [] | psmisc | [] [] [] | pspp | | pwdutils | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () () () () | rpm | [] [] | rush | | sarg | [] | screem | [] [] | scrollkeeper | [] [] [] [] | sed | [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] | shishi | [] | skencil | [] | solfege | [] [] [] [] | solfege-manual | [] [] | soundtracker | [] [] | sp | [] () | sysstat | [] [] [] [] [] | tar | [] [] [] [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux-ng | [] [] [] [] [] [] | vice | () () () | vmm | [] | vorbis-tools | [] | wastesedge | () () | wdiff | [] | wget | [] [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] | +----------------------------------------------------+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4 ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne +-----------------------------------------------+ a2ps | [] | aegis | | ant-phone | | anubis | [] [] | aspell | [] | bash | | bfd | | bibshelf | [] [] | binutils | | bison | [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] | cpio | | cppi | | cpplib | | cryptsetup | | dfarc | [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] | dink | | doodle | | e2fsprogs | | enscript | | exif | [] | fetchmail | | findutils | | flex | | freedink | [] | gas | | gawk | | gcal | | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] | gettext-tools | [] | gip | [] [] | gjay | | gliv | | glunarclock | [] | gnubiff | | gnucash | () () () () | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | [] | gold | | gpe-aerial | [] | gpe-beam | [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] | gpe-contacts | [] [] | gpe-edit | [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] | gpe-timesheet | [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | | gsasl | | gss | | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | | gtick | | gtkam | [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | | hello | [] [] [] | help2man | | hylafax | | idutils | | indent | | iso_15924 | [] [] | iso_3166 | [] [] () [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] | iso_639 | [] [] | iso_639_3 | [] | jwhois | [] | kbd | | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | klavaro | [] | latrine | [] | ld | | leafpad | [] [] [] | libc | [] | libexif | | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | | libidn | | lifelines | | liferea | | lilypond | | linkdr | | lordsawar | | lprng | | lynx | | m4 | | mailfromd | | mailutils | | make | [] | man-db | | man-db-manpages | | minicom | [] | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | [] [] [] | psmisc | | pspp | | pwdutils | | radius | | recode | | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] | sed | | sharutils | | shishi | | skencil | | solfege | [] | solfege-manual | | soundtracker | | sp | | sysstat | [] | tar | [] | texinfo | [] | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] | wyslij-po | | xchat | [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +-----------------------------------------------+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1 nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr +---------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] [] | anubis | [] [] [] | aspell | [] [] [] [] [] | bash | [] [] | bfd | [] | bibshelf | [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] () | buzztard | [] [] | cflow | [] | clisp | [] [] | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cppi | [] | cpplib | [] | cryptsetup | [] | dfarc | [] | dialog | [] [] [] [] | dico | [] | diffutils | [] [] [] [] [] [] | dink | () | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | exif | [] [] [] () [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] [] | freedink | [] [] | gas | | gawk | [] [] [] [] | gcal | | gcc | [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] | gip | [] [] [] [] [] | gjay | | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] | gnubiff | [] () | gnucash | [] () () () | gnuedu | [] | gnulib | [] [] [] [] | gnunet | | gnunet-gtk | | gnutls | [] [] | gold | | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] [] | gphoto2 | [] [] [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | grub | [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] [] [] | gutenprint | [] [] | hello | [] [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] [] [] [] | iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | iso_3166_2 | [] [] [] | iso_4217 | [] [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] [] [] | keytouch-editor | [] [] [] | keytouch-keyboa... | [] [] [] | klavaro | [] [] | latrine | [] [] | ld | | leafpad | [] [] [] [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] | libgphoto2_port | [] [] [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] | lifelines | [] [] | liferea | [] [] [] [] [] () () [] | lilypond | [] | linkdr | [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] | make | [] [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | | nano | [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | pies | [] | popt | [] [] [] [] | psmisc | [] [] [] | pspp | [] [] | pwdutils | [] | radius | [] [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () | rpm | [] [] [] | rush | [] [] | sarg | | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] [] [] [] | solfege-manual | [] [] [] | soundtracker | [] | sp | | sysstat | [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] [] | vice | [] | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +---------------------------------------------------+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37 sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW +---------------------------------------------------+ a2ps | [] [] [] [] [] | 27 aegis | [] | 9 ant-phone | [] [] [] [] | 9 anubis | [] [] [] [] | 15 aspell | [] [] [] | 20 bash | [] [] [] | 12 bfd | [] | 6 bibshelf | [] [] [] | 16 binutils | [] [] | 8 bison | [] [] | 12 bison-runtime | [] [] [] [] [] [] | 29 bluez-pin | [] [] [] [] [] [] [] [] | 37 bombono-dvd | [] | 4 buzztard | [] | 7 cflow | [] [] [] | 9 clisp | | 10 coreutils | [] [] [] [] | 22 cpio | [] [] [] [] [] [] | 13 cppi | [] [] | 5 cpplib | [] [] [] [] [] [] | 14 cryptsetup | [] [] | 7 dfarc | [] | 9 dialog | [] [] [] [] [] [] [] | 30 dico | [] | 2 diffutils | [] [] [] [] [] [] | 30 dink | | 4 doodle | [] [] | 7 e2fsprogs | [] [] [] | 11 enscript | [] [] [] [] | 17 exif | [] [] [] | 16 fetchmail | [] [] [] | 17 findutils | [] [] [] [] [] | 20 flex | [] [] [] [] | 15 freedink | [] | 10 gas | [] | 4 gawk | [] [] [] [] | 18 gcal | [] [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] [] | 34 gettext-runtime | [] [] [] [] [] [] [] | 29 gettext-tools | [] [] [] [] [] [] | 22 gip | [] [] [] [] | 22 gjay | [] | 3 gliv | [] [] [] | 14 glunarclock | [] [] [] [] [] | 19 gnubiff | [] [] | 4 gnucash | () [] () [] () | 10 gnuedu | [] [] | 7 gnulib | [] [] [] [] | 16 gnunet | [] | 1 gnunet-gtk | [] [] [] | 5 gnutls | [] [] [] | 10 gold | [] | 4 gpe-aerial | [] [] [] | 18 gpe-beam | [] [] [] | 19 gpe-bluetooth | [] [] [] | 13 gpe-calendar | [] [] [] [] | 12 gpe-clock | [] [] [] [] [] | 28 gpe-conf | [] [] [] [] | 20 gpe-contacts | [] [] [] | 17 gpe-edit | [] [] [] | 12 gpe-filemanager | [] [] [] [] | 16 gpe-go | [] [] [] [] [] | 25 gpe-login | [] [] [] | 11 gpe-ownerinfo | [] [] [] [] [] | 25 gpe-package | [] [] [] | 13 gpe-sketchbook | [] [] [] | 20 gpe-su | [] [] [] [] [] | 30 gpe-taskmanager | [] [] [] [] [] | 29 gpe-timesheet | [] [] [] [] [] | 25 gpe-today | [] [] [] [] [] [] | 30 gpe-todo | [] [] [] [] | 17 gphoto2 | [] [] [] [] [] | 24 gprof | [] [] [] | 15 gpsdrive | [] [] [] | 11 gramadoir | [] [] [] | 11 grep | [] [] [] | 10 grub | [] [] [] | 14 gsasl | [] [] [] [] | 14 gss | [] [] [] | 11 gst-plugins-bad | [] [] [] [] | 26 gst-plugins-base | [] [] [] [] [] | 24 gst-plugins-good | [] [] [] [] | 24 gst-plugins-ugly | [] [] [] [] [] | 29 gstreamer | [] [] [] [] | 22 gtick | [] [] [] | 13 gtkam | [] [] [] | 20 gtkorphan | [] [] [] | 14 gtkspell | [] [] [] [] [] [] [] [] [] | 45 gutenprint | [] | 10 hello | [] [] [] [] [] [] | 21 help2man | [] [] | 7 hylafax | [] | 5 idutils | [] [] [] [] | 17 indent | [] [] [] [] [] [] | 30 iso_15924 | () [] () [] [] | 16 iso_3166 | [] [] () [] [] () [] [] [] () | 53 iso_3166_2 | () [] () [] | 9 iso_4217 | [] () [] [] () [] [] | 26 iso_639 | [] [] [] () [] () [] [] [] [] | 38 iso_639_3 | [] () | 8 jwhois | [] [] [] [] [] | 16 kbd | [] [] [] [] [] | 15 keytouch | [] [] [] | 16 keytouch-editor | [] [] [] | 14 keytouch-keyboa... | [] [] [] | 14 klavaro | [] | 11 latrine | [] [] [] | 10 ld | [] [] [] [] | 11 leafpad | [] [] [] [] [] [] | 33 libc | [] [] [] [] [] | 21 libexif | [] () | 7 libextractor | [] | 1 libgnutls | [] [] [] | 9 libgpewidget | [] [] [] | 14 libgpg-error | [] [] [] | 9 libgphoto2 | [] [] | 8 libgphoto2_port | [] [] [] [] | 14 libgsasl | [] [] [] | 13 libiconv | [] [] [] [] | 21 libidn | () [] [] | 11 lifelines | [] | 4 liferea | [] [] [] | 21 lilypond | [] | 7 linkdr | [] [] [] [] [] | 17 lordsawar | | 1 lprng | [] | 3 lynx | [] [] [] [] | 17 m4 | [] [] [] [] | 19 mailfromd | [] [] | 3 mailutils | [] | 5 make | [] [] [] [] | 21 man-db | [] [] [] | 8 man-db-manpages | | 4 minicom | [] [] | 16 mkisofs | [] [] | 9 myserver | | 0 nano | [] [] [] [] | 21 opcodes | [] [] [] | 11 parted | [] [] [] [] [] | 15 pies | [] [] | 3 popt | [] [] [] [] [] [] | 27 psmisc | [] [] | 11 pspp | | 4 pwdutils | [] [] | 6 radius | [] [] | 9 recode | [] [] [] [] | 28 rosegarden | () | 0 rpm | [] [] [] | 11 rush | [] [] | 4 sarg | | 1 screem | [] | 3 scrollkeeper | [] [] [] [] [] | 27 sed | [] [] [] [] [] | 30 sharutils | [] [] [] [] [] | 22 shishi | [] | 3 skencil | [] [] | 7 solfege | [] [] [] [] | 16 solfege-manual | [] | 8 soundtracker | [] [] [] | 9 sp | [] | 3 sysstat | [] [] | 15 tar | [] [] [] [] [] [] | 23 texinfo | [] [] [] [] [] | 17 tin | | 4 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux-ng | [] [] [] [] | 20 vice | () () | 1 vmm | [] | 4 vorbis-tools | [] | 6 wastesedge | | 2 wdiff | [] [] | 7 wget | [] [] [] [] [] | 26 wyslij-po | [] [] | 8 xchat | [] [] [] [] [] [] | 36 xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63 xkeyboard-config | [] [] [] | 22 +---------------------------------------------------+ 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If June 2010 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.5 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams. gtypist-2.9.5/depcomp0000755000175000017500000005601612302342414011533 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gtypist-2.9.5/config.rpath0000755000175000017500000004443512231002477012473 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2013 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gtypist-2.9.5/missing0000755000175000017500000001533012302342414011547 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gtypist-2.9.5/Makefile.in0000644000175000017500000007301712372333377012242 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in ABOUT-NLS $(dist_bin_SCRIPTS) COPYING \ THANKS TODO compile config.guess config.rpath config.sub \ depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" SCRIPTS = $(dist_bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz GZIP_ENV = --best DIST_TARGETS = dist-xz dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMACS = @EMACS@ EMACSLOADPATH = @EMACSLOADPATH@ EXEEXT = @EXEEXT@ GEN_MAN = @GEN_MAN@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ POW_LIB = @POW_LIB@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ lispdir = @lispdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = m4 po lessons tools doc src dist_bin_SCRIPTS = typefortune man_MANS = typefortune.1 EXTRA_DIST = config.rpath src/gtypist.1 typefortune.1 configure-w32 version.sh \ configure-w32.in autogen.sh INSTALL.in TODO QUESTIONS ACLOCAL_AMFLAGS = -I m4 all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-dist_binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(SCRIPTS) $(MANS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-dist_binSCRIPTS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_binSCRIPTS uninstall-man uninstall-man: uninstall-man1 .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_binSCRIPTS \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dist_binSCRIPTS uninstall-man uninstall-man1 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gtypist-2.9.5/config.h.in0000644000175000017500000001575112351567451012220 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_ARGZ_H /* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the `getwd' function. */ #undef HAVE_GETWD /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_LANGINFO_H /* Define to 1 if you have the header file. */ #undef HAVE_LIBINTL_H /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the `nl_langinfo' function. */ #undef HAVE_NL_LANGINFO /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_EXT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strcspn' function. */ #undef HAVE_STRCSPN /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 if you have the `__argz_count' function. */ #undef HAVE___ARGZ_COUNT /* Define to 1 if you have the `__argz_next' function. */ #undef HAVE___ARGZ_NEXT /* Define to 1 if you have the `__argz_stringify' function. */ #undef HAVE___ARGZ_STRINGIFY /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to empty if the keyword `volatile' does not work. Warning: valid code using `volatile' can become incorrect without. Disable with care. */ #undef volatile gtypist-2.9.5/ChangeLog0000644000175000017500000007376112372071604011745 000000000000002014-08-11 Tim Marston * version.sh, NEWS: updated for 2.9.5 2014-01-27 Felix Natter * configure.ac: added check for libtinfo 2013-10-20 Tim Marston * configure.ac, src/Makefile.am: fix --disable-nls on platforms where iconv isn't part of libc, thanks to Christian Weisgerber . 2013-06-04 Tim Marston * configure.ac: updated for gettext 0.18.2 2013-06-03 Tim Marston * version.sh: updated to 2.9.3 2013-06-01 Felix Natter * fix ktouch2typ.pl according to bug report from Alexei Matveev : - handle entities correctly - truncate lines longer than 80 cols (will be fixed properly in 2.10) - remove spaces at the beginning/end of line/title - don't reuse lesson title #n-1 if #n has no title, this is confusing 2012-12-17 Tim Marston * version.sh: updated to 2.9.2 2011-11-28 Tim Marston * version.sh: updated to 2.9.1 2011-11-15 Felix Natter * configure.ac: clean up, remove checks for BSD curses 2011-11-07 Felix Natter * configure-w32.in: support NLS (gettext) on MinGW 2011-11-02 Tim Marston * INSTALL, configure-w32: updated windows build system and documentation 2011-10-31 Tim Marston * version.sh: updated to 2.9 2011-10-30 Tim Marston * configur.bat: fixed windows build to use libiconv 2011-10-13 Tim Marston * autogen.sh: extra checks for installed software * configure.ac: release in tar.xz format (as well as tar.gz) 2011-09-11 Felix Natter * tools/typcombine: tell about new courses in "More lessons..." 2011-07-23 Felix Natter * tools/ktouchOLD2typ.pl: include the old ktouch 1.6 script as a simple way of creating gtypist lessons. Works with utf-8. 2011-06-30 Felix Natter * src/*.[ch]: compile with libncursesw, use utf-8 as primary charset * tools/ktouch2typ.pl: add support for ktouch 1.6 XML lessons (utf-8) and convert them (lessons/*.ktouch.typ) * tools/tt2typ.pl: add support for tipptrainer 0.6.0 and convert german tipptrainer lesson to lessons/ttde.typ (utf-8) 2011-04-08 Tim marston * version.sh: updated to 2.8.5 2011-02-24 Tim Marston * version.sh: updated to 2.8.4 * cleaned up various ChangeLogs, removed duplicate entries 2008-05-29 Paul Goins * version.sh: Updated to 2.8.1, bug fix release. * Makefile.am: Added dist_bin_SCRIPTS line for typefortune, since it was being distributed but not properly installed in the 2.8 release. (Bug reported by Christian "naddy" Weisgerber.) Also removed an extra reference to conf_dos.bat.in. 2008-05-27 Paul Goins * version.sh: Updated to 2.8. 2008-05-15 Paul Goins * configure.ac: Renamed from configure.in. Added nl and zh_CN translations to ALL_LINGUAS. Made several other minor autoconf-related updates. 2008-05-14 Paul Goins * version.sh: Updated to 2.8-pre2. * INSTALL.in: Added build instructions for Windows NT/2000/XP. * conf_dos.bat.in: Created a new file for the old DOS-style batch file. * autogen.sh, Makefile.am: Added conf_dos.bat 2008-05-12 Paul Goins * NEWS: Updated for 2.8. * README: Added Windows XP as a tested OS. * README.CVS: Updated recommended automake version. * THANKS: Updated. 2008-05-06 Paul Goins * version.sh: Updated version for first pre-release of 2.8. 2008-05-04 Paul Goins * src/gtypist.c: Updated to support MinGW. Also, added a do_beep function to call MessageBeep under Windows and putchar( ASCII_BELL ) otherwise. * configur.bat.in: Added support for building via MinGW. Updated DJGPP Makefile since source files are now in the "src" folder. (NOTE: This batch file may not work on DOS or Win9x, since it uses "set /p" which is a Windows NT-specific command.) * TODO: Removed one completed item, added one user idea. 2008-05-02 Paul Goins * AUTHORS: Added "GNU Typist Development Team" * All gtypist-specific files with a GPL notice specify version 3 of the GPL. 2004-09-30 Dmitry Rutsky * version.sh: bugfix release: 2.7.2. 2004-08-23 Dmitry Rutsky * configure.in: fixed stupid error in that check. 2004-06-26 Dmitry Rutsky * configure.in: added checks for [n]curses libraries header files, only select curses or ncurses if corresponding header is found. * autogen.sh: didn't write version info in INSTALL file, fixed that. * INSTALL.in: slightly edited unix installation section; tell that not only [n]curses library but its header files are required. 2004-02-26 Michael Opdenacker * Makefile.am: now requires automake 1.8.2 2004-02-23 Dmitry Rutsky * README: removed repeated or redundant lines in `Files' section, changed the section's name to probably more appropriate. 2003-11-23 Dmitry Rutsky * tools/typcombine: removed `ktlecten.typ' from the `More lessons...' screen. * src/gtypist.c: minor cleanups, fixed incorrect handling of 80-characters long lines in drills. 2003-11-16 Dmitry Rutsky * autogen.sh: use `autopoint' instead of `gettextize'. * configure.in, Makefile.am: permanently added the gettext stuff, removed "don't commit" warnings (the files will no longer be changed in the build process). * m4/Makefile.am: added. 2003-11-01 Dmitry Rutsky * TODO: documented "unchanging banners" bug. * lessons/ru.typ: minor improvements. 2003-10-31 Dmitry Rutsky * version.sh, autogen.sh, configure.in: a better handling of version definition. Changed AC_INIT macro to handle current AC_INIT semantics. * Makefile.am: added `intl' to SUBDIRS to fix broken distribution. * lessons/ru.typ: `#! /' typo was fixed. * src/cursmenu.c: up-label, if present, now works as described in the manual. Most of the problems with ESCAPE key handling were fixed. Error messages in case of a nonexistent label will no longer contain irrelevant script lines... * TODO: ...nonetheless the line number is still irrelevant. 2003-10-26 Hynek Hanke * autogen.sh (gettexth): Added a search for gettext.h in /usr/ as Dmitry suggested. * po/cs.po: Updated. 2003-10-25 Hynek Hanke * Makefile.am (EXTRA_DIST): gtypist.1 corrected to src/gtypist.1 * configure.in: Added missing target Makefile.in * autogen.sh (gettexth): Copy gettext to src/ 2003-10-25 Hynek Hanke * po/POTFILES.in: Updated to reflect that the sources are now in src/ * configure.in: Build also src/Makefile.am * Makefile.am: Some stuff moved to src/Makefile.am Added src/ to subdirectories. * All .c and .h sources moved to a new directory src/. 2003-10-25 Hynek Hanke * autogen.sh: Don't try to build documentation itself. It's generated now by regular auto-tools mechanism. See doc/Makefile.am. 2003-10-24 Hynek Hanke * autogen.sh (automake --add-missing): Added test on failure of this command, so that it doesn't cause obscure problem later. 2003-10-03 Michael Opdenacker * typefortune: Ben Armstrong fixed the '-s' and '-n' options 2003-09-28 Michael Opdenacker * cursmenu.c, error.c, gtypist.c, script.c: Added #define _(String) gettext (String) so that we don't have to hack gettext.h and make it non standard. * autogen.sh: now copyies gettext.h from its install. * gettext.h: removed from CVS * configure.in: Should now work when both ncurses and curses are installed, on GNU/Solaris for example. * QUESTIONS: renaming of the StandardQuestions file. Now distributed in the source package. * TODO: updated. All developers should write their ideas in this file. 2003-08-28 Rob Leslie * gtypist.c: Added support to resync with the typist after an error. If the typist presses the correct key after an error, it is ignored (sync behind). If the typist misses a key, it is flagged as an error but the key is credited to the next character so the typist can continue without stopping (sync ahead). 2003-08-24 Dmitry Rutsky * cursmenu.c: a better handling of `left' and `right' keys in the menus, don't go offscreen on the keys if there is a large single-column list (as in lessons/ttde.typ). 2003-08-03 Dmitry Rutsky * lessons/ru.typ: new Russian cyrillic keyboard course. * po/ru.po, configure.in: new Russian localization. * tools/typcombine: tell about new course in "More lessons..." * *.[ch]: corrected "gtypist-bug" to "bug-gtypist" in addresses. * gtypist.c: #include , internationalization didn't worked without it (LC_ALL was not #defined); type of YN and RNE strings changed to `unsigned char' (comparisons with them if they were characters with 8th bit set didn't work correctly). * lessons/Makefile.am: include ru.typ in the distribution, as well as cs.typ. 2003-07-19 Dmitry Rutsky * configure.in: removed Makefiles automagically added there by gettextize (yes, that was my mistake in 2003-07-01). Added note that this file will be changed by gettextize. * autogen.sh: don't run gettextize if the sources were gettextized already. * Makefile.am: added headers to gtypist_SOURCES back (yes, that was my mistake too), removed some duplicates of what gettextize added there. Added note regarding gettextize. * cursmenu.c: 'q' now works as ESCAPE in the menus. * *.[ch] except getopt*.[ch]: added/corrected legal attributes. * gtypist.c, script.c: exit in case user got to particular excersize with -l and tried to exit using `E'. 2003-07-04 Dmitry Rutsky * cursmenu.c: "Up/Exit" label code was commented out, since ESCAPE key works, we don't need these items. * gtypist.[ch], cusmenu.c: support for colors in the top banner. New gtypist.h header for convenience. New --banner-colours option to select the banner colours. * script.c: now we ignore empty lines with some whitespaces rather than exit with "data shortage". * gtypist.c, cursmenu.c, script.c: fixed segfault which occured when the first thing in the script was not a menu. There actually was a bunch of problems, it seems that now they are fixed. 2003-07-03 Dmitry Rutsky * error.[ch], gtypist.c, cursmenu.c: some cleanups. * gtypist.c: new option `--always-sure' was added to suppress stupid confirmations. Bottom-line messages was tweaked a little to improve appearance (spaces at the edges), "Press Return..." now works as "Press RETURN or SPACE to continue, ESC to return to the menu". * cursmenu.c: add '\x0A' for working RETURN key in DOS build. 2003-07-02 Dmitry Rutsky * curmenu.c: Now we do not erase the banner, display the menu header centered above the menu, and even print some menu motion help at the bottom. Also now you can move around the menu with arrowed (or vi) keys in any desired possible direction, it is very useful in multi-column menus. 2003-07-01 Dmitry Rutsky * autogen.sh: check autoconf exit status and display useful information if it has failed rather than just go on and get more failures. * configure.in: duplicate intl/Makefile, po/Makefile.in and po/Makefile have been removed, autoconf no longer fails to build because of that. * README.CVS now can aid building the sources from CVS by unexperienced (for me it was a great pain). * autogen.sh: redundant `rm -f config.cache' has been removed (it have no effect with modern autoconf). * cursmenu.c: missing standard #includes were added, the code was corrected a little to eliminate the compiler warnings (what the meaning of do_menu return value was intended to be?). * script.c, error.c: missing standard includes were added, all of the compiler warnings were suppressed. * Makefile.am: excluded headers from GTYPIST_sources, they are not separately compiled and get into dependencies automatically. * configur.bat.in: really include new modules (see the ChangeLog record of 2003-04-06; BTW autogen warns about it). * cursmenu.c: '\n' was supplemented by KEY_ENTER (without it in the DOS build it was impossible to select any menu item, and even exit the program); new aliases for the control keys: KEY_RIGHT for KEY_ENTER; 'K' and 'J' for KEY_UP and KEY_DOWN respectively (now you can write in the documentation that gtypist supports vi keys in menu control ;-) ). * Some hacks to enable the `E' key in "exit the lesson" queries again, it seems to work. * cursmenu.c: added working "go back" key in the menu that completes the basical navigation code: 'Esc' or 'H' will get you to the previous menu where you've been, or out of the program if it is toplevel menu. * gtypist.c: quick hack to get rid of annoying Escape key delays in the ncurses library. * script.c: made it to print "Happy Typing!" at exit rather than just clear the screen :-) 2003-06-08 Felix Natter * cursmenu.c (do_menu): fix a bug when scrolling with many columns and items (new variable `real_items_per_column' replaces `items_first_column') * compute `columns' with a spacing of 2 so that we're sure that menu-item descriptions don't clash 2003-05-02 Michael Opdenacker * po/zh_TW: New Traditional Chinese translation from OLS3 \ 2003-04-13 Hynek Hanke * lessons/cs.typ: use M instead of K for menus * po/cs.po: new messages translated * doc/gtypist.cs.texi: updated 2003-04-06 Felix Natter * configur.bat: include the new modules * tools/typcombine: adapt to M: 2003-03-31 Felix Natter * cursmenu.c (do_menu): parse UP=