[comp.sources.misc] v20i052: notation - chess text handler, Part01/04

hthomas@irisa.fr (Henry Thomas) (06/17/91)

Submitted-by: Henry Thomas <hthomas@irisa.fr>
Posting-number: Volume 20, Issue 52
Archive-name: notation/part01
Supersedes: notation: Volume 18, Issue 12-14

This program reads chess games, either full algebraic or shortened
(ie Nf1-g3 or f1g3 or Ng3) and is able to ouptut the board after any
move, in ascii form, postscript, or nroff or suitable for some TeX
macros.  Also, it can generate output for gnuan and the xboard
program. It is multi-lingual (european) for piece identification. The
program understand french, english, german, spanish dutch and italian
(send me piece symbols for other languages dannish, swedish,
russian... I will incorporate them happily). The program also accepts
variations and is able to handle symbol-comments.

  This program is ok on UNIX (Sun Sparc Station and Sun-3). It uses
standard C, and functions declarations are done in both K&R-C and
ANSI-C.  I guess won't be too difficult to compile on a IBM-PC with
MSC. (I get to work an older function with TURBO-C).

  Anyway, if you want to quickly try the program, issue the command
"make" in this directory, and then type "notation algebric.txt" to
test the programm on Kasparov/Karpov game 13 (Lyon, November 1990).
Read and modify the makefile for customizing notation to your national
language and library path.  If you want a complete manual, read
notation.doc.  To print a postscript file, use "print-ps file"

** COPYRIGHT
  This is a freeware program. Commercial use is prohibited. It is free
for non-commercial use.  You have the right to modify it, give it,
provided you don't modify the copyright notice and my name still
remains clearly indicated. For the others packages (Cheq and chess
font) refer to the original copyright notice.

  If you're happy with this program, let me know. Also, I'm interested
in any advice to a novice player of chess. I would appreciate if
someone might give me advices about openings: overview, what they are
for, which ones are not too risky for a novice etc... Thanks.

  I hope the program is clear enough to be easily modified. Anyway,
I would like to centralize modifications, in order to manage an
up-to-date version. So send me the modifications in forms of diff
files, if possible, along with the version number of the program.

Henry Thomas - IRISA 		 - E-mail: Henry.Thomas@irisa.fr 
Campus Universitaire de Beaulieu - Phone: (+33)99 36 20 00 +549  
35042 RENNES CEDEX FRANCE 	 - Fax: (+33)99 38 38 32 Telex: UNIRISA 950473F
Telex Atlas X400: /X121=842950473/@atlas.fr, Fax:/X121=200099383832/@atlas.fr
--
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 4)."
# Contents:  . CHANGES Footer.ps HELPFILE Header.ps Header.tex MANIFEST
#   Makefile README TODO algebric.txt boudy.txt chesssymb.def
#   chesstype.h convsymb.tex convsymb.txt drivers.h keywords.txt
#   lexer.h lexer.l notation.h print-ps symb.tex symboles.tex
#   symboles.txt
# Wrapped by hthomas@cattus on Sun Jun 16 18:17:27 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'CHANGES' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'CHANGES'\"
else
echo shar: Extracting \"'CHANGES'\" \(794 characters\)
sed "s/^X//" >'CHANGES' <<'END_OF_FILE'
X** 24/01/91 THe program sould be ANSI-C. At last, it compiles with "gcc
X-ansi -pedantic"
X
X** 24/04/91 Cleaned-up a few bugs, and added -i and -v options. 
X
X** 16/04/91 NEW NEW version: now handles variations and codified
Xcomment, as well as specials strings as title, subtitle, score and
Xcomments.
X
X** 12/04/91 added the following languages: czech, hungarian, polish,
Xromanian, FIDE. Thanks to Lael.
X
X** 11/05/91 NEW VERSION. Many many improvements: en-passant,
Xpromotion. Split the source in many differents file. Programming style
Ximproved etc...
X
X** 20/03/91 gnu driver has change. It is now named "xchess". The "gnu"
Xname is now used for "gnuan" type files.
X
X** much improved latex output
X
X** improved internal move generation
X
X** added @special keyword, to directly include text in output
END_OF_FILE
if test 794 -ne `wc -c <'CHANGES'`; then
    echo shar: \"'CHANGES'\" unpacked with wrong size!
fi
# end of 'CHANGES'
fi
if test -f 'Footer.ps' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Footer.ps'\"
else
echo shar: Extracting \"'Footer.ps'\" \(196 characters\)
sed "s/^X//" >'Footer.ps' <<'END_OF_FILE'
X2 ENDPAGE
X%%PageTrailer
X%%PageFonts: Times-Roman Cheq 
X%%PageBoundingBox: 20 20 576 756 
X%%Trailer
Xend %PROLOGUE
X%%Pages: 1 
X%%BoundingBox: 20 20 576 756 
X%%DocumentFonts: Times-Roman Cheq 
X%%EOF
END_OF_FILE
if test 196 -ne `wc -c <'Footer.ps'`; then
    echo shar: \"'Footer.ps'\" unpacked with wrong size!
fi
# end of 'Footer.ps'
fi
if test -f 'HELPFILE' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'HELPFILE'\"
else
echo shar: Extracting \"'HELPFILE'\" \(1160 characters\)
sed "s/^X//" >'HELPFILE' <<'END_OF_FILE'
XCommand line options:
Xnotation [options]
X	where options are
X	-a		: algebraic move notation output
X	-s		: shortened move notation output
X	-f <language>	: specify the chess symbol input language .The
X			language  can be any of:
X		french, english, italian, spanish, german, dutch, 
X		czech, hungarian, polish, romanian, FIDE.
X		(portuguese symbols are the same as spanish)
X	-t <language>	: specify the chess symbol output language.
X			Same options as input language
X	<inputfile>	: specify the input file. If none, keyboard is assumed
X	-o <outputfile>	: specify the output file. If none, screen is assumed
X	-c <number>[,<number]	: specify the number of the moves to display
X			the board. if none, board is diplayed at end of file
X	-e <number>     : display the board at the move number and then stops
X	-b		: display only the board, not the moves
X	-d <drivername>	: specify the output driver. It can be any of
X			the following:
X		ascii
X		postscript
X		tex 	(latex)
X		roff
X		xchess 	(xchess save format)
X		gnu	(gnuan input format)
X	-i              : suppress headers/footer in output (useful
X			for tex/ps drivers)
X	-h		: shows this help
X	-v		: shows version number
X
END_OF_FILE
if test 1160 -ne `wc -c <'HELPFILE'`; then
    echo shar: \"'HELPFILE'\" unpacked with wrong size!
fi
# end of 'HELPFILE'
fi
if test -f 'Header.ps' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Header.ps'\"
else
echo shar: Extracting \"'Header.ps'\" \(2180 characters\)
sed "s/^X//" >'Header.ps' <<'END_OF_FILE'
X%!PS-Adobe-2.1
X%%% HOW TO USE:  from Unix, "cat Cheq Example | lpr -Pprintername "
X%%Title: Cheq.cheqtxtx
X%%Creator: Glenn Reid and still.ps (V 1.0d release 10 edit 08)
X%%BoundingBox: (atend)
X%%Pages: (atend)
X%%DocumentProcSets: Adobe_distill 0.95
X%%EndComments
X%%BeginProcSet: Adobe_distill 0.95
X/PROLOGUE 30 40 add dict def
X % 30 procedure entries + room for 40 cached font dictionaries
X PROLOGUE begin
X /clip { } def    % causes problems. remove if "clip" is needed
X /bdef { bind def } bind def	/ldef { load def } bdef
X /T { moveto show } bdef	/A { moveto ashow } bdef
X /W { moveto widthshow } bdef	/AW { moveto awidthshow } bdef
X /f /fill ldef			/R { { rlineto } repeat } bdef
X /r /rlineto ldef		/L { { lineto } repeat } bdef
X /m /moveto ldef		/l { moveto lineto stroke } bdef
X /x { 0 rlineto } bdef		/y { 0 exch rlineto } bdef
X /c /curveto ldef		/cp /closepath ldef
X /s /stroke ldef		/w /setlinewidth ldef
X /g /setgray ldef		/j /setlinejoin ldef
X /d /setdash ldef		/F /setfont ldef
X /C /setcmykcolor where { /setcmykcolor get }{ %ifelse
X   { %def
X     1 sub 3 { 3 index add neg dup 0 lt { pop 0 } if 3 1 roll } repeat
X     setrgbcolor
X   } bind
X } ifelse def
X /MF { findfont exch makefont setfont } bdef
X /DF { findfont exch scalefont setfont currentfont def } bdef
X /BEGINPAGE { pop /pagesave save def } bdef
X /ENDPAGE { pop pagesave restore showpage } def
X /REMAP { %def
X   FontDirectory 2 index known { pop pop pop } { %ifelse
X     findfont dup length dict begin
X       { 1 index /FID ne {def}{pop pop} ifelse } forall
X       exch dup length 0 gt { /Encoding exch def }{ pop } ifelse
X     currentdict end definefont pop
X   } ifelse
X } bdef
X /RECODE { %def
X    3 -1 roll 1 index findfont /Encoding get 256 array copy exch
X    0 exch { %forall
X     dup type/nametype eq
X       { 3 {2 index} repeat put pop 1 add }{ exch pop }ifelse
X    } forall pop 3 1 roll REMAP
X } bdef
X end %PROLOGUE
X%%EndProcSet: Adobe_distill 0.95
X%%EndProlog
X%%BeginSetup
XPROLOGUE begin
X
X%%EndSetup
X%%Page: 1 1
X%%PageFonts: (atend)
X%%PageBoundingBox: (atend)
X1 BEGINPAGE
X1 1 1 0 C
X/F1 12 /Times-Roman DF
X(output of program notation, using font Cheq \(gift of Adobe Systems\))
X72 756 T
X/F2 30 /Cheq DF
END_OF_FILE
if test 2180 -ne `wc -c <'Header.ps'`; then
    echo shar: \"'Header.ps'\" unpacked with wrong size!
fi
# end of 'Header.ps'
fi
if test -f 'Header.tex' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Header.tex'\"
else
echo shar: Extracting \"'Header.tex'\" \(2509 characters\)
sed "s/^X//" >'Header.tex' <<'END_OF_FILE'
X% Header for chess printing
X\documentstyle[twocolumn]{article}
X\font\chess=chess20
X\font\figchess=chessfig10
X%
X%%%%%%%%%
X%% FIGURES
X\newcommand{\FigK}{{\figchess K}}
X\newcommand{\FigQ}{{\figchess Q}}
X\newcommand{\FigR}{{\figchess R}}
X\newcommand{\FigB}{{\figchess B}}
X\newcommand{\FigN}{{\figchess N}}
X\newcommand{\FigPawn}{{\figchess P}}
X\newcommand{\FigP}{}
X\newcommand{\FigVoid}{}
X\newcommand{\FigDash}{--}
X\newcommand{\FigCapt}{$\times$}
X%\newcommand{\FigDots}{~$\ldots$,}
X\newcommand{\FigDots}{$\ldots$}
X\newcommand{\FigDot}{\char46}
X%
X% inclusion of comments definition
X\input{chesssymb.tex}
X%
X% white pieces on white
X\def\WKW{{\chess K}}
X\def\WQW{{\chess Q}}
X\def\WRW{{\chess R}}
X\def\WBW{{\chess B}}
X\def\WNW{{\chess N}}
X\def\WPW{{\chess P}}
X% white pieces on black
X\def\WKB{{\chess J}}
X\def\WQB{{\chess L}}
X\def\WRB{{\chess S}}
X\def\WBB{{\chess A}}
X\def\WNB{{\chess M}}
X\def\WPB{{\chess O}}
X% black pieces on white
X\def\BKW{{\chess k}}
X\def\BQW{{\chess q}}
X\def\BRW{{\chess r}}
X\def\BBW{{\chess b}}
X\def\BNW{{\chess n}}
X\def\BPW{{\chess p}}
X% black pieces on black
X\def\BKB{{\chess j}}
X\def\BQB{{\chess l}}
X\def\BRB{{\chess s}}
X\def\BBB{{\chess a}}
X\def\BNB{{\chess m}}
X\def\BPB{{\chess o}}
X% white empty 
X\def\WWW{{\chess 0}}
X% black empty */
X\def\DDD{{\chess Z}}
X%
X\def\vvrule{\vrule width1pt} \def\hhrule{\hrule height1pt}
X%%%%%%%%%%%%%%%%%%%%%%%%
X% Movements macros
X%%
X% dumb definitions
X\newcommand{\MoveNumber}[1]{{#1}\ }
X\newcommand{\WhiteMove}[1]{{#1}\ }
X\newcommand{\BlackMove}[1]{{#1}\ }
X%
X% These macros display one move per line
X\newcommand{\ChessModeV}{%
X\renewcommand{\MoveNumber}[1]{~\newline \noindent\makebox[1.5cm][r]{##1}}%
X\renewcommand{\WhiteMove}[1]{\makebox[2cm][r]{##1}}%
X\renewcommand{\BlackMove}[1]{\makebox[2cm][r]{##1} }%
X}
X%
X% These macros display many moves per line
X\newcommand{\ChessModeH}{%
X\renewcommand{\MoveNumber}[1]{{##1}\ }%
X\renewcommand{\WhiteMove}[1]{{##1}\ }%
X\renewcommand{\BlackMove}[1]{{##1}\ }%
X}
X%% Here we define tthe two mode, for the main line and the variation
X\newcommand{\MainLine}{\ChessModeH}
X\newcommand{\VariationLine}{\ChessModeH}
X\MainLine
X%
X%
X\newcommand{\bc}{\begin{center}}
X\newcommand{\ec}{\end{center}}
X%
X\newcommand{\ChessTitle}[1]{\bc{\large\bf #1}\ec}
X\newcommand{\ChessSubTitle}[1]{\bc{\sc #1}\ec}
X\newcommand{\ChessScore}[1]{{\bf #1}}
X%
X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X\begin{document}
X%\title{Notation Output}
X%\author{notation program (C) Henry Thomas 1990}
X%\date{\today}
X%\maketitle
END_OF_FILE
if test 2509 -ne `wc -c <'Header.tex'`; then
    echo shar: \"'Header.tex'\" unpacked with wrong size!
fi
# end of 'Header.tex'
fi
if test -f 'MANIFEST' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'MANIFEST'\"
else
echo shar: Extracting \"'MANIFEST'\" \(0 characters\)
sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
END_OF_FILE
if test 0 -ne `wc -c <'MANIFEST'`; then
    echo shar: \"'MANIFEST'\" unpacked with wrong size!
fi
# end of 'MANIFEST'
fi
if test -f 'Makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(2915 characters\)
sed "s/^X//" >'Makefile' <<'END_OF_FILE'
X# Makefile for notation program
X# (C) Henry Thomas 1990
X
XFILES      = notation.c drivers.c lexer.c lexer.l
XHEADERS	   = notation.h drivers.h lexer.h chesstype.h chesssymb.def
X#LIBDIR     = ./lib
XLIBDIR     = .
XBINDIR=$(HOME)/local/bin.$(HOSTTYPE)
X
XOBJECTS    = notation.o drivers.o lexer.o
X
XOTHERFILES = Makefile HELPFILE \
X	keywords.txt algebric.txt shortened.txt boudy.txt\
X	notation.doc notation.n \
X	README TODO COPYING CHANGES \
X	print-ps \
X	Header.ps Footer.ps Header.tex \
X	convsymb.txt convsymb.tex \
X	symboles.txt symboles.tex symb.tex
X
X
XSAVEFILES  = $(FILES) $(HEADERS) $(OTHERFILES)
X
XKITNAME	   = "Notation"
X
X############################################################
X# you might want to define the lib path : 
X#	do not forget the trailing /
X# ( the library is the place where the HELPFILE, Heading, fonts etc are)
X# also you can have default language for input/ouput
X# define DEFAULT_INPUT_LANGUAGE and DEFAULT_OUPUT_LANGUAGE
X# value can be:
X#	FRENCH, ENGLISH, GERMAN, ITALIAN, SPANISH, DUTCH
X# ANSI C/ TURBO C (MSDOS)
X# to compile with TURBO C or ANSI C, define TURBOC
XCFLAGS     = -DLIB_DIR=\"$(HOME)/echecs/Notation/\" \
X-DDEFAULT_INPUT_LANGUAGE=FRENCH -DDEFAULT_OUTPUT_LANGUAGE=FRENCH 
XLDFLAGS    =
X
X
XLEX= flex
X
X#CC= gcc -ansi -pedantic
X
X############################################################
X
X.KEEPSTATE:
X
Xall: notation notation.doc chesssymb.tex
X
Xlexer.c: lexer.l chesstype.h
X	$(LEX) -t lexer.l > lexer.c
X
Xnotation: $(OBJECTS)
X	$(CC) $(CFLAGS) -o notation  $(OBJECTS) 
X
Xsymboles.txt:  chesssymb.def convsymb.txt
X	/lib/cpp -P convsymb.txt| sed -e "s/\\\\//" |\
X	sed -e 's/\"//g' | cat -s > symboles.txt
X
Xsymb.tex:  chesssymb.def convsymb.tex
X	/lib/cpp -P convsymb.tex | sed -e 's/\\\\/\\/g' |\
X	sed -e 's/\"//g' | cat -s > symb.tex
Xsymboles.dvi: symboles.tex symb.tex
X	latex symboles.tex
X
Xkit     : $(SAVEFILES)
X	makekit -n$(KITNAME) $(LIBDIR) $(SAVEFILES) MANIFEST > MANIFEST
X
Xshar     : $(SAVEFILES)
X	shar -o$(KITNAME).shar $(LIBDIR) $(SAVEFILES) 
X	compress -f $(KITNAME).shar
X
Xtar     : $(SAVEFILES)
X	tar -cvf - $(SAVEFILES) > $(KITNAME).tar
X	compress -f $(KITNAME).tar
X
Xzoo	: $(SAVEFILES)
X#	chmod +w $(KITNAME).zoo
X	zoo -freshen $(KITNAME).zoo $(SAVEFILES)
X	rm -f $(KITNAME).bak
X#	chmod -w $(KITNAME).zoo
X
Xsauve   :
X	make zoo
X#	chmod +w $(KITNAME).zoo
X	cp $(KITNAME).zoo $(HOME)/local/sauve
X#	chmod -w $(KITNAME).zoo
X
Xinstall: HELPFILE
X	make notation
X	strip notation
X	chmod +x print-ps
X	make notation.doc 
X	make chesssymb.txt
X
Xhthomas:
X	make install
X	mv notation $(BINDIR)
X
Xclean:
X	rm -f notation $(OBJECTS) lexer.c
X	rm -f $(KITNAME).shar[.Z] $(KITNAME).tar[.Z] $(KITNAME)0? MANIFEST
X
Xnotation.doc: notation.n
X	nroff -man notation.n > notation.doc
X
X
X# DO NOT DELETE THIS LINE -- make depend depends on it.
X
Xdrivers.o: chesstype.h notation.h drivers.h chesssymb.def
Xlexer.o: chesstype.h notation.h lexer.h chesssymb.def
Xnotation.o: chesstype.h drivers.h notation.h lexer.h chesssymb.def
END_OF_FILE
if test 2915 -ne `wc -c <'Makefile'`; then
    echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(4568 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
X** DESCRIPTION
X  This program read chess games, either full algebraic or shortened
X(ie Nf1-g3 or f1g3 or Ng3) and is able to ouptut the board after any
Xmove, in ascii form, postscript, or nroff or suitable for some TeX
Xmacros.  Also, it can genearte output for gnuan and the xboard
Xprogram. It is multi-lingual (european) for piece identification. The
Xprogram understand french, english, german, spanish dutch and italian
X(send me piece symbols for other languages dannish, swedish,
Xrussian... I will incorporate them happily). The program also accept
Xvariations and is able to handle symbol-comments
X
XThis is a freeware program. You have the right to modify it, give it,
Xprovided you don't modify the copyright notice and my name still
Xremains.  The distribution has 4 shar-type files.
X
X** COMPATIBILITY
X  This program is ok on UNIX (Sun Sparc Station and Sun-3). It uses
Xstandard C, and fonctions declarations are done in both K&R-C and
XANSI-C.  I guess won't be too difficult to compile on a IBM-PC with
XMSC. (I get to work an older function with TURBO-C).
X
X** QUICK USE
X  Anyway, you want to try quickly the program, issue the command
X"make" in this directory, and then type "notation algebric.txt" to
Xtest the programm on Kasparov/Karpov game 13 (Lyon, November 1990).
XRead and modify the makefile for customizing notation to your national
Xlanguage and library path.  If you want a complete manual, read
Xnotation.doc.  To print a postscript file, use "print-ps file"
X
X** SOURCES
X  They are posted to "comp.sources.misc". You can also get them by
Xmail, from "hthomas@irisa.fr". I put them on anonymous ftp on
Xwuarchive.wustl.edu, (user:anonymous, password:<your address>). The
Xpath is "pub/Notation.tar.Z". I may submit them to "garbo.uwasa.fi. 
X
X** IMPORTANT
X  If you want to use PostScript or LaTeX, you need two packages not
Xprovided here. However, here is a way to get them:
X
X**** Postscript: 
X  You need the font "Cheq", freely distributed by Adobe.  Send a mail
Xto "ps-file-server@adobe.com" with the body "send Programs
Xchessfont.ps". For use with "notation", rename the file "Cheq".
X
X------------------------------------------------------------------
Xchessfont.ps              58548 Jun 22 1989
X    This is the Adobe chess font "Cheq", created by John Renner. It 
X    is an ASCII downloadable version of the font that is not in any 
X    particular font format for a specific platform. See also
X    "chessfontUNIX.shar" and "chessfontMAC.shar" for the font bundled 
X    with other useful files like screen fonts and AFM files. If you 
X    just want the font, it is available in this file separately for 
X    convenience.
X------------------------------------------------------------------
X
X**** LaTeX: 
X  You need the chess fonts designed by Piet Tutalaers
X"rcpt@urc.tue.nl". The complete distribution is available 
X
X-- by ftp : on sol.cs.ruu.nl (131.211.80.5) with path TEX/chess.tar.Z
X(please restrict access to weekends or evening/night (i.e.  between
Xabout 2000 and 0.900 UTC)).
X
X------------------------------------------------------------------
X-rw-r--r--  1 piet     staff        2984 Dec  3 10:11 chess.README
X-rwxr--r--  1 piet     staff      129679 Dec  3 15:57 chess.tar.Z
X------------------------------------------------------------------
X
X-- by e-mail : send the following message to 
Xmail-server@cs..ruu.nl (or uunet!mcsun!hp4nl!ruuinf):
X
Xbegin
Xpath john@highbrown.edu
Xsend TEX/chess.tar.Z
Xend
X
XThe path command can be deleted if we receive a valid from address in
Xyour message. If this is the first time you use the mail server, we
Xsuggest you first issue the request:
Xsend help
X
X
X** DOCUMENTATION
X  See the file notation.doc for any info
X
X** COPYRIGHT
X
X  This is a freeware program. Commercial use is prohibited. It is free
Xfor non-commercial use.  You have the right to modify it, give it,
Xprovided you don't modify the copyright notice and my name still
Xremains clearly indicated. For the others packages (Cheq and chess
Xfont) refer to the original copyright notice.
X
X** USER FEEDBACK
X
X  If you're happy with this program, let me know. Also, I'm interested
Xin any advice to a novice player of chess. I would appreciate if
Xsomeone might give me advices obout openings: overview, what they are
Xfor, which ones are not too risky for a novice etc... Thanks.
X
X
X** MODIFICATIONS
X
X  I hope the program to be clear enough to be easily modified. Anyway,
XI would like to centralize modification, in order to manage an
Xup-to-date version. So send me the modification, in forms of diff
Xfiles, if possible, along with the version number of the program.
END_OF_FILE
if test 4568 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'TODO' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'TODO'\"
else
echo shar: Extracting \"'TODO'\" \(372 characters\)
sed "s/^X//" >'TODO' <<'END_OF_FILE'
XThings to do:
X - command line specification of chess symbols for a new language
X - to have configuration file
X - automatically add sufixes (.tex, ps, .asc, .roff xboard.save ...) to
Xoutput file
X - detect check
X - a binary save format, allowing another program to interactively
Xreplay the game (isn't there a commercial program called chessbase to
Xdo the same thing :-) ?)
END_OF_FILE
if test 372 -ne `wc -c <'TODO'`; then
    echo shar: \"'TODO'\" unpacked with wrong size!
fi
# end of 'TODO'
fi
if test -f 'algebric.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'algebric.txt'\"
else
echo shar: Extracting \"'algebric.txt'\" \(958 characters\)
sed "s/^X//" >'algebric.txt' <<'END_OF_FILE'
X
X[WORLD CHESS CHAMPIONSHIP]
X[GAME 13 Adjourned]
X[November 24, 1990]
X
X[   KARPOV      KASPAROV]
X 1. d2-d4      g8-f6
X 2. c2-c4      g7-g6
X 3. b1-c3      d7-d5
X 4. c4Xd5      f6Xd5
X 5. e2-e4      d5Xc3
X 6. b2Xc3      f8-g7
X 7. c1-e3      c7-c5
X 8. d1-d2       O-O
X 9. a1-c1      d8-a5
X10. g1-f3      e7-e6
X11. d4-d5      e6Xd5
X12. e4Xd5      f8-e8
X13. f1-e2      c8-f5
X14.  O-O       b8-d7
X15. h2-h3      d7-b6
X16. g2-g4      f5-d7
X17. c3-c4      a5Xd2
X18. f3Xd2      b6-a4
X19. e2-f3      a4-c3
X20. c1Xc3      g7Xc3
X21. d2-e4      e8Xe4
X22. f3Xe4      a8-e8
X23. e4-d3      b7-b6
X24. g1-g2      f7-f5
X25. g4Xf5      d7Xf5
X26. d3Xf5      g6Xf5
X27. f1-d1      g8-f7
X28. d1-d3      c3-f6
X29. d3-a3      a7-a5
X30. a3-b3      f6-d8
X31. b3-c3      d8-c7
X32. a2-a4      f7-f6
X33. g2-f1      f5-f4
X34. e3-c1      f6-f5
X35. c3-c2      e8-g8
X36. c2-e2      c7-e5
X37. c1-b2      e5-d4
X38. b2Xd4      c5Xd4
X39. e2-e7      d4-d3
X40. f1-e1      g8-c8
X41. e1-d2      c8Xc4
X
X
X
END_OF_FILE
if test 958 -ne `wc -c <'algebric.txt'`; then
    echo shar: \"'algebric.txt'\" unpacked with wrong size!
fi
# end of 'algebric.txt'
fi
if test -f 'boudy.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'boudy.txt'\"
else
echo shar: Extracting \"'boudy.txt'\" \(864 characters\)
sed "s/^X//" >'boudy.txt' <<'END_OF_FILE'
X@title{Boudy vs Szabo, Varna 1979}
X@subtitle{See Informant XXVII game 452}
X@language{french}
X1. e4 c5 
X2 Cf3 Cc6 
X3 d4 cd4
X4  Cd4 Cf6
X5 Cc3 d6
X6. f4 a6 
X7. Cc6 bc6 
X8. e5 Cd7
X9. ed6 ed6 
X10. Df3 d5
X11. Fd2 Fd6 
X12. o-o-o 0-0
X13. g4 Fb7 { Tb8 !? ~ } 
X14. Tg1 Te8
X15. g5 f5 !? {Cc5}
X16. g6 h6
X17. Fd3 ?! { Fh3! +_} Tf8
X18. Dh3 Df6
X19. Tg5 Cc5
X20. Ff5 Fc8!
X21. Fc8 Tac8
X22. Tg4 Tb8 =~ 
X23. Tf1 Ce4
X24. Fe1 @showboard Tb2
X25. Rb2 { Ce4 de4 26 Fc3 Fa3! 27. Ff6 Tb3 _+ $end } Fa3!
X26. Ra3 {26 Ra1 Tb8 -+} Tb8 -+
X27. Ce4 De7 ?? {27. ... Db2 28. Ra4 Da2 29. Da3 Dc2 30. Ra5 Tb5 
X   31. Ra6 De4 /\[De8a8 -+]}
X28.  Cd6! { 28. Ra4 De4 -+} Dd6
X29. Ra4 c5
X30. Th4 { $bei 30. Tg1 c4 31 Dc3 Dd7 32. Ra3 Dd6 33 Dd4 -+ } c4
X31. Dc3 Dd7 
X32. Ra3 De7 
X33. Db4! +- Tb4 
X34. Fb4 Dh4
X35. Te1 Dd8 [] 
X36. c3! a5
X37. Fc5 || 
X
X@score{White won} [ somewhat luckily in the end at move 75.]
X
END_OF_FILE
if test 864 -ne `wc -c <'boudy.txt'`; then
    echo shar: \"'boudy.txt'\" unpacked with wrong size!
fi
# end of 'boudy.txt'
fi
if test -f 'chesssymb.def' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'chesssymb.def'\"
else
echo shar: Extracting \"'chesssymb.def'\" \(4754 characters\)
sed "s/^X//" >'chesssymb.def' <<'END_OF_FILE'
X/*
X  chess symbols : arguments (all are strings)
X  0: ident
X  1: ascii name
X  2: ascii abbrev
X  3: TeX name
X  4: Postscript name (Mr. Walker font)
X  5: english text
X  6: french text
X  */
X
XCHESSSYMB ( COM_CHK, "+", "+" ,  "+", "",
X	   "check",
X	   "echec" )
XCHESSSYMB ( COM_DCK, "++", "++" ,  "++", "",
X	   "double check",
X	   "echec double" )
XCHESSSYMB ( COM_WSB, "$wsb", "+=", "\\COMwsb", "",
X	   "white stands lightly better",
X	   "les blancs ont un jeu un peu meilleur" )
XCHESSSYMB ( COM_BSB, "$bsb", "=+", "\\COMbsb", "",
X	   "black stands lightly better",
X	   "les noirs ont un jeu un peu meilleur" )
XCHESSSYMB ( COM_WBE, "$wbe", "+_", "\\COMwbe", "",
X	   "white has the upper hand",
X	   "les blancs ont le meilleur jeu" )
XCHESSSYMB ( COM_BBE, "$bbe", "_+", "\\COMbbe", "",
X	   "black has the upper hand",
X	   "les noirs ont le meilleur jeu" )
XCHESSSYMB ( COM_WDA, "$wda", "+-", "\\COMwda", "",
X	   "white has a decisive advantage",
X	   "les blancs ont un avantage de'cisif" )
XCHESSSYMB ( COM_BDA, "$bda", "-+", "\\COMwda", "",
X	   "black has a decisive advantage",
X	   "les noirs ont un avantage de'cisif" )
XCHESSSYMB ( COM_EQA, "="  , "=",  "\\COMlev", "",
X	   "even",
X	   "e'gal" )
XCHESSSYMB ( COM_UCR, "$ucr", "~" ,  "\\COMucr", "",
X	   "unclear",
X	   "incertain" )
XCHESSSYMB ( COM_WCO, "$wco", "=~" ,  "\\COMwco", "",
X	   "with compensation for the material",
X	   "avec compensation pour le mate'riel" )
XCHESSSYMB ( COM_DAD, "$dad", "(^)" ,  "\\COMdad", "",
X	   "development advantage",
X	   "avance de de'veloppement" )
XCHESSSYMB ( COM_SPA, "$spa", "()" ,  "\\COMspa", "",
X	   "greater space advantage",
X	   "grand avantage d'espace" )
XCHESSSYMB ( COM_WTA, "$wta", "->" ,  "\\COMwta", "",
X	   "with attack",
X	   "avec attaque" )
XCHESSSYMB ( COM_WIN, "$win", "|^" ,  "\\COMwin", "",
X	   "with initiative",
X	   "avec initiative" )
XCHESSSYMB ( COM_WCP, "$wcp", "<->" ,  "\\COMwcp", "",
X	   "with counter-play",
X	   "avec contre-attaque" )
XCHESSSYMB ( COM_ZUG, "$zug", "(.)" ,  "\\COMzug", "",
X	   "zugzwang",
X	   "zug zwang" )
XCHESSSYMB ( COM_MAT, "#", "#" ,  "\\#", "",
X	   "mate",
X	   "mat" )
XCHESSSYMB ( COM_VGM, "!", "!" ,  "!", "",
X	   "very good move",
X	   "un tre`s bon coup" )
XCHESSSYMB ( COM_VBM, "?", "?" ,  "?", "",
X	   "very bad move",
X	   "un tre`s mauvais coup" )
XCHESSSYMB ( COM_EXM, "!!", "!!" ,  "!!", "",
X	   "excellent move",
X	   "un excellent coup" )
XCHESSSYMB ( COM_MIS, "??", "??" ,  "??", "",
X	   "a mistake",
X	   "un coup faible" )
XCHESSSYMB ( COM_MDA, "!?", "!?" ,  "!?", "",
X	   "a move deserving attention",
X	   "un coup qui me'rite l'attention" )
XCHESSSYMB ( COM_DUM, "?!", "?!" ,  "?!", "",
X	   "a dubious move",
X	   "un coup d'une valeur douteuse" )
XCHESSSYMB ( COM_WTI, "$wti", "/\\" ,  "\\COMwti", "",
X	   "with the idea...",
X	   "avec l'ide'e..." )
XCHESSSYMB ( COM_OLM, "$olm", "[]" ,  "\\COMolm", "",
X	   "only move",
X	   "seul coup possible" )
XCHESSSYMB ( COM_BEI, "$bei", "^_" ,  "\\COMbei", "",
X	   "better is",
X	   "est meilleur" )
XCHESSSYMB ( COM_FIL, "$fil", "<=>" ,  "\\COMfil", "",
X	   "file",
X	   "colonne" )
XCHESSSYMB ( COM_DIA, "$dia", "/^" ,  "\\COMdia", "",
X	   "diagonal",
X	   "diagonale" )
XCHESSSYMB ( COM_CNT, "$cnt", "[+]" ,  "\\COMcnt", "",
X	   "center",
X	   "centre" )
XCHESSSYMB ( COM_KGS, "$kgs", ">>" ,  "\\COMkgs", "",
X	   "king's side",
X	   "aile roi" )
XCHESSSYMB ( COM_QNS, "$qns", "<<" ,  "\\COMqns", "",
X	   "queen's side",
X	   "aile reine" )
XCHESSSYMB ( COM_WKP, "$wkp", "><" ,  "\\COMwkp", "",
X	   "weak point",
X	   "point faigle" )
XCHESSSYMB ( COM_END, "$end", "_|_" ,  "\\COMend", "",
X	   "ending",
X	   "finale" )
XCHESSSYMB ( COM_POB, "$pob", "==" ,  "\\COMpob", "",
X	   "pair of bishops",
X	   "paire de fous" )
XCHESSSYMB ( COM_OPC, "$opc", "=#" ,  "\\COMopc", "",
X	   "bishops of opposite colors",
X	   "fous de couleurs oppose'es" )
XCHESSSYMB ( COM_SCB, "$scb", "##" ,  "\\COMscb", "",
X	   "same coloured bishops",
X	   "fous de me^me couleur" )
XCHESSSYMB ( COM_UNP, "$unp", "oo" ,  "\\COMunp", "",
X	   "united pawns",
X	   "pions unis" )
XCHESSSYMB ( COM_SEP, "$sep", "o..o" ,  "\\COMsep", "",
X	   "separated pawns",
X	   "pions se'pare's" )
XCHESSSYMB ( COM_DOP, "$dop", "o/o" ,  "\\COMdop", "",
X	   "doubled pawns",
X	   "pions double's" )
XCHESSSYMB ( COM_TIM, "$tim", "(+)" ,  "\\COMtim", "",
X	   "time",
X	   "temps" )
XCHESSSYMB ( COM_WIT, "$wit", "|_" ,  "\\COMwit", "",
X	   "with",
X	   "avec" )
XCHESSSYMB ( COM_WTO, "$wto", "_|" ,  "\\COMwto", "",
X	   "without",
X	   "sans" )
XCHESSSYMB ( COM_ETC, "etc", "etc" ,  "{etc}", "",
X	   "etc",
X	   "etc" )
XCHESSSYMB ( COM_ETD, "||", "||" ,  "\\COMetc", "",
X	   "etc",
X	   "etc" )
XCHESSSYMB ( COM_SEE, "$see", "" ,  "\\COMsee", "",
X	   "see",
X	   "voir" )
XCHESSSYMB ( COM_ENP, "ep", "ep" ,  "{ep}", "",
X	   "en passant",
X	   "en passant" )
END_OF_FILE
if test 4754 -ne `wc -c <'chesssymb.def'`; then
    echo shar: \"'chesssymb.def'\" unpacked with wrong size!
fi
# end of 'chesssymb.def'
fi
if test -f 'chesstype.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'chesstype.h'\"
else
echo shar: Extracting \"'chesstype.h'\" \(3150 characters\)
sed "s/^X//" >'chesstype.h' <<'END_OF_FILE'
X/*
X  Notation program
X  @(#)chesstype.h	3.1 (C) Henry Thomas\tVersion 3.1\tDated 6/16/91
X */
X
X/* types definition */
X#ifndef _HEADERS_TYPES
X#define _HEADERS_TYPES
X
X#define FALSE 0
X#define TRUE  1
X
X#ifndef NULL
X#define NULL    ((char *) 0)
X#endif
X
X#define MAX(a,b)  ((a)>(b)?(a):(b))
X#define MIN(a,b)  ((a)<(b)?(a):(b))
X#define ABS(a)	  ((a)>=0?(a):(-(a)))
X#define SIGN(a)   ((a)>=0?(1):-1)
X
X#define DUMMYCHAR '$'
X#define MAXTOKLEN 1024
X
X
X/* max number of move for displaying board */
X#define NB_MOVE_TO_DISP 128
X
X/* debugging help */
X#ifdef DEBUG
X#define MESSAGE(A) (void) fprintf A
X#define ACTION(A)  A
X#else
X#define MESSAGE(A)
X#define ACTION(A)
X#endif
X
X/* output move format */
X
X#define ALGEBRAIC 0
X#define SHORTENED 1
X
X/* text type */
X#define T_TEXT		1
X#define T_COMMENT	2
X#define T_TITLE		3
X#define T_SUBTITLE	4
X#define T_SCORE		5
X
X/* -------------------------------------------- */
X/*              chess data structures           */
X/* -------------------------------------------- */
X
X#define NUMPIECES 7
X
X#define KING   1
X#define QUEEN  2
X#define ROOK   3
X#define BISHOP 4
X#define KNIGHT 5
X#define PAWN   6
X
X#define VOID  0
X#define WHITE 1
X#define BLACK 2
X
X/* board and move representation */
X/* board size */
X#define SIZE 10 
X
X/* ---- structure to represent the game ---- */
Xtypedef struct {
X
X  /* board definition */
X  int board[SIZE][SIZE];
X  int color[SIZE][SIZE];
X
X} game ;
X/* ---- end of structure ---- */
X
X#define GULL (game *) 0
X
X/* french(roque) == english(castling) */
X
X#define MOVE		1  	/* un mouvement        */
X#define PRISE		2      	/* une prise           */
X#define GRANDROQUE	3 	/* grand roque         */
X#define PETITROQUE	4 	/* petit roque         */
X#define EN_PASSANT	5	/* prise en passant    */
X#define PROMOTION  	6	/* promotion           */
X#define PROM_ET_PRISE	7	/* promotion + capture */
X
X#define SHORT_COMMENT_LEN 4
X
X/* structure used to describe the current move */
Xstruct deplace {
X  /* system zone */
X  int uid ;             /* node id */
X
X  /* links used to chain moves   */
X  struct deplace * next ; /* next move     */
X  struct deplace * prev ; /* previous move */
X  struct deplace * sub  ; /* variation     */
X
X  /* user zone */
X  int move ;		/* number of the move */
X  int whiteturn ; 	/* boolean to tell white's turn */
X
X  int type;		/* type of move: MOVE, PRISE, etc..   */
X  int piece;		/* type of the piece */
X
X  int fromcol, fromlig;	/* from position */
X  int tocol, tolig ;	/* destination   */
X
X  int prise;		/* captured piece */
X  int promotion;        /* name of the pice the pawn is promoted to */
X
X  int is_check ;	/* if does the move provides check ?*/
X
X  char comment[SHORT_COMMENT_LEN];	/* short text comment */
X  char * text ;         /* long text comment */
X
X
X} ;
Xtypedef struct deplace depl ;
X
X#define MULL (depl *) 0
X
X#define CURCOLOR(M) (((M)->whiteturn)?(WHITE):(BLACK))
X#define OPPCOLOR(M) (((M)->whiteturn)?(BLACK):(WHITE))
X
X
X/* structure used to hold a complete play 
X   this structure is
X   - an initial board 
X   - a chain of moves
X   moves are applied to the board, and coan also be undone
X   */
Xtypedef struct {
X  game * initial;
X  depl * chain ;
X} play ;
X
X
X/* end headers */
X#endif
END_OF_FILE
if test 3150 -ne `wc -c <'chesstype.h'`; then
    echo shar: \"'chesstype.h'\" unpacked with wrong size!
fi
# end of 'chesstype.h'
fi
if test -f 'convsymb.tex' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'convsymb.tex'\"
else
echo shar: Extracting \"'convsymb.tex'\" \(149 characters\)
sed "s/^X//" >'convsymb.tex' <<'END_OF_FILE'
X#define CHESSSYMB(LET,LASC,SASC,TEX,PS,ENG,FRA)\
XENG & \verb;LASC; & \verb;SASC;	& TEX &  \verb;TEX; \cr  
X#include "chesssymb.def"
X#undef CHESSSYMB
END_OF_FILE
if test 149 -ne `wc -c <'convsymb.tex'`; then
    echo shar: \"'convsymb.tex'\" unpacked with wrong size!
fi
# end of 'convsymb.tex'
fi
if test -f 'convsymb.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'convsymb.txt'\"
else
echo shar: Extracting \"'convsymb.txt'\" \(195 characters\)
sed "s/^X//" >'convsymb.txt' <<'END_OF_FILE'
Xcomment	shorthand 	english translation
X------------------------------------------------
X#define CHESSSYMB(LET,LASC,SASC,TEX,PS,ENG,FRA)\
XLASC		SASC		ENG
X#include "chesssymb.def"
X#undef CHESSSYMB
END_OF_FILE
if test 195 -ne `wc -c <'convsymb.txt'`; then
    echo shar: \"'convsymb.txt'\" unpacked with wrong size!
fi
# end of 'convsymb.txt'
fi
if test -f 'drivers.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'drivers.h'\"
else
echo shar: Extracting \"'drivers.h'\" \(2470 characters\)
sed "s/^X//" >'drivers.h' <<'END_OF_FILE'
X/*
X  Notation program
X  @(#)drivers.h	3.1 (C) Henry Thomas\tVersion 3.1\tDated 6/16/91
X */
X/* headers for output drivers */
X#ifndef _HEADERS_DRIVERS
X#define HEADERS_DRIVERS
X
X
X#define D_ASCII  0
X#define D_POST   1
X#define D_TEX    2
X#define D_ROFF   3
X#define D_XCHESS 4
X#define D_GNU    5
X
X#define NB_DRIVER 6
X
X/* variation convention */
X#define VARIATION_IN 0
X#define VARIATION_OUT 1
X
X
X#define PS_HEADER  "Header.ps"
X#define PS_FOOTER  "Footer.ps"
X#define TEX_HEADER "Header.tex"
X
X
X/* output buffers */
X#define TAMPON 256
X
Xtypedef struct {
X
X  /* type of driver */
X  int type ;
X
X  /* output_file */
X  FILE *outfile ;
X  /* these  booleans control the output format */
X  int print_move    ;  /* move numbering */
X  int print_piece   ;  /* print piece name */
X  int print_pawn    ; /* print the PAWN name */
X  int roque_alg     ; /*  roque in algebraic form Ke1g1 or O-O */
X  int print_liaison ; /* print the - or x in move output */
X  int only_board ;
X  int variation     ; /* variation level */
X  int print_headers ; /* include the header/footer file */
X
X  /* boolean to print the coordinates in ascii output of board */
X  int coordinates   ;
X  int output_move_format ;
X
X  char *out_table;	/* translation table */
X
X  /* procedures */
X  void (*out_init)() ;
X  void (*out_move)() ;
X  void (*out_variation)() ;
X  void (*out_text)() ;
X  void (*out_board)() ;
X  void (*out_end)() ;
X
X  /* temp vars  used by move buffering */
X
X  int iswhiteturn ; /*= FALSE */
X  int interrupt ; /*= FALSE */
X
X  char move_buffer[TAMPON]  /*= ""*/ ;
X  char white_buffer[TAMPON] /*= ""*/ ;
X  char black_buffer[TAMPON] /*= ""*/ ;
X
X
X} format ;
X
X
X/* fonctions ----------------- */
X
X#ifdef __STDC__
X
Xextern void output_init(format *dr);
Xextern void output_move(format *dr, depl *d);
Xextern void output_variation(format *dr, int inout);
Xextern void output_text(format *dr, int type, char *string, int code);
Xextern void output_board(format *dr, game *g);
Xextern void output_end(format *dr);
X
Xextern format *new_driver(void);
Xextern void init_driver(format *dr, int driver);
X
X#else
X
Xextern void output_init(/*format *dr*/);
Xextern void output_move(/*format *dr, depl *d*/);
Xextern void output_variation(/*format *dr, int inout*/);
Xextern void output_text(/*format *dr, int type, char *string, int code*/);
Xextern void output_board(/*format *dr, game *g*/);
Xextern void output_end(/*format *dr*/);
X
Xextern format *new_driver(/*void*/);
Xextern void init_driver(/*format *dr, int driver*/);
X#endif
X
X#endif
END_OF_FILE
if test 2470 -ne `wc -c <'drivers.h'`; then
    echo shar: \"'drivers.h'\" unpacked with wrong size!
fi
# end of 'drivers.h'
fi
if test -f 'keywords.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'keywords.txt'\"
else
echo shar: Extracting \"'keywords.txt'\" \(256 characters\)
sed "s/^X//" >'keywords.txt' <<'END_OF_FILE'
X[Example of keywords use]
X[absolutely non-sense game]
Xe2-e4 c7c6
X@showboard
X@clearboard
X@showboard
X@configwhite
X d4    Nf6
X Nc3   @showboard d5
X@configblack
X Kg8
X@startplay
X@whitesmove
XNc3-b1
X@showboard
X@blacksmove
XRg8-g7 @showboard d5-d6
XRg7-f6
X
X@null
X
X
X
END_OF_FILE
if test 256 -ne `wc -c <'keywords.txt'`; then
    echo shar: \"'keywords.txt'\" unpacked with wrong size!
fi
# end of 'keywords.txt'
fi
if test -f 'lexer.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'lexer.h'\"
else
echo shar: Extracting \"'lexer.h'\" \(309 characters\)
sed "s/^X//" >'lexer.h' <<'END_OF_FILE'
X/*
X  Notation program
X  @(#)lexer.h	3.1 (C) Henry Thomas\tVersion 3.1\tDated 6/16/91
X */
X#ifndef _HEADER_LEXER
X#define _HEADER_LEXER
X
Xextern int column;
Xextern int lineno;
X
Xextern FILE * yyin;
Xextern FILE * yyout;
X
X#ifdef __STDC__
Xextern int yylex(/*void*/);
X#else
Xextern int yylex(/*void*/);
X#endif
X
X
X#endif
END_OF_FILE
if test 309 -ne `wc -c <'lexer.h'`; then
    echo shar: \"'lexer.h'\" unpacked with wrong size!
fi
# end of 'lexer.h'
fi
if test -f 'lexer.l' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'lexer.l'\"
else
echo shar: Extracting \"'lexer.l'\" \(3979 characters\)
sed "s/^X//" >'lexer.l' <<'END_OF_FILE'
X/* DO NOT REMOVE THIS LINE                      */
X/*                                              */
X/* Notation program                             */
X/* @(#)lexer.l	3.1 (C) Henry Thomas\tVersion 3.1\tDated 6/16/91 */
X/*                                              */
X%{
X#include <stdio.h>
X
X#include "chesstype.h"
X#include"notation.h"
X
X#define NCURLINE 1024
Xchar curline [NCURLINE] ;
X
X#define LARGE_BUF 4096
Xstatic char commbuf[LARGE_BUF];
X
Xint column = 0;
Xint lineno = 1;
X
X#ifdef __STDC__
Xextern void count(void);
Xextern char * comment(int closing);
X#else
Xextern void count();
Xextern char * comment();
X#endif
X
X%}
X
XLEXSHORT [-+!?#]
XLEXLONG  [-+=/\\\^\&\*\~<>_|#]
X
X%%
X[Oo0]\-?[Oo0](\-?[Oo0])? { /* roque */ ; parse_roque(yytext); }
X[0-9]+[\.]?	        { /* move number */ parse_number(yytext); }
X[A-Z]?([a-z]([1-8])?)?[-xX]?[a-z][1-8]  { /* move */  
X  (void) parse_move(yytext);
X  /*; fprintf(stderr,"%s, ",yytext);*/ 
X}
X
X
X{LEXLONG}{LEXLONG}{LEXLONG}     { /* comment */ ; 
X				parse_comment(yytext); }
X{LEXLONG}{LEXLONG}      { /* comment */ ; 
X				   parse_comment(yytext); }
X{LEXSHORT}{LEXSHORT}    { /* comment */ ; 
X				     parse_comment(yytext); }
X{LEXLONG}               { /* comment */ ; 
X			   parse_comment(yytext); }
X{LEXSHORT}              { /* comment */ ; parse_comment(yytext); }
X"\(\.\)"                { /* comment */ ; parse_comment(yytext); }
X"\(\*\)"                { /* comment */ ; parse_comment(yytext); }
X"\(\^\)"                { /* comment */ ; parse_comment(yytext); }
X"\[\+\]"                { /* comment */ ; parse_comment(yytext); }
X"\(\)"                  { /* comment */ ; parse_comment(yytext); }
X"\[\]"                  { /* comment */ ; parse_comment(yytext); }
X"o\.\.o"                { /* comment */ ; parse_comment(yytext); }
X"oo"                    { /* comment */ ; parse_comment(yytext); }
X"o/o"                   { /* comment */ ; parse_comment(yytext); }
X"@\^"                   { /* comment */ ; parse_comment(yytext); }
X"etc"                   { /* comment */ ; parse_comment("etc"); }
X"ep"|"e\.p\."           { /* comment */ ; parse_comment("ep"); }
X\$[a-z][a-z][a-z]       { /* game comment */ ; parse_comment(yytext); }
X@[a-z]+\{		{ /* keyword with arg */ 
X  yytext[yyleng -1] = '\0' ;
X  parse_keyword(yytext, comment('}'));
X}
X@[a-z]+			{ /* keyword without arg */ 
X  parse_keyword(yytext,NULL); }
X"\["			{ parse_text(comment(']')); }
X"\("			{ parse_text(comment(')')); }
X"\{"                    { /* enter variation */ ; enter_variation(); }
X"\}"			{ /* close variation */ ; exit_variation(); }
X[\,;\.]			{ /* skip , ; */ ; }
X[ \t\v\n\f]             { /* skip blanks */; }
X.                      { /* ignore bad characters */ (void) fprintf(stderr,"I don't understand: %s\n",yytext);}
X%%
X
X#ifdef FLEX_SCANNER
X#undef yywrap
X#endif
X#ifdef __STDC__
Xint yywrap(void)
X#else
Xint yywrap()
X#endif
X{
X        return(1);
X}
X
X
X/* this procedure store comments in the text array commbuf
X   Escape char are allowed for putting the end-of-comment symbol
X   in the buffer
X   */
X#ifdef __STDC__
Xstatic char * comment(int closing)
X#else
Xstatic char * comment(closing)
X     char closing;
X#endif
X{
X  register char c;
X  register int i=0;
X
X  while ( ((c = input()) != closing)  && (c != 0) && (c != EOF)) {
X    commbuf[i] = c;
X    if (i <LARGE_BUF) i++ ;
X    
X    if (c == '\\') {
X      c = input() ;
X      if (c == closing)
X	commbuf[i-1] = c;
X      else
X	unput(c);
X    }
X  }
X  commbuf[i] = '\0' ;
X  return(commbuf);
X}
X
X#ifdef __STDC__
Xstatic void count(void)
X#else
Xstatic void count()
X#endif
X{
X  register int i;
X  register int k;
X
X  for (i = 0; yytext[i] != '\0'; i++) {
X    if (yytext[i] == '\n') {
X      column = 0;
X      for (k = 0 ; k< NCURLINE; k++) /*PANDORE*/
X        curline[k] = ' '; /*PANDORE*/
X      lineno++;
X    }
X    else if (yytext[i] == '\t') {
X      column += 8 - (column % 8);
X      curline[column] = yytext[i];
X    } else {
X      column++;
X      curline[column] = yytext[i];
X    }
X    curline[column+1]= '\0' ;
X  }
X  /*ECHO;*/
X}
END_OF_FILE
if test 3979 -ne `wc -c <'lexer.l'`; then
    echo shar: \"'lexer.l'\" unpacked with wrong size!
fi
# end of 'lexer.l'
fi
if test -f 'notation.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'notation.h'\"
else
echo shar: Extracting \"'notation.h'\" \(5592 characters\)
sed "s/^X//" >'notation.h' <<'END_OF_FILE'
X/*
X  Notation program
X  @(#)notation.h	3.1 (C) Henry Thomas\tVersion 3.1\tDated 6/16/91
X */
X#ifndef _NOTATION_HEADERS
X#define _NOTATION_HEADERS
X
X
X/* ---- KEYWORDS ----  */
X
X/* prefix for keywords */
X#define PREFIX '@'
X
X
X#define START     0
X#define CLEAR     1
X#define SHOWBOARD 2
X#define TOWHITE   3
X#define TOBLACK   4
X#define CONFIGWH  5
X#define CONFIGBL  6
X#define DEFAULTP  7
X#define TITLE	  8
X#define SUBTITLE  9
X#define SCORE	  10
X#define LANGUE    11
X#define SPECIAL   12
X#define KNULL     13
X
X#define NBKEYWORD (KNULL+1)
X
X
X/* ---- LANGUAGES ---- */
X
X#define FRENCH 		0
X#define ENGLISH 	1
X#define ITALIAN 	2
X#define SPANISH 	3
X#define GERMAN  	4
X#define DUTCH   	5
X#define CZECH		6
X#define HUNGARIAN      	7
X#define POLISH		8
X#define ROMANIAN       	9
X#define FIDE		10
X
X#define USERDEF		11
X
X#define NBLANGUAGES 	(USERDEF+0)
X
X#ifndef DEFAULT_INPUT_LANGUAGE
X#define DEFAULT_INPUT_LANGUAGE  FRENCH
X#endif
X
X#ifndef DEFAULT_OUTPUT_LANGUAGE
X#define DEFAULT_OUTPUT_LANGUAGE FRENCH
X#endif
X
X
X/* a convenient way  to get a value for NUM_COMMENT 
X   look at GNU-CC source, it's full of *neat* tricks 
X   */
X
X#define CHESSSYMB(LET,LASC,SASC,TEX,PS,ENG,FRA) LET,
X
Xenum com_code {
X#include "chesssymb.def"
X  LAST_UNUSED_NUM_COM_CODE
X  };
X#undef CHESSSYMB
X
X#define NUM_COM_CODE ((int) LAST_UNUSED_NUM_COM_CODE) 
X
X/* ---- MISC TABLES ---- */
X
X/* roque ascii table */
X#define NBROQUE     6
X#define SPETITROQUE 0
X#define SGRANDROQUE 1
X
X
X/* ---- DRIVERS ---- */
X
X/* output drivers name table */
X#define DEFAULT_DRIVER D_ASCII
X
X/* ---- IO ---- */
X
X#ifndef LIB_DIR
X#define LIB_DIR    "./lib/"
X#endif
X
X#define HELP_FILE  "HELPFILE"
X
Xextern FILE * infile;
X
X/* ------------- service routines -------------------*/
X
X/* Output an error message and exit */
X#define fatal(A) (void) fprintf A , close_files() , exit(1)
X
X/* Output an error message and set the error flag */
X#define error(A) (void) fprintf A , error_flag = TRUE , (void)fflush(stderr)
X
X/* Output an error message and set the error flag */
X#define message(A) (void) fprintf A 
X
X#define MALLOC(T)  (T *)malloc((unsigned)sizeof(T))
X#define ALLOCP(P)  if ( (P) == NULL ) { fatal(("malloc failed")) ; };
X
X/* ------- conversion of input character --------------------- */
X
X#define lettertocol(c)  ((c)-'a'+1)
X#define lettertolig(c)  ((c)-'1'+1)
X#define coltoletter(n)  ((n)-1+'a')
X#define ligtoletter(n)  ((n)-1+'1')
X
X
X/* ------- variables and functions --------------------------- */
Xextern char *version_string;
Xextern int configuring;
Xextern int configside;
Xextern char *in_table;
Xextern char *out_table;
Xextern char *c_roque[];
Xextern char *c_en_passant[];
Xextern char c_prise;
Xextern char *c_comments[];
Xextern int error_flag;
X
Xextern char *com_short[];
Xextern char *com_long[];
X
X/* ---------- service routines ---------- */
X
X#ifdef __STDC__
Xextern void clear_board(game *g);
Xextern game *new_board(void);
Xextern game *copy_board(game *from, game *to);
Xextern void init_board(game *tgm);
Xextern depl *new_move(void);
Xextern void init_move(depl *m);
Xextern depl *copy_move(depl *from, depl *to);
Xextern void enter_variation(void);
Xextern void exit_variation(void);
X#else
Xextern void clear_board(/*game *g*/);
Xextern game *new_board(/*void*/);
Xextern game *copy_board(/*game *from, game *to*/);
Xextern void init_board(/*game *tgm*/);
Xextern depl *new_move(/*void*/);
Xextern void init_move(/*depl *m*/);
Xextern depl *copy_move(/*depl *from, depl *to*/);
Xextern void enter_variation(/*void*/);
Xextern void exit_variation(/*void*/);
X#endif
X
X/* ------ parse and analysis routines ------ */
X
X#ifdef __STDC__
Xextern int in_board(int l, int c);
Xextern int path_free(int l1, int c1, int l2, int c2);
Xextern int check_roque(void);
Xextern int guess_piece(void);
Xextern int guess_depl(int nb, int tab[][2], int *pl1, int *pc1, int l2, int c2, int path);
Xextern int ambiguity(int frompiece, int l2, int c2);
Xextern int check_move(depl *m);
Xextern int guess_move(void);
Xextern int clear_pos(int lig, int col);
Xextern int configure(void);
Xextern int execute_move(void);
Xextern int typechar(char c);
Xextern int execute(int num, char c);
Xextern int parse_number(char *token);
Xextern int parse_text(char *text);
Xextern int parse_comment(char *com);
Xextern int parse_keyword(char *token, char *text);
Xextern int parse_roque(char *token);
Xextern int parse_move(char *token);
Xextern void init_parse(depl *m);
X#else
Xextern int in_board(/*int l, int c*/);
Xextern int path_free(/*int l1, int c1, int l2, int c2*/);
Xextern int check_roque(/*void*/);
Xextern int guess_piece(/*void*/);
Xextern int guess_depl(/*int nb, int tab[][2], int *pl1, int *pc1, int l2, int c2, int path*/);
Xextern int ambiguity(/*int frompiece, int l2, int c2*/);
Xextern int check_move(/*depl *m*/);
Xextern int guess_move(/*void*/);
Xextern int clear_pos(/*int lig, int col*/);
Xextern int configure(/*void*/);
Xextern int execute_move(/*void*/);
Xextern int typechar(/*char c*/);
Xextern int execute(/*int num, char c*/);
Xextern int parse_number(/*char *token*/);
Xextern int parse_text(/*char *text*/);
Xextern int parse_comment(/*char *com*/);
Xextern int parse_keyword(/*char *token, char *text*/);
Xextern int parse_roque(/*char *token*/);
Xextern int parse_move(/*char *token*/);
Xextern void init_parse(/*depl *m*/);
X#endif
X
X/* ------ top-level interface functions -------- */
X
X#ifdef __STDC__
Xextern int parse_options(int argc, char *argv[]);
Xextern void close_files(void);
Xextern int associe_traduction(char **table, int langage);
X
X#else
Xextern int parse_options(/*int argc, char *argv[]*/);
Xextern void close_files(/*void*/);
Xextern int associe_traduction(/*char **table, int langage*/);
X
X#endif
X
X
X#endif
END_OF_FILE
if test 5592 -ne `wc -c <'notation.h'`; then
    echo shar: \"'notation.h'\" unpacked with wrong size!
fi
# end of 'notation.h'
fi
if test -f 'print-ps' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'print-ps'\"
else
echo shar: Extracting \"'print-ps'\" \(134 characters\)
sed "s/^X//" >'print-ps' <<'END_OF_FILE'
X#!/bin/sh
X# printer for ps files using the font chess
X# args : files to print
XCHEQFILE="./Cheq"
Xfor i
Xdo
X	cat $CHEQFILE $i | lpr
Xdone
END_OF_FILE
if test 134 -ne `wc -c <'print-ps'`; then
    echo shar: \"'print-ps'\" unpacked with wrong size!
fi
chmod +x 'print-ps'
# end of 'print-ps'
fi
if test -f 'symb.tex' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'symb.tex'\"
else
echo shar: Extracting \"'symb.tex'\" \(3828 characters\)
sed "s/^X//" >'symb.tex' <<'END_OF_FILE'
X
X 	   check & \verb; +; & \verb; + ; &   + & \verb;  +; \cr
X
X 	   double check & \verb; ++; & \verb; ++ ; &   ++ & \verb;  ++; \cr
X
X 	   white stands lightly better & \verb; $wsb; & \verb; +=; &  \COMwsb & \verb; \COMwsb; \cr
X
X 	   black stands lightly better & \verb; $bsb; & \verb; =+; &  \COMbsb & \verb; \COMbsb; \cr
X
X 	   white has the upper hand & \verb; $wbe; & \verb; +_; &  \COMwbe & \verb; \COMwbe; \cr
X
X 	   black has the upper hand & \verb; $bbe; & \verb; _+; &  \COMbbe & \verb; \COMbbe; \cr
X
X 	   white has a decisive advantage & \verb; $wda; & \verb; +-; &  \COMwda & \verb; \COMwda; \cr
X
X 	   black has a decisive advantage & \verb; $bda; & \verb; -+; &  \COMwda & \verb; \COMwda; \cr
X
X 	   even & \verb; =  ; & \verb; =; &   \COMlev & \verb;  \COMlev; \cr
X
X 	   unclear & \verb; $ucr; & \verb; ~ ; &   \COMucr & \verb;  \COMucr; \cr
X
X 	   with compensation for the material & \verb; $wco; & \verb; =~ ; &   \COMwco & \verb;  \COMwco; \cr
X
X 	   development advantage & \verb; $dad; & \verb; (^) ; &   \COMdad & \verb;  \COMdad; \cr
X
X 	   greater space advantage & \verb; $spa; & \verb; () ; &   \COMspa & \verb;  \COMspa; \cr
X
X 	   with attack & \verb; $wta; & \verb; -> ; &   \COMwta & \verb;  \COMwta; \cr
X
X 	   with initiative & \verb; $win; & \verb; |^ ; &   \COMwin & \verb;  \COMwin; \cr
X
X 	   with counter-play & \verb; $wcp; & \verb; <-> ; &   \COMwcp & \verb;  \COMwcp; \cr
X
X 	   zugzwang & \verb; $zug; & \verb; (.) ; &   \COMzug & \verb;  \COMzug; \cr
X
X 	   mate & \verb; #; & \verb; # ; &   \# & \verb;  \#; \cr
X
X 	   very good move & \verb; !; & \verb; ! ; &   ! & \verb;  !; \cr
X
X 	   very bad move & \verb; ?; & \verb; ? ; &   ? & \verb;  ?; \cr
X
X 	   excellent move & \verb; !!; & \verb; !! ; &   !! & \verb;  !!; \cr
X
X 	   a mistake & \verb; ??; & \verb; ?? ; &   ?? & \verb;  ??; \cr
X
X 	   a move deserving attention & \verb; !?; & \verb; !? ; &   !? & \verb;  !?; \cr
X
X 	   a dubious move & \verb; ?!; & \verb; ?! ; &   ?! & \verb;  ?!; \cr
X
X 	   with the idea... & \verb; $wti; & \verb; /\ ; &   \COMwti & \verb;  \COMwti; \cr
X
X 	   only move & \verb; $olm; & \verb; [] ; &   \COMolm & \verb;  \COMolm; \cr
X
X 	   better is & \verb; $bei; & \verb; ^_ ; &   \COMbei & \verb;  \COMbei; \cr
X
X 	   file & \verb; $fil; & \verb; <=> ; &   \COMfil & \verb;  \COMfil; \cr
X
X 	   diagonal & \verb; $dia; & \verb; /^ ; &   \COMdia & \verb;  \COMdia; \cr
X
X 	   center & \verb; $cnt; & \verb; [+] ; &   \COMcnt & \verb;  \COMcnt; \cr
X
X 	   king's side & \verb; $kgs; & \verb; >> ; &   \COMkgs & \verb;  \COMkgs; \cr
X
X 	   queen's side & \verb; $qns; & \verb; << ; &   \COMqns & \verb;  \COMqns; \cr
X
X 	   weak point & \verb; $wkp; & \verb; >< ; &   \COMwkp & \verb;  \COMwkp; \cr
X
X 	   ending & \verb; $end; & \verb; _|_ ; &   \COMend & \verb;  \COMend; \cr
X
X 	   pair of bishops & \verb; $pob; & \verb; == ; &   \COMpob & \verb;  \COMpob; \cr
X
X 	   bishops of opposite colors & \verb; $opc; & \verb; =# ; &   \COMopc & \verb;  \COMopc; \cr
X
X 	   same coloured bishops & \verb; $scb; & \verb; ## ; &   \COMscb & \verb;  \COMscb; \cr
X
X 	   united pawns & \verb; $unp; & \verb; oo ; &   \COMunp & \verb;  \COMunp; \cr
X
X 	   separated pawns & \verb; $sep; & \verb; o..o ; &   \COMsep & \verb;  \COMsep; \cr
X
X 	   doubled pawns & \verb; $dop; & \verb; o/o ; &   \COMdop & \verb;  \COMdop; \cr
X
X 	   time & \verb; $tim; & \verb; (+) ; &   \COMtim & \verb;  \COMtim; \cr
X
X 	   with & \verb; $wit; & \verb; |_ ; &   \COMwit & \verb;  \COMwit; \cr
X
X 	   without & \verb; $wto; & \verb; _| ; &   \COMwto & \verb;  \COMwto; \cr
X
X 	   etc & \verb; etc; & \verb; etc ; &   {etc} & \verb;  {etc}; \cr
X
X 	   etc & \verb; ||; & \verb; || ; &   \COMetc & \verb;  \COMetc; \cr
X
X 	   see & \verb; $see; & \verb;  ; &   \COMsee & \verb;  \COMsee; \cr
X
X 	   en passant & \verb; ep; & \verb; ep ; &   {ep} & \verb;  {ep}; \cr
X
END_OF_FILE
if test 3828 -ne `wc -c <'symb.tex'`; then
    echo shar: \"'symb.tex'\" unpacked with wrong size!
fi
# end of 'symb.tex'
fi
if test -f 'symboles.tex' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'symboles.tex'\"
else
echo shar: Extracting \"'symboles.tex'\" \(410 characters\)
sed "s/^X//" >'symboles.tex' <<'END_OF_FILE'
X\documentstyle[fullpage]{article}
X\pagestyle{empty}
X\begin{document}
X%\title{A Menagerie of Chess Symbols}
X%\author{Henry Thomas}
X%\date{Mars 1990}
X%\maketitle
X\input{chesssymb.tex}
X
X\font\figchess=chessfig10
X
X\begin{center}
X\begin{tabular}{|c|c|c|c|c|}\hline
XComment & Abbrev.& Abbr. & Symbol & \LaTeX\ Keyword \\ \hline \hline
X\input{symb.tex}
X & & & & \\ \hline
X\end{tabular}
X\end{center}
X
X
X\end{document}
X
END_OF_FILE
if test 410 -ne `wc -c <'symboles.tex'`; then
    echo shar: \"'symboles.tex'\" unpacked with wrong size!
fi
# end of 'symboles.tex'
fi
if test -f 'symboles.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'symboles.txt'\"
else
echo shar: Extracting \"'symboles.txt'\" \(1543 characters\)
sed "s/^X//" >'symboles.txt' <<'END_OF_FILE'
Xcomment	shorthand 	english translation
X------------------------------------------------
X
X +  +   	   check
X
X ++  ++   	   double check
X
X $wsb  +=  	   white stands lightly better
X
X $bsb  =+  	   black stands lightly better
X
X $wbe  +_  	   white has the upper hand
X
X $bbe  _+  	   black has the upper hand
X
X $wda  +-  	   white has a decisive advantage
X
X $bda  -+  	   black has a decisive advantage
X
X =    =  	   even
X
X $ucr  ~   	   unclear
X
X $wco  =~   	   with compensation for the material
X
X $dad  (^)   	   development advantage
X
X $spa  ()   	   greater space advantage
X
X $wta  ->   	   with attack
X
X $win  |^   	   with initiative
X
X $wcp  <->   	   with counter-play
X
X $zug  (.)   	   zugzwang
X
X #  #   	   mate
X
X !  !   	   very good move
X
X ?  ?   	   very bad move
X
X !!  !!   	   excellent move
X
X ??  ??   	   a mistake
X
X !?  !?   	   a move deserving attention
X
X ?!  ?!   	   a dubious move
X
X $wti  /\   	   with the idea...
X
X $olm  []   	   only move
X
X $bei  ^_   	   better is
X
X $fil  <=>   	   file
X
X $dia  /^   	   diagonal
X
X $cnt  [+]   	   center
X
X $kgs  >>   	   king's side
X
X $qns  <<   	   queen's side
X
X $wkp  ><   	   weak point
X
X $end  _|_   	   ending
X
X $pob  ==   	   pair of bishops
X
X $opc  =#   	   bishops of opposite colors
X
X $scb  ##   	   same coloured bishops
X
X $unp  oo   	   united pawns
X
X $sep  o..o   	   separated pawns
X
X $dop  o/o   	   doubled pawns
X
X $tim  (+)   	   time
X
X $wit  |_   	   with
X
X $wto  _|   	   without
X
X etc  etc   	   etc
X
X ||  ||   	   etc
X
X $see     	   see
X
X ep  ep   	   en passant
X
END_OF_FILE
if test 1543 -ne `wc -c <'symboles.txt'`; then
    echo shar: \"'symboles.txt'\" unpacked with wrong size!
fi
# end of 'symboles.txt'
fi
echo shar: End of archive 1 \(of 4\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 4 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
--
Henry Thomas - IRISA 		 - E-mail: Henry.Thomas@irisa.fr 
Campus Universitaire de Beaulieu - Phone: (+33)99 36 20 00 +549  
35042 RENNES CEDEX FRANCE 	 - Fax: (+33)99 38 38 32 Telex: UNIRISA 950473F
Telex Atlas X400: /X121=842950473/@atlas.fr, Fax:/X121=200099383832/@atlas.fr
--
exit 0 # Just in case...
-- 
Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD           UUCP:     uunet!sparky!kent
Phone:    (402) 291-8300         FAX:      (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.