[SCM] image display tool for astronomy branch, master, updated. 0b50c98c144d9af8e2e8ee2c20367c3de8cda1c7

Ole Streicher github at liska.ath.cx
Mon Jan 9 09:23:51 UTC 2012


The following commit has been merged in the master branch:
commit 0b50c98c144d9af8e2e8ee2c20367c3de8cda1c7
Author: Ole Streicher <github at liska.ath.cx>
Date:   Mon Jan 9 10:20:34 2012 +0100

    Add debian files from package saods9_4.0b7-2

diff --git a/debian/README.Debian b/debian/README.Debian
new file mode 100644
index 0000000..e4f7a74
--- /dev/null
+++ b/debian/README.Debian
@@ -0,0 +1,38 @@
+saods9 for Debian
+-----------------
+
+Upstream DS9 source includes many libraries, including:
+
+  blt2.4z
+  tcl8.4.9
+  tcllib-1.6.1
+  tk8.4.9
+  tkimg1.3rc2
+  tktable2.9
+  zlib-1.2.3 (3 copies!)
+
+I've modified the compilation to depend on the appropriate packages
+and use shared libraries instead.
+
+I've not included the XPA library interface.  Let me know if you need
+it.
+
+The upstream README states:
+
+  1. DS9 comes with Tcl/Tk8.4.5. There are several changes to 2 TCL/TK lib
+  scripts, so you must used this version when building DS9. We had to
+  make small changes to xmfbox.tcl and tkfbox.tcl to allow
+  the '[' and ']' chars, and to handle colormaps correctly.
+
+I'm using the hacked SAO copies for those two files, as well as
+auto.tcl to avoid an error on startup.  But, this could cause problems
+since changing internal library files isn't guaranteed to be
+consistent.  diff |patch for the present version of those libraries in
+Debian is a consideration.
+
+The upstream copy of SLALIB in ./sla/ is the proprietary, obscured C
+version.  It is stripped from the Debian .orig, and a fortran version
+included in its place.  It will be periodically synced to the Starlink
+CVS copy.
+
+ -- Justin Pryzby <justinpryzby at users.sf.net>, Tue,  4 Jan 2005 21:53:52 -0500
diff --git a/debian/README.sla b/debian/README.sla
new file mode 100644
index 0000000..8262319
--- /dev/null
+++ b/debian/README.sla
@@ -0,0 +1,7 @@
+./debian/sla_functions is from build log warnings by:
+
+  sed -nre "s/^.*implicit declaration of function '(sla[^']*)'$/\1/p" ../*.build |sort -u >../debian/sla_functions
+
+./sla/slalib.h is (re)generated by:
+
+  ( echo "// This is a generated file; see ./debian/README.sla for information."; for f in $(<../debian/sla_functions); do sed -nre "/^(double|float|void).*$f/{ : loop; /\{$/{ s/\{$/;/; p; q;}; N; b loop; };" sla.c; done; ) >slalib.h 
diff --git a/debian/TODO b/debian/TODO
new file mode 100644
index 0000000..e3a64a5
--- /dev/null
+++ b/debian/TODO
@@ -0,0 +1,3 @@
+ds9 manpage [PARTIALLY DONE]
+Separate shared library packages? (esp. for wcs)
+Remove ./debian/shlibs.local; blocked by bug: 339056
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..bb0e48f
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,96 @@
+saods9 (4.0b7-2) unstable; urgency=low
+
+  * QA upload.
+  * Orphan package
+  * Put package to collab-maint git
+  * Fix gcc-4.3 build, closes: #461710
+  * Import changes from ubuntu:
+   + Transition to gfortran, closes: #449456
+   + Fix tcl/tk location, closes: #450475
+   + Add .desktop file and icon for it, closes: #377452
+   - remove dpatch usage: die die die
+  * Ack NMU's; closes: #377113, #444563, #344317
+
+ -- Riku Voipio <riku.voipio at iki.fi>  Sun, 30 Mar 2008 15:19:23 +0300
+
+saods9 (4.0b7-1.5) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Switched to dynamic loading of tcllib packages. It fixes FTBFS caused
+    by tcllib upgrade (closes: #409488).
+  * Added build-dependency on libtk-img-dev because of libtk-img splitting.
+  * Switched to dynamic loading of Img package. It fixed FTBFS caused by
+    libtk-img upgrade. Also, it fixes loading of incorrect Img libraries
+    (closes: #429332).
+  * Included patch by Martin Michlmayr which fixes FTBFS with GCC 4.3
+    (closes: #417681).
+
+ -- Sergei Golovan <sgolovan at debian.org>  Sat, 29 Sep 2007 14:35:47 +0400
+
+saods9 (4.0b7-1.4) unstable; urgency=low
+
+  * NMU (credativ BSP)
+  * (Build-)depend on libtktable2.9, to kill off the old version. This also
+    replaces the dep on the -dev package, which was unneeded (.so is in the
+    lib package).
+    This will allow us to kill off libtktable, which is rc-buggy
+
+ -- Marc 'HE' Brockschmidt <he at debian.org>  Fri, 15 Sep 2006 11:36:22 +0200
+
+saods9 (4.0b7-1.3) unstable; urgency=high
+
+  * Non-maintainer upload.
+  * Add a manual dependency from saods9 to libtktable, as dpkg-shlibdeps
+    refuses to add automatic dependency information for any soname not on
+    the form "foo.so.bar" or "foo-bar.so", and "libTkTable2.9.so" is neither.
+    (Closes: #374795)
+
+ -- Steinar H. Gunderson <sesse at debian.org>  Thu,  6 Jul 2006 20:52:00 +0200
+
+saods9 (4.0b7-1.2) unstable; urgency=low
+
+  * NMU
+  * Fix FTBFS with gcc-4.1 (Closes: #356979)
+  * Use /usr/lib/tcllib1.8 instead of 1.7
+  * Link against tktable2.9
+  * Build-depends on libtktable-dev
+
+ -- Julien Danjou <acid at debian.org>  Mon, 29 May 2006 15:42:39 +0200
+
+saods9 (4.0b7-1.1) unstable; urgency=low
+
+  * Non-maintainer upload at request of maintainer.
+  * make.linux: Change /usr/X11R6/include to /usr/include/X11 in preparation
+    for the coming X directory rearrangement (Closes: #344317).
+
+ -- Kevin B. McCarty <kmccarty at debian.org>  Tue, 10 Jan 2006 10:08:27 -0500
+
+saods9 (4.0b7-1) unstable; urgency=low
+
+  * New upstream release;
+    Along with a 3-line patch, fixes FTBFS with new GCC (Closes: #318042);
+    Causes rebuild with GCC 4, as needed for transition.
+  * Bump Standards-Version to 3.6.2 (no changes required).
+  * ./debian/rules: get_orig_source now exists to generate a DFSG .orig
+    tarball using fortran CVS copy of SLALIB, the C implementation of which is
+    not GPL; the sources distributed by CfA are obfuscated (Closes: #336098).
+  * Rewrite copyright file; include the unmodified license as distributed by
+    CfA; document all copyright holders and licenses for packages included in
+    the DFSG .orig tarball (Closes: #303665).
+  * ./debian/control: Priority: extra (Closes: #315690).
+  * Include generated manpage; a first step towards closing #303651.
+  * Include documentation relevent to package; (Closes: #303668); selected
+    items from ./ds9/doc/ and ./xpa/doc/; also include docbase templates.
+
+ -- Justin Pryzby <justinpryzby at users.sf.net>  Thu, 17 Nov 2005 23:56:09 -0500
+
+saods9 (3.0.3-1) unstable; urgency=low
+
+  * Initial Release (Closes: #289371)
+    - Thanks Aurelien Jarno.
+  * Revert commented-out include in saotk/hal/Makefile.
+    - Thanks Michael Weber.
+  * Remove rpath from ds9 binary.
+
+ -- Justin Pryzby <justinpryzby at users.sf.net>  Tue, 22 Mar 2005 11:29:52 -0500
+
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..b8626c4
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+4
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..df2252b
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,42 @@
+Source: saods9
+Section: science
+Priority: extra
+Maintainer: Debian QA Group <packages at qa.debian.org>
+Build-Depends: debhelper (>= 4.0.0), libtk-img-dev, zlib1g-dev, blt-dev, tcl8.4-dev, tcllib, tk8.4-dev, libtktable2.9, gfortran
+Standards-Version: 3.7.3
+Homepage: http://hea-www.harvard.edu/RD/ds9/
+Vcs-Git: git://git.debian.org/git/collab-maint/saods9.git
+Vcs-Browser: http://git.debian.org/?p=collab-maint/saods9.git
+
+Package: saods9
+Architecture: any
+Depends: libtk-img, libtktable2.9, tcllib, ${shlibs:Depends}
+Description: image display tool for astronomy
+ DS9 is an application for astronomical imaging and data
+ visualization.
+ .
+ DS9 is the modern imtool used by astronomers.  It is most
+ distinguished by its support for displaying images of high dynamic
+ range (such as 16 bit greyscale FITS files).  Whereas many other
+ tools will only read an approximation to such files, DS9 works in
+ full precision, and uses various display parameters to map input data
+ into 8 bit data which can be displayed on the screen.
+ .
+ Available parameters for the mapping include: brightness, contrast,
+ false color, and nonlinear input mapping (such as logarithm, square
+ root, square, etc.)
+ .
+ Although it may be useful in other fields, DS9 includes a fair number
+ of features specific to astronomy.  There is an astronomical "name
+ resolver" which allows a lookup of an arbitrary named object to its
+ coordinates.  Given the coordinates of a field, online archive
+ servers may be queried, and an image retrieved.  DS9 thusly
+ implements a preliminary "Virtual Observatory".
+ .
+ DS9 is entirely controllable from external programs ("XPA"), which
+ simplifies complex tasks such as data acquisition, realtime display,
+ and batch analysis.
+ .
+ If images include WCS (World Coordinate System) keywords, then they
+ may be "blinked" to search for moving or changing objects.
+ .
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..d53de9d
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,581 @@
+This package was debianized by Justin Pryzby <justinpryzby at users.sf.net> on
+Tue,  4 Jan 2005 21:53:52 -0500.  The Debian .diff is hereby placed
+into the public domain.
+
+DS9 "proper" was downloaded from:
+  http://hea-www.harvard.edu/saord/download/ds9/source/ds9.4.0b7.tar.gz
+  http://hea-www.harvard.edu/saord/download/ds9/source/
+  http://hea-www.harvard.edu/RD/ds9/
+
+The fortran implementation of SLAlib is GPL-licensed by Starlink, but
+the C implementation is considered proprietary, and the DS9 copy is
+obfuscated.  ./debian/rules:get_orig_source creates a DFSG-free
+tarball by retrieving the fortran version of SLA from Starlink CVS.
+
+./ast-3.5/ unless otherwise noted:
+	Copyright (C) 1999-2004 Central Laboratory of the Research Councils
+	Upstream authors: D.S. Berry (Starlink), R.F. Warren-Smith (Starlink)
+
+	LGPL from COPYING.LIB
+
+ast-3.5/wcstrig.c
+ast-3.5/proj.h
+ast-3.5/proj.c
+ast-3.5/wcsmath.h
+ast-3.5/wcstrig.h
+	Copyright (C) 1995-2002, Mark Calabretta <mcalabre at atnf.csiro.au>
+
+	LGPL
+
+ast-3.5/dssmap.c
+ast-3.5/dssmap.h
+	Copyright 2004 Central Laboratory of the Research Councils
+
+	Modifications by Doug Mink are copyright: 1988 Smithsonian
+	Astrophysical Observatory
+
+	You may do anything you like with these files except remove
+	this copyright.  The Smithsonian Astrophysical Observatory
+	makes no representations about the suitability of this
+	software for any purpose.  It is provided "as is" without
+	express or implied warranty.
+
+ast-3.5/slalib.h
+	Copyright P.T.Wallace.  All rights reserved.
+
+	This file is removed and replaced with an empty file 'cause it
+	isn't necessary.
+
+./checkdns/
+	Copyright (C) 1999-2005 Smithsonian Astrophysical Observatory,
+	Cambridge, MA, USA
+
+	GPL
+
+./ds9/ unless otherwise noted
+	Copyright (C) 1999-2005 Smithsonian Astrophysical Observatory,
+	Cambridge, MA, USA
+
+	GPL
+
+(The following 4 files are copies modified by SAO; the *.tcl ones are
+copied from ./tcl8.4.9/ to ./ds9/ by me).
+
+./ds9/auto.tcl
+	Copyright (c) 1991-1993 The Regents of the University of California.
+	Copyright (c) 1994-1998 Sun Microsystems, Inc.
+	Modifications are copyright SAO 1999-2005.
+
+	[Same license as ./ds9/tkfbox.tcl]
+
+./win/tkWinDraw.c
+	Copyright (c) 1995 Sun Microsystems, Inc.
+	Copyright (c) 1994 Software Research Associates, Inc.
+
+	[Same license as ./ds9/tkfbox.tcl]
+
+./ds9/tkfbox.tcl
+./ds9/xmfbox.tcl
+	Copyright (c) 1994-1998 Sun Microsystems, Inc.
+	Copyright (c) 1998-2000 Scriptics Corporation
+
+	This software is copyrighted by the Regents of the University
+	of California, Sun Microsystems, Inc., and other parties.  The
+	following terms apply to all files associated with the
+	software unless explicitly disclaimed in individual files.
+
+	The authors hereby grant permission to use, copy, modify,
+	distribute, and license this software and its documentation
+	for any purpose, provided that existing copyright notices are
+	retained in all copies and that this notice is included
+	verbatim in any distributions. No written agreement, license,
+	or royalty fee is required for any of the authorized uses.
+	Modifications to this software may be copyrighted by their
+	authors and need not follow the licensing terms described
+	here, provided that the new terms are clearly indicated on the
+	first page of each file where they apply.
+	
+	IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY
+	PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
+	CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE,
+	ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN IF THE
+	AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+	
+	THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY
+	WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+	WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+	PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE IS PROVIDED ON
+	AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO
+	OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
+	ENHANCEMENTS, OR MODIFICATIONS.
+	
+	GOVERNMENT USE: If you are acquiring this software on behalf
+	of the U.S. government, the Government shall have only
+	"Restricted Rights" in the software and related documentation
+	as defined in the Federal Acquisition Regulations (FARs) in
+	Clause 52.227.19 (c) (2).  If you are acquiring the software
+	on behalf of the Department of Defense, the software shall be
+	classified as "Commercial Computer Software" and the
+	Government shall have only "Restricted Rights" as defined in
+	Clause 252.227-7013 (c) (1) of DFARs.  Notwithstanding the
+	foregoing, the authors grant the U.S. Government and others
+	acting in its behalf permission to use and distribute the
+	software in accordance with the terms specified in this
+	license.
+
+./htmlwidget/ unless otherwise noted
+	Copyright (C) 1997,1998 D. Richard Hipp
+
+	LGPL
+
+./htmlwidget/configure:
+	Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+
+	This configure script is free software; the Free Software
+	Foundation gives unlimited permission to copy, distribute and
+	modify it.
+
+./iis/
+	Original authors: Doug Tody, NOAO Mike Fitzpatrick, NOAO
+
+	Modifications are copyright (C) 1999-2005 Smithsonian
+	Astrophysical Observatory, Cambridge, MA, USA
+	
+	GPL
+
+./mktclapp/ unless otherwise noted
+	Copyright (C) 1996,1997,1998 D. Richard Hipp
+
+	GPL
+
+./mktclapp/balloon.tcl
+	Copyright (C) 1996-1997 Stewart Allen
+
+	GPL
+
+./saotk/ unless otherwise noted
+	Copyright (C) 1999-2005 Smithsonian Astrophysical Observatory,
+	Cambridge, MA, USA
+
+	GPL
+
+./saotk/fdstream.hpp
+	(C) Copyright Nicolai M. Josuttis 2001.
+
+	Permission to copy, use, modify, sell and distribute this
+	software is granted provided this copyright notice appears in
+	all copies.  This software is provided "as is" without express
+	or implied warranty, and with no claim as to its suitability
+	for any purpose.
+
+./saotk/panner/parser.H
+./saotk/panner/parser.C
+./saotk/fitsy++/parser.H
+./saotk/fitsy++/parser.C
+./saotk/frame/parser.H
+./saotk/frame/prosparser.C
+./saotk/frame/parser.C
+./saotk/frame/ds9parser.H
+./saotk/frame/xyparser.H
+./saotk/frame/saoparser.C
+./saotk/frame/prosparser.H
+./saotk/frame/saoparser.H
+./saotk/frame/ciaoparser.H
+./saotk/frame/tngparser.H
+./saotk/frame/ds9parser.C
+./saotk/frame/tngparser.C
+./saotk/frame/xyparser.C
+./saotk/frame/ciaoparser.C
+./saotk/colorbar/parser.H
+./saotk/colorbar/parser.C
+./saotk/magnifier/parser.H
+./saotk/magnifier/parser.C
+	Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free
+	Software Foundation, Inc.
+
+	GPL
+
+./saotk/FlexLexer.h
+	This code is derived from software contributed to Berkeley by
+	Kent Williams and Tom Epperly.
+
+	Redistribution and use in source and binary forms with or
+	without modification are permitted provided that: (1) source
+	distributions retain this entire copyright notice and comment,
+	and (2) distributions including binaries display the following
+	acknowledgement:  ``This product includes software developed
+	by the University of California, Berkeley and its
+	contributors'' in the documentation or other materials
+	provided with the distribution and in all advertising
+	materials mentioning features or use of this software.
+	Neither the name of the University nor the names of its
+	contributors may be used to endorse or promote products
+	derived from this software without specific prior written
+	permission.
+	
+	THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+	IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+	PURPOSE.
+
+(It is my understanding that this is the original "BSD with
+advertizing clause", and, since it is licensed by Berkeley, has been
+since relicensed without the advertizing clause.  Here, I only restate
+the license included upstream.) 
+
+./xpa-2.1.6/ unless otherwise noted
+	Copyright (c) 1999-2004 Smithsonian Astrophylesical
+	Observatory
+
+	GPL
+
+./xpa-2.1.6/configure
+	Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
+	2001, 2002 Free Software Foundation, Inc.
+
+	This configure script is free software; the Free Software
+	Foundation gives unlimited permission to copy, distribute and
+	modify it.
+
+./xpa-2.1.6/install-sh
+	Copyright 1991 by the Massachusetts Institute of Technology
+
+	Permission to use, copy, modify, distribute, and sell this
+	software and its documentation for any purpose is hereby
+	granted without fee, provided that the above copyright notice
+	appear in all copies and that both that copyright notice and
+	this permission notice appear in supporting documentation, and
+	that the name of M.I.T. not be used in advertising or
+	publicity pertaining to distribution of the software without
+	specific, written prior permission.  M.I.T. makes no
+	representations about the suitability of this software for any
+	purpose.  It is provided "as is" without express or implied
+	warranty.
+
+./xpa-2.1.6/config.sub
+./xpa-2.1.6/config.guess
+	Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+	2000, 2001, 2002 Free Software Foundation, Inc.
+
+	GPL
+
+./funtools-1.3.0b9/ unless otherwise noted
+	Copyright (C) 1999-2003 Smithsonian Astrophysical Observatory,
+	Cambridge, MA, USA
+
+	GPL
+
+./funtools-1.3.0b9/filter/idx.tab.c
+./funtools-1.3.0b9/filter/idx.tab.h
+./funtools-1.3.0b9/fitsy/Makefile.in
+./funtools-1.3.0b9/gnu/sort.c
+./funtools-1.3.0b9/gnu/system.h
+./funtools-1.3.0b9/jointable.c
+	Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+
+	GPL
+
+install-sh in various places
+	Copyright 1991 by the Massachusetts Institute of Technology
+	
+	Permission to use, copy, modify, distribute, and sell this
+	software and its documentation for any purpose is hereby
+	granted without fee, provided that the above copyright notice
+	appear in all copies and that both that copyright notice and
+	this permission notice appear in supporting documentation, and
+	that the name of M.I.T. not be used in advertising or
+	publicity pertaining to distribution of the software without
+	specific, written prior permission.  M.I.T. makes no
+	representations about the suitability of this software for any
+	purpose.  It is provided "as is" without express or implied
+	warranty.
+
+./funtools-1.3.0b9/search.c
+	Copyright 1991, 1993, 1995, 1999, 2003 John B. Roll jr.
+
+	This file is unused, and thus removed for simplicity.
+
+tkmpeg/ unless otherwise noted
+	Copyright 2002 Ingo Oppermann (ingo_opp at users.sourceforge.net)
+	Modifications are copyright 1999-2005 Smithsonian
+	Astrophysical Observatory, Cambridge, MA, USA
+
+	GPL
+
+wcssubs-3.5.6/ unless otherwise noted
+	Doug Mink <dmink at cfa.harvard.edu>
+	Copyright (C) 1996-2004 Smithsonian Astrophysical Observatory,
+	Cambridge, MA, USA
+
+./wcssubs-3.5.6/imio.c 
+./wcssubs-3.5.6/wcs.c
+./wcssubs-3.5.6/fitsfile.h
+./wcssubs-3.5.6/imhfile.c		*
+./wcssubs-3.5.6/dateutil.c
+./wcssubs-3.5.6/fitsfile.c
+./wcssubs-3.5.6/wcs.h
+./wcssubs-3.5.6/platepos.c
+./wcssubs-3.5.6/imio.h
+./wcssubs-3.5.6/hput.c
+./wcssubs-3.5.6/hget.c
+./wcssubs-3.5.6/wcsinit.c
+./wcssubs-3.5.6/fileutil.c
+./wcssubs-3.5.6/dsspos.c
+./wcssubs-3.5.6/fitshead.h
+./wcssubs-3.5.6/distort.c
+./wcssubs-3.5.6/iget.c
+	Doug Mink <dmink at cfa.harvard.edu>
+	Copyright (C) 1996-2004 Smithsonian Astrophysical Observatory,
+	Cambridge, MA, USA
+
+	LGPL
+
+./wcssubs-3.5.6/iraf2fits.c
+	Copyright:   1998 Smithsonian Astrophysical Observatory
+
+	You may do anything you like with this file except remove this
+	copyright.  The Smithsonian Astrophysical Observatory makes no
+	representations about the suitability of this software for any
+	purpose.  It is provided "as is" without express or implied
+	warranty.
+
+./wcssubs-3.5.6/sph.c
+./wcssubs-3.5.6/cel.c
+./wcssubs-3.5.6/wcstrig.c
+./wcssubs-3.5.6/proj.c
+./wcssubs-3.5.6/wcslib.h
+./wcssubs-3.5.6/wcslib.c
+./wcssubs-3.5.6/lin.c
+	Copyright (C) 1995-2002, Mark Calabretta
+	<mcalabre at atnf.csiro.au>
+
+	LGPL
+
+./wcssubs-3.5.6/imhfile.c
+./wcssubs-3.5.6/tnxpos.c
+./wcssubs-3.5.6/wcscon.c
+./wcssubs-3.5.6/worldpos.c
+
+./wcssubs-3.5.6/wcspos.c
+	Bill Cotton, NRAO
+
+	LGPL
+
+./wcssubs-3.5.6/slasubs.c
+	Starlink subroutines by Patrick Wallace used by wcscon.c
+	subroutines
+
+	LGPL?
+
+./sla/
+	Copyright P.T.Wallace.
+
+	The C implementation of SLA lib is proprietary and available
+	commercially from the author.
+
+	The C files distributed by SAO are obfuscated.
+
+	The fortran implementation distributed by starlink CVS is GPL;
+	this is the copy that is used.  See
+	debian/rules:get_orig_source.
+
+./win/
+	Copyright (C) 1999-2005 Smithsonian Astrophysical Observatory,
+	Cambridge, MA, USA
+
+	GPL
+
+Debian DS9 depends on and links dynamically against the following
+libraries:
+
+zlib
+	Copyright (C) 1995-1998 Jean-loup Gailly <jloup at gzip.org> and
+	Mark Adler <madler at alumni.caltech.edu>
+
+	This software is provided 'as-is', without any express or implied
+	warranty.  In no event will the authors be held liable for any
+	damages arising from the use of this software.
+
+	Permission is granted to anyone to use this software for any
+	purpose, including commercial applications, and to alter it and
+	redistribute it freely, subject to the following restrictions:
+
+	1. The origin of this software must not be misrepresented; you must
+	not claim that you wrote the original software. If you use this
+	software in a product, an acknowledgment in the product
+	documentation would be appreciated but is not required.
+
+	2. Altered source versions must be plainly marked as such, and must
+	not be misrepresented as being the original software.
+	   
+	3. This notice may not be removed or altered from any source
+	distribution.
+
+blt
+	Upstream author: G. Howlett (Lucent)
+	Copyright 1991-1998 by Bell Labs Innovations for Lucent
+	Technologies.
+
+	Permission to use, copy, modify, and distribute this software
+	and its documentation for any purpose and without fee is
+	hereby granted, provided that the above copyright notice
+	appear in all copies and that both that the copyright notice
+	and warranty disclaimer appear in supporting documentation,
+	and that the names of Lucent Technologies any of their
+	entities not be used in advertising or publicity pertaining to
+	distribution of the software without specific, written prior
+	permission.
+
+	Lucent Technologies disclaims all warranties with regard to
+	this software, including all implied warranties of
+	merchantability and fitness.  In no event shall Lucent
+	Technologies be liable for any special, indirect or
+	consequential damages or any damages whatsoever resulting from
+	loss of use, data or profits, whether in an action of
+	contract, negligence or other tortuous action, arising out of
+	or in connection with the use or performance of this software.  
+
+libtk-img
+	Upstream Author: Jan Nijtmans <j.nijtmans at chello.nl>
+
+	This software is copyrighted by Jan Nijtmans (the maintainer)
+	and a lot of other people who contributed code (most notably
+	Andreas Kupries, Thomas G. Lane, Ioi K. Lam, Mario Weilguni
+	and Roger E Critchlow Jr).  The following terms apply to all
+	files associated with the software unless explicitly
+	disclaimed in individual files.
+
+	The authors hereby grant permission to use, copy, modify,
+	distribute, and license this software and its documentation
+	for any purpose, provided that existing copyright notices are
+	retained in all copies and that this notice is included
+	verbatim in any distributions. No written agreement, license,
+	or royalty fee is required for any of the authorized uses.
+	Modifications to this software may be copyrighted by their
+	authors and need not follow the licensing terms described
+	here, provided that the new terms are clearly indicated on the
+	first page of each file where they apply.
+
+	IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY
+	PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
+	CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE,
+	ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN IF THE
+	AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+	THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY
+	WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+	WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+	PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE IS PROVIDED ON
+	AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO
+	OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
+	ENHANCEMENTS, OR MODIFICATIONS.
+
+	GOVERNMENT USE: If you are acquiring this software on behalf
+	of the U.S. government, the Government shall have only
+	"Restricted Rights" in the software and related documentation
+	as defined in the Federal Acquisition Regulations (FARs) in
+	Clause 52.227.19 (c) (2).  If you are acquiring the software
+	on behalf of the Department of Defense, the software shall be
+	classified as "Commercial Computer Software" and the
+	Government shall have only "Restricted Rights" as defined in
+	Clause 252.227-7013 (c) (1) of DFARs.  Notwithstanding the
+	foregoing, the authors grant the U.S. Government and others
+	acting in its behalf permission to use and distribute the
+	software in accordance with the terms specified in this
+	license. 
+
+tktable
+	This software is copyrighted by Jeffrey Hobbs
+	<jeff.hobbs at acm.org>.  The following terms apply to all files
+	associated with the software unless explicitly disclaimed in
+	individual files.
+
+	The authors hereby grant permission to use, copy, modify,
+	distribute, and license this software and its documentation
+	for any purpose, provided that existing copyright notices are
+	retained in all copies and that this notice is included
+	verbatim in any distributions.  No written agreement, license,
+	or royalty fee is required for any of the authorized uses.
+
+	IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY
+	PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
+	CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE,
+	ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN IF THE
+	AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+	THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY
+	WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+	WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+	PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE IS PROVIDED ON
+	AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO
+	OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
+	ENHANCEMENTS, OR MODIFICATIONS.
+
+	RESTRICTED RIGHTS: Use, duplication or disclosure by the U.S.
+	government is subject to the restrictions as set forth in
+	subparagraph (c) (1) (ii) of the Rights in Technical Data and
+	Computer Software Clause as DFARS 252.227-7013 and FAR
+	52.227-19.
+
+	SPECIAL NOTES:
+
+	This software also falls under the bourbon_ware clause:
+
+	Should you find this software useful in your daily work, you
+	should feel obliged to take the author out for a drink if the
+	opportunity presents itself.  The user may feel exempt from
+	this clause if they are under 21 or think the author has
+	already partaken of too many drinks.
+
+libc6
+libg2c0
+libgcc1
+libstdc++6
+libx11-6|xlibs
+tcl8.4 tk8.4 John Ousterhout (et al.)
+
+DS9 Upstream Author: William Joye <wjoye at cfa.harvard.edu>
+XPA Upstream Author: Eric Mandel <eric at head.cfa.harvard.edu>
+
+DS9 and XPA License:
+
+	This program is free software; you can redistribute it and/or
+	modify it under the terms of the GNU General Public License as
+	published by the Free Software Foundation; either version 2 of
+	the License, or (at your option) any later version.
+
+	This program is distributed in the hope that it will be
+	useful, but WITHOUT ANY WARRANTY; without even the implied
+	warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+	PURPOSE.  See the GNU General Public License for more details.
+
+	You should have received a copy of the GNU General Public
+	License along with this program; if not, write to the Free
+	Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+	Boston, MA 02110-1301 USA
+
+On Debian systems, the complete text of the GNU General Public License
+can be found in `/usr/share/common-licenses/GPL'.
+
+Some of the above software is licensed under the GNU Lesser General
+Public License:
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Lesser General Public
+	License as published by the Free Software Foundation; either
+	version 2.1 of the License, or (at your option) any later
+	version.
+
+	This library 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 Lesser General Public License for more
+	details.
+
+	You should have received a copy of the GNU Lesser General
+	Public License along with this library; if not, write to the
+	Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+	Boston, MA  02110-1301  USA
+
+On Debian systems, the complete text of the GNU Lesser General Public
+License can be found in `/usr/share/common-licenses/LGPL'.
diff --git a/debian/ds9.1 b/debian/ds9.1
new file mode 100644
index 0000000..ae85727
--- /dev/null
+++ b/debian/ds9.1
@@ -0,0 +1,3399 @@
+.TH DS9 1 "14 November 2005"
+.SH NAME
+ds9 - image tool for astronomy
+.SH SYNOPSIS
+.B ds9
+.RI [ options ]
+.br
+.SH DESCRIPTION
+.B DS9
+DS9 is the modern image tool used by astronomers for visualization of
+astronomical data.  It supports a plethora of command line options,
+which may be used in a script-like fashion.  An instance of the
+program is entirely controllable from the commandline with the XPA
+tools.
+
+.SH OPTIONS
+.TP
+
+
+.TP
+.BR \-help
+Displays list of Command Line Options. Users of csh and tcsh may
+ have to quote.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-?
+ \-\- \-help
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-\- \-help
+.RE
+ 
+.RS 0
+ds9 '\-?'
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-2mass
+Support for 2MASS Digital Sky Survey. The first three options will
+ download an image based on the name or specified fk5 coordinate.
+ The remaining options are used to configure downloads.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-2mass [<object> ] 
+ [name <object> ] 
+ [coord <ra>  <dec> ]  # in wcs fk5
+ [survey j| h| k] 
+ [size <radius> ]  # in arcsec
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-2mass m31
+.RE
+ 
+.RS 0
+ds9 \-2mass name m31
+.RE
+ 
+.RS 0
+ds9 \-2mass coord 00:42:44.404 +41:16:08.78
+.RE
+ 
+.RS 0
+ds9 \-2mass survey j
+.RE
+ 
+.RS 0
+ds9 \-2mass size 600
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-about
+Get DS9 credits.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-about
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-about
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-analysis
+Load analysis file.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-analysis filename
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-analysis my.analysis
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-array
+Load an array.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-array
+ <filename> [[xdim=<x> , ydim=<y> | dim=<dim> ] , zdim=<z> , bitpix=<b> , skip=
+ <s> , 
+ arch=[littleendian| bigendian] ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-array bar.arr[xdim=512, ydim=512, zdim=1, bitpix=16]  # load
+.RE
+ 512x512 short
+ 
+.RS 0
+ds9 \-array bar.arr[dim=256, bitpix=\-32, skip=4]  # load 256x256
+.RE
+ float with 4 byte head
+ 
+.RS 0
+ds9 \-array bar.arr[dim=512, bitpix=32, arch=littleendian]  # load
+.RE
+ 512x512 long,  intel
+
+.RE
+.RE
+
+
+.TP
+.BR \-bin
+Controls binning factor,  binning buffer size,  and binning
+ function for binning FITS bin tables.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-bin [about <x>  <y> ] 
+ [buffersize <value> ] 
+ [cols <x>  <y> ] 
+ [factor <value>  [<value> ] ] 
+ [depth <value> ] 
+ [filter <string> ] 
+ [function average| sum] 
+ [to fit] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-bin about 4096 4096
+.RE
+ 
+.RS 0
+ds9 \-bin buffersize 512
+.RE
+ 
+.RS 0
+ds9 \-bin cols detx dety
+.RE
+ 
+.RS 0
+ds9 \-bin factor 4
+.RE
+ 
+.RS 0
+ds9 \-bin factor 4 2
+.RE
+ 
+.RS 0
+ds9 \-bin depth 10
+.RE
+ 
+.RS 0
+ds9 \-bin filter '{pha >  5}'
+.RE
+ 
+.RS 0
+ds9 \-bin function sum
+.RE
+ 
+.RS 0
+ds9 \-bin to fit
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-blink
+Activates Blink Mode.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-blink
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-blink
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-blue
+For RGB frames,  sets the current color channel to blue.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-blue
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-blue foo.fits
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-catalog
+Support for catalogs.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-catalog [cds
+ sao| hst| gsc| tycho| ac| ua2| ub1| ucac2| 2mass| denis| rosat| rosf| first] 
+ [cds <catalogid> ] 
+ [load <filename> ] 
+ [<catname> ]  [name <object> ] 
+ [<catname> ]  [coordinate <ra>  <dec>  <coordinate system> ] 
+ [<catname> ]  [size <width>  <height>  degrees| arcmin| arcsec] 
+ [<catname> ]  [save <filename> ] 
+ [<catname> ]  [filter <string> ] 
+ [<catname> ]  [filter load <filename> ] 
+ [<catname> ]  [clear] 
+ [<catname> ]  [retreive] 
+ [<catname> ]  [cancel] 
+ [<catname> ]  [print] 
+ [<catname> ]  [close] 
+ [<catname> ]  [server
+ cds| sao| cadc| adac| iucaa| bejing| cambridge| ukirt] 
+ [<catname> ]  [symbol shape {circle point}| {box
+ point}| {diamond point}| 
+ {cross point}| {x point}| {arrow
+ point}| {boxcircle point}| 
+ circle| ellipse| box| text] 
+ [<catname> ]  [symbol color <colorname> ] 
+ [<catname> ]  [symbol load <filename> ] 
+ [<catname> ]  [sort <columnname>  incr| decr] 
+ [<catname> ]  [maxrows <number> ] 
+ [<catname> ]  [allcols] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-catalog cds 2mass
+.RE
+ 
+.RS 0
+ds9 \-catalog cds "I/252"
+.RE
+ 
+.RS 0
+ds9 \-catalog load foo.cat
+.RE
+ 
+.RS 0
+ds9 \-catalog cat2mass symbol color red
+.RE
+ 
+.RS 0
+ds9 \-catalog name m51
+.RE
+ 
+.RS 0
+ds9 \-catalog coordinate 202.48 47.21 fk5
+.RE
+ 
+.RS 0
+ds9 \-catalog size 22 22 arcmin
+.RE
+ 
+.RS 0
+ds9 \-catalog save bar.cat
+.RE
+ 
+.RS 0
+ds9 \-catalog filter "$Jmag> 10"
+.RE
+ 
+.RS 0
+ds9 \-catalog filter load foo.flt
+.RE
+ 
+.RS 0
+ds9 \-catalog clear
+.RE
+ 
+.RS 0
+ds9 \-catalog retreive
+.RE
+ 
+.RS 0
+ds9 \-catalog cancel
+.RE
+ 
+.RS 0
+ds9 \-catalog print
+.RE
+ 
+.RS 0
+ds9 \-catalog close
+.RE
+ 
+.RS 0
+ds9 \-catalog server sao
+.RE
+ 
+.RS 0
+ds9 \-catalog symbol shape "{boxcircle point}"
+.RE
+ 
+.RS 0
+ds9 \-catalog symbol color red
+.RE
+ 
+.RS 0
+ds9 \-catalog symbol load foo.sym
+.RE
+ 
+.RS 0
+ds9 \-catalog sort "Jmag" incr
+.RE
+ 
+.RS 0
+ds9 \-catalog maxrows 2000
+.RE
+ 
+.RS 0
+ds9 \-catalog allcols
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-cmap
+Controls the colormap for the current frame. The colormap name is
+ not case sensitive. A valid contrast value is from 0 to 10 and
+ bias value from 0 to 1.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-cmap [<colormap> ] 
+ [file <filename> ] 
+ [invert yes| no] 
+ [value <contrast>  <bias> ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-cmap Heat
+.RE
+ 
+.RS 0
+ds9 \-cmap file foo.sao
+.RE
+ 
+.RS 0
+ds9 \-cmap invert yes
+.RE
+ 
+.RS 0
+ds9 \-cmap value 5 .5
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-contour
+Controls contours in the current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-contour [yes| no] 
+ [copy] 
+ [clear] 
+ [paste <coordinate system>  [<sky frame> ]  <color>  <width> ] 
+ [load <filename>  <coordinate system>  [<sky frame> ]  <color
+ <width> ] 
+ [save <filename>  <coordinate system>  [<sky frame> ] ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-contour
+.RE
+ 
+.RS 0
+ds9 \-contour yes
+.RE
+ 
+.RS 0
+ds9 \-contour copy
+.RE
+ 
+.RS 0
+ds9 \-contour clear
+.RE
+ 
+.RS 0
+ds9 \-contour paste wcs fk4 red 2
+.RE
+ 
+.RS 0
+ds9 \-contour load foo.con wcs fk5 yellow 2
+.RE
+ 
+.RS 0
+ds9 \-contour save foo.con wcs fk5
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-crosshair
+Controls the current position of the crosshair in the current
+ frame. DS9 is placed in crosshair mode when the crosshair is set.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-crosshair [x y <coordinate system>  [<sky frame> ] [<sky format> ] ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-crosshair 100 100 physical # set crosshair in physical
+.RE
+ 
+.RS 0
+ds9 \-crosshair 345 58.8 wcs fk5 # set crosshair in wcs coords
+.RE
+ 
+.RS 0
+ds9 \-crosshair 23:01:00 +58:52:51 wcs fk5
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-datacube
+Controls FITS datacube.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-datacube [play| stop| next| prev| first| last] 
+ [#] 
+ [interval #] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-datacube play
+.RE
+ 
+.RS 0
+ds9 \-datacube last
+.RE
+ 
+.RS 0
+ds9 \-datacube 3
+.RE
+ 
+.RS 0
+ds9 \-datacube interval 2
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-dss
+Support for Digital Sky Survey. The first three options will
+ download an image based on the name or specified fk5 coordinate.
+ The remaining options are used to configure downloads.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-dss [<object> ] 
+ [name <object> ] 
+ [coord <ra>  <dec> ]  # in wcs fk5
+ [server sao| stsci| eso] 
+ [survey dss| dss2red| dss2blue] 
+ [size <width>  <height> ]  # in arcmin
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-dss m31
+.RE
+ 
+.RS 0
+ds9 \-dss name m31
+.RE
+ 
+.RS 0
+ds9 \-dss coord 00:42:44.404 +41:16:08.78
+.RE
+ 
+.RS 0
+ds9 \-dss server eso
+.RE
+ 
+.RS 0
+ds9 \-dss survey dss2red
+.RE
+ 
+.RS 0
+ds9 \-dss size 10 10
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-exit
+
+.RE
+.RE
+
+
+.TP
+.BR \-fifo
+Set the name of the IRAF input and output fifos. The default is
+ /dev/imt1. These fifos are used by IRAF to communicate with DS9.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-fifo name
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-fifo /dev/imt1
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-fifo_only
+Only use IRAF input and output fifos. Same as \-port 0 \-unix
+ none.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-fifo_only
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-fifo_only
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-fits
+Load FITS file.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-fits <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-fits foo.fits
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-sfits
+Load split FITS file.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-sfits <filename>  <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-sfits foo.hdr foo.arr
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-frame
+Controls frame functions. Frames may be created,  deleted,  reset, 
+ and centered. While return the current frame number. If you goto a
+ frame that does not exists,  it will be created. If the frame is
+ hidden,  it will be shown. The 'frameno' option is available for
+ backward compatibility.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-frame [center [#| all] ] 
+ [clear [#| all] ] 
+ [new [rgb] ] 
+ [delete [#| all] ] 
+ [reset [#| all] ] 
+ [refresh [#| all] ] 
+ [hide [#| all] ] 
+ [show [#| all] ] 
+ [first] 
+ [next] 
+ [prev] 
+ [last] 
+ [frameno #] 
+ [#] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-frame center
+.RE
+ 
+.RS 0
+ds9 \-frame center 1
+.RE
+ 
+.RS 0
+ds9 \-frame center all
+.RE
+ 
+.RS 0
+ds9 \-frame clear
+.RE
+ 
+.RS 0
+ds9 \-frame new
+.RE
+ 
+.RS 0
+ds9 \-frame new rgb
+.RE
+ 
+.RS 0
+ds9 \-frame delete
+.RE
+ 
+.RS 0
+ds9 \-frame reset
+.RE
+ 
+.RS 0
+ds9 \-frame refresh
+.RE
+ 
+.RS 0
+ds9 \-frame hide
+.RE
+ 
+.RS 0
+ds9 \-frame show 1
+.RE
+ 
+.RS 0
+ds9 \-frame first
+.RE
+ 
+.RS 0
+ds9 \-frame next
+.RE
+ 
+.RS 0
+ds9 \-frame prev
+.RE
+ 
+.RS 0
+ds9 \-frame last
+.RE
+ 
+.RS 0
+ds9 \-frame frameno 4
+.RE
+ 
+.RS 0
+ds9 \-frame 3
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-geometry
+Define the initial window geometry. This includes all of the
+ ds9 window,  not just the image space. see X(1).
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-geometry value
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-geometry 640x480
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-green
+For RGB frames,  sets the current color channel to green.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-green
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-green foo.fits
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-grid
+Controls coordinate grid.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-grid [yes| no] 
+ [load <filename> ] 
+ [save <filename> ] 
+ [system <coordinate system> ] 
+ [sky <sky frame> ] 
+ [skyformat <skyformat> ] 
+ [type analysis| publication] 
+ [type axes interior| exterior] 
+ [type numerics interior| exterior] 
+ [view grid| axes| title| border| vertical yes| no] 
+ [view axes numbers| tickmarks| label yes| no] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-grid
+.RE
+ 
+.RS 0
+ds9 \-grid yes
+.RE
+ 
+.RS 0
+ds9 \-grid load foo.grd
+.RE
+ 
+.RS 0
+ds9 \-grid save foo.grd
+.RE
+ 
+.RS 0
+ds9 \-grid system wcs
+.RE
+ 
+.RS 0
+ds9 \-grid sky fk5
+.RE
+ 
+.RS 0
+ds9 \-grid skyformat degrees
+.RE
+ 
+.RS 0
+ds9 \-grid type analysis
+.RE
+ 
+.RS 0
+ds9 \-grid type axes interior
+.RE
+ 
+.RS 0
+ds9 \-grid type numerics interior
+.RE
+ 
+.RS 0
+ds9 \-grid view grid yes
+.RE
+ 
+.RS 0
+ds9 \-grid view axes yes
+.RE
+ 
+.RS 0
+ds9 \-grid view axes numbers yes
+.RE
+ 
+.RS 0
+ds9 \-grid view axes tickmarks yes
+.RE
+ 
+.RS 0
+ds9 \-grid view axes label yes
+.RE
+ 
+.RS 0
+ds9 \-grid view title yes
+.RE
+ 
+.RS 0
+ds9 \-grid view border yes
+.RE
+ 
+.RS 0
+ds9 \-grid view vertical no
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-height
+Set the height of the image display window. Use the [89] geometry
+ command to set the overall width and height of the ds9 window.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-height [<value> ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-height 512
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-histequ
+Select histogram equalization scale for current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-histequ
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-histequ
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-iconify
+Toggles iconification.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-iconify [yes| no] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-iconify yes
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-inet_only
+Only use the IRAF port number. This is the same as \-fifo
+ none \-unix none.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-port_only
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-port_only
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-invert
+Invert Colormap.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-invert
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-invert
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-linear
+Select Linear scale for current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-linear
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-linear
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-lock
+Lock frames.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ lock [crosshairs none| wcs| wcsa...wcsz| physical| image] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-lock crosshairs wcs
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-log
+Select LOG scale for current frame. This is the same algorithm as
+ used in IRAF.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-log
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-log
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-lower
+Lower ds9 in the window stacking order.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-lower
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-lower
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-match
+Match all other frames to the current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-match [frames wcs| physical| image] 
+ [colorbars] 
+ [scales] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-match frames wcs
+.RE
+ 
+.RS 0
+ds9 \-match colorbars
+.RE
+ 
+.RS 0
+ds9 \-match scales
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-medatacube
+Load multiple extension FITS file as a data cube.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-medatacube <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-medatacube foo.fits
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-minmax
+This is how DS9 determines the min and max data values from
+ the data. SCAN will scan all data. SAMPLE will sample the data
+ every n samples. DATAMIN and IRAFMIN will use the values of the
+ keywords if present. In general,  it is recommended to use SCAN
+ unless your computer is slow or your data files are very large.
+ Select the increment interval for determining the min and max
+ data values during sampling. The larger the interval,  the quicker
+ the process.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-minmax [] 
+ [scan| sample| datamin| irafmin] 
+ [mode auto| scan| sample| datamin| irafmin] 
+ [interval <value> ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-minmax
+.RE
+ 
+.RS 0
+ds9 \-minmax scan
+.RE
+ 
+.RS 0
+ds9 \-minmax mode sample
+.RE
+ 
+.RS 0
+ds9 \-minmax interval 10
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-mode
+Select the current mode.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-mode
+ [none| pointer| crosshair| colorbar| pan| zoom| rotate| catalog| examine] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-mode crosshair
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-mosaicimage
+Load entire FITS Mosaic image composed of multiple extensions in
+ one FITS file. All extensions that are FITS Images and are valid
+ FITS Mosaic Images will be loaded.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-mosaicimage [iraf| wcs| wcsa...wcsz| wfpc2]  <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-mosaicimage iraf bar.fits
+.RE
+ 
+.RS 0
+ds9 \-mosaicimage wcs bar.fits
+.RE
+ 
+.RS 0
+ds9 \-mosaicimage wcsa bar.fits
+.RE
+ 
+.RS 0
+ds9 \-mosaicimage wfpc2 hst.fits
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-mosaicimagenext
+Load entire FITS WCS Mosaic image composed of multiple extensions
+ in one FITS file with out clearing the current frame. All
+ extensions that are FITS Images and are valid FITS Mosaic Images
+ will be loaded.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-mosaicimagenext [iraf| wcs| wcsa...wcsz| wfpc2]  <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-mosaicimagenext wcs bar.fits
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-mosaic
+Load FITS Mosaic image segment.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-mosaic [iraf| wcs| wcsa...wcsz]  <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-mosaic iraf foo.fits
+.RE
+ 
+.RS 0
+ds9 \-mosaic wcs bar.fits
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-smosaic
+Load split FITS Mosaic image segment.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-smosaic [iraf| wcs| wcsa...wcsz]  <filename>  <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-smosaic iraf foo.hdr foo.arr
+.RE
+ 
+.RS 0
+ds9 \-smosaic wcs foo.hdr foo.arr
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-nameserver
+Support Name Server functions. Coordinates are in fk5.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-nameserver [<object> ] 
+ [name <object> ] 
+ [server ned\-sao| ned\-eso| simbad\-sao| simbad\-eso] 
+ [skyformat degrees| sexagesimal] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-nameserver m31
+.RE
+ 
+.RS 0
+ds9 \-nameserver name m31
+.RE
+ 
+.RS 0
+ds9 \-nameserver server ned\-sao
+.RE
+ 
+.RS 0
+ds9 \-nameserver skyformat sexagesimal
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-orient
+Controls the orientation of the current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-orient [none| x| y| xy] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-orient xy
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-pagesetup
+Controls Page Setup options.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-pagesetup [orientation portrait| landscape] 
+ [pagescale scaled| fixed] 
+ [pagesize letter| legal| tabloid| poster| a4] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-pagesetup orientation portrait
+.RE
+ 
+.RS 0
+ds9 \-pagesetup pagescale scaled
+.RE
+ 
+.RS 0
+ds9 \-pagesetup pagesize poster
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-pan
+Controls the current image cursor location for the current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-pan [x y <coordinate system>  [<sky frame> ] [<sky format> ] 
+ [to x y <coordinate system>  [<sky frame> ] [<sky format> ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-pan 200 200 image
+.RE
+ 
+.RS 0
+ds9 \-pan to 400 400 physical
+.RE
+ 
+.RS 0
+ds9 \-pan to 13:29:55 47:11:50 wcs fk5
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-pixeltable
+Display/Hide the pixel table.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-pixeltable [yes| no] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-pixeltable yes
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-plot
+Display and configure data plots. All plot commands take an
+ optional second command,  the plot name. Use xpaget plot to retreive
+ all plot names. If no plot name is specified,  the last plot created
+ is assumed. Plot data is assumed to be a pair of coordinates,  with
+ optional error values. The follow are valid data descriptions:
+ xy x and y coordinates
+ xyex x, y coordinates with x errors
+ xyey x, y coordinates with y errors
+ xyexey x, y coordinates with both x and y errors
+ To create a new plot,  use the plot new command. If the second arg
+ is stdin,  the title,  x axis title,  y axis title,  and dimension are
+ assumed to be on the first line of the data.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ # create new empty plot window
+ \-plot [] 
+ [new [name <plotname> ] ] 
+ # edit existing plot
+ \-plot [<plotname> ]  [close] 
+ [<plotname> ]  [clear] 
+ [<plotname> ]  [load <filename>  xy| xyex| xyey| xyexey] 
+ [<plotname> ]  [save <filename> ] 
+ [<plotname> ]  [loadconfig <filename> ] 
+ [<plotname> ]  [saveconfig <filename> ] 
+ [<plotname> ]  [print] 
+ [<plotname> ]  [print destination printer| file] 
+ [<plotname> ]  [print command <command> ] 
+ [<plotname> ]  [print filename <filename> ] 
+ [<plotname> ]  [print palette color| gray| mono] 
+ [<plotname> ]  [page orientation portrait| landscape] 
+ [<plotname> ]  [page pagescale scaled| fixed] 
+ [<plotname> ]  [page pagesize letter| legal| tabloid| poster| a4] 
+ [<plotname> ]  [graph grid yes| no] 
+ [<plotname> ]  [graph scale
+ linearlinear| linearlog| loglinear| loglog] 
+ [<plotname> ]  [graph range x| y auto yes| no] 
+ [<plotname> ]  [graph range x| y min <value> ] 
+ [<plotname> ]  [graph range x| y max <value> ] 
+ [<plotname> ]  [graph labels title| xaxis| yaxis <value> ] 
+ [<plotname> ]  [font numbers| labels| title font
+ times| helvetica| symbol| courier] 
+ [<plotname> ]  [font numbers| labels| title size <value> ] 
+ [<plotname> ]  [font numbers| labels| title style
+ plain| bold| italic] 
+ # edit current dataset
+ \-plot [<plotname> ]  [dataset #] 
+ [<plotname> ]  [view discrete| line| step| quadratic| errorbar
+ yes| no] 
+ [<plotname> ]  [color discrete| line| step| quadratic| errorbar
+ <color> ] 
+ [<plotname> ]  [line discrete circle| diamond| plus| cross] 
+ [<plotname> ]  [line line| step| quadratic| errorbar width
+ <value> ] 
+ [<plotname> ]  [line line| step| quadratic dash yes| no] 
+ [<plotname> ]  [line errorbar style 1| 2] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ # create new empty plot window
+ 
+.RS 0
+ds9 \-plot
+.RE
+ 
+.RS 0
+ds9 \-plot new
+.RE
+ 
+.RS 0
+ds9 \-plot new name foo
+.RE
+ # edit existing plot
+ 
+.RS 0
+ds9 \-plot close # close last plot
+.RE
+ 
+.RS 0
+ds9 \-plot foo close # close plot foo
+.RE
+ 
+.RS 0
+ds9 \-plot clear # clear all datasets
+.RE
+ 
+.RS 0
+ds9 \-plot load foo.dat xy # load new dataset with dimension xy
+.RE
+ 
+.RS 0
+ds9 \-plot save bar.dat # save current dataset
+.RE
+ 
+.RS 0
+ds9 \-plot loadconfig foo.plt # load plot configuration
+.RE
+ 
+.RS 0
+ds9 \-plot saveconfig bar.plt # save current plot configuration
+.RE
+ 
+.RS 0
+ds9 \-plot print
+.RE
+ 
+.RS 0
+ds9 \-plot print destination file
+.RE
+ 
+.RS 0
+ds9 \-plot print command "lp"
+.RE
+ 
+.RS 0
+ds9 \-plot print filename "foo.ps"
+.RE
+ 
+.RS 0
+ds9 \-plot print palette gray
+.RE
+ 
+.RS 0
+ds9 \-plot page orientation portrait
+.RE
+ 
+.RS 0
+ds9 \-plot page pagescale scaled
+.RE
+ 
+.RS 0
+ds9 \-plot page pagesize letter
+.RE
+ 
+.RS 0
+ds9 \-plot graph grid yes
+.RE
+ 
+.RS 0
+ds9 \-plot graph scale loglog
+.RE
+ 
+.RS 0
+ds9 \-plot graph range x auto yes
+.RE
+ 
+.RS 0
+ds9 \-plot graph range x min 0
+.RE
+ 
+.RS 0
+ds9 \-plot graph range x max 100
+.RE
+ 
+.RS 0
+ds9 \-plot graph range y auto yes
+.RE
+ 
+.RS 0
+ds9 \-plot graph range y min 0
+.RE
+ 
+.RS 0
+ds9 \-plot graph range y max 100
+.RE
+ 
+.RS 0
+ds9 \-plot graph labels title {The Title}
+.RE
+ 
+.RS 0
+ds9 \-plot graph labels xaxis {X}
+.RE
+ 
+.RS 0
+ds9 \-plot graph labels yaxis {Y}
+.RE
+ 
+.RS 0
+ds9 \-plot font numbers font times
+.RE
+ 
+.RS 0
+ds9 \-plot font numbers size 12
+.RE
+ 
+.RS 0
+ds9 \-plot font numbers style bold
+.RE
+ 
+.RS 0
+ds9 \-plot font labels font times
+.RE
+ 
+.RS 0
+ds9 \-plot font title font times
+.RE
+ # edit current dataset
+ 
+.RS 0
+ds9 \-plot dataset 2 # set current dataset to the second dataset
+.RE
+ loaded
+ 
+.RS 0
+ds9 \-plot view discrete yes
+.RE
+ 
+.RS 0
+ds9 \-plot color discrete red
+.RE
+ 
+.RS 0
+ds9 \-plot line discrete cross
+.RE
+ 
+.RS 0
+ds9 \-plot line step width 2
+.RE
+ 
+.RS 0
+ds9 \-plot line step dash yes
+.RE
+ 
+.RS 0
+ds9 plot line errorbar style 2
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-port
+Set the IRAF port number,  used by IRAF to communicate with DS9.
+ The default is 5137,  the standard IRAF port used by ximtool.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-port number
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-port 5137
+.RE
+ port_only
+.RE
+.RE
+
+
+.TP
+.BR \-port_only
+
+.RE
+.RE
+
+
+.TP
+.BR \-prefs
+Controls various preference settings.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ prefs [save] 
+ [clear] 
+ [mosaicfast yes| no] 
+ [bgcolor white| black| red| green| blue| cyan| magenta| yellow] 
+ [nancolor white| black| red| green| blue| cyan| magenta| yellow] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-prefs save
+.RE
+ 
+.RS 0
+ds9 \-prefs clear
+.RE
+ 
+.RS 0
+ds9 \-prefs mosaicfast no
+.RE
+ 
+.RS 0
+ds9 \-prefs bgcolor black
+.RE
+ 
+.RS 0
+ds9 \-prefs nancolor red
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-preserve
+Preserve the follow attributes while loading a new image.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ preserve [scale yes| no] 
+ [pan yes| no] 
+ [regions yes| no] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-preserve scale yes
+.RE
+ 
+.RS 0
+ds9 \-preserve pan yes
+.RE
+ 
+.RS 0
+ds9 \-preserve regions yes
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-print
+Controls printing. Use print option to set printing options. Use
+ print to actually print.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-print [destination printer| file] 
+ [command <command> ] 
+ [filename <filename> ] 
+ [palette rgb| cmyk| gray] 
+ [level 1| 2] 
+ [resolution 53| 72| 75| 150| 300| 600] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-print
+.RE
+ 
+.RS 0
+ds9 \-print destination file
+.RE
+ 
+.RS 0
+ds9 \-print command 'gv \-'
+.RE
+ 
+.RS 0
+ds9 \-print filename foo.ps
+.RE
+ 
+.RS 0
+ds9 \-print palette cmyk
+.RE
+ 
+.RS 0
+ds9 \-print level 2
+.RE
+ 
+.RS 0
+ds9 \-print resolution 75
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-private
+use private colormap,  valid for pseudocolor 8 mode.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-private
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-private
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-quit
+Quits DS9.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-exit
+ \-quit
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-exit
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-raise
+Raise ds9 in the window stacking order.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-raise
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-raise
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-red
+For RGB frames,  sets the current color channel to red.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-red
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-red foo.fits
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-regions
+Controls regions in the current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-regions [<filename> ] 
+ [load <filename> ] 
+ [save <filename> ] 
+ [move front] 
+ [move back] 
+ [select all] 
+ [select none] 
+ [select group <groupname> ] 
+ [delete all] 
+ [delete select] 
+ [format ds9| ciao| saotng| saoimage| pros| xy] 
+ [system image| physical| wcs| wcsa...wcsz] 
+ [sky fk4| fk5| icrs| galactic| ecliptic] 
+ [skyformat degrees| sexagesimal] 
+ [strip yes| no] 
+ [wcs yes| no] 
+ [shape <shape> ] 
+ [color white| black| red| green| blue| cyan| magenta| yellow] 
+ [width <width> ] 
+ [delim [nl| <char> ] ] 
+ [command <marker command> ] 
+ [composite] 
+ [desolve] 
+ [template <filename> ] 
+ [savetemplate <filename> ] 
+ [group <tag> ] 
+ [group <tag>  color
+ [black| white| red| green| blue| cyan| magenta| yellow] ] 
+ [group <tag>  copy] 
+ [group <tag>  delete] 
+ [group <tag>  cut] 
+ [group <tag>  font <font> ] 
+ [group <tag>  move <int>  <int> ] 
+ [group <tag>  movefront] 
+ [group <tag>  moveback] 
+ [group <tag>  property <property>  yes| no] 
+ [group <tag>  select] 
+ [copy] 
+ [cut] 
+ [paste image| physical| wcs| wcsa...wcsz
+ fk4| fk5| icrs| galactic| ecliptic] 
+ [undo] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-regions foo.reg
+.RE
+ 
+.RS 0
+ds9 \-regions load foo.reg
+.RE
+ 
+.RS 0
+ds9 \-regions save foo.reg
+.RE
+ 
+.RS 0
+ds9 \-regions move back
+.RE
+ 
+.RS 0
+ds9 \-regions move front
+.RE
+ 
+.RS 0
+ds9 \-regions select all
+.RE
+ 
+.RS 0
+ds9 \-regions select none
+.RE
+ 
+.RS 0
+ds9 \-regions select group foo
+.RE
+ 
+.RS 0
+ds9 \-regions delete all
+.RE
+ 
+.RS 0
+ds9 \-regions delete select
+.RE
+ 
+.RS 0
+ds9 \-regions format ds9
+.RE
+ 
+.RS 0
+ds9 \-regions system wcs
+.RE
+ 
+.RS 0
+ds9 \-regions sky fk5
+.RE
+ 
+.RS 0
+ds9 \-regions skyformat degrees
+.RE
+ 
+.RS 0
+ds9 \-regions delim nl
+.RE
+ 
+.RS 0
+ds9 \-regions strip yes
+.RE
+ 
+.RS 0
+ds9 \-regions wcs yes
+.RE
+ 
+.RS 0
+ds9 \-regions shape ellipse
+.RE
+ 
+.RS 0
+ds9 \-regions color red
+.RE
+ 
+.RS 0
+ds9 \-regions width 3
+.RE
+ 
+.RS 0
+ds9 \-regions command {circle 100 100 20}
+.RE
+ 
+.RS 0
+ds9 \-regions composite
+.RE
+ 
+.RS 0
+ds9 \-regions desolve
+.RE
+ 
+.RS 0
+ds9 \-regions template foo.tpl
+.RE
+ 
+.RS 0
+ds9 \-regions savetemplate foo.tpl
+.RE
+ 
+.RS 0
+ds9 \-regions group foo color red
+.RE
+ 
+.RS 0
+ds9 \-regions group foo copy
+.RE
+ 
+.RS 0
+ds9 \-regions group foo delete
+.RE
+ 
+.RS 0
+ds9 \-regions group foo cut
+.RE
+ 
+.RS 0
+ds9 \-regions group foo font {times 14 bold}
+.RE
+ 
+.RS 0
+ds9 \-regions group foo move 100 100
+.RE
+ 
+.RS 0
+ds9 \-regions group foo movefront
+.RE
+ 
+.RS 0
+ds9 \-regions group foo moveback
+.RE
+ 
+.RS 0
+ds9 \-regions group foo property delete no
+.RE
+ 
+.RS 0
+ds9 \-regions group foo select
+.RE
+ 
+.RS 0
+ds9 \-regions copy
+.RE
+ 
+.RS 0
+ds9 \-regions cut
+.RE
+ 
+.RS 0
+ds9 \-regions paste wcs fk5
+.RE
+ 
+.RS 0
+ds9 \-regions undo
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-rgb
+Create RGB frame and control RGB frame parameters.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-rgb # empty
+ [red| green| blue] 
+ [channel [red| green| blue] ] 
+ [view [red| green| blue]  [yes| no] ] 
+ [system <coordinate system> ] 
+ [lock scale| bin| colorbar [yes| no] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-rgb # create new rgb frame
+.RE
+ 
+.RS 0
+ds9 \-rgb red # set current channel to red
+.RE
+ 
+.RS 0
+ds9 \-rgb channel red # set current channel to red
+.RE
+ 
+.RS 0
+ds9 \-rgb view blue no # turn off blue channel
+.RE
+ 
+.RS 0
+ds9 \-rgb system wcs # set rgb coordinate system
+.RE
+ 
+.RS 0
+ds9 \-rgb lock scale yes # lock rgb channels for scaling
+.RE
+ 
+.RS 0
+ds9 \-rgb lock bin yes # lock rgb channels for binning
+.RE
+ 
+.RS 0
+ds9 \-rgb lock colorbar yes # lock rgb colorbar channels
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-rgbarray
+Load entire RGB image composed of a 3D Array Data Cube that
+ contains red,  green,  and blue channels.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-rgbarray
+ <filename> [xdim=<x> , ydim=<y> | dim=<dim> , zdim=3] , bitpix=<b> , [skip=<s> 
+ ] ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-rgbarray rgb.arr[dim=200, zdim=3, bitpix=\-32] 
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-rgbcube
+Load entire RGB image composed of a FITS 3D Data Cube that contains
+ red,  green,  and blue channels.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-rgbcube <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-rgbcube rgb.fits
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-srgbcube
+Load entire RGB image composed of a split FITS 3D Data Cube that
+ contains red,  green,  and blue channels.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-srgbcube <filename>  <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-srgbcube rgb.hdr rgb.arr
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-rgbimage
+Load entire RGB image composed of a FITS multiple extension file
+ that contains red,  green,  and blue channels.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-rgbimage <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-rgbimage rgb.fits
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-rotate
+Controls the rotation angle (in degrees) of the current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-rotate [<value> ] 
+ [to <value> ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-rotate 45
+.RE
+ 
+.RS 0
+ds9 \-rotate to 30
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-saveimage
+Save visible image(s) as a raster. If image is a data cube, 
+ the mpeg option will cycle thru each slice creating a mpeg movie.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-saveimage [fits| jpeg| tiff| png| ppm| mpeg]  <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-saveimage jpeg ds9.jpg
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-savefits
+Save current frame data as FITS. This differs from SAVEIMAGE in
+ that the entire image of the current frame is saved as a FITS, 
+ without graphics.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-savefits <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-savefits ds9.fits
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-savempeg
+Save all active frames as a mpeg movie.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-savempeg <filename> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-savempeg ds9.mpg
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-scale
+Controls the limits,  color scale distribution,  and use of
+ DATASEC keyword.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-scale [linear| log| squared| sqrt| histequ] 
+ [datasec yes| no] 
+ [limits <minvalue>  <maxvalue> ] 
+ [mode minmax| <value> | zscale| zmax] 
+ [scope local| global] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-scale datasec yes
+.RE
+ 
+.RS 0
+ds9 \-scale histequ
+.RE
+ 
+.RS 0
+ds9 \-scale limits 1 100
+.RE
+ 
+.RS 0
+ds9 \-scale mode zscale
+.RE
+ 
+.RS 0
+ds9 \-scale mode 99.5
+.RE
+ 
+.RS 0
+ds9 \-scale scope local
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-shm
+Load a shared memory segment into the current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-shm [<key>  [<filename> ] ] 
+ [key <id>  [<filename> ] ] 
+ [shmid <id>  [<filename> ] ] 
+ [fits [key| shmid]  <id>  [<filename> ] ] 
+ [sfits [key| shmid]  <id>  <id>  [<filename> ] ] 
+ [mosaicimage [iraf| wcs| wcsa...wcsz| wfpc2]  [key| shmid]  <id> 
+ [<filename> ] ] 
+ [mosaicimagenext [wcs| wcsa...wcsz]  [key| shmid]  <id> 
+ [<filename> ] ] 
+ [mosaic [iraf| wcs| wcsa...wcsz]  [key| shmid]  <id>  [<filename> ] ] 
+ [smosaic [iraf| wcs| wcsa...wcsz]  [key| shmid]  <id>  <id> 
+ [<filename> ] ] 
+ [rgbcube [key| shmid]  <id>  [<filename> ] ] 
+ [srgbcube [key| shmid]  <id>  <id>  [<filename> ] ] 
+ [rgbimage [key| shmid]  <id>  [<filename> ] ] 
+ [rgbarray [key| shmid]  <id> 
+ [xdim=<x> , ydim=<y> | dim=<dim> , zdim=3] , bitpix=<b> , [skip=<s> ] ] 
+ [array [key| shmid]  <id> 
+ [xdim=<x> , ydim=<y> | dim=<dim> ] , bitpix=<b> , [skip=<s> ] ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-shm 102
+.RE
+ 
+.RS 0
+ds9 \-shm key 102
+.RE
+ 
+.RS 0
+ds9 \-shm shmid 102 foo
+.RE
+ 
+.RS 0
+ds9 \-shm fits 100 foo
+.RE
+ 
+.RS 0
+ds9 \-shm sfits 100 101 foo
+.RE
+ 
+.RS 0
+ds9 \-shm mosaicimage iraf key 100 foo
+.RE
+ 
+.RS 0
+ds9 \-shm mosaicimage wcs key 100 foo
+.RE
+ 
+.RS 0
+ds9 \-shm mosaicimage wcsa key 100 foo
+.RE
+ 
+.RS 0
+ds9 \-shm mosaicimage wfpc2 key 100 foo
+.RE
+ 
+.RS 0
+ds9 \-shm mosaicimagenext wcs key 100 foo
+.RE
+ 
+.RS 0
+ds9 \-shm mosaic iraf key 100 foo
+.RE
+ 
+.RS 0
+ds9 \-shm mosaic wcs key 100 foo
+.RE
+ 
+.RS 0
+ds9 \-shm smosaic wcs key 100 101 foo
+.RE
+ 
+.RS 0
+ds9 \-shm rgbcube key 100 foo
+.RE
+ 
+.RS 0
+ds9 \-shm srgbcube key 100 101 foo
+.RE
+ 
+.RS 0
+ds9 \-shm rgbimage key 100 foo
+.RE
+ 
+.RS 0
+ds9 \-shm rgbarray shmid 102 [dim=32, zdim=3, bitpix=\-32] 
+.RE
+ 
+.RS 0
+ds9 \-shm array shmid 102 [dim=32, bitpix=\-32] 
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-single
+Set display mode to single.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-single
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-single
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-smooth
+Smooth current image or set smooth parameters.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-smooth [yes| no] 
+ [function boxcar| tophat| gaussian] 
+ [radius <int> ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-smooth yes
+.RE
+ 
+.RS 0
+ds9 \-smooth function tophat
+.RE
+ 
+.RS 0
+ds9 \-smooth radius 4
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-squared
+Select Squared scale for current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-squared
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-squared
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-sqrt
+Select Square Root scale for current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-sqrt
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-sqrt
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-source
+Sources a valid TCL file.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-source filename
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-source extensions.tcl
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-tile
+Controls the tile display mode.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-tile [yes| no] 
+ [mode grid| column| row] 
+ [grid] 
+ [grid mode [automatic| manual] ] 
+ [grid layout <row>  <col> ] 
+ [grid gap <pixels> ] 
+ [row] 
+ [column] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-tile
+.RE
+ 
+.RS 0
+ds9 \-tile yes
+.RE
+ 
+.RS 0
+ds9 \-tile mode row
+.RE
+ 
+.RS 0
+ds9 \-tile grid
+.RE
+ 
+.RS 0
+ds9 \-tile grid mode manual
+.RE
+ 
+.RS 0
+ds9 \-tile grid layout 5 5
+.RE
+ 
+.RS 0
+ds9 \-tile grid gap 10
+.RE
+ 
+.RS 0
+ds9 \-tile row
+.RE
+ 
+.RS 0
+ds9 \-tile column
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-title
+Changes the display window title to the specified name.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-title name
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-title Voyager
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-unix
+Set the IRAF unix socket name,  used by IRAF to communicate with
+ DS9. The default is /tmp/.IMT%d,  so that the standard IRAF unix
+ socket is defined.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-unix name
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-unix "/tmp/.IMT%d"
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-unix_only
+Only use the IRAF unix socket name. This is the same as
+ \-fifo none \-port 0.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-unix_only
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-unix_only
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-url
+Load FITS file from specified url.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-url <url> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-url 'ftp://foo.bar.edu/img.fits'
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-version
+Returns the current version of DS9.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-version
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-version
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-view
+Controls the GUI and visible RGB frame color channels.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-view [horizontal| vertical] 
+ [info yes| no] 
+ [panner yes| no] 
+ [magnifier yes| no] 
+ [buttons yes| no] 
+ [colorbar yes| no] 
+ [horzgraph yes| no] 
+ [vertgraph yes| no] 
+ [filename yes| no] 
+ [object yes| no] 
+ [minmax yes| no] 
+ [frame yes| no] 
+ [image| physical| wcs| wcsa...wcsz yes| no] 
+ [red yes| no] 
+ [green yes| no] 
+ [blue yes| no] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-view vertical
+.RE
+ 
+.RS 0
+ds9 \-view info yes
+.RE
+ 
+.RS 0
+ds9 \-view panner yes
+.RE
+ 
+.RS 0
+ds9 \-view magnifier yes
+.RE
+ 
+.RS 0
+ds9 \-view buttons yes
+.RE
+ 
+.RS 0
+ds9 \-view colorbar yes
+.RE
+ 
+.RS 0
+ds9 \-view horzgraph yes
+.RE
+ 
+.RS 0
+ds9 \-view vertgraph yes
+.RE
+ 
+.RS 0
+ds9 \-view filename yes
+.RE
+ 
+.RS 0
+ds9 \-view object yes
+.RE
+ 
+.RS 0
+ds9 \-view minmax
+.RE
+ 
+.RS 0
+ds9 \-view frame yes
+.RE
+ 
+.RS 0
+ds9 \-view wcsa yes
+.RE
+ 
+.RS 0
+ds9 \-view red yes
+.RE
+ 
+.RS 0
+ds9 \-view green yes
+.RE
+ 
+.RS 0
+ds9 \-view blue yes
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-visual
+Force DS9 to use the specified color visual. This argument
+ MUST be the first argument listed. Requires the visual be
+ available.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-visual
+ [pseudocolor| pseudocolor8| truecolor| truecolor8| truecolor16| truecol
+ or24] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-visual truecolor24
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-vo
+Invoke an connection to a Virtual Observatory site.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-vo <url> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-vo chandra\-ed.havard.edu
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-wcs
+Controls the World Coordinate System for the current frame. If
+ the wcs system,  skyframe,  or skyformat is modified,  the info
+ panel,  compass,  grid,  and alignment will be modified accordingly.
+ Also,  a new WCS specification can be loaded and used by the
+ current image regardless of the WCS that was contained in the
+ image file. Please see [90] WCS for more information.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-wcs [wcs| wcsa...wcsz] 
+ [system wcs| wcsa...wcsz] 
+ [sky fk4| fk5| icrs| galactic| ecliptic] 
+ [skyformat degrees| sexagesimal] 
+ [align yes| no] 
+ [reset] 
+ [replace file <filename> ] 
+ [append file <filename> ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-wcs wcs
+.RE
+ 
+.RS 0
+ds9 \-wcs system wcs
+.RE
+ 
+.RS 0
+ds9 \-wcs sky fk5
+.RE
+ 
+.RS 0
+ds9 \-wcs skyformat sexagesimal
+.RE
+ 
+.RS 0
+ds9 \-wcs align yes
+.RE
+ 
+.RS 0
+ds9 \-wcs reset
+.RE
+ 
+.RS 0
+ds9 \-wcs replace file foo.wcs
+.RE
+ 
+.RS 0
+ds9 \-wcs append file foo.wcs
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-web
+Display specified URL in the web display.
+ \-web <url> 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-web chandra.harvard.edu
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-width
+Set the width of the image display window. Use the [91] geometry
+ command to set the overall width and height of the ds9 window.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-width [<value> ] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-width 512
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-xpa
+Configure XPA at startup. The option tcl allows the user to send
+ tcl code via xpa to be executed by ds9. Warning: this is a major
+ security risk and is disabled by default. Please use with caution.
+ \-xpa [yes| no] 
+ [inet| local| unix| localhost] 
+ [noxpans] 
+ [tcl yes| no] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-xpa no
+.RE
+ 
+.RS 0
+ds9 \-xpa local
+.RE
+ 
+.RS 0
+ds9 \-xpa noxpans
+.RE
+ 
+.RS 0
+ds9 \-xpa tcl yes
+.RE
+ zmax Set Scale Limits based on the IRAF algorithm and maximum
+ data value.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-zmax
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-zmax
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-zscale
+Set Scale Limits based on the IRAF algorithm.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-zscale
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-zscale
+.RE
+
+.RE
+.RE
+
+
+.TP
+.BR \-zoom
+Controls the current zoom value for the current frame.
+ 
+.RS 4
+.B Syntax
+.RS 4
+ \-zoom [<value> ] 
+ [<value>  <value> ] 
+ [to <value> ] 
+ [to <value>  <value> ] 
+ [to fit] 
+ 
+.RE
+.RE
+.RS 4
+.B Example:
+.RS 4
+ 
+.RS 0
+ds9 \-zoom 2
+.RE
+ 
+.RS 0
+ds9 \-zoom 2 4
+.RE
+ 
+.RS 0
+ds9 \-zoom to 4
+.RE
+ 
+.RS 0
+ds9 \-zoom to 2 4
+.RE
+ 
+.RS 0
+ds9 \-zoom to fit
+.RE
+
+.RE
+.RE
+
+.SH FILES
+The complete text of the DS9 manual may be found on Debian systems at
+/usr/share/doc/saods9/ref/.
+
+.SH AUTHOR
+DS9 is a product of the Smithsonian Astrophysical Observatory.
+
+.PP
+This manual page was generated from the DS9 HTML documentation by a
+script written by Justin Pryzby.
+
+.SH "SEE ALSO"
+.IR xpaget (1),
+.IR xpaset (1),
+.IR xpaaccess (1),
+.IR xpamb (1),
+.IR xpainfo (1),
+.IR xpans (1),
+.IR xpachanges (7),
+
diff --git a/debian/ds9.xpm b/debian/ds9.xpm
new file mode 100644
index 0000000..4129dfe
--- /dev/null
+++ b/debian/ds9.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char * sun_xpm[] = {
+"48 48 3 1",
+" 	c None",
+".	c #04ACCE",
+"+	c #E6D913",
+"                                                ",
+"                                                ",
+"                  ............                  ",
+"               ..................               ",
+"             ..+++......+......++..             ",
+"            ....+++.....+.......+...            ",
+"           ......+++...++......+++....          ",
+"          .......+++...++......+++.....         ",
+"         ........+++...++.....++++......        ",
+"        .+.......+++...+++..+++++.....+..       ",
+"       ...++.....++++..+++.+++++....++....      ",
+"      .....++....++++.++++.++++....+++....      ",
+"     ......++++..++++++++++++++...+++......     ",
+"     .......++++.++++++++++++++.++++........    ",
+"    ........++++++++++++++++++.+++++........    ",
+"    .+++++...+++++++++++++++++++++++.......+.   ",
+"   .+++++++...+++++++++++++++++++++.......++.   ",
+"   ....+++++..++++++++++++++++++++.+++++++++.   ",
+"   .....+++++++++++++++++++++++++++++++++++...  ",
+"   ......+++++++++++++++++++++++++++++++++....  ",
+"  ........++++++++++++++++++++++++++++........  ",
+"  .........+++++++++++++++++++++++++..........  ",
+"  ..........+++++++++++++++++++++++++.........  ",
+"  .....+++++++++++++++++++++++++++++++++++....  ",
+"  ..+++++++++++++++++++++++++++++++++++++++++.  ",
+"  .......+++++++++++++++++++++++++++++++......  ",
+"  ...........+++++++++++++++++++++++..........  ",
+"  ..........++++++++++++++++++++++++++........  ",
+"  .....++++++++++++++++++++++++++++++++.......  ",
+"   ...++++++++++++++++++++++++++++++++++......  ",
+"   ..+++++++++++++++++++++++++++++++++++.....   ",
+"   ..++...+++.++++++++++++++++++++...+++++.++   ",
+"    ++.......++++++++++++++++++++++...++++++.   ",
+"    .........+++++++++++++++++++++++...++++.    ",
+"     .......+++++.++++++++++++++++++........    ",
+"     .......++++..+++++++++++++..++++......     ",
+"      .....+++...+++++++++.+++++..+++......     ",
+"      ....++.....+++++++++..++++....++....      ",
+"       ...+.....+++++..+++..++++.....++..       ",
+"        .+.....+++++...+++..+++.......+.        ",
+"         ......+++.....++...+++........         ",
+"          .....++......++...+++.......          ",
+"           ....++......++....+++.....           ",
+"            ...++.......+.....+++...            ",
+"              ..+.................              ",
+"                ................                ",
+"                    ........                    ",
+"                                                "};
diff --git a/debian/generate-man b/debian/generate-man
new file mode 100644
index 0000000..8fa2ce5
--- /dev/null
+++ b/debian/generate-man
@@ -0,0 +1,90 @@
+#!/usr/bin/perl -w
+# ./debian/generate-man
+# Generate a manual page for DS9 from HTML documentation.
+# This is a work of Justin Pryzby during the year of 2005, hereby
+# placed into the public domain.
+use strict;
+
+my $s=`lynx -dump ./ds9/doc/ref/command.html |grep -Ev '^ *\\* \\[[0-9]+\\]'` || die;
+$s=~s/References.*$//s;
+my @opts=split("\n", `./ds9/ds9 -? |sed -rne 's/^ -([^ 	]*)([ 	]|\$).*\$/\\1/p' |grep -v '^?\$'` || die);
+
+print <<EOF;
+.TH DS9 1 "14 November 2005"
+.SH NAME
+ds9 \- image tool for astronomy
+.SH SYNOPSIS
+.B ds9
+.RI [ options ]
+.br
+.SH DESCRIPTION
+.B DS9
+DS9 is the modern image tool used by astronomers for visualization of
+astronomical data.  It supports a plethora of command line options,
+which may be used in a script\-like fashion.  An instance of the
+program is entirely controllable from the commandline with the XPA
+tools.
+
+.SH OPTIONS
+.TP
+
+EOF
+
+foreach my $opt (@opts) {
+	chomp $opt;
+	$opt=~s/[ 	]*$//;
+
+	$s=~m/(\n[ 	]*$opt[	 \n].*)/s || next;
+	my $optinfo=$1;
+
+	foreach my $opt2 (@opts) {
+		chomp $opt2;
+		$opt2=~s/[ 	]$//;
+		next if $opt2=~m/^$opt$/;
+		$optinfo=~s/\n[	 ]*$opt2[ \n	].*$//s;
+	}
+
+	$optinfo=~s/$opt//s;
+	$optinfo=~s/ +/ /sg;
+
+	print "\n.TP";
+	print "\n.BR \\-$opt\n";
+
+	$optinfo=~s/^[ 	\n]*//s;
+	$optinfo=~s/\n+/\n/sg;
+	$optinfo=~s/Syntax:/\n.RS 4\n.B Syntax\n.RS 4/sg;
+	$optinfo=~s/Example:/\n.RE\n.RE\n.RS 4\n.B Example:\n.RS 4/sg;
+	$optinfo=~s/\$(ds9.*?)\n/\n.RS 0\n$1\n.RE\n/gs;
+	$optinfo=~s/\$(ds9.*?)$/\n.RS 0\n$1\n.RE\n/gs;
+
+	# Workaround
+	$optinfo=~s/-/\\-/gs;
+	$optinfo=~s/([|,>\]])/$1 /gs;
+	$optinfo=~s/\\\$/\$/gs;
+
+	print "$optinfo";
+	print "\n.RE\n.RE\n\n";
+}
+
+print <<EOF;
+.SH FILES
+The complete text of the DS9 manual may be found on Debian systems at
+/usr/share/doc/saods9/ref/.
+
+.SH AUTHOR
+DS9 is a product of the Smithsonian Astrophysical Observatory.
+
+.PP
+This manual page was generated from the DS9 HTML documentation by a
+script written by Justin Pryzby.
+
+.SH "SEE ALSO"
+.IR xpaget (1),
+.IR xpaset (1),
+.IR xpaaccess (1),
+.IR xpamb (1),
+.IR xpainfo (1),
+.IR xpans (1),
+.IR xpachanges (7),
+
+EOF
diff --git a/debian/menu b/debian/menu
new file mode 100644
index 0000000..0432027
--- /dev/null
+++ b/debian/menu
@@ -0,0 +1 @@
+?package(saods9):needs="X11" section="Apps/Science" title="saods9" command="/usr/bin/ds9"
diff --git a/debian/repack b/debian/repack
new file mode 100644
index 0000000..e8ef40f
--- /dev/null
+++ b/debian/repack
@@ -0,0 +1,72 @@
+#!/bin/sh
+# ./debian/repack
+# Repackage the DS9 source files as a DFSG tarball, with unneecessary
+# files removed.
+# This file is a work of Justin Pryzby <pryzbyj at justinpryzby.com>
+# during the year of 2005, and is hereby placed into the public
+# domain.
+
+set -e;
+
+ver="4.0b7";
+tarball="http://hea-www.harvard.edu/saord/download/ds9/source/ds9.$ver.tar.gz";
+base=$(basename "$tarball");
+orig="saods9_$ver.orig.tar.gz";
+
+mkdir newsource;
+cd newsource;
+
+if test -e "../../$base"; then
+	echo >&2 "Using existing DS9";
+	ln -s "../../$base";
+else
+	echo >&2 "Retrieving DS9";
+	wget "$tarball";
+fi;
+
+tar xzf "$base";
+find ./saods9/ -name config.status |xargs rm -f;
+find ./saods9/ -name conf.h |xargs rm -f;
+find ./saods9/funtools-1.3.0b9/ -name Makefile |xargs rm -f;
+rm "$base";
+
+rm -fr ./saods9/sla/;
+if test -d "../../sla/"; then
+	echo >&2 "Using existing SLA";
+	cp -r "../../sla" ./saods9/;
+else
+	echo >&2 "Retrieving CVS SLA";
+	echo >&2 "The password is 'starlink':";
+	cvs -d ':pserver:anonymous at cvs.starlink.ac.uk:/cvs' login;
+	cvs -d ':pserver:anonymous at cvs.starlink.ac.uk:/cvs' co libraries/sla;
+	mv libraries/sla ./saods9/;
+	rm -fr ./libraries/;
+fi;
+
+cd ./saods9/;
+cp ./tcl8.4.9/library/auto.tcl ./ds9/;
+cp ./tk8.4.9/library/tkfbox.tcl ./ds9/;
+cp ./tk8.4.9/library/xmfbox.tcl ./ds9/;
+rm -fr ./sla/CVS/;
+
+rm ./ast-3.5/slalib.h;
+touch ./ast-3.5/slalib.h;
+rm ./funtools-1.3.0b9/search.c
+
+# Remove all other unused directories also, since .orig tarball won't
+# be "pristine" anyway.  This greatly simpifies the copyright file.
+rm -fr ./blt2.4z/;
+rm -fr ./funtools-1.3.0b9/util/zlib-1.2.3/;
+rm -fr ./funtools-1.3.0b9/wcs/;
+rm -fr ./htmlwidget/tests/;
+rm -fr ./tcl8.4.9/;
+rm -fr ./tcllib-1.6.1/;
+rm -fr ./tk8.4.9/;
+rm -fr ./tkimg1.3rc2/;
+rm -fr ./tktable2.9/;
+rm -fr ./zlib-1.2.3/;
+
+cd ../;
+mv saods9/ saods9-$ver.orig/;
+tar czf "$orig" saods9-$ver.orig/;
+echo >&2 "Created newsources/$orig";
diff --git a/debian/rules b/debian/rules
new file mode 100644
index 0000000..5317f1a
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,90 @@
+#!/usr/bin/make -f
+# Build rules for saods9.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+# Modifications are a work of Justin Pryzby during 2005 and are hereby
+# placed in the public domain.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+BUILDPARTS:=dirs checkdns html mktclapp tkmpeg iis
+BUILDPARTS+=xpa ast wcssubs funtools sla saotk ds9
+
+FLAGS = -Wall -g
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+	FLAGS += -O0
+else
+	FLAGS += -O2
+endif
+
+get-orig-source:
+	sh ./debian/repack;
+
+regenerate-man:
+	perl ./debian/generate-man >./debian/ds9.1;
+
+build: build-stamp
+build-stamp:
+	dh_testdir
+	ln -sf make.linux make.include
+	$(MAKE) FLAGS="$(FLAGS)" $(BUILDPARTS)
+	touch $@
+
+clean:
+	dh_testdir
+	dh_testroot
+
+	set -e; if [ -e xpa-2.1.6/Makefile ];\
+	then $(MAKE) -C xpa-2.1.6 distclean; fi;
+
+	rm -fr htmlwidget/tests/ html/ bin/ lib/ share/ man/ include/;
+	find -name conf.h |xargs rm -f;
+	find -name config.log |xargs rm -f;
+	find -name config.status |xargs rm -f;
+	find -name '*.d' -type f |xargs rm -f;
+	find funtools-1.3.0b9/ xpa-2.1.6/ -name Makefile |xargs rm -f;
+	find -name '*.[ao]' |xargs rm -f;
+	find -name '*.so' |xargs rm -f;
+	set -e; cd ./ds9/; rm -f ds9 ds9tk.c ds9tk.h;
+	dh_clean ./build ./make.include mktclapp/mktclapp;
+
+#dh_clean -k 
+
+binary: binary-indep binary-arch
+binary-indep: build
+binary-arch: build
+	dh_testdir
+	dh_testroot
+
+	dh_installchangelogs
+	html2text -nobs -o ./debian/saods9/usr/share/doc/saods9/changelog ./xpa-2.1.6/doc/changelog.html
+	gzip -9 ./debian/saods9/usr/share/doc/saods9/changelog
+	# Keep the HTML copy uncompressed so the href works.
+
+	mkdir xpadoc ds9doc;
+	cp xpa-2.1.6/doc/*.html xpadoc/;
+	cp ds9/doc/*.html ds9doc/;
+	dh_installdocs xpadoc/ ds9doc/ ds9/doc/ref/ ds9/doc/release/;
+	rm -fr xpadoc/ ds9doc/;
+
+	dh_install ./ds9/ds9 bin/xpa* usr/bin/
+	dh_install debian/saods9.desktop usr/share/applications
+	dh_install debian/ds9.xpm usr/share/pixmaps
+	dh_installmenu
+#	dh_installmime
+	dh_installman ./xpa-2.1.6/man/man1/* ./debian/ds9.1
+	dh_link
+	dh_strip
+	dh_compress
+	dh_fixperms
+	dh_installdeb
+	dh_shlibdeps
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+.PHONY: clean binary-indep binary-arch binary get-orig-source regenerate-man
diff --git a/debian/saods9-4.0b7-2-nodebian.diff b/debian/saods9-4.0b7-2-nodebian.diff
new file mode 100644
index 0000000..bb413e8
--- /dev/null
+++ b/debian/saods9-4.0b7-2-nodebian.diff
@@ -0,0 +1,21650 @@
+--- saods9-4.0b7.orig/make.linux
++++ saods9-4.0b7/make.linux
+@@ -1,21 +1,21 @@
+ ARCH	= linux
+-BUILD_SHARED = yes
+-OPTS = -O2
++OPTS = $(FLAGS) -DHAVE_SYS_UN_H -DHAVE_SYS_SHM_H -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/tcl8.4 
++DEPENDS = no
+ #OPTS = -gstabs+ -fno-inline
+ #OPTS = -gstabs+ -fno-inline -pg
+ 
+-X11INCLUDE=/usr/X11R6/include
++X11INCLUDE=/usr/include/X11
+ X11LIB	= /usr/X11R6/lib
+ 
+ CXX	= g++
+-CXXOPT	= ${OPTS} -fPIC -DHAVE_SYS_UN_H -DHAVE_SYS_SHM_H -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
++CXXOPT	= ${OPTS} 
+ CC	= gcc
+ CCc	= gcc
+ #CCc	= 'gcc -g'
+-CCOPT	= ${OPTS} -fPIC -DHAVE_SYS_UN_H -DHAVE_SYS_SHM_H -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
++CCOPT	= $(OPTS)
+ 
+ LIBCMD	= $(AR) -cq
+-RANLIB	= echo
++RANLIB	= ranlib
+ SHCMD	= $(CXX) -shared -o
+ SHEXT	= so
+-ETAGS	= etags
++ETAGS	= true
+--- saods9-4.0b7.orig/Makefile
++++ saods9-4.0b7/Makefile
+@@ -26,7 +26,7 @@
+   TCLXDIR = $(TCLXDIR)/win
+ 
+   TCLLIBFLAGS = --prefix ..
+-  PREHTMLFLAGS = config_BUILD_TCLSH=tclsh84s config_TARGET_TCL_SCRIPT_DIR=$(root)/lib/tcl8.4
++  PREHTMLFLAGS = config_BUILD_TCLSH=tclsh84s config_TARGET_TCL_SCRIPT_DIR=$(root)/share/tcltk/tcl8.4
+ else
+   EXE	=
+   WISH	= wish8.4
+@@ -37,6 +37,7 @@
+ 
+   XFLAGS = --x-includes=$(X11INCLUDE) --x-libraries="$(X11LIB) $(HTMLEXTLIB)"
+   TCLLIBFLAGS = --prefix $(root)
++  PREHTMLFLAGS= config_TARGET_TCL_SCRIPT_DIR=/usr/share/tcltk/tcl8.4 config_TARGET_TK_SCRIPT_DIR=/usr/share/tcltk/tk8.4
+ endif
+ 
+ TCLFLAGS = --enable-gcc --prefix $(root) $(XFLAGS)
+@@ -46,12 +47,12 @@
+ 	--with-tcl=$(root)/$(TCLDIR) --with-tk=$(root)/$(TKDIR) $(XFLAGS)
+ TKIMGFLAGS = --enable-gcc --prefix $(root) --with-tcl=$(root)/$(TCLDIRDIR) \
+ 	 --with-tk=$(root)/$(TKDIRDIR) $(XFLAGS)
+-XPAFLAGS = --enable-gcc --prefix $(root) --with-tcl=$(root)/$(TCLDIRDIR) \
++XPAFLAGS = --enable-gcc --prefix $(root) --with-tcl=/usr/share/tcltk/tcl8.4 \
+ 	$(XFLAGS)
+-HTMLFLAGS = --enable-gcc --prefix $(root) --with-tcl=$(root)/$(TCLDIR) \
+-	--with-tk=$(root)/$(TKDIR) $(XFLAGS)
++HTMLFLAGS = --enable-gcc --prefix $(root) --with-tcl=/usr/share/tcltk/tcl8.4/ --with-tk=/usr/share/tcltk/tk8.4/
++
++FUNTOOLSFLAGS = --prefix $(root) --enable-gcc --with-zlib=-lz --with-wcslib=../lib/libwcs.a --enable-mainlib
+ 
+-FUNTOOLSFLAGS = --prefix $(root) --enable-gcc --with-zlib=../lib/libz.a --with-wcslib=../lib/libwcs.a --enable-mainlib
+ ZLIBFLAGS = --prefix $(root)
+ 
+ SAOINDEX= lib/pkgIndex.tcl
+@@ -185,7 +186,7 @@
+ 
+ tkindex : FORCE
+ 	@echo "Installing Tk mkIndex..."
+-	cd lib/tk8.4; echo "pkg_mkIndex . *.tcl" | ../../bin/tclsh8.4	
++	cd share/tcltk/tk8.4; echo "pkg_mkIndex . *.tcl" | ../../../bin/tclsh8.4	
+ 
+ blt	: FORCE
+ 	@echo "Installing BLT..."
+@@ -194,7 +195,7 @@
+ 
+ mktclapp: FORCE
+ 	@echo "Installing MKTCLAPP..."
+-	cd $(MKTCLAPPDIR); CC=$(CCc) $(MAKE) mktclapp -e
++	cd $(MKTCLAPPDIR); CC=$(CCc) CFLAGS="$(CCOPT)" $(MAKE) mktclapp -e
+ 	cp $(MKTCLAPPDIR)/mktclapp$(EXE) bin/.
+ 
+ zlib  : FORCE
+@@ -219,13 +220,13 @@
+ 
+ tkmpeg	: FORCE
+ 	@echo "Installing TKMPEG..."
+-	cd $(TKMPEGDIR); $(MAKE)
++	cd $(TKMPEGDIR); $(MAKE) CXXOPT="$(CXXOPT)"
+ 	cd $(TKMPEGDIR); $(MAKE) install
+ 
+ html	: FORCE
+ 	@echo "Installing HTMLWIDGET noshared..."
+-	cd $(HTMLDIR); CC=$(CCc) $(PREHTMLFLAGS) $(root)/htmlwidget/configure $(HTMLFLAGS) --enable-shared=no
+-	cd $(HTMLDIR); $(MAKE)
++	cd $(HTMLDIR); CFLAGS="$(CXXOPT)" CC=$(CCc) $(PREHTMLFLAGS) $(root)/htmlwidget/configure $(HTMLFLAGS) --enable-shared=no
++	cd $(HTMLDIR); $(MAKE) headers libtkhtml.a
+ 	cp $(HTMLDIR)/libtkhtml.a lib/.
+ 
+ htmlsh	: FORCE
+@@ -242,7 +243,7 @@
+ 
+ xpa	: FORCE
+ 	@echo "Installing XPA..."
+-	cd $(XPADIR); CC=$(CCc) ./configure $(XPAFLAGS)  --disable-shared
++	cd $(XPADIR); CC=$(CCc) CFLAGS="$(CCOPT)" ./configure $(XPAFLAGS)  --disable-shared
+ 	cd $(XPADIR); $(MAKE); $(MAKE) install
+ 
+ iis	: FORCE
+@@ -272,7 +273,7 @@
+ 
+ saotk	: FORCE
+ 	@echo "Installing SAOTK..."
+-	cd $(SAOTKDIR); $(MAKE) install
++	cd $(SAOTKDIR); $(MAKE) CXX="$(CXX)" install
+ 
+ win	: FORCE
+ 	@echo "Installing WIN..."
+--- saods9-4.0b7.orig/wcssubs-3.5.6/Makefile
++++ saods9-4.0b7/wcssubs-3.5.6/Makefile
+@@ -12,6 +12,7 @@
+ 	lin.c \
+ 	platepos.c \
+ 	proj.c \
++	slasubs.c \
+ 	sph.c \
+ 	tnxpos.c \
+ 	wcs.c \
+--- saods9-4.0b7.orig/wcssubs-3.5.6/slasubs.c
++++ saods9-4.0b7/wcssubs-3.5.6/slasubs.c
+@@ -17,6 +17,7 @@
+  *	      rotations about specified Cartesian axes.
+  */
+ 
++#if 0
+ void
+ slaDcs2c (a, b, v)
+ 
+@@ -222,6 +223,7 @@
+   return ( fabs ( w ) < DPI ) ? w : w - dsign ( D2PI, angle );
+ }
+ 
++#endif
+ 
+ void
+ slaDeuler (order, phi, theta, psi, rmat)
+--- saods9-4.0b7.orig/wcssubs-3.5.6/hget.c
++++ saods9-4.0b7/wcssubs-3.5.6/hget.c
+@@ -153,7 +153,7 @@
+     char *value;
+     double dval;
+     int minint;
+-    int lval, id;
++    int lval;
+     char *dchar;
+ 
+     /* Get value and comment from header string */
+@@ -1355,8 +1355,10 @@
+     return (strnsrch (s1, s2, ls1));
+ }
+ 
++#if 0
+ static char *scase;
+ static int lscase = 0;
++#endif
+ 
+ /* Find string s2 within string s1 */
+ 
+@@ -1369,7 +1371,7 @@
+ 
+ {
+     char *s,*s1e;
+-    char cfirst,clast, s2i;
++    char cfirst,clast;
+     int i,ls2;
+ 
+     /* Return null string if either pointer is NULL */
+--- saods9-4.0b7.orig/ds9/ds9.tcl
++++ saods9-4.0b7/ds9/ds9.tcl
+@@ -46,10 +46,10 @@
+ 
+ # other tcl packages
+ if {$tcl_platform(platform) != "windows"} {
+-    source ../lib/tcl8.4/http2.5/http.tcl
+-    source ../lib/tcllib1.6/base64/base64.tcl
+-    source ../lib/tcllib1.6/log/log.tcl
+-    source ../lib/tcllib1.6/ftp/ftp.tcl
++    source /usr/share/tcltk/tcl8.4/http2.5/http.tcl
++    #source /usr/lib/tcllib1.8/base64/base64.tcl
++    #source /usr/lib/tcllib1.8/log/log.tcl
++    #source /usr/lib/tcllib1.8/ftp/ftp.tcl
+ } else {
+     source C:/cygwin/home/joye/saods9/lib/tcl8.4/http2.5/http.tcl
+     source C:/cygwin/home/joye/saods9/lib/tcllib1.6/base64/base64.tcl
+@@ -84,7 +84,7 @@
+ # we need this after BLT is loaded
+ # neede for BLT_ZoomStack
+ if {$tcl_platform(platform) != "windows"} {
+-    source ../lib/blt2.4/graph.tcl
++    source /usr/lib/blt2.4/graph.tcl
+ } else {
+     source C:/cygwin/home/joye/saods9/lib/blt2.4/graph.tcl
+ }
+--- saods9-4.0b7.orig/ds9/ds9.mta
++++ saods9-4.0b7/ds9/ds9.mta
+@@ -9,9 +9,9 @@
+ ## CFile:ds9.C 1
+ ## CmdLine None
+ ## ConfigFile ds9.mta
+-## Data:../lib/blt2.4/bltGraph.pro 1
+-## Data:../lib/tcl8.4/encoding/iso8859-1.enc 1
+-## Data:../lib/tcl8.4/encoding/symbol.enc 1
++## Data:/usr/lib/blt2.4/bltGraph.pro 1
++## Data:/usr/share/tcltk/tcl8.4/encoding/iso8859-1.enc 1
++## Data:/usr/share/tcltk/tcl8.4/encoding/symbol.enc 1
+ ## Data:doc/acknowledgment.html 1
+ ## Data:doc/faq.html 1
+ ## Data:doc/helpdesk.html 1
+@@ -79,11 +79,11 @@
+ ## MainScript ds9.tcl
+ ## Mode Tcl/Tk
+ ## NoSource No
+-## OtherLib:../lib/blt2.4 1
+-## OtherLib:../lib/tcl8.4/http2.5 1
+-## OtherLib:../lib/tcllib1.6/base64 1
+-## OtherLib:../lib/tcllib1.6/ftp 1
+-## OtherLib:../lib/tcllib1.6/log 1
++## OtherLib:/usr/lib/blt2.4 1
++## OtherLib:/usr/share/tcltk/tcl8.4/http2.5 1
++# OtherLib:/usr/lib/tcllib1.8/base64 1
++# OtherLib:/usr/lib/tcllib1.8/ftp 1
++# OtherLib:/usr/lib/tcllib1.8/log 1
+ ## OutputFile ds9tk.c
+ ## Shroud No
+ ## Standalone Yes
+@@ -177,76 +177,76 @@
+ ## TclFile:vo.tcl 1
+ ## TclFile:wcs.tcl 1
+ ## TclFile:xpa.tcl 1
+-## TclLib ../lib/tcl8.4
+-## TkLib ../lib/tk8.4
++## TclLib /usr/share/tcltk/tcl8.4
++## TkLib /usr/share/tcltk/tk8.4
+ #
+ -main-script "ds9.tcl"
+--tcl-library "../lib/tcl8.4"
+--tk-library "../lib/tk8.4"
+--strip-tcl "../lib/blt2.4/dnd.tcl"
+--strip-tcl "../lib/blt2.4/dragdrop.tcl"
+--strip-tcl "../lib/blt2.4/graph.tcl"
+--strip-tcl "../lib/blt2.4/hierbox.tcl"
+--strip-tcl "../lib/blt2.4/pkgIndex.tcl"
+--strip-tcl "../lib/blt2.4/tabnotebook.tcl"
+--strip-tcl "../lib/blt2.4/tabset.tcl"
+--strip-tcl "../lib/blt2.4/tclIndex"
+--strip-tcl "../lib/blt2.4/treeview.tcl"
+--strip-tcl "../lib/tcl8.4/auto.tcl"
+--strip-tcl "../lib/tcl8.4/history.tcl"
+--strip-tcl "../lib/tcl8.4/http2.5/http.tcl"
+--strip-tcl "../lib/tcl8.4/http2.5/pkgIndex.tcl"
+--strip-tcl "../lib/tcl8.4/init.tcl"
+--strip-tcl "../lib/tcl8.4/ldAout.tcl"
+--strip-tcl "../lib/tcl8.4/package.tcl"
+--strip-tcl "../lib/tcl8.4/parray.tcl"
+--strip-tcl "../lib/tcl8.4/safe.tcl"
+--strip-tcl "../lib/tcl8.4/tclIndex"
+--strip-tcl "../lib/tcl8.4/word.tcl"
+--strip-tcl "../lib/tcllib1.6/base64/base64.tcl"
+--strip-tcl "../lib/tcllib1.6/base64/base64c.tcl"
+--strip-tcl "../lib/tcllib1.6/base64/pkgIndex.tcl"
+--strip-tcl "../lib/tcllib1.6/base64/uuencode.tcl"
+--strip-tcl "../lib/tcllib1.6/base64/yencode.tcl"
+--strip-tcl "../lib/tcllib1.6/ftp/ftp.tcl"
+--strip-tcl "../lib/tcllib1.6/ftp/ftp_geturl.tcl"
+--strip-tcl "../lib/tcllib1.6/ftp/pkgIndex.tcl"
+--strip-tcl "../lib/tcllib1.6/log/log.tcl"
+--strip-tcl "../lib/tcllib1.6/log/logger.tcl"
+--strip-tcl "../lib/tcllib1.6/log/pkgIndex.tcl"
+--strip-tcl "../lib/tk8.4/bgerror.tcl"
+--strip-tcl "../lib/tk8.4/button.tcl"
+--strip-tcl "../lib/tk8.4/choosedir.tcl"
+--strip-tcl "../lib/tk8.4/clrpick.tcl"
+--strip-tcl "../lib/tk8.4/comdlg.tcl"
+--strip-tcl "../lib/tk8.4/console.tcl"
+--strip-tcl "../lib/tk8.4/dialog.tcl"
+--strip-tcl "../lib/tk8.4/entry.tcl"
+--strip-tcl "../lib/tk8.4/focus.tcl"
+--strip-tcl "../lib/tk8.4/listbox.tcl"
+--strip-tcl "../lib/tk8.4/menu.tcl"
+--strip-tcl "../lib/tk8.4/mkpsenc.tcl"
+--strip-tcl "../lib/tk8.4/msgbox.tcl"
+--strip-tcl "../lib/tk8.4/obsolete.tcl"
+--strip-tcl "../lib/tk8.4/optMenu.tcl"
+--strip-tcl "../lib/tk8.4/palette.tcl"
+--strip-tcl "../lib/tk8.4/panedwindow.tcl"
+--strip-tcl "../lib/tk8.4/pkgIndex.tcl"
+--strip-tcl "../lib/tk8.4/safetk.tcl"
+--strip-tcl "../lib/tk8.4/scale.tcl"
+--strip-tcl "../lib/tk8.4/scrlbar.tcl"
+--strip-tcl "../lib/tk8.4/spinbox.tcl"
+--strip-tcl "../lib/tk8.4/tclIndex"
+--strip-tcl "../lib/tk8.4/tearoff.tcl"
+--strip-tcl "../lib/tk8.4/text.tcl"
+--strip-tcl "../lib/tk8.4/tk.tcl"
+--strip-tcl "../lib/tk8.4/tkfbox.tcl"
+--strip-tcl "../lib/tk8.4/unsupported.tcl"
+--strip-tcl "../lib/tk8.4/xmfbox.tcl"
++-tcl-library "/usr/share/tcltk/tcl8.4"
++-tk-library "/usr/share/tcltk/tk8.4"
++-strip-tcl "/usr/lib/blt2.4/dnd.tcl"
++-strip-tcl "/usr/lib/blt2.4/dragdrop.tcl"
++-strip-tcl "/usr/lib/blt2.4/graph.tcl"
++-strip-tcl "/usr/lib/blt2.4/hierbox.tcl"
++-strip-tcl "/usr/lib/blt2.4/pkgIndex.tcl"
++-strip-tcl "/usr/lib/blt2.4/tabnotebook.tcl"
++-strip-tcl "/usr/lib/blt2.4/tabset.tcl"
++-strip-tcl "/usr/lib/blt2.4/tclIndex"
++-strip-tcl "/usr/lib/blt2.4/treeview.tcl"
++-strip-tcl "auto.tcl"
++-strip-tcl "/usr/share/tcltk/tcl8.4/history.tcl"
++-strip-tcl "/usr/share/tcltk/tcl8.4/http2.5/http.tcl"
++-strip-tcl "/usr/share/tcltk/tcl8.4/http2.5/pkgIndex.tcl"
++-strip-tcl "/usr/share/tcltk/tcl8.4/init.tcl"
++-strip-tcl "/usr/share/tcltk/tcl8.4/ldAout.tcl"
++-strip-tcl "/usr/share/tcltk/tcl8.4/package.tcl"
++-strip-tcl "/usr/share/tcltk/tcl8.4/parray.tcl"
++-strip-tcl "/usr/share/tcltk/tcl8.4/safe.tcl"
++-strip-tcl "/usr/share/tcltk/tcl8.4/tclIndex"
++-strip-tcl "/usr/share/tcltk/tcl8.4/word.tcl"
++#-strip-tcl "/usr/lib/tcllib1.8/base64/base64.tcl"
++#-strip-tcl "/usr/lib/tcllib1.8/base64/base64c.tcl"
++#-strip-tcl "/usr/lib/tcllib1.8/base64/pkgIndex.tcl"
++#-strip-tcl "/usr/lib/tcllib1.8/base64/uuencode.tcl"
++#-strip-tcl "/usr/lib/tcllib1.8/base64/yencode.tcl"
++#-strip-tcl "/usr/lib/tcllib1.8/ftp/ftp.tcl"
++#-strip-tcl "/usr/lib/tcllib1.8/ftp/ftp_geturl.tcl"
++#-strip-tcl "/usr/lib/tcllib1.8/ftp/pkgIndex.tcl"
++#-strip-tcl "/usr/lib/tcllib1.8/log/log.tcl"
++#-strip-tcl "/usr/lib/tcllib1.8/log/logger.tcl"
++#-strip-tcl "/usr/lib/tcllib1.8/log/pkgIndex.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/bgerror.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/button.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/choosedir.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/clrpick.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/comdlg.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/console.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/dialog.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/entry.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/focus.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/listbox.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/menu.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/mkpsenc.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/msgbox.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/obsolete.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/optMenu.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/palette.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/panedwindow.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/pkgIndex.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/safetk.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/scale.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/scrlbar.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/spinbox.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/tclIndex"
++-strip-tcl "/usr/share/tcltk/tk8.4/tearoff.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/text.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/tk.tcl"
++-strip-tcl "tkfbox.tcl"
++-strip-tcl "/usr/share/tcltk/tk8.4/unsupported.tcl"
++-strip-tcl "xmfbox.tcl"
+ "ds9.C"
+--i "../lib/blt2.4/bltGraph.pro"
+--i "../lib/tcl8.4/encoding/iso8859-1.enc"
+--i "../lib/tcl8.4/encoding/symbol.enc"
++-i "/usr/lib/blt2.4/bltGraph.pro"
++-i "/usr/share/tcltk/tcl8.4/encoding/iso8859-1.enc"
++-i "/usr/share/tcltk/tcl8.4/encoding/symbol.enc"
+ -i "doc/acknowledgment.html"
+ -i "doc/faq.html"
+ -i "doc/helpdesk.html"
+--- saods9-4.0b7.orig/ds9/Makefile
++++ saods9-4.0b7/ds9/Makefile
+@@ -175,20 +175,12 @@
+ 
+ INDEX	= pkgIndex.tcl
+ 
+-LIBS	= -L../lib -lsaotk -ltkhtml -ltkmpeg -L../lib/Img1.3 \
+-	-ltkimgwindow1.3 \
+-	-ltkimgjpeg1.3 -ljpegtcl1.0 \
+-	-ltkimgtiff1.3 -ltifftcl1.0 \
+-	-ltkimgpng1.3 -lpngtcl1.0 \
+-	-ltkimgppm1.3 \
+-	-ltkimggif1.3 \
+-	-ltkimgbmp1.3 \
+-	-ltkimgxbm1.3 \
+-	-lzlibtcl1.0 -ltkimg1.3 \
+-	-L../lib/Tktable2.9 -lTktable2.9 \
+-	-L../lib -lz -lxpa -liis -lcheckdns \
+-	-lBLT24 \
+-	-ltk8.4 -ltcl8.4
++LIBS	=					\
++	/usr/lib/Tktable2.9/libTktable2.9.so	\
++	-lz -lBLT -ltk8.4 -ltcl8.4		\
++	-L../lib -lsaotk -ltkhtml -ltkmpeg -lsla\
++	-liis -lcheckdns  -lxpa  -lcheckdns	\
++	-lgfortran
+ 
+ LIBS.a	= ../lib/libsaotk.a \
+ 	../lib/libtkhtml.a \
+@@ -254,17 +246,7 @@
+ # 
+ ifeq ($(ARCH),linux)
+ ds9	: ds9.o ds9tk.o FORCE
+-	$(RM) $@
+-	rm -f libstdc++.a
+-	ln -s `$(CXX) -print-file-name=libstdc++.a` .
+-	$(CXX) -static-libgcc $(OPTS) \
+-	-Wl,--export-dynamic \
+-	-o $@ ds9.o ds9tk.o \
+-	-Wl,-Bstatic $(LIBS) \
+-	-L. -lstdc++ \
+-	-Wl,-Bdynamic  -L$(X11LIB) -lX11 \
+-	-ldl -lpthread
+-	rm -f libstdc++.a
++	$(CXX) $(OPTS) -o $@ ds9.o ds9tk.o $(LIBS)
+ endif
+ 
+ #--------------------------linux64
+--- saods9-4.0b7.orig/ds9/ds9.C
++++ saods9-4.0b7/ds9/ds9.C
+@@ -6,6 +6,7 @@
+ using namespace std;
+ 
+ #include "ds9tk.h"
++#include <tcl.h>
+ 
+ extern "C" {
+   int Blt_Init(Tcl_Interp*);
+@@ -15,20 +16,6 @@
+   int Tkhtml_Init(Tcl_Interp*);
+   int Tkmpeg_Init(Tcl_Interp*);
+ 
+-  int Tkimg_Init(Tcl_Interp*);
+-  int Zlibtcl_Init(Tcl_Interp*);
+-  int Jpegtcl_Init(Tcl_Interp*);
+-  int Tkimgjpeg_Init(Tcl_Interp*);
+-  int Tifftcl_Init(Tcl_Interp*);
+-  int Tkimgtiff_Init(Tcl_Interp*);
+-  int Pngtcl_Init(Tcl_Interp*);
+-  int Tkimgpng_Init(Tcl_Interp*);
+-  int Tkimggif_Init(Tcl_Interp*);
+-  int Tkimgppm_Init(Tcl_Interp*);
+-  int Tkimgbmp_Init(Tcl_Interp*);
+-  int Tkimgxbm_Init(Tcl_Interp*);
+-  int Tkimgwindow_Init(Tcl_Interp*);
+-
+   int Tclxpa_Init(Tcl_Interp*);
+   int Iis_Init(Tcl_Interp*);
+ }
+@@ -74,57 +61,8 @@
+ 
+   // Tkimg _inits
+ 
+-  if (Tkimg_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "img", Tkimg_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Zlibtcl_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "zlibtcl", Zlibtcl_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Jpegtcl_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "jpegtcl", Jpegtcl_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Tkimgjpeg_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "jpeg", Tkimgjpeg_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Tifftcl_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "tifftcl", Tifftcl_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Tkimgtiff_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "tiff", Tkimgtiff_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Pngtcl_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "pngtcl", Pngtcl_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Tkimgpng_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "png", Tkimgpng_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Tkimggif_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "gif", Tkimggif_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Tkimgppm_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "ppm", Tkimgppm_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Tkimgbmp_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "bmp", Tkimgbmp_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Tkimgxbm_Init(interp) == TCL_ERROR)
+-    return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "xbm", Tkimgxbm_Init,(Tcl_PackageInitProc*)NULL);
+-
+-  if (Tkimgwindow_Init(interp) == TCL_ERROR)
++  if (Tcl_PkgRequire (interp, "Img", NULL, 0) == NULL)
+     return TCL_ERROR;
+-  Tcl_StaticPackage (interp, "window", Tkimgwindow_Init,(Tcl_PackageInitProc*)NULL);
+ 
+   return TCL_OK;
+ }
+--- saods9-4.0b7.orig/ds9/sample.tcl
++++ saods9-4.0b7/ds9/sample.tcl
+@@ -1,4 +1,4 @@
+-#  Copyright (C) 1999-200
++#  Copyright (C) 1999-2005
+ #  Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+ #  For conditions of distribution and use, see copyright notice in "copyright"
+ 
+--- saods9-4.0b7.orig/sla/Makefile
++++ saods9-4.0b7/sla/Makefile
+@@ -0,0 +1,17 @@
++# ./sla/Makefile
++# A work of Justin Pryzby during the year of 2005.
++# Hereby placed into the public domain.
++SRC=$(wildcard *.f)
++OBJ=$(SRC:.f=.o)
++STLIB=libsla.a
++LIBDIR=../lib/
++FCFLAGS=$(FLAGS)
++FC=gfortran
++
++install: $(STLIB)
++	mkdir -p $(LIBDIR);
++	cp $^ $(LIBDIR);
++
++$(STLIB): $(OBJ)
++	ar q $@ $^;
++	ranlib $@
+--- saods9-4.0b7.orig/funtools-1.3.0b9/Makefile.in
++++ saods9-4.0b7/funtools-1.3.0b9/Makefile.in
+@@ -60,7 +60,7 @@
+ # FITSY_LIBS =		-L./fitsy -lfitsy
+ 
+ # wcs files are in the wcs subdirectory
+-WCS_INC =		-I./wcs
++WCS_INC =		-I../wcssubs-3.5.6/
+ # WCS_LIBS =		-L./wcs -lwcs
+ 
+ # filter files are in the filter subdirectory
+@@ -187,7 +187,7 @@
+ 
+ # Subdirectories to run make in for the primary targets.
+ 
+-SUBLIBS =	util fitsy wcs filter
++SUBLIBS =	util fitsy filter
+ 
+ SUBDIRS =	$(SUBLIBS) gnu funtest
+ 
+--- saods9-4.0b7.orig/funtools-1.3.0b9/filter/Makefile.in
++++ saods9-4.0b7/funtools-1.3.0b9/filter/Makefile.in
+@@ -55,7 +55,7 @@
+ #FITSY_LIBS =		-L../fitsy
+ 
+ # wcs files are in the wcs subdirectory
+-WCS_INC =		-I../wcs
++WCS_INC =		-I../../wcssubs-3.5.6
+ #WCS_LIBS =		-L../wcs -lwcs
+ 
+ # extra includes for compiling
+--- saods9-4.0b7.orig/xpa-2.1.6/man/man1/xpaaccess.1
++++ saods9-4.0b7/xpa-2.1.6/man/man1/xpaaccess.1
+@@ -131,7 +131,7 @@
+ .IX Title "xpaaccess 1"
+ .TH xpaaccess 1 "March 25, 2005" "version 2.1.6" "SAORD Documentation"
+ .SH "NAME"
+-\&\fBxpaaccess: see if template matches registered XPA access points\fR
++xpaaccess \- see if template matches registered XPA access points
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ xpaaccess [\-c] [\-h] [\-i nsinet] [\-m method] [\-n] [\-t sval,lval] [\-u users] \-v <template> [type]
+--- saods9-4.0b7.orig/xpa-2.1.6/man/man1/xpainfo.1
++++ saods9-4.0b7/xpa-2.1.6/man/man1/xpainfo.1
+@@ -131,7 +131,7 @@
+ .IX Title "xpainfo 1"
+ .TH xpainfo 1 "March 25, 2005" "version 2.1.6" "SAORD Documentation"
+ .SH "NAME"
+-\&\fBxpainfo: send short message to one or more XPA servers\fR
++xpainfo \- send short message to one or more XPA servers
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ xpainfo [\-h] [\-i nsinet] [\-m method] [\-n] [\-s] [\-t sval,lval] [\-u users] <template|host:port> [paramlist]
+--- saods9-4.0b7.orig/xpa-2.1.6/man/man1/xpaget.1
++++ saods9-4.0b7/xpa-2.1.6/man/man1/xpaget.1
+@@ -131,7 +131,7 @@
+ .IX Title "xpaget 1"
+ .TH xpaget 1 "March 25, 2005" "version 2.1.6" "SAORD Documentation"
+ .SH "NAME"
+-\&\fBxpaget: retrieve data from one or more XPA servers\fR
++xpaget \- retrieve data from one or more XPA servers
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ xpaget [\-h] [\-i nsinet] [\-m method] [\-s] [\-t sval,lval] [\-u users] <template|host:port> [paramlist]
+--- saods9-4.0b7.orig/xpa-2.1.6/man/man1/xpaset.1
++++ saods9-4.0b7/xpa-2.1.6/man/man1/xpaset.1
+@@ -131,7 +131,7 @@
+ .IX Title "xpaset 1"
+ .TH xpaset 1 "March 25, 2005" "version 2.1.6" "SAORD Documentation"
+ .SH "NAME"
+-\&\fBxpaset: send data to one or more XPA servers\fR
++xpaset \- send data to one or more XPA servers
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ <data> | xpaset  [\-h] [\-i nsinet] [\-m method] [\-n] [\-p] [\-s] [\-t sval,lval] [\-u users] [\-v] <template|host:port> [paramlist]
+--- saods9-4.0b7.orig/xpa-2.1.6/man/man1/xpans.1
++++ saods9-4.0b7/xpa-2.1.6/man/man1/xpans.1
+@@ -131,7 +131,7 @@
+ .IX Title "xpans 1"
+ .TH xpans 1 "March 25, 2005" "version 2.1.6" "SAORD Documentation"
+ .SH "NAME"
+-\&\fBxpans: the XPA Name Server\fR
++xpans \- the XPA Name Server
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ .Vb 1
+--- saods9-4.0b7.orig/xpa-2.1.6/man/man1/xpachanges.1
++++ saods9-4.0b7/xpa-2.1.6/man/man1/xpachanges.1
+@@ -128,10 +128,10 @@
+ .rm #[ #] #H #V #F C
+ .\" ========================================================================
+ .\"
+-.IX Title "xpachanges 1"
+-.TH xpachanges 1 "March 25, 2005" "version 2.1.6" "SAORD Documentation"
++.IX Title "xpachanges 7"
++.TH xpachanges 7 "March 25, 2005" "version 2.1.6" "SAORD Documentation"
+ .SH "NAME"
+-\&\fBXPA Changes: Changes For Users from XPA 1.0 and 2.0\fR
++XPA Changes \- Changes For Users from XPA 1.0 and 2.0
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ This document describes changes that will affect users who migrate
+--- saods9-4.0b7.orig/xpa-2.1.6/man/man1/xpamb.1
++++ saods9-4.0b7/xpa-2.1.6/man/man1/xpamb.1
+@@ -131,7 +131,7 @@
+ .IX Title "xpamb 1"
+ .TH xpamb 1 "March 25, 2005" "version 2.1.6" "SAORD Documentation"
+ .SH "NAME"
+-\&\fBxpamb: the XPA Message Bus\fR
++xpamb \- the XPA Message Bus
+ .SH "SYNOPSIS"
+ .IX Header "SYNOPSIS"
+ The xpamb program can act as a \*(L"classical\*(R" message bus interface
+--- saods9-4.0b7.orig/htmlwidget/src/htmlindex.c
++++ saods9-4.0b7/htmlwidget/src/htmlindex.c
+@@ -24,6 +24,7 @@
+ **   http://www.hwaci.com/drh/
+ */
+ #include <ctype.h>
++#include <string.h>
+ #include <tk.h>
+ #include "htmlindex.h"
+ 
+--- saods9-4.0b7.orig/htmlwidget/src/htmldraw.c
++++ saods9-4.0b7/htmlwidget/src/htmldraw.c
+@@ -404,14 +404,12 @@
+   }else{
+     /* We are dealing with a single HtmlElement which contains something
+     ** other than plain text. */
+-    int top, btm, cntr;
+     int cnt, w;
+     char zBuf[30];
+     switch( src->base.type ){
+       case Html_LI:
+         x = src->li.x;
+         y = src->li.y;
+-        cntr = (top+btm)/2;
+         switch( src->li.type ){
+           case LI_TYPE_Enum_1:
+             sprintf(zBuf,"%d.",src->li.cnt);
+--- saods9-4.0b7.orig/htmlwidget/src/htmlcmd.c
++++ saods9-4.0b7/htmlwidget/src/htmlcmd.c
+@@ -25,6 +25,7 @@
+ */
+ #include <tk.h>
+ #include <stdlib.h>
++#include <string.h>
+ #include "htmlcmd.h"
+ 
+ /*
+--- saods9-4.0b7.orig/htmlwidget/confdefs.h
++++ saods9-4.0b7/htmlwidget/confdefs.h
+@@ -0,0 +1 @@
++
+--- saods9-4.0b7.orig/iis/util.c
++++ saods9-4.0b7/iis/util.c
+@@ -1,5 +1,6 @@
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <string.h>
+ 
+ #include "iis.h"
+ #include "xim.h"
+--- saods9-4.0b7.orig/iis/xim.C
++++ saods9-4.0b7/iis/xim.C
+@@ -24,7 +24,7 @@
+ 
+ void iisIO(void* data, int mask)
+ {
+-  int fd = (int)data;
++  int fd = *(int*)data;
+ 
+   if (IISDebug)
+     cerr << "iisIO() " << fd << ' ' << mask << endl;
+@@ -48,7 +48,7 @@
+   iis->chan[fd] = chan;
+ #ifndef __WIN32__
+   Tcl_CreateFileHandler(fd, TCL_READABLE, (void (*)(void*,int))iisIO,
+-			(void*)fd);
++			&fd);
+ #else
+   Tcl_CreateEventSource(setupProc, checkProc, (void*)fd);
+ #endif
+--- saods9-4.0b7.orig/iis/iistcl.C
++++ saods9-4.0b7/iis/iistcl.C
+@@ -6,10 +6,12 @@
+ #include <string.h>
+ 
+ #if __GNUC__ >= 3
++#include <cstdlib>
+ #include <iostream>
+ #include <sstream>
+ using namespace std;
+ #else
++#include <stdlib.h>
+ #include <iostream.h>
+ #include <strstream.h>
+ #endif
+@@ -46,6 +48,7 @@
+   return copy;
+ }
+ 
++#if 0
+ static char* toLower(char* str)
+ {
+   char* ptr = str;
+@@ -55,6 +58,7 @@
+   }
+   return str;
+ }
++#endif
+ 
+ int Iis_Init(Tcl_Interp* interp) {
+ 
+@@ -154,7 +158,7 @@
+       xim.chan[i].dataout = 0;    // output channel
+       xim.chan[i].keepalive = 0;  // used to keep input fifo ready
+       xim.chan[i].path[0] = '\0'; // for unix sockets
+-      xim.chan[i].reference_frame;// reference (cmd i/o) frame
++      xim.chan[i].reference_frame=0;// reference (cmd i/o) frame
+       xim.chan[i].rf_p = NULL;    // reference frame descriptor
+     }
+   }
+--- saods9-4.0b7.orig/iis/iis.c
++++ saods9-4.0b7/iis/iis.c
+@@ -4,10 +4,14 @@
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
++#include <string.h>
+ #ifdef HAVE_SYS_UN_H
+ #include <sys/un.h>
+ #endif
+ #include <fcntl.h>
++#include <unistd.h>
++#include <ctype.h>
++#include <time.h>
+ 
+ #include "iis.h"
+ #include "xim.h"
+@@ -110,7 +114,7 @@
+  * UNIX domain socket connection.  All three types of server ports are
+  * simultaneously ready to receive client connections.
+  */
+-xim_iisOpen (xim)
++int xim_iisOpen (xim)
+ register XimDataPtr xim;
+ {
+ 	int nopen = 0;
+@@ -292,7 +296,7 @@
+ 	    goto err;
+ 
+ 	/* Allocate and fill in i/o channel descriptor. */
+-	if (chan = get_iochan(xim)) {
++	if ((chan = get_iochan(xim))) {
+ 	    chan->xim = (XtPointer) xim;
+ 	    chan->type = IO_INET;
+ 	    chan->datain = s;
+@@ -360,7 +364,7 @@
+ 	    goto err;
+ 
+ 	/* Allocate and fill in i/o channel descriptor. */
+-	if (chan = get_iochan(xim)) {
++	if ((chan = get_iochan(xim))) {
+ 	    chan->xim = (XtPointer) xim;
+ 	    chan->type = IO_UNIX;
+ 	    chan->datain = s;
+@@ -414,7 +418,7 @@
+ 	} */
+ 
+ 	/* Allocate and fill in i/o channel descriptor. */
+-	if (chan = get_iochan(xim)) {
++	if ((chan = get_iochan(xim))) {
+ 	    chan->xim = (XtPointer) xim;
+ 	    chan->type = chan_port->type;
+ 	    chan->datain = s;
+@@ -457,7 +461,6 @@
+ get_iochan (xim)
+ register XimDataPtr xim;
+ {
+-	register IoChanPtr chan;
+ 	register int i;
+ 
+ 	for (i=0;  i < XtNumber(xim->chan);  i++)
+@@ -744,7 +747,7 @@
+ 		 */
+ 		char emsg[SZ_WCSBUF];
+ 		char *text;
+-		int frame, wcsnum;
++		int frame;
+ 
+ 		memset ((char *)emsg, 0, SZ_WCSBUF);
+ 
+@@ -1031,7 +1034,7 @@
+ 
+ /* DECODE_FRAMENO -- Decode encoded IIS register frame number.
+  */
+-static
++static int
+ decode_frameno (z)
+ register int	z;
+ {
+@@ -1385,6 +1388,8 @@
+  * elsewhere if needed, our only purpose here is to extract the frame WCS.
+  */
+ 
++print_mappings (FrameBufPtr fr);
++
+ static void
+ add_mapping (xim, ctran, wcsbuf, fr)
+ register XimDataPtr xim;
+@@ -1476,8 +1481,7 @@
+ 
+ /* PRINT_MAPPINGS -- Debug routine to print all mappings on a frame.
+  */
+-print_mappings (fr)
+-FrameBufPtr fr;
++print_mappings (FrameBufPtr fr)
+ {
+ 	MappingPtr mp;
+ 	register int i;
+--- saods9-4.0b7.orig/checkdns/checkdns.c
++++ saods9-4.0b7/checkdns/checkdns.c
+@@ -9,6 +9,8 @@
+ #include <signal.h>
+ #include <netdb.h>
+ #include <tcl.h>
++#include <string.h>
++#include <stdlib.h>
+ 
+ #ifndef SZ_LINE
+ #define SZ_LINE 2048
+@@ -30,7 +32,6 @@
+ {
+   int flag=0;
+   char host[SZ_LINE];
+-  struct hostent *hostent;
+   struct sigaction act1, oact1;
+ 
+   /* start the alarm, if necessary */
+--- saods9-4.0b7.orig/saotk/fitsy++/strm.C
++++ saods9-4.0b7/saotk/fitsy++/strm.C
+@@ -346,7 +346,7 @@
+   if (!(this->pExt_ || (this->pIndex_>0))) {
+ 
+     // we are only looking for a primary image
+-    if (this->head_ = this->headRead()) {
++    if ((this->head_ = this->headRead())) {
+       this->found();
+       return;
+     }
+@@ -402,7 +402,7 @@
+ 	this->head_ = NULL;
+       }
+ 
+-      if (this->head_ = this->headRead()) {
++      if ((this->head_ = this->headRead())) {
+ 	this->ext_++;
+ 	this->found();
+ 	return;
+--- saods9-4.0b7.orig/saotk/fitsy++/outchannel.C
++++ saods9-4.0b7/saotk/fitsy++/outchannel.C
+@@ -7,7 +7,7 @@
+ OutFitsChannel::OutFitsChannel(Tcl_Interp* interp, const char* ch)
+ {
+   int tclMode;
+-  if (ch_ = Tcl_GetChannel(interp, (char*)ch, &tclMode))
++  if ((ch_ = Tcl_GetChannel(interp, (char*)ch, &tclMode)))
+     valid_ = 1;
+ }
+ 
+--- saods9-4.0b7.orig/saotk/fitsy++/outfile.C
++++ saods9-4.0b7/saotk/fitsy++/outfile.C
+@@ -6,7 +6,7 @@
+ 
+ OutFitsFile::OutFitsFile(const char* fn)
+ {
+-  if (fd_ = fopen(fn, "wb"))
++  if ((fd_ = fopen(fn, "wb")))
+     valid_ = 1;
+ }
+ 
+@@ -23,7 +23,7 @@
+ 
+ OutFitsFileGZ::OutFitsFileGZ(const char* fn)
+ {
+-  if (fd_ = gzopen(fn, "wb"))
++  if ((fd_ = gzopen(fn, "wb")))
+     valid_ = 1;
+ }
+ 
+--- saods9-4.0b7.orig/saotk/tkpostscript.h
++++ saods9-4.0b7/saotk/tkpostscript.h
+@@ -4,7 +4,7 @@
+ 
+ // this is copied from tkCanvPs.c
+ 
+-#include "../../tk8.4.9/generic/tkCanvas.h"
++#include <tk-private/generic/tkCanvas.h>
+ 
+ typedef struct TkPostscriptInfo {
+     int x, y, width, height;	/* Area to print, in canvas pixel
+--- saods9-4.0b7.orig/saotk/Makefile
++++ saods9-4.0b7/saotk/Makefile
+@@ -34,7 +34,6 @@
+ 	../$(WCSSUBSDIR)/*.o \
+ 	../$(SLADIR)/*.o \
+ 	../$(ASTDIR)/*.o \
+-	../$(ZLIBDIR)/*.o \
+ 	../$(FUNTOOLSDIR)/filter/*.o \
+ 	../$(FUNTOOLSDIR)/fitsy/*.o \
+ 	../$(FUNTOOLSDIR)/util/*.o
+--- saods9-4.0b7.orig/saotk/frame/parser.H
++++ saods9-4.0b7/saotk/frame/parser.H
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton interface for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,13 +17,21 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+@@ -332,6 +342,7 @@
+      ZOOM_ = 558
+    };
+ #endif
++/* Tokens.  */
+ #define REAL 258
+ #define INT 259
+ #define STRING 260
+@@ -637,18 +648,20 @@
+ 
+ 
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 54 "parser.Y"
+-typedef union YYSTYPE {
++{
+   char chr;
+   char str[2048];
+   void* ptr;
+   int integer;
+   double real;
+   double vector[3];
+-} YYSTYPE;
+-/* Line 1275 of yacc.c.  */
+-#line 652 "parser.H"
++}
++/* Line 1529 of yacc.c.  */
++#line 664 "parser.H"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -656,5 +669,3 @@
+ 
+ extern YYSTYPE frlval;
+ 
+-
+-
+--- saods9-4.0b7.orig/saotk/frame/prosparser.C
++++ saods9-4.0b7/saotk/frame/prosparser.C
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton implementation for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,16 +17,24 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+-/* Written by Richard Stallman by simplifying the original so called
+-   ``semantic'' parser.  */
++/* C LALR(1) parser skeleton written by Richard Stallman, by
++   simplifying the original so-called "semantic" parser.  */
+ 
+ /* All symbols defined below should begin with yy or YY, to avoid
+    infringing on user name space.  This should be done even for local
+@@ -36,6 +46,9 @@
+ /* Identify Bison output.  */
+ #define YYBISON 1
+ 
++/* Bison version.  */
++#define YYBISON_VERSION "2.3"
++
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+ 
+@@ -45,8 +58,7 @@
+ /* Using locations.  */
+ #define YYLSP_NEEDED 0
+ 
+-/* If NAME_PREFIX is specified substitute the variables and functions
+-   names.  */
++/* Substitute the variable and function names.  */
+ #define yyparse prosparse
+ #define yylex   proslex
+ #define yyerror proserror
+@@ -95,6 +107,7 @@
+      VERSION_ = 288
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define STRING 260
+@@ -142,8 +155,8 @@
+ #define DISCARD_(x) {yyclearin; prosDiscard(x);}
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+@@ -205,16 +218,23 @@
+ # define YYERROR_VERBOSE 0
+ #endif
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++/* Enabling the token table.  */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
++#endif
++
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 65 "prosparser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 191 of yacc.c.  */
+-#line 218 "prosparser.C"
++}
++/* Line 193 of yacc.c.  */
++#line 237 "prosparser.C"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -225,56 +245,171 @@
+ /* Copy the second part of user declarations.  */
+ 
+ 
+-/* Line 214 of yacc.c.  */
+-#line 230 "prosparser.C"
++/* Line 216 of yacc.c.  */
++#line 250 "prosparser.C"
++
++#ifdef short
++# undef short
++#endif
++
++#ifdef YYTYPE_UINT8
++typedef YYTYPE_UINT8 yytype_uint8;
++#else
++typedef unsigned char yytype_uint8;
++#endif
++
++#ifdef YYTYPE_INT8
++typedef YYTYPE_INT8 yytype_int8;
++#elif (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++typedef signed char yytype_int8;
++#else
++typedef short int yytype_int8;
++#endif
++
++#ifdef YYTYPE_UINT16
++typedef YYTYPE_UINT16 yytype_uint16;
++#else
++typedef unsigned short int yytype_uint16;
++#endif
++
++#ifdef YYTYPE_INT16
++typedef YYTYPE_INT16 yytype_int16;
++#else
++typedef short int yytype_int16;
++#endif
++
++#ifndef YYSIZE_T
++# ifdef __SIZE_TYPE__
++#  define YYSIZE_T __SIZE_TYPE__
++# elif defined size_t
++#  define YYSIZE_T size_t
++# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
++#  define YYSIZE_T size_t
++# else
++#  define YYSIZE_T unsigned int
++# endif
++#endif
+ 
+-#if ! defined (yyoverflow) || YYERROR_VERBOSE
++#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+ 
+-# ifndef YYFREE
+-#  define YYFREE free
++#ifndef YY_
++# if YYENABLE_NLS
++#  if ENABLE_NLS
++#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
++#   define YY_(msgid) dgettext ("bison-runtime", msgid)
++#  endif
+ # endif
+-# ifndef YYMALLOC
+-#  define YYMALLOC malloc
++# ifndef YY_
++#  define YY_(msgid) msgid
+ # endif
++#endif
++
++/* Suppress unused-variable warnings by "using" E.  */
++#if ! defined lint || defined __GNUC__
++# define YYUSE(e) ((void) (e))
++#else
++# define YYUSE(e) /* empty */
++#endif
++
++/* Identity function, used to suppress warnings about constant conditions.  */
++#ifndef lint
++# define YYID(n) (n)
++#else
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static int
++YYID (int i)
++#else
++static int
++YYID (i)
++    int i;
++#endif
++{
++  return i;
++}
++#endif
++
++#if ! defined yyoverflow || YYERROR_VERBOSE
+ 
+ /* The parser invokes alloca or malloc; define the necessary symbols.  */
+ 
+ # ifdef YYSTACK_USE_ALLOCA
+ #  if YYSTACK_USE_ALLOCA
+-#   define YYSTACK_ALLOC alloca
+-#  endif
+-# else
+-#  if defined (alloca) || defined (_ALLOCA_H)
+-#   define YYSTACK_ALLOC alloca
+-#  else
+ #   ifdef __GNUC__
+ #    define YYSTACK_ALLOC __builtin_alloca
++#   elif defined __BUILTIN_VA_ARG_INCR
++#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
++#   elif defined _AIX
++#    define YYSTACK_ALLOC __alloca
++#   elif defined _MSC_VER
++#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
++#    define alloca _alloca
++#   else
++#    define YYSTACK_ALLOC alloca
++#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#     ifndef _STDLIB_H
++#      define _STDLIB_H 1
++#     endif
++#    endif
+ #   endif
+ #  endif
+ # endif
+ 
+ # ifdef YYSTACK_ALLOC
+-   /* Pacify GCC's `empty if-body' warning. */
+-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+-# else
+-#  if defined (__STDC__) || defined (__cplusplus)
+-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   define YYSIZE_T size_t
++   /* Pacify GCC's `empty if-body' warning.  */
++#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++    /* The OS might guarantee only one guard page at the bottom of the stack,
++       and a page size can be as small as 4096 bytes.  So we cannot safely
++       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
++       to allow for a few compiler-allocated temporary stack slots.  */
++#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+ #  endif
++# else
+ #  define YYSTACK_ALLOC YYMALLOC
+ #  define YYSTACK_FREE YYFREE
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
++#  endif
++#  if (defined __cplusplus && ! defined _STDLIB_H \
++       && ! ((defined YYMALLOC || defined malloc) \
++	     && (defined YYFREE || defined free)))
++#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#   ifndef _STDLIB_H
++#    define _STDLIB_H 1
++#   endif
++#  endif
++#  ifndef YYMALLOC
++#   define YYMALLOC malloc
++#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
++#  ifndef YYFREE
++#   define YYFREE free
++#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void free (void *); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
+ # endif
+-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
++#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+ 
+ 
+-#if (! defined (yyoverflow) \
+-     && (! defined (__cplusplus) \
+-	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
++#if (! defined yyoverflow \
++     && (! defined __cplusplus \
++	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ 
+ /* A type that is properly aligned for any stack member.  */
+ union yyalloc
+ {
+-  short yyss;
++  yytype_int16 yyss;
+   YYSTYPE yyvs;
+   };
+ 
+@@ -284,24 +419,24 @@
+ /* The size of an array large to enough to hold all stacks, each with
+    N elements.  */
+ # define YYSTACK_BYTES(N) \
+-     ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
++     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+ 
+ /* Copy COUNT objects from FROM to TO.  The source and destination do
+    not overlap.  */
+ # ifndef YYCOPY
+-#  if defined (__GNUC__) && 1 < __GNUC__
++#  if defined __GNUC__ && 1 < __GNUC__
+ #   define YYCOPY(To, From, Count) \
+       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+ #  else
+ #   define YYCOPY(To, From, Count)		\
+       do					\
+ 	{					\
+-	  register YYSIZE_T yyi;		\
++	  YYSIZE_T yyi;				\
+ 	  for (yyi = 0; yyi < (Count); yyi++)	\
+ 	    (To)[yyi] = (From)[yyi];		\
+ 	}					\
+-      while (0)
++      while (YYID (0))
+ #  endif
+ # endif
+ 
+@@ -319,39 +454,33 @@
+ 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ 	yyptr += yynewbytes / sizeof (*yyptr);				\
+       }									\
+-    while (0)
+-
+-#endif
++    while (YYID (0))
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-   typedef signed char yysigned_char;
+-#else
+-   typedef short yysigned_char;
+ #endif
+ 
+-/* YYFINAL -- State number of the termination state. */
++/* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  3
+ /* YYLAST -- Last index in YYTABLE.  */
+ #define YYLAST   229
+ 
+-/* YYNTOKENS -- Number of terminals. */
++/* YYNTOKENS -- Number of terminals.  */
+ #define YYNTOKENS  45
+-/* YYNNTS -- Number of nonterminals. */
++/* YYNNTS -- Number of nonterminals.  */
+ #define YYNNTS  41
+-/* YYNRULES -- Number of rules. */
++/* YYNRULES -- Number of rules.  */
+ #define YYNRULES  90
+-/* YYNRULES -- Number of states. */
++/* YYNRULES -- Number of states.  */
+ #define YYNSTATES  195
+ 
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   288
+ 
+-#define YYTRANSLATE(YYX) 						\
++#define YYTRANSLATE(YYX)						\
+   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ 
+ /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+-static const unsigned char yytranslate[] =
++static const yytype_uint8 yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       34,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+@@ -387,7 +516,7 @@
+ #if YYDEBUG
+ /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+    YYRHS.  */
+-static const unsigned short yyprhs[] =
++static const yytype_uint16 yyprhs[] =
+ {
+        0,     0,     3,     7,    11,    14,    15,    18,    20,    21,
+       25,    26,    30,    34,    36,    38,    40,    42,    44,    46,
+@@ -401,8 +530,8 @@
+      313
+ };
+ 
+-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+-static const yysigned_char yyrhs[] =
++/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
++static const yytype_int8 yyrhs[] =
+ {
+       46,     0,    -1,    69,    47,    79,    -1,    47,    48,    51,
+       -1,    48,    51,    -1,    -1,    19,    53,    -1,    33,    -1,
+@@ -439,7 +568,7 @@
+ };
+ 
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+-static const unsigned short yyrline[] =
++static const yytype_uint16 yyrline[] =
+ {
+        0,   123,   123,   126,   127,   130,   131,   132,   133,   133,
+      134,   134,   135,   136,   139,   140,   141,   144,   145,   148,
+@@ -454,9 +583,9 @@
+ };
+ #endif
+ 
+-#if YYDEBUG || YYERROR_VERBOSE
+-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
++/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
++   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+ {
+   "$end", "error", "$undefined", "INT", "REAL", "STRING", "HOUR",
+@@ -478,7 +607,7 @@
+ # ifdef YYPRINT
+ /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+    token YYLEX-NUM.  */
+-static const unsigned short yytoknum[] =
++static const yytype_uint16 yytoknum[] =
+ {
+        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+@@ -489,7 +618,7 @@
+ # endif
+ 
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+-static const unsigned char yyr1[] =
++static const yytype_uint8 yyr1[] =
+ {
+        0,    45,    46,    47,    47,    48,    48,    48,    49,    48,
+       50,    48,    48,    48,    51,    51,    51,    52,    52,    53,
+@@ -504,7 +633,7 @@
+ };
+ 
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+-static const unsigned char yyr2[] =
++static const yytype_uint8 yyr2[] =
+ {
+        0,     2,     3,     3,     2,     0,     2,     1,     0,     3,
+        0,     3,     3,     1,     1,     1,     1,     1,     1,     1,
+@@ -521,7 +650,7 @@
+ /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+-static const unsigned char yydefact[] =
++static const yytype_uint8 yydefact[] =
+ {
+       58,     0,    59,     1,    52,     0,    55,     0,    54,    53,
+       49,    50,     7,    86,    59,     0,     8,    10,    60,    13,
+@@ -545,8 +674,8 @@
+       27,    25,    25,    72,    69
+ };
+ 
+-/* YYDEFGOTO[NTERM-NUM]. */
+-static const short yydefgoto[] =
++/* YYDEFGOTO[NTERM-NUM].  */
++static const yytype_int16 yydefgoto[] =
+ {
+       -1,     1,    14,    15,    33,    34,    32,    66,    22,    78,
+       53,    86,   139,   140,   168,   106,   156,    67,    87,   116,
+@@ -558,7 +687,7 @@
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+    STATE-NUM.  */
+ #define YYPACT_NINF -110
+-static const short yypact[] =
++static const yytype_int16 yypact[] =
+ {
+     -110,    20,   185,  -110,  -110,     4,  -110,    18,  -110,  -110,
+     -110,  -110,  -110,  -110,   162,    14,  -110,  -110,    -5,  -110,
+@@ -583,7 +712,7 @@
+ };
+ 
+ /* YYPGOTO[NTERM-NUM].  */
+-static const short yypgoto[] =
++static const yytype_int16 yypgoto[] =
+ {
+     -110,  -110,  -110,   136,  -110,  -110,   125,   -17,  -110,   -45,
+      -44,   -12,  -109,  -110,   -77,   -57,  -110,    75,   -46,  -110,
+@@ -597,7 +726,7 @@
+    number is the opposite.  If zero, do what YYDEFACT says.
+    If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -83
+-static const short yytable[] =
++static const yytype_int16 yytable[] =
+ {
+       54,    55,    56,    57,   101,    59,   107,    68,    69,    70,
+       71,    72,    28,    74,    73,   142,   159,   -25,   109,   144,
+@@ -624,7 +753,7 @@
+       -5,     0,     0,     0,     0,     0,     0,     0,     0,    13
+ };
+ 
+-static const short yycheck[] =
++static const yytype_int16 yycheck[] =
+ {
+       44,    45,    46,    47,    81,    49,    83,    53,    54,    55,
+       56,    57,    14,    59,    58,   124,    42,    14,    44,   128,
+@@ -653,7 +782,7 @@
+ 
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+    symbol of state STATE-NUM.  */
+-static const unsigned char yystos[] =
++static const yytype_uint8 yystos[] =
+ {
+        0,    46,    69,     0,    16,    19,    20,    22,    23,    24,
+       25,    29,    33,    44,    47,    48,    66,    67,    70,    82,
+@@ -677,22 +806,6 @@
+       54,    57,    57,    56,    56
+ };
+ 
+-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+-# define YYSIZE_T __SIZE_TYPE__
+-#endif
+-#if ! defined (YYSIZE_T) && defined (size_t)
+-# define YYSIZE_T size_t
+-#endif
+-#if ! defined (YYSIZE_T)
+-# if defined (__STDC__) || defined (__cplusplus)
+-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+-#  define YYSIZE_T size_t
+-# endif
+-#endif
+-#if ! defined (YYSIZE_T)
+-# define YYSIZE_T unsigned int
+-#endif
+-
+ #define yyerrok		(yyerrstatus = 0)
+ #define yyclearin	(yychar = YYEMPTY)
+ #define YYEMPTY		(-2)
+@@ -718,30 +831,63 @@
+       yychar = (Token);						\
+       yylval = (Value);						\
+       yytoken = YYTRANSLATE (yychar);				\
+-      YYPOPSTACK;						\
++      YYPOPSTACK (1);						\
+       goto yybackup;						\
+     }								\
+   else								\
+-    { 								\
+-      yyerror ("syntax error: cannot back up");\
++    {								\
++      yyerror (YY_("syntax error: cannot back up")); \
+       YYERROR;							\
+     }								\
+-while (0)
++while (YYID (0))
++
+ 
+ #define YYTERROR	1
+ #define YYERRCODE	256
+ 
+-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+-   are run).  */
+ 
++/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
++   If N is 0, then set CURRENT to the empty location which ends
++   the previous symbol: RHS[0] (always defined).  */
++
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)		\
+-   ((Current).first_line   = (Rhs)[1].first_line,	\
+-    (Current).first_column = (Rhs)[1].first_column,	\
+-    (Current).last_line    = (Rhs)[N].last_line,	\
+-    (Current).last_column  = (Rhs)[N].last_column)
++# define YYLLOC_DEFAULT(Current, Rhs, N)				\
++    do									\
++      if (YYID (N))                                                    \
++	{								\
++	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
++	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
++	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
++	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
++	}								\
++      else								\
++	{								\
++	  (Current).first_line   = (Current).last_line   =		\
++	    YYRHSLOC (Rhs, 0).last_line;				\
++	  (Current).first_column = (Current).last_column =		\
++	    YYRHSLOC (Rhs, 0).last_column;				\
++	}								\
++    while (YYID (0))
++#endif
++
++
++/* YY_LOCATION_PRINT -- Print the location on the stream.
++   This macro was not mandated originally: define only if we know
++   we won't break user code: when these are the locations we know.  */
++
++#ifndef YY_LOCATION_PRINT
++# if YYLTYPE_IS_TRIVIAL
++#  define YY_LOCATION_PRINT(File, Loc)			\
++     fprintf (File, "%d.%d-%d.%d",			\
++	      (Loc).first_line, (Loc).first_column,	\
++	      (Loc).last_line,  (Loc).last_column)
++# else
++#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# endif
+ #endif
+ 
++
+ /* YYLEX -- calling `yylex' with the right arguments.  */
+ 
+ #ifdef YYLEX_PARAM
+@@ -762,42 +908,96 @@
+ do {						\
+   if (yydebug)					\
+     YYFPRINTF Args;				\
+-} while (0)
++} while (YYID (0))
+ 
+-# define YYDSYMPRINT(Args)			\
+-do {						\
+-  if (yydebug)					\
+-    yysymprint Args;				\
+-} while (0)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
++do {									  \
++  if (yydebug)								  \
++    {									  \
++      YYFPRINTF (stderr, "%s ", Title);					  \
++      yy_symbol_print (stderr,						  \
++		  Type, Value); \
++      YYFPRINTF (stderr, "\n");						  \
++    }									  \
++} while (YYID (0))
+ 
+-# define YYDSYMPRINTF(Title, Token, Value, Location)		\
+-do {								\
+-  if (yydebug)							\
+-    {								\
+-      YYFPRINTF (stderr, "%s ", Title);				\
+-      yysymprint (stderr, 					\
+-                  Token, Value);	\
+-      YYFPRINTF (stderr, "\n");					\
+-    }								\
+-} while (0)
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_value_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (!yyvaluep)
++    return;
++# ifdef YYPRINT
++  if (yytype < YYNTOKENS)
++    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++# else
++  YYUSE (yyoutput);
++# endif
++  switch (yytype)
++    {
++      default:
++	break;
++    }
++}
++
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (yytype < YYNTOKENS)
++    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
++  else
++    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++
++  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
++  YYFPRINTF (yyoutput, ")");
++}
+ 
+ /*------------------------------------------------------------------.
+ | yy_stack_print -- Print the state stack from its BOTTOM up to its |
+ | TOP (included).                                                   |
+ `------------------------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_stack_print (short *bottom, short *top)
++yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+ #else
+ static void
+ yy_stack_print (bottom, top)
+-    short *bottom;
+-    short *top;
++    yytype_int16 *bottom;
++    yytype_int16 *top;
+ #endif
+ {
+   YYFPRINTF (stderr, "Stack now");
+-  for (/* Nothing. */; bottom <= top; ++bottom)
++  for (; bottom <= top; ++bottom)
+     YYFPRINTF (stderr, " %d", *bottom);
+   YYFPRINTF (stderr, "\n");
+ }
+@@ -806,45 +1006,52 @@
+ do {								\
+   if (yydebug)							\
+     yy_stack_print ((Bottom), (Top));				\
+-} while (0)
++} while (YYID (0))
+ 
+ 
+ /*------------------------------------------------.
+ | Report that the YYRULE is going to be reduced.  |
+ `------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_reduce_print (int yyrule)
++yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+ #else
+ static void
+-yy_reduce_print (yyrule)
++yy_reduce_print (yyvsp, yyrule)
++    YYSTYPE *yyvsp;
+     int yyrule;
+ #endif
+ {
++  int yynrhs = yyr2[yyrule];
+   int yyi;
+-  unsigned int yylno = yyrline[yyrule];
+-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+-             yyrule - 1, yylno);
+-  /* Print the symbols being reduced, and their result.  */
+-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
++  unsigned long int yylno = yyrline[yyrule];
++  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
++	     yyrule - 1, yylno);
++  /* The symbols being reduced.  */
++  for (yyi = 0; yyi < yynrhs; yyi++)
++    {
++      fprintf (stderr, "   $%d = ", yyi + 1);
++      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
++		       &(yyvsp[(yyi + 1) - (yynrhs)])
++		       		       );
++      fprintf (stderr, "\n");
++    }
+ }
+ 
+ # define YY_REDUCE_PRINT(Rule)		\
+ do {					\
+   if (yydebug)				\
+-    yy_reduce_print (Rule);		\
+-} while (0)
++    yy_reduce_print (yyvsp, Rule); \
++} while (YYID (0))
+ 
+ /* Nonzero means print parse trace.  It is left uninitialized so that
+    multiple parsers can coexist.  */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
+-# define YYDSYMPRINT(Args)
+-# define YYDSYMPRINTF(Title, Token, Value, Location)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+ # define YY_STACK_PRINT(Bottom, Top)
+ # define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
+@@ -859,13 +1066,9 @@
+    if the built-in stack extension method is used).
+ 
+    Do not make this value too large; the results are undefined if
+-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
++   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+    evaluated with infinite-precision integer arithmetic.  */
+ 
+-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
+-# undef YYMAXDEPTH
+-#endif
+-
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
+@@ -875,45 +1078,47 @@
+ #if YYERROR_VERBOSE
+ 
+ # ifndef yystrlen
+-#  if defined (__GLIBC__) && defined (_STRING_H)
++#  if defined __GLIBC__ && defined _STRING_H
+ #   define yystrlen strlen
+ #  else
+ /* Return the length of YYSTR.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static YYSIZE_T
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystrlen (const char *yystr)
+-#   else
++#else
++static YYSIZE_T
+ yystrlen (yystr)
+-     const char *yystr;
+-#   endif
++    const char *yystr;
++#endif
+ {
+-  register const char *yys = yystr;
+-
+-  while (*yys++ != '\0')
++  YYSIZE_T yylen;
++  for (yylen = 0; yystr[yylen]; yylen++)
+     continue;
+-
+-  return yys - yystr - 1;
++  return yylen;
+ }
+ #  endif
+ # endif
+ 
+ # ifndef yystpcpy
+-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
++#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+ #   define yystpcpy stpcpy
+ #  else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+    YYDEST.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static char *
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystpcpy (char *yydest, const char *yysrc)
+-#   else
++#else
++static char *
+ yystpcpy (yydest, yysrc)
+-     char *yydest;
+-     const char *yysrc;
+-#   endif
++    char *yydest;
++    const char *yysrc;
++#endif
+ {
+-  register char *yyd = yydest;
+-  register const char *yys = yysrc;
++  char *yyd = yydest;
++  const char *yys = yysrc;
+ 
+   while ((*yyd++ = *yys++) != '\0')
+     continue;
+@@ -923,70 +1128,192 @@
+ #  endif
+ # endif
+ 
+-#endif /* !YYERROR_VERBOSE */
++# ifndef yytnamerr
++/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
++   quotes and backslashes, so that it's suitable for yyerror.  The
++   heuristic is that double-quoting is unnecessary unless the string
++   contains an apostrophe, a comma, or backslash (other than
++   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
++   null, do not copy; instead, return the length of what the result
++   would have been.  */
++static YYSIZE_T
++yytnamerr (char *yyres, const char *yystr)
++{
++  if (*yystr == '"')
++    {
++      YYSIZE_T yyn = 0;
++      char const *yyp = yystr;
++
++      for (;;)
++	switch (*++yyp)
++	  {
++	  case '\'':
++	  case ',':
++	    goto do_not_strip_quotes;
++
++	  case '\\':
++	    if (*++yyp != '\\')
++	      goto do_not_strip_quotes;
++	    /* Fall through.  */
++	  default:
++	    if (yyres)
++	      yyres[yyn] = *yyp;
++	    yyn++;
++	    break;
+ 
+-
++	  case '"':
++	    if (yyres)
++	      yyres[yyn] = '\0';
++	    return yyn;
++	  }
++    do_not_strip_quotes: ;
++    }
+ 
+-#if YYDEBUG
+-/*--------------------------------.
+-| Print this symbol on YYOUTPUT.  |
+-`--------------------------------*/
++  if (! yyres)
++    return yystrlen (yystr);
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-static void
+-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+-#else
+-static void
+-yysymprint (yyoutput, yytype, yyvaluep)
+-    FILE *yyoutput;
+-    int yytype;
+-    YYSTYPE *yyvaluep;
+-#endif
++  return yystpcpy (yyres, yystr) - yyres;
++}
++# endif
++
++/* Copy into YYRESULT an error message about the unexpected token
++   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
++   including the terminating null byte.  If YYRESULT is null, do not
++   copy anything; just return the number of bytes that would be
++   copied.  As a special case, return 0 if an ordinary "syntax error"
++   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
++   size calculation.  */
++static YYSIZE_T
++yysyntax_error (char *yyresult, int yystate, int yychar)
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  int yyn = yypact[yystate];
+ 
+-  if (yytype < YYNTOKENS)
++  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
++    return 0;
++  else
+     {
+-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+-# ifdef YYPRINT
+-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++      int yytype = YYTRANSLATE (yychar);
++      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
++      YYSIZE_T yysize = yysize0;
++      YYSIZE_T yysize1;
++      int yysize_overflow = 0;
++      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++      int yyx;
++
++# if 0
++      /* This is so xgettext sees the translatable formats that are
++	 constructed on the fly.  */
++      YY_("syntax error, unexpected %s");
++      YY_("syntax error, unexpected %s, expecting %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+ # endif
+-    }
+-  else
+-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++      char *yyfmt;
++      char const *yyf;
++      static char const yyunexpected[] = "syntax error, unexpected %s";
++      static char const yyexpecting[] = ", expecting %s";
++      static char const yyor[] = " or %s";
++      char yyformat[sizeof yyunexpected
++		    + sizeof yyexpecting - 1
++		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
++		       * (sizeof yyor - 1))];
++      char const *yyprefix = yyexpecting;
++
++      /* Start YYX at -YYN if negative to avoid negative indexes in
++	 YYCHECK.  */
++      int yyxbegin = yyn < 0 ? -yyn : 0;
++
++      /* Stay within bounds of both yycheck and yytname.  */
++      int yychecklim = YYLAST - yyn + 1;
++      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++      int yycount = 1;
++
++      yyarg[0] = yytname[yytype];
++      yyfmt = yystpcpy (yyformat, yyunexpected);
++
++      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++	  {
++	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++	      {
++		yycount = 1;
++		yysize = yysize0;
++		yyformat[sizeof yyunexpected - 1] = '\0';
++		break;
++	      }
++	    yyarg[yycount++] = yytname[yyx];
++	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++	    yysize_overflow |= (yysize1 < yysize);
++	    yysize = yysize1;
++	    yyfmt = yystpcpy (yyfmt, yyprefix);
++	    yyprefix = yyor;
++	  }
+ 
+-  switch (yytype)
+-    {
+-      default:
+-        break;
++      yyf = YY_(yyformat);
++      yysize1 = yysize + yystrlen (yyf);
++      yysize_overflow |= (yysize1 < yysize);
++      yysize = yysize1;
++
++      if (yysize_overflow)
++	return YYSIZE_MAXIMUM;
++
++      if (yyresult)
++	{
++	  /* Avoid sprintf, as that infringes on the user's name space.
++	     Don't have undefined behavior even if the translation
++	     produced a string with the wrong number of "%s"s.  */
++	  char *yyp = yyresult;
++	  int yyi = 0;
++	  while ((*yyp = *yyf) != '\0')
++	    {
++	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
++		{
++		  yyp += yytnamerr (yyp, yyarg[yyi++]);
++		  yyf += 2;
++		}
++	      else
++		{
++		  yyp++;
++		  yyf++;
++		}
++	    }
++	}
++      return yysize;
+     }
+-  YYFPRINTF (yyoutput, ")");
+ }
++#endif /* YYERROR_VERBOSE */
++
+ 
+-#endif /* ! YYDEBUG */
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+ `-----------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yydestruct (int yytype, YYSTYPE *yyvaluep)
++yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+ #else
+ static void
+-yydestruct (yytype, yyvaluep)
++yydestruct (yymsg, yytype, yyvaluep)
++    const char *yymsg;
+     int yytype;
+     YYSTYPE *yyvaluep;
+ #endif
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  YYUSE (yyvaluep);
++
++  if (!yymsg)
++    yymsg = "Deleting";
++  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ 
+   switch (yytype)
+     {
+ 
+       default:
+-        break;
++	break;
+     }
+ }
+ 
+@@ -994,13 +1321,13 @@
+ /* Prevent warnings from -Wmissing-prototypes.  */
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void *YYPARSE_PARAM);
+-# else
++#else
+ int yyparse ();
+-# endif
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void);
+ #else
+ int yyparse ();
+@@ -1009,10 +1336,10 @@
+ 
+ 
+ 
+-/* The lookahead symbol.  */
++/* The look-ahead symbol.  */
+ int yychar;
+ 
+-/* The semantic value of the lookahead symbol.  */
++/* The semantic value of the look-ahead symbol.  */
+ YYSTYPE yylval;
+ 
+ /* Number of syntax errors so far.  */
+@@ -1025,14 +1352,18 @@
+ `----------*/
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
+-int yyparse (void *YYPARSE_PARAM)
+-# else
+-int yyparse (YYPARSE_PARAM)
+-  void *YYPARSE_PARAM;
+-# endif
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++int
++yyparse (void *YYPARSE_PARAM)
++#else
++int
++yyparse (YYPARSE_PARAM)
++    void *YYPARSE_PARAM;
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ int
+ yyparse (void)
+ #else
+@@ -1043,13 +1374,19 @@
+ #endif
+ {
+   
+-  register int yystate;
+-  register int yyn;
++  int yystate;
++  int yyn;
+   int yyresult;
+   /* Number of tokens to shift before error messages enabled.  */
+   int yyerrstatus;
+-  /* Lookahead token as an internal (translated) token number.  */
++  /* Look-ahead token as an internal (translated) token number.  */
+   int yytoken = 0;
++#if YYERROR_VERBOSE
++  /* Buffer for error messages, and its allocated size.  */
++  char yymsgbuf[128];
++  char *yymsg = yymsgbuf;
++  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
++#endif
+ 
+   /* Three stacks and their tools:
+      `yyss': related to states,
+@@ -1060,18 +1397,18 @@
+      to reallocate them elsewhere.  */
+ 
+   /* The state stack.  */
+-  short	yyssa[YYINITDEPTH];
+-  short *yyss = yyssa;
+-  register short *yyssp;
++  yytype_int16 yyssa[YYINITDEPTH];
++  yytype_int16 *yyss = yyssa;
++  yytype_int16 *yyssp;
+ 
+   /* The semantic value stack.  */
+   YYSTYPE yyvsa[YYINITDEPTH];
+   YYSTYPE *yyvs = yyvsa;
+-  register YYSTYPE *yyvsp;
++  YYSTYPE *yyvsp;
+ 
+ 
+ 
+-#define YYPOPSTACK   (yyvsp--, yyssp--)
++#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+ 
+   YYSIZE_T yystacksize = YYINITDEPTH;
+ 
+@@ -1080,9 +1417,9 @@
+   YYSTYPE yyval;
+ 
+ 
+-  /* When reducing, the number of symbols on the RHS of the reduced
+-     rule.  */
+-  int yylen;
++  /* The number of symbols on the RHS of the reduced rule.
++     Keep to zero when no symbol should be popped.  */
++  int yylen = 0;
+ 
+   YYDPRINTF ((stderr, "Starting parse\n"));
+ 
+@@ -1106,8 +1443,7 @@
+ `------------------------------------------------------------*/
+  yynewstate:
+   /* In all cases, when you get here, the value and location stacks
+-     have just been pushed. so pushing a state here evens the stacks.
+-     */
++     have just been pushed.  So pushing a state here evens the stacks.  */
+   yyssp++;
+ 
+  yysetstate:
+@@ -1120,18 +1456,18 @@
+ 
+ #ifdef yyoverflow
+       {
+-	/* Give user a chance to reallocate the stack. Use copies of
++	/* Give user a chance to reallocate the stack.  Use copies of
+ 	   these so that the &'s don't force the real ones into
+ 	   memory.  */
+ 	YYSTYPE *yyvs1 = yyvs;
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 
+ 
+ 	/* Each stack pointer address is followed by the size of the
+ 	   data in use in that stack, in bytes.  This used to be a
+ 	   conditional around just the two extra args, but that might
+ 	   be undefined if yyoverflow is a macro.  */
+-	yyoverflow ("parser stack overflow",
++	yyoverflow (YY_("memory exhausted"),
+ 		    &yyss1, yysize * sizeof (*yyssp),
+ 		    &yyvs1, yysize * sizeof (*yyvsp),
+ 
+@@ -1142,21 +1478,21 @@
+       }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+-      goto yyoverflowlab;
++      goto yyexhaustedlab;
+ # else
+       /* Extend the stack our own way.  */
+       if (YYMAXDEPTH <= yystacksize)
+-	goto yyoverflowlab;
++	goto yyexhaustedlab;
+       yystacksize *= 2;
+       if (YYMAXDEPTH < yystacksize)
+ 	yystacksize = YYMAXDEPTH;
+ 
+       {
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 	union yyalloc *yyptr =
+ 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ 	if (! yyptr)
+-	  goto yyoverflowlab;
++	  goto yyexhaustedlab;
+ 	YYSTACK_RELOCATE (yyss);
+ 	YYSTACK_RELOCATE (yyvs);
+ 
+@@ -1187,19 +1523,17 @@
+ `-----------*/
+ yybackup:
+ 
+-/* Do appropriate processing given the current state.  */
+-/* Read a lookahead token if we need one and don't already have one.  */
+-/* yyresume: */
+-
+-  /* First try to decide what to do without reference to lookahead token.  */
++  /* Do appropriate processing given the current state.  Read a
++     look-ahead token if we need one and don't already have one.  */
+ 
++  /* First try to decide what to do without reference to look-ahead token.  */
+   yyn = yypact[yystate];
+   if (yyn == YYPACT_NINF)
+     goto yydefault;
+ 
+-  /* Not known => get a lookahead token if don't already have one.  */
++  /* Not known => get a look-ahead token if don't already have one.  */
+ 
+-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
++  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+   if (yychar == YYEMPTY)
+     {
+       YYDPRINTF ((stderr, "Reading a token: "));
+@@ -1214,7 +1548,7 @@
+   else
+     {
+       yytoken = YYTRANSLATE (yychar);
+-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
++      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+     }
+ 
+   /* If the proper action on seeing token YYTOKEN is to reduce or to
+@@ -1234,22 +1568,21 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  /* Shift the lookahead token.  */
+-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+-
+-  /* Discard the token being shifted unless it is eof.  */
+-  if (yychar != YYEOF)
+-    yychar = YYEMPTY;
+-
+-  *++yyvsp = yylval;
+-
+-
+   /* Count tokens shifted since error; after three, turn off error
+      status.  */
+   if (yyerrstatus)
+     yyerrstatus--;
+ 
++  /* Shift the look-ahead token.  */
++  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
++
++  /* Discard the shifted token unless it is eof.  */
++  if (yychar != YYEOF)
++    yychar = YYEMPTY;
++
+   yystate = yyn;
++  *++yyvsp = yylval;
++
+   goto yynewstate;
+ 
+ 
+@@ -1291,12 +1624,12 @@
+ 
+   case 8:
+ #line 133 "prosparser.Y"
+-    {globalSystem = (CoordSystem)yyvsp[0].integer;;}
++    {globalSystem = (CoordSystem)(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 10:
+ #line 134 "prosparser.Y"
+-    {globalSystem = WCS; globalSky = (SkyFrame)yyvsp[0].integer;;}
++    {globalSystem = WCS; globalSky = (SkyFrame)(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 16:
+@@ -1306,12 +1639,12 @@
+ 
+   case 17:
+ #line 144 "prosparser.Y"
+-    {yyval.real=yyvsp[0].real;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 18:
+ #line 145 "prosparser.Y"
+-    {yyval.real=yyvsp[0].integer;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 19:
+@@ -1326,97 +1659,97 @@
+ 
+   case 27:
+ #line 164 "prosparser.Y"
+-    {yyval.real = 0;;}
++    {(yyval.real) = 0;;}
+     break;
+ 
+   case 28:
+ #line 165 "prosparser.Y"
+-    {yyval.real = yyvsp[0].real;;}
++    {(yyval.real) = (yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 29:
+ #line 168 "prosparser.Y"
+-    {yyval.real = degToRad(yyvsp[0].real);;}
++    {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;}
+     break;
+ 
+   case 30:
+ #line 169 "prosparser.Y"
+-    {yyval.real = degToRad(yyvsp[0].real);;}
++    {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;}
+     break;
+ 
+   case 31:
+ #line 170 "prosparser.Y"
+-    {yyval.real=yyvsp[0].real;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 32:
+ #line 173 "prosparser.Y"
+-    {yyval.real = FITPTR->mapLenToRef(yyvsp[0].real, IMAGE);;}
++    {(yyval.real) = FITPTR->mapLenToRef((yyvsp[(1) - (1)].real), IMAGE);;}
+     break;
+ 
+   case 33:
+ #line 174 "prosparser.Y"
+-    {yyval.real = FITPTR->mapLenToRef(yyvsp[0].real, checkWCSSystem(), DEGREES);;}
++    {(yyval.real) = FITPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), DEGREES);;}
+     break;
+ 
+   case 34:
+ #line 175 "prosparser.Y"
+-    {yyval.real = FITPTR->mapLenToRef(yyvsp[0].real, checkWCSSystem(), ARCMIN);;}
++    {(yyval.real) = FITPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), ARCMIN);;}
+     break;
+ 
+   case 35:
+ #line 176 "prosparser.Y"
+-    {yyval.real = FITPTR->mapLenToRef(yyvsp[0].real, checkWCSSystem(), ARCSEC);;}
++    {(yyval.real) = FITPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), ARCSEC);;}
+     break;
+ 
+   case 36:
+ #line 180 "prosparser.Y"
+     {
+-	  Vector r = FITPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real), IMAGE);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), IMAGE);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 37:
+ #line 187 "prosparser.Y"
+     {
+-	  Vector r=FITPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real),checkWCSSystem(),DEGREES);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r=FITPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),DEGREES);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 38:
+ #line 194 "prosparser.Y"
+     {
+-	  Vector r=FITPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real),checkWCSSystem(),ARCMIN);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r=FITPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),ARCMIN);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 39:
+ #line 201 "prosparser.Y"
+     {
+-	  Vector r=FITPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real),checkWCSSystem(),ARCSEC);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r=FITPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),ARCSEC);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 40:
+ #line 209 "prosparser.Y"
+-    {yyval.integer = yyvsp[0].integer;;}
++    {(yyval.integer) = (yyvsp[(3) - (3)].integer);;}
+     break;
+ 
+   case 41:
+ #line 212 "prosparser.Y"
+-    {yyval.real = parseDMS(yyvsp[0].str);;}
++    {(yyval.real) = parseDMS((yyvsp[(1) - (1)].str));;}
+     break;
+ 
+   case 42:
+@@ -1426,13 +1759,13 @@
+ 	  CoordSystem sys = checkWCSSystem();
+ 	  SkyFrame sky = checkWCSSky();
+ 	  if (sky == GALACTIC || sky == ECLIPTIC) 
+-	    r = FITPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real), sys, sky);
++	    r = FITPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), sys, sky);
+ 	  else
+-	    r = FITPTR->mapToRef(Vector(yyvsp[-2].real*360./24.,yyvsp[0].real), sys, sky);
++	    r = FITPTR->mapToRef(Vector((yyvsp[(1) - (3)].real)*360./24.,(yyvsp[(3) - (3)].real)), sys, sky);
+ 
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -1445,12 +1778,12 @@
+ #line 230 "prosparser.Y"
+     {
+ 	  Vector r = FITPTR->mapToRef(
+-	    Vector(hmsToDegree(prossign2,yyvsp[-7].integer,yyvsp[-6].integer,yyvsp[-5].real), 
+-	    dmsToDegree(prossign,yyvsp[-2].integer,yyvsp[-1].real,yyvsp[0].real)),
++	    Vector(hmsToDegree(prossign2,(yyvsp[(1) - (8)].integer),(yyvsp[(2) - (8)].integer),(yyvsp[(3) - (8)].real)), 
++	    dmsToDegree(prossign,(yyvsp[(6) - (8)].integer),(yyvsp[(7) - (8)].real),(yyvsp[(8) - (8)].real))),
+ 	    checkWCSSystem(), checkWCSSky());
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -1463,79 +1796,79 @@
+ #line 241 "prosparser.Y"
+     {
+ 	  Vector r = FITPTR->mapToRef(
+-	    Vector(dmsToDegree(prossign2,yyvsp[-7].integer,yyvsp[-6].real,yyvsp[-5].real),
+-	    dmsToDegree(prossign,yyvsp[-2].integer,yyvsp[-1].real,yyvsp[0].real)),
++	    Vector(dmsToDegree(prossign2,(yyvsp[(1) - (8)].integer),(yyvsp[(2) - (8)].real),(yyvsp[(3) - (8)].real)),
++	    dmsToDegree(prossign,(yyvsp[(6) - (8)].integer),(yyvsp[(7) - (8)].real),(yyvsp[(8) - (8)].real))),
+ 	    checkWCSSystem(), checkWCSSky());
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 47:
+ #line 251 "prosparser.Y"
+     {
+-	  Vector r = FITPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real), localSystem, localSky);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), localSystem, localSky);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 48:
+ #line 258 "prosparser.Y"
+     {
+-	  Vector r = FITPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real),
++	  Vector r = FITPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),
+ 	    checkWCSSystem(), checkWCSSky());
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 49:
+ #line 267 "prosparser.Y"
+-    {yyval.integer = IMAGE;;}
++    {(yyval.integer) = IMAGE;;}
+     break;
+ 
+   case 50:
+ #line 268 "prosparser.Y"
+-    {yyval.integer = PHYSICAL;;}
++    {(yyval.integer) = PHYSICAL;;}
+     break;
+ 
+   case 51:
+ #line 271 "prosparser.Y"
+-    {yyval.integer = yyvsp[0].integer;;}
++    {(yyval.integer) = (yyvsp[(2) - (2)].integer);;}
+     break;
+ 
+   case 52:
+ #line 272 "prosparser.Y"
+-    {yyval.integer = FK4;;}
++    {(yyval.integer) = FK4;;}
+     break;
+ 
+   case 53:
+ #line 273 "prosparser.Y"
+-    {yyval.integer = FK5;;}
++    {(yyval.integer) = FK5;;}
+     break;
+ 
+   case 54:
+ #line 274 "prosparser.Y"
+-    {yyval.integer = GALACTIC;;}
++    {(yyval.integer) = GALACTIC;;}
+     break;
+ 
+   case 55:
+ #line 275 "prosparser.Y"
+-    {yyval.integer = ECLIPTIC;;}
++    {(yyval.integer) = ECLIPTIC;;}
+     break;
+ 
+   case 56:
+ #line 278 "prosparser.Y"
+-    {yyval.integer = FK4;;}
++    {(yyval.integer) = FK4;;}
+     break;
+ 
+   case 57:
+ #line 279 "prosparser.Y"
+-    {yyval.integer = FK5;;}
++    {(yyval.integer) = FK5;;}
+     break;
+ 
+   case 58:
+@@ -1579,15 +1912,15 @@
+ 
+   case 63:
+ #line 309 "prosparser.Y"
+-    {FR->createCircleCmd(Vector(yyvsp[-4].vector),
+-	     yyvsp[-2].real,
++    {FR->createCircleCmd(Vector((yyvsp[(3) - (7)].vector)),
++	     (yyvsp[(5) - (7)].real),
+ 	     color,1,font,text,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 64:
+ #line 313 "prosparser.Y"
+-    {FR->createAnnulusCmd(Vector(yyvsp[-6].vector),
+-	    yyvsp[-4].real,yyvsp[-2].real,1,
++    {FR->createAnnulusCmd(Vector((yyvsp[(3) - (9)].vector)),
++	    (yyvsp[(5) - (9)].real),(yyvsp[(7) - (9)].real),1,
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+@@ -1599,9 +1932,9 @@
+   case 66:
+ #line 318 "prosparser.Y"
+     {
+-	  aAnnuli[0] = yyvsp[-7].real;
+-	  aAnnuli[1] = yyvsp[-5].real;
+-	  FR->createAnnulusCmd(Vector(yyvsp[-9].vector),
++	  aAnnuli[0] = (yyvsp[(5) - (12)].real);
++	  aAnnuli[1] = (yyvsp[(7) - (12)].real);
++	  FR->createAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)),
+ 	    aNum,aAnnuli,
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);
+ 	;}
+@@ -1609,8 +1942,8 @@
+ 
+   case 67:
+ #line 326 "prosparser.Y"
+-    {FR->createAnnulusCmd(Vector(yyvsp[-8].vector),
+-	    yyvsp[-6].real,yyvsp[-4].real,yyvsp[-2].integer,
++    {FR->createAnnulusCmd(Vector((yyvsp[(3) - (11)].vector)),
++	    (yyvsp[(5) - (11)].real),(yyvsp[(7) - (11)].real),(yyvsp[(9) - (11)].integer),
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+@@ -1619,16 +1952,16 @@
+     {
+ 	  // for ellipse annulus
+ 	  aStatus = 1;
+-	  aCenter = Vector(yyvsp[-6].vector);
+-	  aAngle = yyvsp[-2].real;
+-	  aVector[0] = Vector(yyvsp[-4].vector);
++	  aCenter = Vector((yyvsp[(3) - (9)].vector));
++	  aAngle = (yyvsp[(7) - (9)].real);
++	  aVector[0] = Vector((yyvsp[(5) - (9)].vector));
+ 	  aNum = 1;
+ 	  strncpy(aComment,localComment,80);
+ 	  aProps = localProps;
+ 
+-	  FR->createEllipseCmd(Vector(yyvsp[-6].vector),
+-	    Vector(yyvsp[-4].vector),
+-	    yyvsp[-2].real,
++	  FR->createEllipseCmd(Vector((yyvsp[(3) - (9)].vector)),
++	    Vector((yyvsp[(5) - (9)].vector)),
++	    (yyvsp[(7) - (9)].real),
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);
+ 	;}
+     break;
+@@ -1637,7 +1970,7 @@
+ #line 348 "prosparser.Y"
+     {	
+ 	  aStatus = 2;
+-	  aVector[aNum++] = Vector(yyvsp[-13].vector);
++	  aVector[aNum++] = Vector((yyvsp[(5) - (18)].vector));
+ 	;}
+     break;
+ 
+@@ -1646,25 +1979,25 @@
+     {
+ 	  // for box annulus
+ 	  aStatus = 3;
+-	  aCenter = Vector(yyvsp[-6].vector);
+-	  aAngle = yyvsp[-2].real;
+-	  aVector[0] = Vector(yyvsp[-4].vector);
++	  aCenter = Vector((yyvsp[(3) - (9)].vector));
++	  aAngle = (yyvsp[(7) - (9)].real);
++	  aVector[0] = Vector((yyvsp[(5) - (9)].vector));
+ 	  aNum = 1;
+ 	  strncpy(aComment,localComment,80);
+ 	  aProps = localProps;
+ 
+-	  FR->createBoxCmd(Vector(yyvsp[-6].vector),
+-	    Vector(yyvsp[-4].vector),
+-	    yyvsp[-2].real,
++	  FR->createBoxCmd(Vector((yyvsp[(3) - (9)].vector)),
++	    Vector((yyvsp[(5) - (9)].vector)),
++	    (yyvsp[(7) - (9)].real),
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);
+ 	;}
+     break;
+ 
+   case 71:
+ #line 370 "prosparser.Y"
+-    {FR->createBoxCmd(Vector(yyvsp[-6].vector),
+-	    Vector(yyvsp[-4].vector),
+-	    yyvsp[-2].real,
++    {FR->createBoxCmd(Vector((yyvsp[(3) - (9)].vector)),
++	    Vector((yyvsp[(5) - (9)].vector)),
++	    (yyvsp[(7) - (9)].real),
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+@@ -1672,13 +2005,13 @@
+ #line 376 "prosparser.Y"
+     {	
+ 	  aStatus = 4;
+-	  aVector[aNum++] = Vector(yyvsp[-13].vector);
++	  aVector[aNum++] = Vector((yyvsp[(5) - (18)].vector));
+ 	;}
+     break;
+ 
+   case 73:
+ #line 382 "prosparser.Y"
+-    {FR->createBoxCirclePointCmd(Vector(yyvsp[-2].vector),
++    {FR->createBoxCirclePointCmd(Vector((yyvsp[(3) - (5)].vector)),
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+@@ -1695,12 +2028,12 @@
+ 
+   case 78:
+ #line 394 "prosparser.Y"
+-    {polylist.append(new Vertex(yyvsp[0].vector));;}
++    {polylist.append(new Vertex((yyvsp[(1) - (1)].vector)));;}
+     break;
+ 
+   case 81:
+ #line 401 "prosparser.Y"
+-    {aAnnuli[aNum++] = yyvsp[0].real;;}
++    {aAnnuli[aNum++] = (yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 82:
+@@ -1749,19 +2082,18 @@
+ 
+   case 90:
+ #line 441 "prosparser.Y"
+-    {strncpy(localComment,yyvsp[-1].str,80);;}
++    {strncpy(localComment,(yyvsp[(3) - (4)].str),80);;}
+     break;
+ 
+ 
++/* Line 1267 of yacc.c.  */
++#line 2091 "prosparser.C"
++      default: break;
+     }
++  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ 
+-/* Line 1000 of yacc.c.  */
+-#line 1760 "prosparser.C"
+-
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
+-
+-
++  YYPOPSTACK (yylen);
++  yylen = 0;
+   YY_STACK_PRINT (yyss, yyssp);
+ 
+   *++yyvsp = yyval;
+@@ -1790,99 +2122,65 @@
+   if (!yyerrstatus)
+     {
+       ++yynerrs;
+-#if YYERROR_VERBOSE
+-      yyn = yypact[yystate];
+-
+-      if (YYPACT_NINF < yyn && yyn < YYLAST)
+-	{
+-	  YYSIZE_T yysize = 0;
+-	  int yytype = YYTRANSLATE (yychar);
+-	  const char* yyprefix;
+-	  char *yymsg;
+-	  int yyx;
+-
+-	  /* Start YYX at -YYN if negative to avoid negative indexes in
+-	     YYCHECK.  */
+-	  int yyxbegin = yyn < 0 ? -yyn : 0;
+-
+-	  /* Stay within bounds of both yycheck and yytname.  */
+-	  int yychecklim = YYLAST - yyn;
+-	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-	  int yycount = 0;
+-
+-	  yyprefix = ", expecting ";
+-	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++#if ! YYERROR_VERBOSE
++      yyerror (YY_("syntax error"));
++#else
++      {
++	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
++	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
++	  {
++	    YYSIZE_T yyalloc = 2 * yysize;
++	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
++	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
++	    if (yymsg != yymsgbuf)
++	      YYSTACK_FREE (yymsg);
++	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
++	    if (yymsg)
++	      yymsg_alloc = yyalloc;
++	    else
+ 	      {
+-		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+-		yycount += 1;
+-		if (yycount == 5)
+-		  {
+-		    yysize = 0;
+-		    break;
+-		  }
++		yymsg = yymsgbuf;
++		yymsg_alloc = sizeof yymsgbuf;
+ 	      }
+-	  yysize += (sizeof ("syntax error, unexpected ")
+-		     + yystrlen (yytname[yytype]));
+-	  yymsg = (char *) YYSTACK_ALLOC (yysize);
+-	  if (yymsg != 0)
+-	    {
+-	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+-	      yyp = yystpcpy (yyp, yytname[yytype]);
++	  }
+ 
+-	      if (yycount < 5)
+-		{
+-		  yyprefix = ", expecting ";
+-		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+-		      {
+-			yyp = yystpcpy (yyp, yyprefix);
+-			yyp = yystpcpy (yyp, yytname[yyx]);
+-			yyprefix = " or ";
+-		      }
+-		}
+-	      yyerror (yymsg);
+-	      YYSTACK_FREE (yymsg);
+-	    }
+-	  else
+-	    yyerror ("syntax error; also virtual memory exhausted");
+-	}
+-      else
+-#endif /* YYERROR_VERBOSE */
+-	yyerror ("syntax error");
++	if (0 < yysize && yysize <= yymsg_alloc)
++	  {
++	    (void) yysyntax_error (yymsg, yystate, yychar);
++	    yyerror (yymsg);
++	  }
++	else
++	  {
++	    yyerror (YY_("syntax error"));
++	    if (yysize != 0)
++	      goto yyexhaustedlab;
++	  }
++      }
++#endif
+     }
+ 
+ 
+ 
+   if (yyerrstatus == 3)
+     {
+-      /* If just tried and failed to reuse lookahead token after an
++      /* If just tried and failed to reuse look-ahead token after an
+ 	 error, discard it.  */
+ 
+       if (yychar <= YYEOF)
+-        {
+-          /* If at end of input, pop the error token,
+-	     then the rest of the stack, then return failure.  */
++	{
++	  /* Return failure if at end of input.  */
+ 	  if (yychar == YYEOF)
+-	     for (;;)
+-	       {
+-		 YYPOPSTACK;
+-		 if (yyssp == yyss)
+-		   YYABORT;
+-		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-		 yydestruct (yystos[*yyssp], yyvsp);
+-	       }
+-        }
++	    YYABORT;
++	}
+       else
+ 	{
+-	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+-	  yydestruct (yytoken, &yylval);
++	  yydestruct ("Error: discarding",
++		      yytoken, &yylval);
+ 	  yychar = YYEMPTY;
+-
+ 	}
+     }
+ 
+-  /* Else will try to reuse lookahead token after shifting the error
++  /* Else will try to reuse look-ahead token after shifting the error
+      token.  */
+   goto yyerrlab1;
+ 
+@@ -1892,15 +2190,17 @@
+ `---------------------------------------------------*/
+ yyerrorlab:
+ 
+-#ifdef __GNUC__
+-  /* Pacify GCC when the user code never invokes YYERROR and the label
+-     yyerrorlab therefore never appears in user code.  */
+-  if (0)
++  /* Pacify compilers like GCC when the user code never invokes
++     YYERROR and the label yyerrorlab therefore never appears in user
++     code.  */
++  if (/*CONSTCOND*/ 0)
+      goto yyerrorlab;
+-#endif
+ 
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYERROR.  */
++  YYPOPSTACK (yylen);
++  yylen = 0;
++  YY_STACK_PRINT (yyss, yyssp);
+   yystate = *yyssp;
+   goto yyerrlab1;
+ 
+@@ -1929,9 +2229,10 @@
+       if (yyssp == yyss)
+ 	YYABORT;
+ 
+-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-      yydestruct (yystos[yystate], yyvsp);
+-      YYPOPSTACK;
++
++      yydestruct ("Error: popping",
++		  yystos[yystate], yyvsp);
++      YYPOPSTACK (1);
+       yystate = *yyssp;
+       YY_STACK_PRINT (yyss, yyssp);
+     }
+@@ -1939,11 +2240,12 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  YYDPRINTF ((stderr, "Shifting error token, "));
+-
+   *++yyvsp = yylval;
+ 
+ 
++  /* Shift the error token.  */
++  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
++
+   yystate = yyn;
+   goto yynewstate;
+ 
+@@ -1963,21 +2265,39 @@
+   goto yyreturn;
+ 
+ #ifndef yyoverflow
+-/*----------------------------------------------.
+-| yyoverflowlab -- parser overflow comes here.  |
+-`----------------------------------------------*/
+-yyoverflowlab:
+-  yyerror ("parser stack overflow");
++/*-------------------------------------------------.
++| yyexhaustedlab -- memory exhaustion comes here.  |
++`-------------------------------------------------*/
++yyexhaustedlab:
++  yyerror (YY_("memory exhausted"));
+   yyresult = 2;
+   /* Fall through.  */
+ #endif
+ 
+ yyreturn:
++  if (yychar != YYEOF && yychar != YYEMPTY)
++     yydestruct ("Cleanup: discarding lookahead",
++		 yytoken, &yylval);
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYABORT or YYACCEPT.  */
++  YYPOPSTACK (yylen);
++  YY_STACK_PRINT (yyss, yyssp);
++  while (yyssp != yyss)
++    {
++      yydestruct ("Cleanup: popping",
++		  yystos[*yyssp], yyvsp);
++      YYPOPSTACK (1);
++    }
+ #ifndef yyoverflow
+   if (yyss != yyssa)
+     YYSTACK_FREE (yyss);
+ #endif
+-  return yyresult;
++#if YYERROR_VERBOSE
++  if (yymsg != yymsgbuf)
++    YYSTACK_FREE (yymsg);
++#endif
++  /* Make sure YYID is used.  */
++  return YYID (yyresult);
+ }
+ 
+ 
+--- saods9-4.0b7.orig/saotk/frame/fitsdata.C
++++ saods9-4.0b7/saotk/frame/fitsdata.C
+@@ -5,7 +5,7 @@
+ #include <stdlib.h>
+ #include <limits.h>
+ #include <float.h>
+-#include <iostream.h>
++#include <iostream>
+ #include <math.h>
+ 
+ #include "fitsdata.h"
+--- saods9-4.0b7.orig/saotk/frame/tnglex.C
++++ saods9-4.0b7/saotk/frame/tnglex.C
+@@ -4,7 +4,7 @@
+ /* A lexical scanner generated by flex */
+ 
+ /* Scanner skeleton version:
+- * $Header: /proj/rd/cvsroot/saods9/saotk/frame/tnglex.C,v 1.76 2005/08/11 21:32:52 joye Exp $
++ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+  */
+ 
+ #define FLEX_SCANNER
+@@ -12,7 +12,6 @@
+ #define YY_FLEX_MINOR_VERSION 5
+ 
+ 
+-
+ /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+ #ifdef c_plusplus
+ #ifndef __cplusplus
+@@ -24,8 +23,12 @@
+ #ifdef __cplusplus
+ 
+ #include <stdlib.h>
+-#include <iostream>
+-using namespace std;
++#include <fstream>
++using std::istream;
++using std::ostream;
++#ifndef _WIN32
++#include <unistd.h>
++#endif
+ 
+ /* Use prototypes in function declarations. */
+ #define YY_USE_PROTOS
+@@ -65,6 +68,7 @@
+ #define YY_PROTO(proto) ()
+ #endif
+ 
++
+ /* Returned upon end-of-file. */
+ #define YY_NULL 0
+ 
+@@ -570,7 +574,7 @@
+ #define DISCARD 1
+ 
+ /* rules */
+-#line 574 "tnglex.C"
++#line 578 "tnglex.C"
+ 
+ /* Macros after this point can all be overridden by user definitions in
+  * section 1.
+@@ -694,13 +698,13 @@
+ YY_DECL
+ 	{
+ 	register yy_state_type yy_current_state;
+-	register char *yy_cp = NULL, *yy_bp = NULL;
++	register char *yy_cp, *yy_bp;
+ 	register int yy_act;
+ 
+ #line 30 "tnglex.L"
+ 
+ 
+-#line 704 "tnglex.C"
++#line 708 "tnglex.C"
+ 
+ 	if ( yy_init )
+ 		{
+@@ -1081,7 +1085,7 @@
+ #line 145 "tnglex.L"
+ ECHO;
+ 	YY_BREAK
+-#line 1085 "tnglex.C"
++#line 1089 "tnglex.C"
+ 
+ 	case YY_END_OF_BUFFER:
+ 		{
+@@ -1597,6 +1601,7 @@
+ 	return c;
+ 	}
+ 
++
+ void yyFlexLexer::yyrestart( istream* input_file )
+ 	{
+ 	if ( ! yy_current_buffer )
+--- saods9-4.0b7.orig/saotk/frame/saoparser.Y
++++ saods9-4.0b7/saotk/frame/saoparser.Y
+@@ -12,8 +12,8 @@
+ #define DISCARD_(x) {yyclearin; saoDiscard(x);}
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+--- saods9-4.0b7.orig/saotk/frame/parser.C
++++ saods9-4.0b7/saotk/frame/parser.C
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton implementation for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,16 +17,24 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+-/* Written by Richard Stallman by simplifying the original so called
+-   ``semantic'' parser.  */
++/* C LALR(1) parser skeleton written by Richard Stallman, by
++   simplifying the original so-called "semantic" parser.  */
+ 
+ /* All symbols defined below should begin with yy or YY, to avoid
+    infringing on user name space.  This should be done even for local
+@@ -36,6 +46,9 @@
+ /* Identify Bison output.  */
+ #define YYBISON 1
+ 
++/* Bison version.  */
++#define YYBISON_VERSION "2.3"
++
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+ 
+@@ -45,8 +58,7 @@
+ /* Using locations.  */
+ #define YYLSP_NEEDED 0
+ 
+-/* If NAME_PREFIX is specified substitute the variables and functions
+-   names.  */
++/* Substitute the variable and function names.  */
+ #define yyparse frparse
+ #define yylex   frlex
+ #define yyerror frerror
+@@ -365,6 +377,7 @@
+      ZOOM_ = 558
+    };
+ #endif
++/* Tokens.  */
+ #define REAL 258
+ #define INT 259
+ #define STRING 260
+@@ -682,8 +695,8 @@
+ #define FITSPTR (FRB->findFits(1))
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "frame.h"
+@@ -734,18 +747,25 @@
+ # define YYERROR_VERBOSE 0
+ #endif
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++/* Enabling the token table.  */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
++#endif
++
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 54 "parser.Y"
+-typedef union YYSTYPE {
++{
+   char chr;
+   char str[2048];
+   void* ptr;
+   int integer;
+   double real;
+   double vector[3];
+-} YYSTYPE;
+-/* Line 191 of yacc.c.  */
+-#line 749 "parser.C"
++}
++/* Line 193 of yacc.c.  */
++#line 768 "parser.C"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -756,56 +776,171 @@
+ /* Copy the second part of user declarations.  */
+ 
+ 
+-/* Line 214 of yacc.c.  */
+-#line 761 "parser.C"
++/* Line 216 of yacc.c.  */
++#line 781 "parser.C"
+ 
+-#if ! defined (yyoverflow) || YYERROR_VERBOSE
++#ifdef short
++# undef short
++#endif
++
++#ifdef YYTYPE_UINT8
++typedef YYTYPE_UINT8 yytype_uint8;
++#else
++typedef unsigned char yytype_uint8;
++#endif
+ 
+-# ifndef YYFREE
+-#  define YYFREE free
++#ifdef YYTYPE_INT8
++typedef YYTYPE_INT8 yytype_int8;
++#elif (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++typedef signed char yytype_int8;
++#else
++typedef short int yytype_int8;
++#endif
++
++#ifdef YYTYPE_UINT16
++typedef YYTYPE_UINT16 yytype_uint16;
++#else
++typedef unsigned short int yytype_uint16;
++#endif
++
++#ifdef YYTYPE_INT16
++typedef YYTYPE_INT16 yytype_int16;
++#else
++typedef short int yytype_int16;
++#endif
++
++#ifndef YYSIZE_T
++# ifdef __SIZE_TYPE__
++#  define YYSIZE_T __SIZE_TYPE__
++# elif defined size_t
++#  define YYSIZE_T size_t
++# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
++#  define YYSIZE_T size_t
++# else
++#  define YYSIZE_T unsigned int
+ # endif
+-# ifndef YYMALLOC
+-#  define YYMALLOC malloc
++#endif
++
++#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
++
++#ifndef YY_
++# if YYENABLE_NLS
++#  if ENABLE_NLS
++#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
++#   define YY_(msgid) dgettext ("bison-runtime", msgid)
++#  endif
++# endif
++# ifndef YY_
++#  define YY_(msgid) msgid
+ # endif
++#endif
++
++/* Suppress unused-variable warnings by "using" E.  */
++#if ! defined lint || defined __GNUC__
++# define YYUSE(e) ((void) (e))
++#else
++# define YYUSE(e) /* empty */
++#endif
++
++/* Identity function, used to suppress warnings about constant conditions.  */
++#ifndef lint
++# define YYID(n) (n)
++#else
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static int
++YYID (int i)
++#else
++static int
++YYID (i)
++    int i;
++#endif
++{
++  return i;
++}
++#endif
++
++#if ! defined yyoverflow || YYERROR_VERBOSE
+ 
+ /* The parser invokes alloca or malloc; define the necessary symbols.  */
+ 
+ # ifdef YYSTACK_USE_ALLOCA
+ #  if YYSTACK_USE_ALLOCA
+-#   define YYSTACK_ALLOC alloca
+-#  endif
+-# else
+-#  if defined (alloca) || defined (_ALLOCA_H)
+-#   define YYSTACK_ALLOC alloca
+-#  else
+ #   ifdef __GNUC__
+ #    define YYSTACK_ALLOC __builtin_alloca
++#   elif defined __BUILTIN_VA_ARG_INCR
++#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
++#   elif defined _AIX
++#    define YYSTACK_ALLOC __alloca
++#   elif defined _MSC_VER
++#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
++#    define alloca _alloca
++#   else
++#    define YYSTACK_ALLOC alloca
++#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#     ifndef _STDLIB_H
++#      define _STDLIB_H 1
++#     endif
++#    endif
+ #   endif
+ #  endif
+ # endif
+ 
+ # ifdef YYSTACK_ALLOC
+-   /* Pacify GCC's `empty if-body' warning. */
+-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+-# else
+-#  if defined (__STDC__) || defined (__cplusplus)
+-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   define YYSIZE_T size_t
++   /* Pacify GCC's `empty if-body' warning.  */
++#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++    /* The OS might guarantee only one guard page at the bottom of the stack,
++       and a page size can be as small as 4096 bytes.  So we cannot safely
++       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
++       to allow for a few compiler-allocated temporary stack slots.  */
++#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+ #  endif
++# else
+ #  define YYSTACK_ALLOC YYMALLOC
+ #  define YYSTACK_FREE YYFREE
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
++#  endif
++#  if (defined __cplusplus && ! defined _STDLIB_H \
++       && ! ((defined YYMALLOC || defined malloc) \
++	     && (defined YYFREE || defined free)))
++#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#   ifndef _STDLIB_H
++#    define _STDLIB_H 1
++#   endif
++#  endif
++#  ifndef YYMALLOC
++#   define YYMALLOC malloc
++#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
++#  ifndef YYFREE
++#   define YYFREE free
++#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void free (void *); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
+ # endif
+-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
++#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+ 
+ 
+-#if (! defined (yyoverflow) \
+-     && (! defined (__cplusplus) \
+-	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
++#if (! defined yyoverflow \
++     && (! defined __cplusplus \
++	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ 
+ /* A type that is properly aligned for any stack member.  */
+ union yyalloc
+ {
+-  short yyss;
++  yytype_int16 yyss;
+   YYSTYPE yyvs;
+   };
+ 
+@@ -815,24 +950,24 @@
+ /* The size of an array large to enough to hold all stacks, each with
+    N elements.  */
+ # define YYSTACK_BYTES(N) \
+-     ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
++     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+ 
+ /* Copy COUNT objects from FROM to TO.  The source and destination do
+    not overlap.  */
+ # ifndef YYCOPY
+-#  if defined (__GNUC__) && 1 < __GNUC__
++#  if defined __GNUC__ && 1 < __GNUC__
+ #   define YYCOPY(To, From, Count) \
+       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+ #  else
+ #   define YYCOPY(To, From, Count)		\
+       do					\
+ 	{					\
+-	  register YYSIZE_T yyi;		\
++	  YYSIZE_T yyi;				\
+ 	  for (yyi = 0; yyi < (Count); yyi++)	\
+ 	    (To)[yyi] = (From)[yyi];		\
+ 	}					\
+-      while (0)
++      while (YYID (0))
+ #  endif
+ # endif
+ 
+@@ -850,39 +985,33 @@
+ 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ 	yyptr += yynewbytes / sizeof (*yyptr);				\
+       }									\
+-    while (0)
++    while (YYID (0))
+ 
+ #endif
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-   typedef signed char yysigned_char;
+-#else
+-   typedef short yysigned_char;
+-#endif
+-
+-/* YYFINAL -- State number of the termination state. */
++/* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  290
+ /* YYLAST -- Last index in YYTABLE.  */
+ #define YYLAST   4160
+ 
+-/* YYNTOKENS -- Number of terminals. */
++/* YYNTOKENS -- Number of terminals.  */
+ #define YYNTOKENS  308
+-/* YYNNTS -- Number of nonterminals. */
++/* YYNNTS -- Number of nonterminals.  */
+ #define YYNNTS  143
+-/* YYNRULES -- Number of rules. */
++/* YYNRULES -- Number of rules.  */
+ #define YYNRULES  926
+-/* YYNRULES -- Number of states. */
++/* YYNRULES -- Number of states.  */
+ #define YYNSTATES  2089
+ 
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   558
+ 
+-#define YYTRANSLATE(YYX) 						\
++#define YYTRANSLATE(YYX)						\
+   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ 
+ /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+-static const unsigned short yytranslate[] =
++static const yytype_uint16 yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+@@ -945,7 +1074,7 @@
+ #if YYDEBUG
+ /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+    YYRHS.  */
+-static const unsigned short yyprhs[] =
++static const yytype_uint16 yyprhs[] =
+ {
+        0,     0,     3,     6,     9,    13,    15,    17,    20,    23,
+       26,    29,    32,    35,    38,    41,    44,    47,    50,    52,
+@@ -1042,8 +1171,8 @@
+     3426,  3433,  3436,  3438,  3441,  3444,  3451
+ };
+ 
+-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+-static const short yyrhs[] =
++/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
++static const yytype_int16 yyrhs[] =
+ {
+      309,     0,    -1,    82,   311,    -1,    39,   330,    -1,    38,
+       60,     5,    -1,    52,    -1,    56,    -1,    58,   334,    -1,
+@@ -1394,7 +1523,7 @@
+ };
+ 
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+-static const unsigned short yyrline[] =
++static const yytype_uint16 yyrline[] =
+ {
+        0,   399,   399,   401,   402,   403,   404,   405,   406,   407,
+      409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
+@@ -1492,9 +1621,9 @@
+ };
+ #endif
+ 
+-#if YYDEBUG || YYERROR_VERBOSE
+-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
++/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
++   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+ {
+   "$end", "error", "$undefined", "REAL", "INT", "STRING", "POINTER",
+@@ -1577,7 +1706,7 @@
+ # ifdef YYPRINT
+ /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+    token YYLEX-NUM.  */
+-static const unsigned short yytoknum[] =
++static const yytype_uint16 yytoknum[] =
+ {
+        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+@@ -1614,7 +1743,7 @@
+ # endif
+ 
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+-static const unsigned short yyr1[] =
++static const yytype_uint16 yyr1[] =
+ {
+        0,   308,   309,   309,   309,   309,   309,   309,   309,   309,
+      309,   309,   309,   309,   309,   309,   309,   309,   309,   309,
+@@ -1712,7 +1841,7 @@
+ };
+ 
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+-static const unsigned char yyr2[] =
++static const yytype_uint8 yyr2[] =
+ {
+        0,     2,     2,     2,     3,     1,     1,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     1,     2,
+@@ -1812,7 +1941,7 @@
+ /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+-static const unsigned short yydefact[] =
++static const yytype_uint16 yydefact[] =
+ {
+        0,     0,     0,     5,     6,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,    18,     0,     0,
+@@ -2025,8 +2154,8 @@
+      830,   826,   165,   547,   582,   778,   778,   683,   680
+ };
+ 
+-/* YYDEFGOTO[NTERM-NUM]. */
+-static const short yydefgoto[] =
++/* YYDEFGOTO[NTERM-NUM].  */
++static const yytype_int16 yydefgoto[] =
+ {
+       -1,    42,  1059,   141,   127,   444,   955,  1724,  1725,   634,
+      635,  1537,  1536,   403,   129,   404,   354,   948,    72,  1022,
+@@ -2048,7 +2177,7 @@
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+    STATE-NUM.  */
+ #define YYPACT_NINF -1930
+-static const short yypact[] =
++static const yytype_int16 yypact[] =
+ {
+     3663,    44,    98, -1930, -1930,   534,   468,   630,   444,   151,
+       40,   103,   529,   -67,  3827,   317,   927, -1930,    40,   727,
+@@ -2262,7 +2391,7 @@
+ };
+ 
+ /* YYPGOTO[NTERM-NUM].  */
+-static const short yypgoto[] =
++static const yytype_int16 yypgoto[] =
+ {
+    -1930, -1930,  1448, -1930,   -10,  -177, -1930, -1385,  -729,   964,
+     -348, -1930, -1930,    -7,  -238,    14,  -237,  -371,   349,  -704,
+@@ -2286,7 +2415,7 @@
+    number is the opposite.  If zero, do what YYDEFACT says.
+    If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -829
+-static const short yytable[] =
++static const yytype_int16 yytable[] =
+ {
+      132,   142,   128,   844,  1060,   540,   638,   455,   205,   543,
+     1034,   223,   848,  1037,   819,   822,  1139,   248,   423,   242,
+@@ -2707,7 +2836,7 @@
+     1043
+ };
+ 
+-static const short yycheck[] =
++static const yytype_int16 yycheck[] =
+ {
+       10,    11,     9,   517,   733,   242,   354,   184,    18,   247,
+      714,    21,     5,   717,   512,   513,     5,    27,     6,    26,
+@@ -3130,7 +3259,7 @@
+ 
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+    symbol of state STATE-NUM.  */
+-static const unsigned short yystos[] =
++static const yytype_uint16 yystos[] =
+ {
+        0,    38,    39,    52,    56,    58,    59,    61,    67,    74,
+       81,    82,    98,   107,   117,   121,   124,   127,   129,   136,
+@@ -3343,22 +3472,6 @@
+      423,   312,     5,   324,   324,   315,   315,   414,   414
+ };
+ 
+-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+-# define YYSIZE_T __SIZE_TYPE__
+-#endif
+-#if ! defined (YYSIZE_T) && defined (size_t)
+-# define YYSIZE_T size_t
+-#endif
+-#if ! defined (YYSIZE_T)
+-# if defined (__STDC__) || defined (__cplusplus)
+-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+-#  define YYSIZE_T size_t
+-# endif
+-#endif
+-#if ! defined (YYSIZE_T)
+-# define YYSIZE_T unsigned int
+-#endif
+-
+ #define yyerrok		(yyerrstatus = 0)
+ #define yyclearin	(yychar = YYEMPTY)
+ #define YYEMPTY		(-2)
+@@ -3384,30 +3497,63 @@
+       yychar = (Token);						\
+       yylval = (Value);						\
+       yytoken = YYTRANSLATE (yychar);				\
+-      YYPOPSTACK;						\
++      YYPOPSTACK (1);						\
+       goto yybackup;						\
+     }								\
+   else								\
+-    { 								\
+-      yyerror ("syntax error: cannot back up");\
++    {								\
++      yyerror (YY_("syntax error: cannot back up")); \
+       YYERROR;							\
+     }								\
+-while (0)
++while (YYID (0))
++
+ 
+ #define YYTERROR	1
+ #define YYERRCODE	256
+ 
+-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+-   are run).  */
+ 
++/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
++   If N is 0, then set CURRENT to the empty location which ends
++   the previous symbol: RHS[0] (always defined).  */
++
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)		\
+-   ((Current).first_line   = (Rhs)[1].first_line,	\
+-    (Current).first_column = (Rhs)[1].first_column,	\
+-    (Current).last_line    = (Rhs)[N].last_line,	\
+-    (Current).last_column  = (Rhs)[N].last_column)
++# define YYLLOC_DEFAULT(Current, Rhs, N)				\
++    do									\
++      if (YYID (N))                                                    \
++	{								\
++	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
++	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
++	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
++	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
++	}								\
++      else								\
++	{								\
++	  (Current).first_line   = (Current).last_line   =		\
++	    YYRHSLOC (Rhs, 0).last_line;				\
++	  (Current).first_column = (Current).last_column =		\
++	    YYRHSLOC (Rhs, 0).last_column;				\
++	}								\
++    while (YYID (0))
++#endif
++
++
++/* YY_LOCATION_PRINT -- Print the location on the stream.
++   This macro was not mandated originally: define only if we know
++   we won't break user code: when these are the locations we know.  */
++
++#ifndef YY_LOCATION_PRINT
++# if YYLTYPE_IS_TRIVIAL
++#  define YY_LOCATION_PRINT(File, Loc)			\
++     fprintf (File, "%d.%d-%d.%d",			\
++	      (Loc).first_line, (Loc).first_column,	\
++	      (Loc).last_line,  (Loc).last_column)
++# else
++#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# endif
+ #endif
+ 
++
+ /* YYLEX -- calling `yylex' with the right arguments.  */
+ 
+ #ifdef YYLEX_PARAM
+@@ -3428,42 +3574,96 @@
+ do {						\
+   if (yydebug)					\
+     YYFPRINTF Args;				\
+-} while (0)
++} while (YYID (0))
+ 
+-# define YYDSYMPRINT(Args)			\
+-do {						\
+-  if (yydebug)					\
+-    yysymprint Args;				\
+-} while (0)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
++do {									  \
++  if (yydebug)								  \
++    {									  \
++      YYFPRINTF (stderr, "%s ", Title);					  \
++      yy_symbol_print (stderr,						  \
++		  Type, Value); \
++      YYFPRINTF (stderr, "\n");						  \
++    }									  \
++} while (YYID (0))
+ 
+-# define YYDSYMPRINTF(Title, Token, Value, Location)		\
+-do {								\
+-  if (yydebug)							\
+-    {								\
+-      YYFPRINTF (stderr, "%s ", Title);				\
+-      yysymprint (stderr, 					\
+-                  Token, Value);	\
+-      YYFPRINTF (stderr, "\n");					\
+-    }								\
+-} while (0)
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_value_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (!yyvaluep)
++    return;
++# ifdef YYPRINT
++  if (yytype < YYNTOKENS)
++    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++# else
++  YYUSE (yyoutput);
++# endif
++  switch (yytype)
++    {
++      default:
++	break;
++    }
++}
++
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (yytype < YYNTOKENS)
++    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
++  else
++    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++
++  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
++  YYFPRINTF (yyoutput, ")");
++}
+ 
+ /*------------------------------------------------------------------.
+ | yy_stack_print -- Print the state stack from its BOTTOM up to its |
+ | TOP (included).                                                   |
+ `------------------------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_stack_print (short *bottom, short *top)
++yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+ #else
+ static void
+ yy_stack_print (bottom, top)
+-    short *bottom;
+-    short *top;
++    yytype_int16 *bottom;
++    yytype_int16 *top;
+ #endif
+ {
+   YYFPRINTF (stderr, "Stack now");
+-  for (/* Nothing. */; bottom <= top; ++bottom)
++  for (; bottom <= top; ++bottom)
+     YYFPRINTF (stderr, " %d", *bottom);
+   YYFPRINTF (stderr, "\n");
+ }
+@@ -3472,45 +3672,52 @@
+ do {								\
+   if (yydebug)							\
+     yy_stack_print ((Bottom), (Top));				\
+-} while (0)
++} while (YYID (0))
+ 
+ 
+ /*------------------------------------------------.
+ | Report that the YYRULE is going to be reduced.  |
+ `------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_reduce_print (int yyrule)
++yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+ #else
+ static void
+-yy_reduce_print (yyrule)
++yy_reduce_print (yyvsp, yyrule)
++    YYSTYPE *yyvsp;
+     int yyrule;
+ #endif
+ {
++  int yynrhs = yyr2[yyrule];
+   int yyi;
+-  unsigned int yylno = yyrline[yyrule];
+-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+-             yyrule - 1, yylno);
+-  /* Print the symbols being reduced, and their result.  */
+-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
++  unsigned long int yylno = yyrline[yyrule];
++  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
++	     yyrule - 1, yylno);
++  /* The symbols being reduced.  */
++  for (yyi = 0; yyi < yynrhs; yyi++)
++    {
++      fprintf (stderr, "   $%d = ", yyi + 1);
++      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
++		       &(yyvsp[(yyi + 1) - (yynrhs)])
++		       		       );
++      fprintf (stderr, "\n");
++    }
+ }
+ 
+ # define YY_REDUCE_PRINT(Rule)		\
+ do {					\
+   if (yydebug)				\
+-    yy_reduce_print (Rule);		\
+-} while (0)
++    yy_reduce_print (yyvsp, Rule); \
++} while (YYID (0))
+ 
+ /* Nonzero means print parse trace.  It is left uninitialized so that
+    multiple parsers can coexist.  */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
+-# define YYDSYMPRINT(Args)
+-# define YYDSYMPRINTF(Title, Token, Value, Location)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+ # define YY_STACK_PRINT(Bottom, Top)
+ # define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
+@@ -3525,13 +3732,9 @@
+    if the built-in stack extension method is used).
+ 
+    Do not make this value too large; the results are undefined if
+-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
++   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+    evaluated with infinite-precision integer arithmetic.  */
+ 
+-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
+-# undef YYMAXDEPTH
+-#endif
+-
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
+@@ -3541,45 +3744,47 @@
+ #if YYERROR_VERBOSE
+ 
+ # ifndef yystrlen
+-#  if defined (__GLIBC__) && defined (_STRING_H)
++#  if defined __GLIBC__ && defined _STRING_H
+ #   define yystrlen strlen
+ #  else
+ /* Return the length of YYSTR.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static YYSIZE_T
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystrlen (const char *yystr)
+-#   else
++#else
++static YYSIZE_T
+ yystrlen (yystr)
+-     const char *yystr;
+-#   endif
++    const char *yystr;
++#endif
+ {
+-  register const char *yys = yystr;
+-
+-  while (*yys++ != '\0')
++  YYSIZE_T yylen;
++  for (yylen = 0; yystr[yylen]; yylen++)
+     continue;
+-
+-  return yys - yystr - 1;
++  return yylen;
+ }
+ #  endif
+ # endif
+ 
+ # ifndef yystpcpy
+-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
++#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+ #   define yystpcpy stpcpy
+ #  else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+    YYDEST.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static char *
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystpcpy (char *yydest, const char *yysrc)
+-#   else
++#else
++static char *
+ yystpcpy (yydest, yysrc)
+-     char *yydest;
+-     const char *yysrc;
+-#   endif
++    char *yydest;
++    const char *yysrc;
++#endif
+ {
+-  register char *yyd = yydest;
+-  register const char *yys = yysrc;
++  char *yyd = yydest;
++  const char *yys = yysrc;
+ 
+   while ((*yyd++ = *yys++) != '\0')
+     continue;
+@@ -3589,70 +3794,192 @@
+ #  endif
+ # endif
+ 
+-#endif /* !YYERROR_VERBOSE */
++# ifndef yytnamerr
++/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
++   quotes and backslashes, so that it's suitable for yyerror.  The
++   heuristic is that double-quoting is unnecessary unless the string
++   contains an apostrophe, a comma, or backslash (other than
++   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
++   null, do not copy; instead, return the length of what the result
++   would have been.  */
++static YYSIZE_T
++yytnamerr (char *yyres, const char *yystr)
++{
++  if (*yystr == '"')
++    {
++      YYSIZE_T yyn = 0;
++      char const *yyp = yystr;
+ 
+-
++      for (;;)
++	switch (*++yyp)
++	  {
++	  case '\'':
++	  case ',':
++	    goto do_not_strip_quotes;
++
++	  case '\\':
++	    if (*++yyp != '\\')
++	      goto do_not_strip_quotes;
++	    /* Fall through.  */
++	  default:
++	    if (yyres)
++	      yyres[yyn] = *yyp;
++	    yyn++;
++	    break;
++
++	  case '"':
++	    if (yyres)
++	      yyres[yyn] = '\0';
++	    return yyn;
++	  }
++    do_not_strip_quotes: ;
++    }
+ 
+-#if YYDEBUG
+-/*--------------------------------.
+-| Print this symbol on YYOUTPUT.  |
+-`--------------------------------*/
++  if (! yyres)
++    return yystrlen (yystr);
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-static void
+-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+-#else
+-static void
+-yysymprint (yyoutput, yytype, yyvaluep)
+-    FILE *yyoutput;
+-    int yytype;
+-    YYSTYPE *yyvaluep;
+-#endif
++  return yystpcpy (yyres, yystr) - yyres;
++}
++# endif
++
++/* Copy into YYRESULT an error message about the unexpected token
++   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
++   including the terminating null byte.  If YYRESULT is null, do not
++   copy anything; just return the number of bytes that would be
++   copied.  As a special case, return 0 if an ordinary "syntax error"
++   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
++   size calculation.  */
++static YYSIZE_T
++yysyntax_error (char *yyresult, int yystate, int yychar)
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  int yyn = yypact[yystate];
+ 
+-  if (yytype < YYNTOKENS)
++  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
++    return 0;
++  else
+     {
+-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+-# ifdef YYPRINT
+-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++      int yytype = YYTRANSLATE (yychar);
++      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
++      YYSIZE_T yysize = yysize0;
++      YYSIZE_T yysize1;
++      int yysize_overflow = 0;
++      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++      int yyx;
++
++# if 0
++      /* This is so xgettext sees the translatable formats that are
++	 constructed on the fly.  */
++      YY_("syntax error, unexpected %s");
++      YY_("syntax error, unexpected %s, expecting %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+ # endif
+-    }
+-  else
+-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++      char *yyfmt;
++      char const *yyf;
++      static char const yyunexpected[] = "syntax error, unexpected %s";
++      static char const yyexpecting[] = ", expecting %s";
++      static char const yyor[] = " or %s";
++      char yyformat[sizeof yyunexpected
++		    + sizeof yyexpecting - 1
++		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
++		       * (sizeof yyor - 1))];
++      char const *yyprefix = yyexpecting;
++
++      /* Start YYX at -YYN if negative to avoid negative indexes in
++	 YYCHECK.  */
++      int yyxbegin = yyn < 0 ? -yyn : 0;
++
++      /* Stay within bounds of both yycheck and yytname.  */
++      int yychecklim = YYLAST - yyn + 1;
++      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++      int yycount = 1;
++
++      yyarg[0] = yytname[yytype];
++      yyfmt = yystpcpy (yyformat, yyunexpected);
++
++      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++	  {
++	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++	      {
++		yycount = 1;
++		yysize = yysize0;
++		yyformat[sizeof yyunexpected - 1] = '\0';
++		break;
++	      }
++	    yyarg[yycount++] = yytname[yyx];
++	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++	    yysize_overflow |= (yysize1 < yysize);
++	    yysize = yysize1;
++	    yyfmt = yystpcpy (yyfmt, yyprefix);
++	    yyprefix = yyor;
++	  }
++
++      yyf = YY_(yyformat);
++      yysize1 = yysize + yystrlen (yyf);
++      yysize_overflow |= (yysize1 < yysize);
++      yysize = yysize1;
+ 
+-  switch (yytype)
+-    {
+-      default:
+-        break;
++      if (yysize_overflow)
++	return YYSIZE_MAXIMUM;
++
++      if (yyresult)
++	{
++	  /* Avoid sprintf, as that infringes on the user's name space.
++	     Don't have undefined behavior even if the translation
++	     produced a string with the wrong number of "%s"s.  */
++	  char *yyp = yyresult;
++	  int yyi = 0;
++	  while ((*yyp = *yyf) != '\0')
++	    {
++	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
++		{
++		  yyp += yytnamerr (yyp, yyarg[yyi++]);
++		  yyf += 2;
++		}
++	      else
++		{
++		  yyp++;
++		  yyf++;
++		}
++	    }
++	}
++      return yysize;
+     }
+-  YYFPRINTF (yyoutput, ")");
+ }
++#endif /* YYERROR_VERBOSE */
++
+ 
+-#endif /* ! YYDEBUG */
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+ `-----------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yydestruct (int yytype, YYSTYPE *yyvaluep)
++yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+ #else
+ static void
+-yydestruct (yytype, yyvaluep)
++yydestruct (yymsg, yytype, yyvaluep)
++    const char *yymsg;
+     int yytype;
+     YYSTYPE *yyvaluep;
+ #endif
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  YYUSE (yyvaluep);
++
++  if (!yymsg)
++    yymsg = "Deleting";
++  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ 
+   switch (yytype)
+     {
+ 
+       default:
+-        break;
++	break;
+     }
+ }
+ 
+@@ -3660,13 +3987,13 @@
+ /* Prevent warnings from -Wmissing-prototypes.  */
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void *YYPARSE_PARAM);
+-# else
++#else
+ int yyparse ();
+-# endif
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void);
+ #else
+ int yyparse ();
+@@ -3675,10 +4002,10 @@
+ 
+ 
+ 
+-/* The lookahead symbol.  */
++/* The look-ahead symbol.  */
+ int yychar;
+ 
+-/* The semantic value of the lookahead symbol.  */
++/* The semantic value of the look-ahead symbol.  */
+ YYSTYPE yylval;
+ 
+ /* Number of syntax errors so far.  */
+@@ -3691,14 +4018,18 @@
+ `----------*/
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
+-int yyparse (void *YYPARSE_PARAM)
+-# else
+-int yyparse (YYPARSE_PARAM)
+-  void *YYPARSE_PARAM;
+-# endif
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++int
++yyparse (void *YYPARSE_PARAM)
++#else
++int
++yyparse (YYPARSE_PARAM)
++    void *YYPARSE_PARAM;
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ int
+ yyparse (void)
+ #else
+@@ -3709,13 +4040,19 @@
+ #endif
+ {
+   
+-  register int yystate;
+-  register int yyn;
++  int yystate;
++  int yyn;
+   int yyresult;
+   /* Number of tokens to shift before error messages enabled.  */
+   int yyerrstatus;
+-  /* Lookahead token as an internal (translated) token number.  */
++  /* Look-ahead token as an internal (translated) token number.  */
+   int yytoken = 0;
++#if YYERROR_VERBOSE
++  /* Buffer for error messages, and its allocated size.  */
++  char yymsgbuf[128];
++  char *yymsg = yymsgbuf;
++  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
++#endif
+ 
+   /* Three stacks and their tools:
+      `yyss': related to states,
+@@ -3726,18 +4063,18 @@
+      to reallocate them elsewhere.  */
+ 
+   /* The state stack.  */
+-  short	yyssa[YYINITDEPTH];
+-  short *yyss = yyssa;
+-  register short *yyssp;
++  yytype_int16 yyssa[YYINITDEPTH];
++  yytype_int16 *yyss = yyssa;
++  yytype_int16 *yyssp;
+ 
+   /* The semantic value stack.  */
+   YYSTYPE yyvsa[YYINITDEPTH];
+   YYSTYPE *yyvs = yyvsa;
+-  register YYSTYPE *yyvsp;
++  YYSTYPE *yyvsp;
+ 
+ 
+ 
+-#define YYPOPSTACK   (yyvsp--, yyssp--)
++#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+ 
+   YYSIZE_T yystacksize = YYINITDEPTH;
+ 
+@@ -3746,9 +4083,9 @@
+   YYSTYPE yyval;
+ 
+ 
+-  /* When reducing, the number of symbols on the RHS of the reduced
+-     rule.  */
+-  int yylen;
++  /* The number of symbols on the RHS of the reduced rule.
++     Keep to zero when no symbol should be popped.  */
++  int yylen = 0;
+ 
+   YYDPRINTF ((stderr, "Starting parse\n"));
+ 
+@@ -3772,8 +4109,7 @@
+ `------------------------------------------------------------*/
+  yynewstate:
+   /* In all cases, when you get here, the value and location stacks
+-     have just been pushed. so pushing a state here evens the stacks.
+-     */
++     have just been pushed.  So pushing a state here evens the stacks.  */
+   yyssp++;
+ 
+  yysetstate:
+@@ -3786,18 +4122,18 @@
+ 
+ #ifdef yyoverflow
+       {
+-	/* Give user a chance to reallocate the stack. Use copies of
++	/* Give user a chance to reallocate the stack.  Use copies of
+ 	   these so that the &'s don't force the real ones into
+ 	   memory.  */
+ 	YYSTYPE *yyvs1 = yyvs;
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 
+ 
+ 	/* Each stack pointer address is followed by the size of the
+ 	   data in use in that stack, in bytes.  This used to be a
+ 	   conditional around just the two extra args, but that might
+ 	   be undefined if yyoverflow is a macro.  */
+-	yyoverflow ("parser stack overflow",
++	yyoverflow (YY_("memory exhausted"),
+ 		    &yyss1, yysize * sizeof (*yyssp),
+ 		    &yyvs1, yysize * sizeof (*yyvsp),
+ 
+@@ -3808,21 +4144,21 @@
+       }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+-      goto yyoverflowlab;
++      goto yyexhaustedlab;
+ # else
+       /* Extend the stack our own way.  */
+       if (YYMAXDEPTH <= yystacksize)
+-	goto yyoverflowlab;
++	goto yyexhaustedlab;
+       yystacksize *= 2;
+       if (YYMAXDEPTH < yystacksize)
+ 	yystacksize = YYMAXDEPTH;
+ 
+       {
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 	union yyalloc *yyptr =
+ 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ 	if (! yyptr)
+-	  goto yyoverflowlab;
++	  goto yyexhaustedlab;
+ 	YYSTACK_RELOCATE (yyss);
+ 	YYSTACK_RELOCATE (yyvs);
+ 
+@@ -3853,19 +4189,17 @@
+ `-----------*/
+ yybackup:
+ 
+-/* Do appropriate processing given the current state.  */
+-/* Read a lookahead token if we need one and don't already have one.  */
+-/* yyresume: */
+-
+-  /* First try to decide what to do without reference to lookahead token.  */
++  /* Do appropriate processing given the current state.  Read a
++     look-ahead token if we need one and don't already have one.  */
+ 
++  /* First try to decide what to do without reference to look-ahead token.  */
+   yyn = yypact[yystate];
+   if (yyn == YYPACT_NINF)
+     goto yydefault;
+ 
+-  /* Not known => get a lookahead token if don't already have one.  */
++  /* Not known => get a look-ahead token if don't already have one.  */
+ 
+-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
++  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+   if (yychar == YYEMPTY)
+     {
+       YYDPRINTF ((stderr, "Reading a token: "));
+@@ -3880,7 +4214,7 @@
+   else
+     {
+       yytoken = YYTRANSLATE (yychar);
+-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
++      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+     }
+ 
+   /* If the proper action on seeing token YYTOKEN is to reduce or to
+@@ -3900,22 +4234,21 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  /* Shift the lookahead token.  */
+-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+-
+-  /* Discard the token being shifted unless it is eof.  */
+-  if (yychar != YYEOF)
+-    yychar = YYEMPTY;
+-
+-  *++yyvsp = yylval;
+-
+-
+   /* Count tokens shifted since error; after three, turn off error
+      status.  */
+   if (yyerrstatus)
+     yyerrstatus--;
+ 
++  /* Shift the look-ahead token.  */
++  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
++
++  /* Discard the shifted token unless it is eof.  */
++  if (yychar != YYEOF)
++    yychar = YYEMPTY;
++
+   yystate = yyn;
++  *++yyvsp = yylval;
++
+   goto yynewstate;
+ 
+ 
+@@ -3952,7 +4285,7 @@
+     {
+         case 4:
+ #line 402 "parser.Y"
+-    {FRB->bgColorCmd(yyvsp[0].str);;}
++    {FRB->bgColorCmd((yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 5:
+@@ -3967,12 +4300,12 @@
+ 
+   case 9:
+ #line 408 "parser.Y"
+-    {FRB->colorScaleCmd((FrScale::ColorScaleType)yyvsp[0].integer);;}
++    {FRB->colorScaleCmd((FrScale::ColorScaleType)(yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 12:
+ #line 411 "parser.Y"
+-    {FRB->DATASECCmd(yyvsp[0].integer);;}
++    {FRB->DATASECCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 18:
+@@ -3982,17 +4315,17 @@
+ 
+   case 19:
+ #line 418 "parser.Y"
+-    {FRB->highliteCmd(yyvsp[0].integer);;}
++    {FRB->highliteCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 24:
+ #line 423 "parser.Y"
+-    {FRB->mosaicFastCmd(yyvsp[0].integer);;}
++    {FRB->mosaicFastCmd((yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 25:
+ #line 424 "parser.Y"
+-    {FRB->nanColorCmd(yyvsp[0].str);;}
++    {FRB->nanColorCmd((yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 30:
+@@ -4017,182 +4350,182 @@
+ 
+   case 43:
+ #line 444 "parser.Y"
+-    {yyval.real=yyvsp[0].real;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 44:
+ #line 445 "parser.Y"
+-    {yyval.real=yyvsp[0].integer;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 45:
+ #line 448 "parser.Y"
+-    {yydebug=yyvsp[0].integer;;}
++    {yydebug=(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 46:
+ #line 449 "parser.Y"
+-    {DebugAST=yyvsp[0].integer;;}
++    {DebugAST=(yyvsp[(2) - (2)].integer);;}
+     break;
+ 
+   case 47:
+ #line 450 "parser.Y"
+-    {DebugMosaic=yyvsp[0].integer;;}
++    {DebugMosaic=(yyvsp[(2) - (2)].integer);;}
+     break;
+ 
+   case 48:
+ #line 451 "parser.Y"
+-    {yydebug=yyvsp[0].integer;;}
++    {yydebug=(yyvsp[(2) - (2)].integer);;}
+     break;
+ 
+   case 49:
+ #line 452 "parser.Y"
+-    {DebugPerf=yyvsp[0].integer;;}
++    {DebugPerf=(yyvsp[(2) - (2)].integer);;}
+     break;
+ 
+   case 50:
+ #line 453 "parser.Y"
+-    {DebugWCS=yyvsp[0].integer;;}
++    {DebugWCS=(yyvsp[(2) - (2)].integer);;}
+     break;
+ 
+   case 51:
+ #line 454 "parser.Y"
+-    {DebugBin=yyvsp[0].integer;;}
++    {DebugBin=(yyvsp[(2) - (2)].integer);;}
+     break;
+ 
+   case 52:
+ #line 455 "parser.Y"
+-    {DebugGZ=yyvsp[0].integer;;}
++    {DebugGZ=(yyvsp[(2) - (2)].integer);;}
+     break;
+ 
+   case 53:
+ #line 456 "parser.Y"
+-    {DebugRGB=yyvsp[0].integer;;}
++    {DebugRGB=(yyvsp[(2) - (2)].integer);;}
+     break;
+ 
+   case 54:
+ #line 459 "parser.Y"
+-    {yyval.integer=(yyvsp[0].integer ? 1 : 0);;}
++    {(yyval.integer)=((yyvsp[(1) - (1)].integer) ? 1 : 0);;}
+     break;
+ 
+   case 55:
+ #line 461 "parser.Y"
+-    {yyval.integer=1;;}
++    {(yyval.integer)=1;;}
+     break;
+ 
+   case 56:
+ #line 462 "parser.Y"
+-    {yyval.integer=1;;}
++    {(yyval.integer)=1;;}
+     break;
+ 
+   case 57:
+ #line 463 "parser.Y"
+-    {yyval.integer=1;;}
++    {(yyval.integer)=1;;}
+     break;
+ 
+   case 58:
+ #line 464 "parser.Y"
+-    {yyval.integer=1;;}
++    {(yyval.integer)=1;;}
+     break;
+ 
+   case 59:
+ #line 466 "parser.Y"
+-    {yyval.integer=0;;}
++    {(yyval.integer)=0;;}
+     break;
+ 
+   case 60:
+ #line 467 "parser.Y"
+-    {yyval.integer=0;;}
++    {(yyval.integer)=0;;}
+     break;
+ 
+   case 61:
+ #line 468 "parser.Y"
+-    {yyval.integer=0;;}
++    {(yyval.integer)=0;;}
+     break;
+ 
+   case 62:
+ #line 469 "parser.Y"
+-    {yyval.integer=0;;}
++    {(yyval.integer)=0;;}
+     break;
+ 
+   case 63:
+ #line 472 "parser.Y"
+-    {yyval.integer = FrameBase::DEFAULT;;}
++    {(yyval.integer) = FrameBase::DEFAULT;;}
+     break;
+ 
+   case 64:
+ #line 473 "parser.Y"
+-    {yyval.integer = FrameBase::DEFAULT;;}
++    {(yyval.integer) = FrameBase::DEFAULT;;}
+     break;
+ 
+   case 65:
+ #line 474 "parser.Y"
+-    {yyval.integer = FrameBase::FIXED;;}
++    {(yyval.integer) = FrameBase::FIXED;;}
+     break;
+ 
+   case 66:
+ #line 475 "parser.Y"
+-    {yyval.integer = FrameBase::SCIENTIFIC;;}
++    {(yyval.integer) = FrameBase::SCIENTIFIC;;}
+     break;
+ 
+   case 67:
+ #line 476 "parser.Y"
+-    {yyval.integer = FrameBase::INTEGER;;}
++    {(yyval.integer) = FrameBase::INTEGER;;}
+     break;
+ 
+   case 68:
+ #line 479 "parser.Y"
+-    {yyval.integer = FrameBase::ROOTBASE;;}
++    {(yyval.integer) = FrameBase::ROOTBASE;;}
+     break;
+ 
+   case 69:
+ #line 480 "parser.Y"
+-    {yyval.integer = FrameBase::ROOTBASE;;}
++    {(yyval.integer) = FrameBase::ROOTBASE;;}
+     break;
+ 
+   case 70:
+ #line 481 "parser.Y"
+-    {yyval.integer = FrameBase::FULLBASE;;}
++    {(yyval.integer) = FrameBase::FULLBASE;;}
+     break;
+ 
+   case 71:
+ #line 482 "parser.Y"
+-    {yyval.integer = FrameBase::ROOT;;}
++    {(yyval.integer) = FrameBase::ROOT;;}
+     break;
+ 
+   case 72:
+ #line 483 "parser.Y"
+-    {yyval.integer = FrameBase::FULL;;}
++    {(yyval.integer) = FrameBase::FULL;;}
+     break;
+ 
+   case 73:
+ #line 486 "parser.Y"
+-    {yyval.real = 0;;}
++    {(yyval.real) = 0;;}
+     break;
+ 
+   case 74:
+ #line 487 "parser.Y"
+-    {yyval.real = yyvsp[0].real;;}
++    {(yyval.real) = (yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 75:
+ #line 490 "parser.Y"
+-    {yyval.real = degToRad(yyvsp[0].real);;}
++    {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;}
+     break;
+ 
+   case 76:
+ #line 491 "parser.Y"
+-    {yyval.real = degToRad(yyvsp[0].real);;}
++    {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;}
+     break;
+ 
+   case 77:
+ #line 492 "parser.Y"
+-    {yyval.real=yyvsp[0].real;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 78:
+ #line 495 "parser.Y"
+-    {yyval.real = parseDMS(yyvsp[0].str);;}
++    {(yyval.real) = parseDMS((yyvsp[(1) - (1)].str));;}
+     break;
+ 
+   case 79:
+@@ -4200,13 +4533,13 @@
+     {
+ 	  Vector r;
+ 	  if (currentSky == GALACTIC || currentSky == ECLIPTIC) 
+-	    r = Vector(yyvsp[-1].real,yyvsp[0].real);
++	    r = Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real));
+ 	  else
+-	    r = Vector(yyvsp[-1].real*360./24.,yyvsp[0].real);
++	    r = Vector((yyvsp[(1) - (2)].real)*360./24.,(yyvsp[(2) - (2)].real));
+ 
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -4218,12 +4551,12 @@
+   case 81:
+ #line 511 "parser.Y"
+     {
+-	  Vector r = Vector(hmsToDegree(frsign2,yyvsp[-6].integer,yyvsp[-5].integer,yyvsp[-4].real), 
+-	    dmsToDegree(frsign,yyvsp[-2].integer,yyvsp[-1].real,yyvsp[0].real));
++	  Vector r = Vector(hmsToDegree(frsign2,(yyvsp[(1) - (7)].integer),(yyvsp[(2) - (7)].integer),(yyvsp[(3) - (7)].real)), 
++	    dmsToDegree(frsign,(yyvsp[(5) - (7)].integer),(yyvsp[(6) - (7)].real),(yyvsp[(7) - (7)].real)));
+ 
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -4235,377 +4568,377 @@
+   case 83:
+ #line 520 "parser.Y"
+     {
+-	  Vector r = Vector(dmsToDegree(frsign2,yyvsp[-6].integer,yyvsp[-5].real,yyvsp[-4].real),
+-	    dmsToDegree(frsign,yyvsp[-2].integer,yyvsp[-1].real,yyvsp[0].real));
++	  Vector r = Vector(dmsToDegree(frsign2,(yyvsp[(1) - (7)].integer),(yyvsp[(2) - (7)].real),(yyvsp[(3) - (7)].real)),
++	    dmsToDegree(frsign,(yyvsp[(5) - (7)].integer),(yyvsp[(6) - (7)].real),(yyvsp[(7) - (7)].real)));
+ 
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 84:
+ #line 529 "parser.Y"
+     {
+-	  yyval.vector[0] = yyvsp[-1].real;
+-	  yyval.vector[1] = yyvsp[0].real;
+-	  yyval.vector[2] = 1;
++	  (yyval.vector)[0] = (yyvsp[(1) - (2)].real);
++	  (yyval.vector)[1] = (yyvsp[(2) - (2)].real);
++	  (yyval.vector)[2] = 1;
+ 	;}
+     break;
+ 
+   case 85:
+ #line 536 "parser.Y"
+-    {yyval.integer = currentCoord = IMAGE;;}
++    {(yyval.integer) = currentCoord = IMAGE;;}
+     break;
+ 
+   case 86:
+ #line 537 "parser.Y"
+-    {yyval.integer = currentCoord = PHYSICAL;;}
++    {(yyval.integer) = currentCoord = PHYSICAL;;}
+     break;
+ 
+   case 87:
+ #line 538 "parser.Y"
+-    {yyval.integer = currentCoord = DETECTOR;;}
++    {(yyval.integer) = currentCoord = DETECTOR;;}
+     break;
+ 
+   case 88:
+ #line 539 "parser.Y"
+-    {yyval.integer = currentCoord = AMPLIFIER;;}
++    {(yyval.integer) = currentCoord = AMPLIFIER;;}
+     break;
+ 
+   case 89:
+ #line 540 "parser.Y"
+-    {yyval.integer = (CoordSystem)yyvsp[0].integer;;}
++    {(yyval.integer) = (CoordSystem)(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 90:
+ #line 543 "parser.Y"
+-    {yyval.integer = currentCoord = WCS;;}
++    {(yyval.integer) = currentCoord = WCS;;}
+     break;
+ 
+   case 91:
+ #line 544 "parser.Y"
+-    {yyval.integer = currentCoord = WCSA;;}
++    {(yyval.integer) = currentCoord = WCSA;;}
+     break;
+ 
+   case 92:
+ #line 545 "parser.Y"
+-    {yyval.integer = currentCoord = WCSB;;}
++    {(yyval.integer) = currentCoord = WCSB;;}
+     break;
+ 
+   case 93:
+ #line 546 "parser.Y"
+-    {yyval.integer = currentCoord = WCSC;;}
++    {(yyval.integer) = currentCoord = WCSC;;}
+     break;
+ 
+   case 94:
+ #line 547 "parser.Y"
+-    {yyval.integer = currentCoord = WCSD;;}
++    {(yyval.integer) = currentCoord = WCSD;;}
+     break;
+ 
+   case 95:
+ #line 548 "parser.Y"
+-    {yyval.integer = currentCoord = WCSE;;}
++    {(yyval.integer) = currentCoord = WCSE;;}
+     break;
+ 
+   case 96:
+ #line 549 "parser.Y"
+-    {yyval.integer = currentCoord = WCSF;;}
++    {(yyval.integer) = currentCoord = WCSF;;}
+     break;
+ 
+   case 97:
+ #line 550 "parser.Y"
+-    {yyval.integer = currentCoord = WCSG;;}
++    {(yyval.integer) = currentCoord = WCSG;;}
+     break;
+ 
+   case 98:
+ #line 551 "parser.Y"
+-    {yyval.integer = currentCoord = WCSH;;}
++    {(yyval.integer) = currentCoord = WCSH;;}
+     break;
+ 
+   case 99:
+ #line 552 "parser.Y"
+-    {yyval.integer = currentCoord = WCSI;;}
++    {(yyval.integer) = currentCoord = WCSI;;}
+     break;
+ 
+   case 100:
+ #line 553 "parser.Y"
+-    {yyval.integer = currentCoord = WCSJ;;}
++    {(yyval.integer) = currentCoord = WCSJ;;}
+     break;
+ 
+   case 101:
+ #line 554 "parser.Y"
+-    {yyval.integer = currentCoord = WCSK;;}
++    {(yyval.integer) = currentCoord = WCSK;;}
+     break;
+ 
+   case 102:
+ #line 555 "parser.Y"
+-    {yyval.integer = currentCoord = WCSL;;}
++    {(yyval.integer) = currentCoord = WCSL;;}
+     break;
+ 
+   case 103:
+ #line 556 "parser.Y"
+-    {yyval.integer = currentCoord = WCSM;;}
++    {(yyval.integer) = currentCoord = WCSM;;}
+     break;
+ 
+   case 104:
+ #line 557 "parser.Y"
+-    {yyval.integer = currentCoord = WCSN;;}
++    {(yyval.integer) = currentCoord = WCSN;;}
+     break;
+ 
+   case 105:
+ #line 558 "parser.Y"
+-    {yyval.integer = currentCoord = WCSO;;}
++    {(yyval.integer) = currentCoord = WCSO;;}
+     break;
+ 
+   case 106:
+ #line 559 "parser.Y"
+-    {yyval.integer = currentCoord = WCSP;;}
++    {(yyval.integer) = currentCoord = WCSP;;}
+     break;
+ 
+   case 107:
+ #line 560 "parser.Y"
+-    {yyval.integer = currentCoord = WCSQ;;}
++    {(yyval.integer) = currentCoord = WCSQ;;}
+     break;
+ 
+   case 108:
+ #line 561 "parser.Y"
+-    {yyval.integer = currentCoord = WCSR;;}
++    {(yyval.integer) = currentCoord = WCSR;;}
+     break;
+ 
+   case 109:
+ #line 562 "parser.Y"
+-    {yyval.integer = currentCoord = WCSS;;}
++    {(yyval.integer) = currentCoord = WCSS;;}
+     break;
+ 
+   case 110:
+ #line 563 "parser.Y"
+-    {yyval.integer = currentCoord = WCST;;}
++    {(yyval.integer) = currentCoord = WCST;;}
+     break;
+ 
+   case 111:
+ #line 564 "parser.Y"
+-    {yyval.integer = currentCoord = WCSU;;}
++    {(yyval.integer) = currentCoord = WCSU;;}
+     break;
+ 
+   case 112:
+ #line 565 "parser.Y"
+-    {yyval.integer = currentCoord = WCSV;;}
++    {(yyval.integer) = currentCoord = WCSV;;}
+     break;
+ 
+   case 113:
+ #line 566 "parser.Y"
+-    {yyval.integer = currentCoord = WCSW;;}
++    {(yyval.integer) = currentCoord = WCSW;;}
+     break;
+ 
+   case 114:
+ #line 567 "parser.Y"
+-    {yyval.integer = currentCoord = WCSX;;}
++    {(yyval.integer) = currentCoord = WCSX;;}
+     break;
+ 
+   case 115:
+ #line 568 "parser.Y"
+-    {yyval.integer = currentCoord = WCSY;;}
++    {(yyval.integer) = currentCoord = WCSY;;}
+     break;
+ 
+   case 116:
+ #line 569 "parser.Y"
+-    {yyval.integer = currentCoord = WCSZ;;}
++    {(yyval.integer) = currentCoord = WCSZ;;}
+     break;
+ 
+   case 117:
+ #line 572 "parser.Y"
+-    {yyval.integer = CANVAS;;}
++    {(yyval.integer) = CANVAS;;}
+     break;
+ 
+   case 118:
+ #line 573 "parser.Y"
+-    {yyval.integer = PANNER;;}
++    {(yyval.integer) = PANNER;;}
+     break;
+ 
+   case 119:
+ #line 576 "parser.Y"
+-    {yyval.integer = currentSky = FK5;;}
++    {(yyval.integer) = currentSky = FK5;;}
+     break;
+ 
+   case 120:
+ #line 577 "parser.Y"
+-    {yyval.integer = currentSky = FK4;;}
++    {(yyval.integer) = currentSky = FK4;;}
+     break;
+ 
+   case 121:
+ #line 578 "parser.Y"
+-    {yyval.integer = currentSky = FK4;;}
++    {(yyval.integer) = currentSky = FK4;;}
+     break;
+ 
+   case 122:
+ #line 579 "parser.Y"
+-    {yyval.integer = currentSky = FK5;;}
++    {(yyval.integer) = currentSky = FK5;;}
+     break;
+ 
+   case 123:
+ #line 580 "parser.Y"
+-    {yyval.integer = currentSky = FK5;;}
++    {(yyval.integer) = currentSky = FK5;;}
+     break;
+ 
+   case 124:
+ #line 581 "parser.Y"
+-    {yyval.integer = currentSky = ICRS;;}
++    {(yyval.integer) = currentSky = ICRS;;}
+     break;
+ 
+   case 125:
+ #line 582 "parser.Y"
+-    {yyval.integer = currentSky = GALACTIC;;}
++    {(yyval.integer) = currentSky = GALACTIC;;}
+     break;
+ 
+   case 126:
+ #line 583 "parser.Y"
+-    {yyval.integer = currentSky = ECLIPTIC;;}
++    {(yyval.integer) = currentSky = ECLIPTIC;;}
+     break;
+ 
+   case 127:
+ #line 586 "parser.Y"
+-    {yyval.integer=DEGREES;;}
++    {(yyval.integer)=DEGREES;;}
+     break;
+ 
+   case 128:
+ #line 587 "parser.Y"
+-    {yyval.integer=DEGREES;;}
++    {(yyval.integer)=DEGREES;;}
+     break;
+ 
+   case 129:
+ #line 588 "parser.Y"
+-    {yyval.integer=SEXAGESIMAL;;}
++    {(yyval.integer)=SEXAGESIMAL;;}
+     break;
+ 
+   case 130:
+ #line 589 "parser.Y"
+-    {yyval.integer=HMS;;}
++    {(yyval.integer)=HMS;;}
+     break;
+ 
+   case 131:
+ #line 590 "parser.Y"
+-    {yyval.integer=ARCMIN;;}
++    {(yyval.integer)=ARCMIN;;}
+     break;
+ 
+   case 132:
+ #line 591 "parser.Y"
+-    {yyval.integer=ARCSEC;;}
++    {(yyval.integer)=ARCSEC;;}
+     break;
+ 
+   case 133:
+ #line 594 "parser.Y"
+-    {yyval.integer = FrScale::LINEARSCALE;;}
++    {(yyval.integer) = FrScale::LINEARSCALE;;}
+     break;
+ 
+   case 134:
+ #line 595 "parser.Y"
+-    {yyval.integer = FrScale::LOGSCALE;;}
++    {(yyval.integer) = FrScale::LOGSCALE;;}
+     break;
+ 
+   case 135:
+ #line 596 "parser.Y"
+-    {yyval.integer = FrScale::SQUAREDSCALE;;}
++    {(yyval.integer) = FrScale::SQUAREDSCALE;;}
+     break;
+ 
+   case 136:
+ #line 597 "parser.Y"
+-    {yyval.integer = FrScale::SQRTSCALE;;}
++    {(yyval.integer) = FrScale::SQRTSCALE;;}
+     break;
+ 
+   case 137:
+ #line 598 "parser.Y"
+-    {yyval.integer = FrScale::HISTEQUSCALE;;}
++    {(yyval.integer) = FrScale::HISTEQUSCALE;;}
+     break;
+ 
+   case 138:
+ #line 601 "parser.Y"
+-    {yyval.integer = FrameBase::SHMID;;}
++    {(yyval.integer) = FrameBase::SHMID;;}
+     break;
+ 
+   case 139:
+ #line 602 "parser.Y"
+-    {yyval.integer = FrameBase::SHMID;;}
++    {(yyval.integer) = FrameBase::SHMID;;}
+     break;
+ 
+   case 140:
+ #line 603 "parser.Y"
+-    {yyval.integer = FrameBase::KEY;;}
++    {(yyval.integer) = FrameBase::KEY;;}
+     break;
+ 
+   case 141:
+ #line 606 "parser.Y"
+-    {yyval.integer = FrameBase::LOADALL;;}
++    {(yyval.integer) = FrameBase::LOADALL;;}
+     break;
+ 
+   case 142:
+ #line 607 "parser.Y"
+-    {yyval.integer = FrameBase::LOADALL;;}
++    {(yyval.integer) = FrameBase::LOADALL;;}
+     break;
+ 
+   case 143:
+ #line 608 "parser.Y"
+-    {yyval.integer = FrameBase::INCR;;}
++    {(yyval.integer) = FrameBase::INCR;;}
+     break;
+ 
+   case 144:
+ #line 611 "parser.Y"
+-    {yyval.integer = FrameBase::NOCOMPRESS;;}
++    {(yyval.integer) = FrameBase::NOCOMPRESS;;}
+     break;
+ 
+   case 145:
+ #line 612 "parser.Y"
+-    {yyval.integer = FrameBase::NOCOMPRESS;;}
++    {(yyval.integer) = FrameBase::NOCOMPRESS;;}
+     break;
+ 
+   case 146:
+ #line 613 "parser.Y"
+-    {yyval.integer = FrameBase::GZ;;}
++    {(yyval.integer) = FrameBase::GZ;;}
+     break;
+ 
+   case 147:
+ #line 616 "parser.Y"
+-    {FRB->binAboutCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->binAboutCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 148:
+ #line 617 "parser.Y"
+-    {FRB->binColsCmd(yyvsp[-2].str,yyvsp[-1].str,yyvsp[0].str);;}
++    {FRB->binColsCmd((yyvsp[(2) - (4)].str),(yyvsp[(3) - (4)].str),(yyvsp[(4) - (4)].str));;}
+     break;
+ 
+   case 149:
+ #line 618 "parser.Y"
+-    {FRB->binDepthCmd(yyvsp[0].integer);;}
++    {FRB->binDepthCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 152:
+ #line 621 "parser.Y"
+-    {FRB->binBufferSizeCmd(yyvsp[0].integer);;}
++    {FRB->binBufferSizeCmd((yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 154:
+ #line 623 "parser.Y"
+-    {FRB->binFilterCmd(yyvsp[0].str);;}
++    {FRB->binFilterCmd((yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 155:
+ #line 626 "parser.Y"
+-    {FRB->binFactorCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->binFactorCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;}
+     break;
+ 
+   case 156:
+ #line 628 "parser.Y"
+-    {FRB->binFactorAboutCmd(Vector(yyvsp[-4].real,yyvsp[-3].real), Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->binFactorAboutCmd(Vector((yyvsp[(1) - (5)].real),(yyvsp[(2) - (5)].real)), Vector((yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].real)));;}
+     break;
+ 
+   case 157:
+ #line 629 "parser.Y"
+-    {FRB->binFactorToCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->binFactorToCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 158:
+ #line 631 "parser.Y"
+-    {FRB->binFactorToAboutCmd(Vector(yyvsp[-4].real,yyvsp[-3].real), Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->binFactorToAboutCmd(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real)), Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;}
+     break;
+ 
+   case 159:
+@@ -4625,48 +4958,48 @@
+ 
+   case 162:
+ #line 640 "parser.Y"
+-    {FRB->binCmd(Vector(yyvsp[-6].real,yyvsp[-5].real), yyvsp[-2].str, yyvsp[-1].str, yyvsp[0].str);;}
++    {FRB->binCmd(Vector((yyvsp[(1) - (7)].real),(yyvsp[(2) - (7)].real)), (yyvsp[(5) - (7)].str), (yyvsp[(6) - (7)].str), (yyvsp[(7) - (7)].str));;}
+     break;
+ 
+   case 163:
+ #line 643 "parser.Y"
+-    {FRB->binCmd(Vector(yyvsp[-10].real,yyvsp[-9].real), yyvsp[-8].integer, Vector(yyvsp[-7].real,yyvsp[-6].real), yyvsp[-3].str, yyvsp[-2].str, yyvsp[-1].str, yyvsp[0].str);;}
++    {FRB->binCmd(Vector((yyvsp[(1) - (11)].real),(yyvsp[(2) - (11)].real)), (yyvsp[(3) - (11)].integer), Vector((yyvsp[(4) - (11)].real),(yyvsp[(5) - (11)].real)), (yyvsp[(8) - (11)].str), (yyvsp[(9) - (11)].str), (yyvsp[(10) - (11)].str), (yyvsp[(11) - (11)].str));;}
+     break;
+ 
+   case 164:
+ #line 645 "parser.Y"
+-    {FRB->binCmd(Vector(yyvsp[-7].real,yyvsp[-6].real), Vector(yyvsp[-4].real,yyvsp[-3].real), yyvsp[-2].str, yyvsp[-1].str, yyvsp[0].str);;}
++    {FRB->binCmd(Vector((yyvsp[(1) - (8)].real),(yyvsp[(2) - (8)].real)), Vector((yyvsp[(4) - (8)].real),(yyvsp[(5) - (8)].real)), (yyvsp[(6) - (8)].str), (yyvsp[(7) - (8)].str), (yyvsp[(8) - (8)].str));;}
+     break;
+ 
+   case 165:
+ #line 648 "parser.Y"
+-    {FRB->binCmd(Vector(yyvsp[-11].real,yyvsp[-10].real), yyvsp[-9].integer, Vector(yyvsp[-8].real,yyvsp[-7].real), Vector(yyvsp[-5].real,yyvsp[-4].real), 
+-	    yyvsp[-3].str, yyvsp[-2].str, yyvsp[-1].str, yyvsp[0].str);;}
++    {FRB->binCmd(Vector((yyvsp[(1) - (12)].real),(yyvsp[(2) - (12)].real)), (yyvsp[(3) - (12)].integer), Vector((yyvsp[(4) - (12)].real),(yyvsp[(5) - (12)].real)), Vector((yyvsp[(7) - (12)].real),(yyvsp[(8) - (12)].real)), 
++	    (yyvsp[(9) - (12)].str), (yyvsp[(10) - (12)].str), (yyvsp[(11) - (12)].str), (yyvsp[(12) - (12)].str));;}
+     break;
+ 
+   case 170:
+ #line 656 "parser.Y"
+-    {FRB->clipZScaleParamCmd(yyvsp[-2].real,yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FRB->clipZScaleParamCmd((yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 171:
+ #line 657 "parser.Y"
+-    {FRB->clipPreserveCmd(yyvsp[0].integer);;}
++    {FRB->clipPreserveCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 172:
+ #line 660 "parser.Y"
+-    {FRB->clipUserCmd(yyvsp[-1].real,yyvsp[0].real);;}
++    {FRB->clipUserCmd((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real));;}
+     break;
+ 
+   case 173:
+ #line 661 "parser.Y"
+-    {FRB->clipUserLowCmd(yyvsp[0].real);;}
++    {FRB->clipUserLowCmd((yyvsp[(2) - (2)].real));;}
+     break;
+ 
+   case 174:
+ #line 662 "parser.Y"
+-    {FRB->clipUserHighCmd(yyvsp[0].real);;}
++    {FRB->clipUserHighCmd((yyvsp[(2) - (2)].real));;}
+     break;
+ 
+   case 175:
+@@ -4681,7 +5014,7 @@
+ 
+   case 177:
+ #line 669 "parser.Y"
+-    {FRB->clipModeCmd(yyvsp[0].real);;}
++    {FRB->clipModeCmd((yyvsp[(1) - (1)].real));;}
+     break;
+ 
+   case 178:
+@@ -4706,7 +5039,7 @@
+ 
+   case 183:
+ #line 677 "parser.Y"
+-    {FRB->clipMinMaxParamCmd(yyvsp[0].integer);;}
++    {FRB->clipMinMaxParamCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 184:
+@@ -4736,40 +5069,40 @@
+ 
+   case 189:
+ #line 688 "parser.Y"
+-    {FR->colormapCmd(yyvsp[-6].integer, yyvsp[-5].real, yyvsp[-4].real, yyvsp[-3].integer, (unsigned short*)yyvsp[-2].ptr, 
+-	    (unsigned char*)yyvsp[-1].ptr, yyvsp[0].integer);;}
++    {FR->colormapCmd((yyvsp[(1) - (7)].integer), (yyvsp[(2) - (7)].real), (yyvsp[(3) - (7)].real), (yyvsp[(4) - (7)].integer), (unsigned short*)(yyvsp[(5) - (7)].ptr), 
++	    (unsigned char*)(yyvsp[(6) - (7)].ptr), (yyvsp[(7) - (7)].integer));;}
+     break;
+ 
+   case 190:
+ #line 691 "parser.Y"
+-    {FRRGB->colormapCmd(yyvsp[-7].real,yyvsp[-6].real,yyvsp[-5].real,yyvsp[-4].real,yyvsp[-3].real,yyvsp[-2].real,(unsigned char*)yyvsp[-1].ptr,yyvsp[0].integer);;}
++    {FRRGB->colormapCmd((yyvsp[(2) - (9)].real),(yyvsp[(3) - (9)].real),(yyvsp[(4) - (9)].real),(yyvsp[(5) - (9)].real),(yyvsp[(6) - (9)].real),(yyvsp[(7) - (9)].real),(unsigned char*)(yyvsp[(8) - (9)].ptr),(yyvsp[(9) - (9)].integer));;}
+     break;
+ 
+   case 191:
+ #line 693 "parser.Y"
+-    {FRB->colormapAreaCmd(yyvsp[-1].integer,(FrameBase::ColormapMode)yyvsp[0].integer);;}
++    {FRB->colormapAreaCmd((yyvsp[(2) - (3)].integer),(FrameBase::ColormapMode)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 193:
+ #line 696 "parser.Y"
+-    {FR->colormapMotionCmd(yyvsp[-6].integer, yyvsp[-5].real, yyvsp[-4].real, yyvsp[-3].integer, (unsigned short*)yyvsp[-2].ptr,
+-	    (unsigned char*)yyvsp[-1].ptr, yyvsp[0].integer);;}
++    {FR->colormapMotionCmd((yyvsp[(2) - (8)].integer), (yyvsp[(3) - (8)].real), (yyvsp[(4) - (8)].real), (yyvsp[(5) - (8)].integer), (unsigned short*)(yyvsp[(6) - (8)].ptr),
++	    (unsigned char*)(yyvsp[(7) - (8)].ptr), (yyvsp[(8) - (8)].integer));;}
+     break;
+ 
+   case 194:
+ #line 700 "parser.Y"
+-    {FRRGB->colormapMotionCmd(yyvsp[-7].real,yyvsp[-6].real,yyvsp[-5].real,yyvsp[-4].real,yyvsp[-3].real,yyvsp[-2].real,(unsigned char*)yyvsp[-1].ptr,yyvsp[0].integer);;}
++    {FRRGB->colormapMotionCmd((yyvsp[(3) - (10)].real),(yyvsp[(4) - (10)].real),(yyvsp[(5) - (10)].real),(yyvsp[(6) - (10)].real),(yyvsp[(7) - (10)].real),(yyvsp[(8) - (10)].real),(unsigned char*)(yyvsp[(9) - (10)].ptr),(yyvsp[(10) - (10)].integer));;}
+     break;
+ 
+   case 195:
+ #line 702 "parser.Y"
+-    {FR->colormapEndCmd(yyvsp[-6].integer, yyvsp[-5].real, yyvsp[-4].real, yyvsp[-3].integer, (unsigned short*)yyvsp[-2].ptr,
+-	    (unsigned char*)yyvsp[-1].ptr, yyvsp[0].integer);;}
++    {FR->colormapEndCmd((yyvsp[(2) - (8)].integer), (yyvsp[(3) - (8)].real), (yyvsp[(4) - (8)].real), (yyvsp[(5) - (8)].integer), (unsigned short*)(yyvsp[(6) - (8)].ptr),
++	    (unsigned char*)(yyvsp[(7) - (8)].ptr), (yyvsp[(8) - (8)].integer));;}
+     break;
+ 
+   case 196:
+ #line 705 "parser.Y"
+-    {FRRGB->colormapEndCmd(yyvsp[-7].real,yyvsp[-6].real,yyvsp[-5].real,yyvsp[-4].real,yyvsp[-3].real,yyvsp[-2].real,(unsigned char*)yyvsp[-1].ptr,yyvsp[0].integer);;}
++    {FRRGB->colormapEndCmd((yyvsp[(3) - (10)].real),(yyvsp[(4) - (10)].real),(yyvsp[(5) - (10)].real),(yyvsp[(6) - (10)].real),(yyvsp[(7) - (10)].real),(yyvsp[(8) - (10)].real),(unsigned char*)(yyvsp[(9) - (10)].ptr),(yyvsp[(10) - (10)].integer));;}
+     break;
+ 
+   case 197:
+@@ -4779,27 +5112,27 @@
+ 
+   case 198:
+ #line 709 "parser.Y"
+-    {FRB->colormapBeginCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->colormapBeginCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;}
+     break;
+ 
+   case 199:
+ #line 712 "parser.Y"
+-    {yyval.integer = FrameBase::CENTER;;}
++    {(yyval.integer) = FrameBase::CENTER;;}
+     break;
+ 
+   case 200:
+ #line 713 "parser.Y"
+-    {yyval.integer = FrameBase::CLICK;;}
++    {(yyval.integer) = FrameBase::CLICK;;}
+     break;
+ 
+   case 201:
+ #line 716 "parser.Y"
+-    {FRB->contourSetColorCmd(yyvsp[0].str);;}
++    {FRB->contourSetColorCmd((yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 202:
+ #line 718 "parser.Y"
+-    {FRB->contourCopyCmd((CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->contourCopyCmd((CoordSystem)(yyvsp[(2) - (3)].integer), (SkyFrame)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 204:
+@@ -4814,32 +5147,32 @@
+ 
+   case 206:
+ #line 723 "parser.Y"
+-    {FRB->contourLoadCmd(yyvsp[-4].str, yyvsp[-3].integer, yyvsp[-2].str, (CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->contourLoadCmd((yyvsp[(2) - (6)].str), (yyvsp[(3) - (6)].integer), (yyvsp[(4) - (6)].str), (CoordSystem)(yyvsp[(5) - (6)].integer), (SkyFrame)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 207:
+ #line 725 "parser.Y"
+-    {FRB->contourPasteCmd(yyvsp[-4].str, yyvsp[-3].integer, yyvsp[-2].ptr, (CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->contourPasteCmd((yyvsp[(2) - (6)].str), (yyvsp[(3) - (6)].integer), (yyvsp[(4) - (6)].ptr), (CoordSystem)(yyvsp[(5) - (6)].integer), (SkyFrame)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 208:
+ #line 727 "parser.Y"
+-    {FRB->contourSaveCmd(yyvsp[-2].str, (CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->contourSaveCmd((yyvsp[(2) - (4)].str), (CoordSystem)(yyvsp[(3) - (4)].integer), (SkyFrame)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 209:
+ #line 728 "parser.Y"
+-    {FRB->contourSetLineWidthCmd(yyvsp[0].integer);;}
++    {FRB->contourSetLineWidthCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 210:
+ #line 732 "parser.Y"
+-    {FRB->contourCreateCmd(yyvsp[-4].str,yyvsp[-3].integer,yyvsp[-2].integer,yyvsp[-1].real,yyvsp[0].integer);;}
++    {FRB->contourCreateCmd((yyvsp[(1) - (5)].str),(yyvsp[(2) - (5)].integer),(yyvsp[(3) - (5)].integer),(yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 211:
+ #line 734 "parser.Y"
+-    {FRB->contourCreateCmd(yyvsp[-4].str,yyvsp[-3].integer,yyvsp[-2].real,yyvsp[-1].integer,yyvsp[0].str);;}
++    {FRB->contourCreateCmd((yyvsp[(1) - (5)].str),(yyvsp[(2) - (5)].integer),(yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].str));;}
+     break;
+ 
+   case 212:
+@@ -4850,62 +5183,62 @@
+ 
+   case 213:
+ #line 740 "parser.Y"
+-    {yyval.integer = FVContour::SMOOTH;;}
++    {(yyval.integer) = FVContour::SMOOTH;;}
+     break;
+ 
+   case 214:
+ #line 741 "parser.Y"
+-    {yyval.integer = FVContour::BLOCK;;}
++    {(yyval.integer) = FVContour::BLOCK;;}
+     break;
+ 
+   case 215:
+ #line 745 "parser.Y"
+-    {FRB->crosshairBeginCmd(Vector(yyvsp[-1].real,yyvsp[0].real), (InternalSystem)yyvsp[-2].integer);;}
++    {FRB->crosshairBeginCmd(Vector((yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].real)), (InternalSystem)(yyvsp[(3) - (5)].integer));;}
+     break;
+ 
+   case 216:
+ #line 747 "parser.Y"
+-    {FRB->crosshairMotionCmd(Vector(yyvsp[-1].real,yyvsp[0].real), (InternalSystem)yyvsp[-2].integer);;}
++    {FRB->crosshairMotionCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)), (InternalSystem)(yyvsp[(2) - (4)].integer));;}
+     break;
+ 
+   case 217:
+ #line 749 "parser.Y"
+-    {FRB->crosshairCmd(Vector(yyvsp[-1].real,yyvsp[0].real), (InternalSystem)yyvsp[-2].integer);;}
++    {FRB->crosshairCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), (InternalSystem)(yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 218:
+ #line 751 "parser.Y"
+-    {FRB->crosshairBeginCmd(Vector(yyvsp[0].vector), (CoordSystem)yyvsp[-1].integer);;}
++    {FRB->crosshairBeginCmd(Vector((yyvsp[(4) - (4)].vector)), (CoordSystem)(yyvsp[(3) - (4)].integer));;}
+     break;
+ 
+   case 219:
+ #line 753 "parser.Y"
+-    {FRB->crosshairMotionCmd(Vector(yyvsp[0].vector), (CoordSystem)yyvsp[-1].integer);;}
++    {FRB->crosshairMotionCmd(Vector((yyvsp[(3) - (3)].vector)), (CoordSystem)(yyvsp[(2) - (3)].integer));;}
+     break;
+ 
+   case 220:
+ #line 755 "parser.Y"
+-    {FRB->crosshairCmd(Vector(yyvsp[0].vector), (CoordSystem)yyvsp[-2].integer, (SkyFrame)yyvsp[-1].integer);;}
++    {FRB->crosshairCmd(Vector((yyvsp[(3) - (3)].vector)), (CoordSystem)(yyvsp[(1) - (3)].integer), (SkyFrame)(yyvsp[(2) - (3)].integer));;}
+     break;
+ 
+   case 221:
+ #line 756 "parser.Y"
+-    {FRB->crosshairCmd(yyvsp[0].integer);;}
++    {FRB->crosshairCmd((yyvsp[(1) - (1)].integer));;}
+     break;
+ 
+   case 222:
+ #line 757 "parser.Y"
+-    {FRB->crosshairWarpCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->crosshairWarpCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 224:
+ #line 761 "parser.Y"
+-    {FRB->exportJPEGCmd(yyvsp[-1].str,yyvsp[0].real);;}
++    {FRB->exportJPEGCmd((yyvsp[(2) - (3)].str),(yyvsp[(3) - (3)].real));;}
+     break;
+ 
+   case 228:
+ #line 767 "parser.Y"
+-    {FRB->fitsyHasExtCmd(yyvsp[0].str);;}
++    {FRB->fitsyHasExtCmd((yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 229:
+@@ -4940,12 +5273,12 @@
+ 
+   case 244:
+ #line 785 "parser.Y"
+-    {FRB->getHistogramCmd(yyvsp[-1].str,yyvsp[0].str);;}
++    {FRB->getHistogramCmd((yyvsp[(2) - (3)].str),(yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 245:
+ #line 787 "parser.Y"
+-    {FRB->getHorzCutCmd(yyvsp[-4].str,yyvsp[-3].str,Vector(yyvsp[-2].real,yyvsp[-1].real),(InternalSystem)yyvsp[0].integer);;}
++    {FRB->getHorzCutCmd((yyvsp[(3) - (7)].str),(yyvsp[(4) - (7)].str),Vector((yyvsp[(5) - (7)].real),(yyvsp[(6) - (7)].real)),(InternalSystem)(yyvsp[(7) - (7)].integer));;}
+     break;
+ 
+   case 248:
+@@ -4965,7 +5298,7 @@
+ 
+   case 253:
+ #line 796 "parser.Y"
+-    {FRB->getPixelTableCmd(Vector(yyvsp[-3].real,yyvsp[-2].real), (InternalSystem)yyvsp[-4].integer, yyvsp[-1].integer, yyvsp[0].str);;}
++    {FRB->getPixelTableCmd(Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real)), (InternalSystem)(yyvsp[(3) - (7)].integer), (yyvsp[(6) - (7)].integer), (yyvsp[(7) - (7)].str));;}
+     break;
+ 
+   case 257:
+@@ -4975,12 +5308,12 @@
+ 
+   case 258:
+ #line 802 "parser.Y"
+-    {FRB->getValueCmd(Vector(yyvsp[-1].real,yyvsp[0].real),(InternalSystem)yyvsp[-2].integer);;}
++    {FRB->getValueCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)),(InternalSystem)(yyvsp[(2) - (4)].integer));;}
+     break;
+ 
+   case 259:
+ #line 804 "parser.Y"
+-    {FRB->getVertCutCmd(yyvsp[-4].str,yyvsp[-3].str,Vector(yyvsp[-2].real,yyvsp[-1].real),(InternalSystem)yyvsp[0].integer);;}
++    {FRB->getVertCutCmd((yyvsp[(3) - (7)].str),(yyvsp[(4) - (7)].str),Vector((yyvsp[(5) - (7)].real),(yyvsp[(6) - (7)].real)),(InternalSystem)(yyvsp[(7) - (7)].integer));;}
+     break;
+ 
+   case 261:
+@@ -5025,7 +5358,7 @@
+ 
+   case 270:
+ #line 817 "parser.Y"
+-    {FRB->getBinColsMinMaxCmd(yyvsp[0].str);;}
++    {FRB->getBinColsMinMaxCmd((yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 271:
+@@ -5065,7 +5398,7 @@
+ 
+   case 280:
+ #line 831 "parser.Y"
+-    {FRB->getClipCmd(yyvsp[0].real);;}
++    {FRB->getClipCmd((yyvsp[(1) - (1)].real));;}
+     break;
+ 
+   case 281:
+@@ -5100,7 +5433,7 @@
+ 
+   case 287:
+ #line 843 "parser.Y"
+-    {FRB->getContourCmd((CoordSystem)yyvsp[-1].integer,(SkyFrame)yyvsp[0].integer);;}
++    {FRB->getContourCmd((CoordSystem)(yyvsp[(1) - (2)].integer),(SkyFrame)(yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 288:
+@@ -5125,24 +5458,24 @@
+ 
+   case 293:
+ #line 852 "parser.Y"
+-    {FRB->getContourLevelCmd(yyvsp[-3].integer,yyvsp[-2].real,yyvsp[-1].real,(FrScale::ColorScaleType)yyvsp[0].integer);;}
++    {FRB->getContourLevelCmd((yyvsp[(1) - (4)].integer),(yyvsp[(2) - (4)].real),(yyvsp[(3) - (4)].real),(FrScale::ColorScaleType)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 294:
+ #line 856 "parser.Y"
+-    {FRB->getCoordCmd(Vector(yyvsp[-4].real,yyvsp[-3].real), (InternalSystem)yyvsp[-5].integer, (CoordSystem)yyvsp[-2].integer,
+-	    (SkyFrame)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getCoordCmd(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real)), (InternalSystem)(yyvsp[(1) - (6)].integer), (CoordSystem)(yyvsp[(4) - (6)].integer),
++	    (SkyFrame)(yyvsp[(5) - (6)].integer), (SkyFormat)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 295:
+ #line 860 "parser.Y"
+-    {FRB->getCrosshairCmd((InternalSystem)yyvsp[0].integer);;}
++    {FRB->getCrosshairCmd((InternalSystem)(yyvsp[(1) - (1)].integer));;}
+     break;
+ 
+   case 296:
+ #line 862 "parser.Y"
+-    {FRB->getCrosshairCmd((CoordSystem)yyvsp[-3].integer, (SkyFrame)yyvsp[-2].integer, (SkyFormat)yyvsp[-1].integer,
+-	    (FrameBase::Precision)yyvsp[0].integer);}
++    {FRB->getCrosshairCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (SkyFrame)(yyvsp[(2) - (4)].integer), (SkyFormat)(yyvsp[(3) - (4)].integer),
++	    (FrameBase::Precision)(yyvsp[(4) - (4)].integer));}
+     break;
+ 
+   case 297:
+@@ -5152,13 +5485,13 @@
+ 
+   case 298:
+ #line 867 "parser.Y"
+-    {FRB->getCursorCmd((InternalSystem)yyvsp[0].integer);;}
++    {FRB->getCursorCmd((InternalSystem)(yyvsp[(1) - (1)].integer));;}
+     break;
+ 
+   case 299:
+ #line 869 "parser.Y"
+-    {FRB->getCursorCmd((CoordSystem)yyvsp[-3].integer, (SkyFrame)yyvsp[-2].integer, (SkyFormat)yyvsp[-1].integer,
+-	    (FrameBase::Precision)yyvsp[0].integer);;}
++    {FRB->getCursorCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (SkyFrame)(yyvsp[(2) - (4)].integer), (SkyFormat)(yyvsp[(3) - (4)].integer),
++	    (FrameBase::Precision)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 300:
+@@ -5168,36 +5501,36 @@
+ 
+   case 301:
+ #line 875 "parser.Y"
+-    {FRB->getDataValuesCmd(1, Vector(yyvsp[-3].vector), 
+-	    (CoordSystem)yyvsp[-5].integer, (SkyFrame)yyvsp[-4].integer, Vector(yyvsp[-2].real,yyvsp[-1].real), yyvsp[0].str);;}
++    {FRB->getDataValuesCmd(1, Vector((yyvsp[(3) - (6)].vector)), 
++	    (CoordSystem)(yyvsp[(1) - (6)].integer), (SkyFrame)(yyvsp[(2) - (6)].integer), Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real)), (yyvsp[(6) - (6)].str));;}
+     break;
+ 
+   case 302:
+ #line 878 "parser.Y"
+-    {FRB->getDataValuesCmd(yyvsp[-6].integer, Vector(yyvsp[-3].vector), 
+-	    (CoordSystem)yyvsp[-5].integer, (SkyFrame)yyvsp[-4].integer, Vector(yyvsp[-2].real,yyvsp[-1].real), yyvsp[0].str);;}
++    {FRB->getDataValuesCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(4) - (7)].vector)), 
++	    (CoordSystem)(yyvsp[(2) - (7)].integer), (SkyFrame)(yyvsp[(3) - (7)].integer), Vector((yyvsp[(5) - (7)].real),(yyvsp[(6) - (7)].real)), (yyvsp[(7) - (7)].str));;}
+     break;
+ 
+   case 303:
+ #line 881 "parser.Y"
+-    {FRB->getDataValuesCmd(Vector(yyvsp[-3].real,yyvsp[-2].real),(InternalSystem)yyvsp[-4].integer,
+-	    Vector(yyvsp[-1].integer,yyvsp[0].integer));;}
++    {FRB->getDataValuesCmd(Vector((yyvsp[(2) - (5)].real),(yyvsp[(3) - (5)].real)),(InternalSystem)(yyvsp[(1) - (5)].integer),
++	    Vector((yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].integer)));;}
+     break;
+ 
+   case 304:
+ #line 885 "parser.Y"
+-    {FRB->getInfoCmd(yyvsp[0].str);;}
++    {FRB->getInfoCmd((yyvsp[(1) - (1)].str));;}
+     break;
+ 
+   case 305:
+ #line 887 "parser.Y"
+-    {FRB->getInfoCmd(Vector(yyvsp[-4].real,yyvsp[-3].real), (InternalSystem)yyvsp[-5].integer, 
+-	    (SkyFrame)yyvsp[-2].integer, (SkyFormat)yyvsp[-1].integer, yyvsp[0].str);;}
++    {FRB->getInfoCmd(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real)), (InternalSystem)(yyvsp[(1) - (6)].integer), 
++	    (SkyFrame)(yyvsp[(4) - (6)].integer), (SkyFormat)(yyvsp[(5) - (6)].integer), (yyvsp[(6) - (6)].str));;}
+     break;
+ 
+   case 306:
+ #line 891 "parser.Y"
+-    {FR->iisGetCmd((char*)yyvsp[-4].ptr,yyvsp[-3].integer,yyvsp[-2].integer,yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FR->iisGetCmd((char*)(yyvsp[(1) - (5)].ptr),(yyvsp[(2) - (5)].integer),(yyvsp[(3) - (5)].integer),(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 307:
+@@ -5222,12 +5555,12 @@
+ 
+   case 312:
+ #line 899 "parser.Y"
+-    {FRB->iisGetFileNameCmd(yyvsp[0].integer);;}
++    {FRB->iisGetFileNameCmd((yyvsp[(1) - (1)].integer));;}
+     break;
+ 
+   case 313:
+ #line 900 "parser.Y"
+-    {FRB->iisGetFileNameCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->iisGetFileNameCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;}
+     break;
+ 
+   case 314:
+@@ -5237,12 +5570,12 @@
+ 
+   case 316:
+ #line 905 "parser.Y"
+-    {FRB->getFitsHeaderCmd(yyvsp[0].integer);;}
++    {FRB->getFitsHeaderCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 317:
+ #line 906 "parser.Y"
+-    {FRB->getFitsHeaderKeywordCmd(yyvsp[-2].integer,yyvsp[0].str);;}
++    {FRB->getFitsHeaderKeywordCmd((yyvsp[(2) - (4)].integer),(yyvsp[(4) - (4)].str));;}
+     break;
+ 
+   case 319:
+@@ -5257,7 +5590,7 @@
+ 
+   case 321:
+ #line 911 "parser.Y"
+-    {FRB->getFitsSizeCmd((CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getFitsSizeCmd((CoordSystem)(yyvsp[(2) - (3)].integer), (SkyFormat)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 322:
+@@ -5272,18 +5605,18 @@
+ 
+   case 324:
+ #line 917 "parser.Y"
+-    {FRB->getFitsFileNameCmd((FrameBase::FileNameType)yyvsp[0].integer);;}
++    {FRB->getFitsFileNameCmd((FrameBase::FileNameType)(yyvsp[(1) - (1)].integer));;}
+     break;
+ 
+   case 325:
+ #line 919 "parser.Y"
+-    {FRB->getFitsFileNameCmd(Vector(yyvsp[-1].real,yyvsp[0].real), (InternalSystem)yyvsp[-2].integer,
+-	    (FrameBase::FileNameType)yyvsp[-3].integer);;}
++    {FRB->getFitsFileNameCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)), (InternalSystem)(yyvsp[(2) - (4)].integer),
++	    (FrameBase::FileNameType)(yyvsp[(1) - (4)].integer));;}
+     break;
+ 
+   case 326:
+ #line 922 "parser.Y"
+-    {FRB->getFitsFileNameCmd(yyvsp[0].integer, (FrameBase::FileNameType)yyvsp[-2].integer);;}
++    {FRB->getFitsFileNameCmd((yyvsp[(3) - (3)].integer), (FrameBase::FileNameType)(yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 327:
+@@ -5293,7 +5626,7 @@
+ 
+   case 328:
+ #line 926 "parser.Y"
+-    {FRB->getFitsObjectNameCmd(yyvsp[0].integer);;}
++    {FRB->getFitsObjectNameCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 329:
+@@ -5323,7 +5656,7 @@
+ 
+   case 334:
+ #line 938 "parser.Y"
+-    {FRB->getRotateCmd((FrameBase::Precision)yyvsp[0].integer);;}
++    {FRB->getRotateCmd((FrameBase::Precision)(yyvsp[(1) - (1)].integer));;}
+     break;
+ 
+   case 335:
+@@ -5343,23 +5676,23 @@
+ 
+   case 338:
+ #line 947 "parser.Y"
+-    {FRB->getWCSZoomCmd((CoordSystem)yyvsp[-1].integer, (FrameBase::Precision)yyvsp[0].integer);;}
++    {FRB->getWCSZoomCmd((CoordSystem)(yyvsp[(2) - (3)].integer), (FrameBase::Precision)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 339:
+ #line 948 "parser.Y"
+-    {FRB->getWCSNameCmd((CoordSystem)yyvsp[0].integer);;}
++    {FRB->getWCSNameCmd((CoordSystem)(yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 340:
+ #line 951 "parser.Y"
+-    {FRB->getZoomCmd((FrameBase::Precision)yyvsp[0].integer);;}
++    {FRB->getZoomCmd((FrameBase::Precision)(yyvsp[(1) - (1)].integer));;}
+     break;
+ 
+   case 341:
+ #line 955 "parser.Y"
+-    {FRB->gridCmd((CoordSystem)yyvsp[-4].integer, (SkyFrame)yyvsp[-3].integer, (SkyFormat)yyvsp[-2].integer,
+-	     (Grid::GridType)yyvsp[-1].integer, yyvsp[0].str);;}
++    {FRB->gridCmd((CoordSystem)(yyvsp[(2) - (6)].integer), (SkyFrame)(yyvsp[(3) - (6)].integer), (SkyFormat)(yyvsp[(4) - (6)].integer),
++	     (Grid::GridType)(yyvsp[(5) - (6)].integer), (yyvsp[(6) - (6)].str));;}
+     break;
+ 
+   case 342:
+@@ -5369,12 +5702,12 @@
+ 
+   case 343:
+ #line 960 "parser.Y"
+-    {yyval.integer=Grid::ANALYSIS;;}
++    {(yyval.integer)=Grid::ANALYSIS;;}
+     break;
+ 
+   case 344:
+ #line 961 "parser.Y"
+-    {yyval.integer=Grid::PUBLICATION;;}
++    {(yyval.integer)=Grid::PUBLICATION;;}
+     break;
+ 
+   case 345:
+@@ -5434,7 +5767,7 @@
+ 
+   case 358:
+ #line 977 "parser.Y"
+-    {FRB->hasSystemCmd((CoordSystem)yyvsp[0].integer);;}
++    {FRB->hasSystemCmd((CoordSystem)(yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 360:
+@@ -5449,7 +5782,7 @@
+ 
+   case 362:
+ #line 983 "parser.Y"
+-    {FRB->hasFitsExtCmd(yyvsp[0].integer);;}
++    {FRB->hasFitsExtCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 363:
+@@ -5489,22 +5822,22 @@
+ 
+   case 370:
+ #line 995 "parser.Y"
+-    {FRB->hasWCSCmd((CoordSystem)yyvsp[0].integer);;}
++    {FRB->hasWCSCmd((CoordSystem)(yyvsp[(1) - (1)].integer));;}
+     break;
+ 
+   case 371:
+ #line 996 "parser.Y"
+-    {FRB->hasWCSEquCmd((CoordSystem)yyvsp[0].integer);;}
++    {FRB->hasWCSEquCmd((CoordSystem)(yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 372:
+ #line 997 "parser.Y"
+-    {FRB->hasWCSLinearCmd((CoordSystem)yyvsp[0].integer);;}
++    {FRB->hasWCSLinearCmd((CoordSystem)(yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 373:
+ #line 1000 "parser.Y"
+-    {FR->iisCmd(yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FR->iisCmd((yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 374:
+@@ -5514,12 +5847,12 @@
+ 
+   case 375:
+ #line 1002 "parser.Y"
+-    {FR->iisMessageCmd(yyvsp[0].str);;}
++    {FR->iisMessageCmd((yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 378:
+ #line 1006 "parser.Y"
+-    {FR->iisSetCmd((const char*)yyvsp[-4].ptr,yyvsp[-3].integer,yyvsp[-2].integer,yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FR->iisSetCmd((const char*)(yyvsp[(2) - (6)].ptr),(yyvsp[(3) - (6)].integer),(yyvsp[(4) - (6)].integer),(yyvsp[(5) - (6)].integer),(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 379:
+@@ -5529,656 +5862,656 @@
+ 
+   case 380:
+ #line 1010 "parser.Y"
+-    {FR->iisWCSCmd(Matrix(yyvsp[-8].real,yyvsp[-7].real,yyvsp[-6].real,yyvsp[-5].real,yyvsp[-4].real,yyvsp[-3].real),Vector(yyvsp[-2].real,yyvsp[-1].real),yyvsp[0].integer);;}
++    {FR->iisWCSCmd(Matrix((yyvsp[(2) - (10)].real),(yyvsp[(3) - (10)].real),(yyvsp[(4) - (10)].real),(yyvsp[(5) - (10)].real),(yyvsp[(6) - (10)].real),(yyvsp[(7) - (10)].real)),Vector((yyvsp[(8) - (10)].real),(yyvsp[(9) - (10)].real)),(yyvsp[(10) - (10)].integer));;}
+     break;
+ 
+   case 381:
+ #line 1013 "parser.Y"
+-    {FRB->iisSetFileNameCmd(yyvsp[0].str);;}
++    {FRB->iisSetFileNameCmd((yyvsp[(1) - (1)].str));;}
+     break;
+ 
+   case 382:
+ #line 1014 "parser.Y"
+-    {FRB->iisSetFileNameCmd(yyvsp[-1].str,yyvsp[0].integer);;}
++    {FRB->iisSetFileNameCmd((yyvsp[(1) - (2)].str),(yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 383:
+ #line 1018 "parser.Y"
+-    {FR->iisSetCursorCmd(Vector(yyvsp[-2].integer,yyvsp[-1].integer),CANVAS);;}
++    {FR->iisSetCursorCmd(Vector((yyvsp[(1) - (3)].integer),(yyvsp[(2) - (3)].integer)),CANVAS);;}
+     break;
+ 
+   case 384:
+ #line 1020 "parser.Y"
+-    {FR->iisSetCursorCmd(Vector(yyvsp[-2].integer,yyvsp[-1].integer),(CoordSystem)yyvsp[0].integer);;}
++    {FR->iisSetCursorCmd(Vector((yyvsp[(1) - (3)].integer),(yyvsp[(2) - (3)].integer)),(CoordSystem)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 385:
+ #line 1021 "parser.Y"
+-    {FR->iisCursorModeCmd(yyvsp[0].integer);;}
++    {FR->iisCursorModeCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 389:
+ #line 1029 "parser.Y"
+-    {FRB->loadArrAllocCmd(yyvsp[-1].str);;}
++    {FRB->loadArrAllocCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 390:
+ #line 1030 "parser.Y"
+-    {FRB->loadArrAllocGZCmd(yyvsp[-1].str);;}
++    {FRB->loadArrAllocGZCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 391:
+ #line 1031 "parser.Y"
+-    {FRB->loadArrChannelCmd(yyvsp[0].str, yyvsp[-2].str);;}
++    {FRB->loadArrChannelCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 392:
+ #line 1032 "parser.Y"
+-    {FRB->loadArrMMapCmd(yyvsp[-1].str);;}
++    {FRB->loadArrMMapCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 393:
+ #line 1033 "parser.Y"
+-    {FRB->loadArrMMapIncrCmd(yyvsp[-1].str);;}
++    {FRB->loadArrMMapIncrCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 394:
+ #line 1035 "parser.Y"
+-    {FRB->loadArrShareCmd((FrameBase::ShmType)yyvsp[-1].integer, yyvsp[0].integer, yyvsp[-3].str);;}
++    {FRB->loadArrShareCmd((FrameBase::ShmType)(yyvsp[(3) - (4)].integer), (yyvsp[(4) - (4)].integer), (yyvsp[(1) - (4)].str));;}
+     break;
+ 
+   case 395:
+ #line 1036 "parser.Y"
+-    {FRB->loadArrSocketCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadArrSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 396:
+ #line 1037 "parser.Y"
+-    {FRB->loadArrSocketGZCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadArrSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 397:
+ #line 1038 "parser.Y"
+-    {FRB->loadArrVarCmd(yyvsp[0].str, yyvsp[-2].str);;}
++    {FRB->loadArrVarCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 399:
+ #line 1042 "parser.Y"
+-    {FRB->loadArrRGBCubeAllocCmd(yyvsp[-1].str);;}
++    {FRB->loadArrRGBCubeAllocCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 400:
+ #line 1043 "parser.Y"
+-    {FRB->loadArrRGBCubeAllocGZCmd(yyvsp[-1].str);;}
++    {FRB->loadArrRGBCubeAllocGZCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 401:
+ #line 1044 "parser.Y"
+-    {FRB->loadArrRGBCubeChannelCmd(yyvsp[0].str, yyvsp[-2].str);;}
++    {FRB->loadArrRGBCubeChannelCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 402:
+ #line 1045 "parser.Y"
+-    {FRB->loadArrRGBCubeMMapCmd(yyvsp[-1].str);;}
++    {FRB->loadArrRGBCubeMMapCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 403:
+ #line 1046 "parser.Y"
+-    {FRB->loadArrRGBCubeMMapIncrCmd(yyvsp[-1].str);;}
++    {FRB->loadArrRGBCubeMMapIncrCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 404:
+ #line 1048 "parser.Y"
+-    {FRB->loadArrRGBCubeShareCmd((FrameBase::ShmType)yyvsp[-1].integer, yyvsp[0].integer, yyvsp[-3].str);;}
++    {FRB->loadArrRGBCubeShareCmd((FrameBase::ShmType)(yyvsp[(3) - (4)].integer), (yyvsp[(4) - (4)].integer), (yyvsp[(1) - (4)].str));;}
+     break;
+ 
+   case 405:
+ #line 1049 "parser.Y"
+-    {FRB->loadArrRGBCubeSocketCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadArrRGBCubeSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 406:
+ #line 1050 "parser.Y"
+-    {FRB->loadArrRGBCubeSocketGZCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadArrRGBCubeSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 407:
+ #line 1051 "parser.Y"
+-    {FRB->loadArrRGBCubeVarCmd(yyvsp[0].str, yyvsp[-2].str);;}
++    {FRB->loadArrRGBCubeVarCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 408:
+ #line 1054 "parser.Y"
+-    {FRB->loadFitsAllocCmd(yyvsp[-1].str);;}
++    {FRB->loadFitsAllocCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 409:
+ #line 1055 "parser.Y"
+-    {FRB->loadFitsAllocGZCmd(yyvsp[-1].str);;}
++    {FRB->loadFitsAllocGZCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 410:
+ #line 1056 "parser.Y"
+-    {FRB->loadFitsChannelCmd(yyvsp[0].str, yyvsp[-2].str);;}
++    {FRB->loadFitsChannelCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 411:
+ #line 1058 "parser.Y"
+-    {FRB->loadFitsMMapCmd(yyvsp[-2].str,(FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadFitsMMapCmd((yyvsp[(1) - (3)].str),(FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 412:
+ #line 1060 "parser.Y"
+-    {FRB->loadFitsSMMapCmd(yyvsp[-3].str,yyvsp[-2].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadFitsSMMapCmd((yyvsp[(1) - (4)].str),(yyvsp[(2) - (4)].str), (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 413:
+ #line 1062 "parser.Y"
+-    {FRB->loadFitsMMapIncrCmd(yyvsp[-2].str,(FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadFitsMMapIncrCmd((yyvsp[(1) - (3)].str),(FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 414:
+ #line 1064 "parser.Y"
+-    {FRB->loadFitsShareCmd((FrameBase::ShmType)yyvsp[-2].integer, yyvsp[-1].integer, yyvsp[-4].str, 
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadFitsShareCmd((FrameBase::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(1) - (5)].str), 
++	    (FrameBase::LoadMethod)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 415:
+ #line 1067 "parser.Y"
+-    {FRB->loadFitsSShareCmd((FrameBase::ShmType)yyvsp[-3].integer, yyvsp[-2].integer, yyvsp[-1].integer, yyvsp[-5].str, 
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadFitsSShareCmd((FrameBase::ShmType)(yyvsp[(3) - (6)].integer), (yyvsp[(4) - (6)].integer), (yyvsp[(5) - (6)].integer), (yyvsp[(1) - (6)].str), 
++	    (FrameBase::LoadMethod)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 416:
+ #line 1069 "parser.Y"
+-    {FRB->loadFitsSocketCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadFitsSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 417:
+ #line 1070 "parser.Y"
+-    {FRB->loadFitsSocketGZCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadFitsSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 418:
+ #line 1072 "parser.Y"
+-    {FRB->loadFitsVarCmd(yyvsp[-1].str, yyvsp[-3].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadFitsVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 422:
+ #line 1076 "parser.Y"
+-    {FRB->loadFitsSlaveCmd(yyvsp[-1].str,(FitsFile*)yyvsp[0].ptr);;}
++    {FRB->loadFitsSlaveCmd((yyvsp[(2) - (3)].str),(FitsFile*)(yyvsp[(3) - (3)].ptr));;}
+     break;
+ 
+   case 423:
+ #line 1079 "parser.Y"
+-    {FRB->loadDataCubeAllocCmd(yyvsp[-1].str);;}
++    {FRB->loadDataCubeAllocCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 424:
+ #line 1080 "parser.Y"
+-    {FRB->loadDataCubeAllocGZCmd(yyvsp[-1].str);;}
++    {FRB->loadDataCubeAllocGZCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 425:
+ #line 1081 "parser.Y"
+-    {FRB->loadDataCubeChannelCmd(yyvsp[0].str, yyvsp[-2].str);;}
++    {FRB->loadDataCubeChannelCmd((yyvsp[(3) - (3)].str), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 426:
+ #line 1083 "parser.Y"
+-    {FRB->loadDataCubeMMapCmd(yyvsp[-2].str,(FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadDataCubeMMapCmd((yyvsp[(1) - (3)].str),(FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 427:
+ #line 1085 "parser.Y"
+-    {FRB->loadDataCubeMMapIncrCmd(yyvsp[-2].str,(FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadDataCubeMMapIncrCmd((yyvsp[(1) - (3)].str),(FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 428:
+ #line 1087 "parser.Y"
+-    {FRB->loadDataCubeShareCmd((FrameBase::ShmType)yyvsp[-2].integer, yyvsp[-1].integer, yyvsp[-4].str, 
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadDataCubeShareCmd((FrameBase::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(1) - (5)].str), 
++	    (FrameBase::LoadMethod)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 429:
+ #line 1089 "parser.Y"
+-    {FRB->loadDataCubeSocketCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadDataCubeSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 430:
+ #line 1090 "parser.Y"
+-    {FRB->loadDataCubeSocketGZCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadDataCubeSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 431:
+ #line 1092 "parser.Y"
+-    {FRB->loadDataCubeVarCmd(yyvsp[-1].str, yyvsp[-3].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadDataCubeVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 438:
+ #line 1103 "parser.Y"
+-    {FRB->loadMosaicImageIRAFAllocCmd(yyvsp[-1].str);;}
++    {FRB->loadMosaicImageIRAFAllocCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 439:
+ #line 1104 "parser.Y"
+-    {FRB->loadMosaicImageIRAFAllocGZCmd(yyvsp[-1].str);;}
++    {FRB->loadMosaicImageIRAFAllocGZCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 440:
+ #line 1105 "parser.Y"
+-    {FRB->loadMosaicImageIRAFChannelCmd(yyvsp[0].str,yyvsp[-2].str);;}
++    {FRB->loadMosaicImageIRAFChannelCmd((yyvsp[(3) - (3)].str),(yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 441:
+ #line 1107 "parser.Y"
+-    {FRB->loadMosaicImageIRAFMMapCmd(yyvsp[-2].str,(FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageIRAFMMapCmd((yyvsp[(1) - (3)].str),(FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 442:
+ #line 1109 "parser.Y"
+-    {FRB->loadMosaicImageIRAFMMapIncrCmd(yyvsp[-2].str,(FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageIRAFMMapIncrCmd((yyvsp[(1) - (3)].str),(FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 443:
+ #line 1111 "parser.Y"
+-    {FRB->loadMosaicImageIRAFShareCmd((FrameBase::ShmType)yyvsp[-2].integer, yyvsp[-1].integer,
+-	    yyvsp[-4].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageIRAFShareCmd((FrameBase::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer),
++	    (yyvsp[(1) - (5)].str), (FrameBase::LoadMethod)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 444:
+ #line 1113 "parser.Y"
+-    {FRB->loadMosaicImageIRAFSocketCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadMosaicImageIRAFSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 445:
+ #line 1114 "parser.Y"
+-    {FRB->loadMosaicImageIRAFSocketGZCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadMosaicImageIRAFSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 446:
+ #line 1116 "parser.Y"
+-    {FRB->loadMosaicImageIRAFVarCmd(yyvsp[-1].str, yyvsp[-3].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageIRAFVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 447:
+ #line 1119 "parser.Y"
+-    {FRB->loadMosaicIRAFAllocCmd(yyvsp[-1].str);;}
++    {FRB->loadMosaicIRAFAllocCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 448:
+ #line 1120 "parser.Y"
+-    {FRB->loadMosaicIRAFAllocGZCmd(yyvsp[-1].str);;}
++    {FRB->loadMosaicIRAFAllocGZCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 449:
+ #line 1121 "parser.Y"
+-    {FRB->loadMosaicIRAFChannelCmd(yyvsp[0].str,yyvsp[-2].str);;}
++    {FRB->loadMosaicIRAFChannelCmd((yyvsp[(3) - (3)].str),(yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 450:
+ #line 1123 "parser.Y"
+-    {FRB->loadMosaicIRAFMMapCmd(yyvsp[-2].str,(FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicIRAFMMapCmd((yyvsp[(1) - (3)].str),(FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 451:
+ #line 1125 "parser.Y"
+-    {FRB->loadMosaicIRAFSMMapCmd(yyvsp[-3].str,yyvsp[-2].str,(FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicIRAFSMMapCmd((yyvsp[(1) - (4)].str),(yyvsp[(2) - (4)].str),(FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 452:
+ #line 1127 "parser.Y"
+-    {FRB->loadMosaicIRAFMMapIncrCmd(yyvsp[-2].str,(FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicIRAFMMapIncrCmd((yyvsp[(1) - (3)].str),(FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 453:
+ #line 1129 "parser.Y"
+-    {FRB->loadMosaicIRAFShareCmd((FrameBase::ShmType)yyvsp[-2].integer, yyvsp[-1].integer,
+-	    yyvsp[-4].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicIRAFShareCmd((FrameBase::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer),
++	    (yyvsp[(1) - (5)].str), (FrameBase::LoadMethod)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 454:
+ #line 1132 "parser.Y"
+-    {FRB->loadMosaicIRAFSShareCmd((FrameBase::ShmType)yyvsp[-3].integer, yyvsp[-2].integer, yyvsp[-1].integer,
+-	    yyvsp[-5].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicIRAFSShareCmd((FrameBase::ShmType)(yyvsp[(3) - (6)].integer), (yyvsp[(4) - (6)].integer), (yyvsp[(5) - (6)].integer),
++	    (yyvsp[(1) - (6)].str), (FrameBase::LoadMethod)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 455:
+ #line 1134 "parser.Y"
+-    {FRB->loadMosaicIRAFSocketCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadMosaicIRAFSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 456:
+ #line 1135 "parser.Y"
+-    {FRB->loadMosaicIRAFSocketGZCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadMosaicIRAFSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 457:
+ #line 1137 "parser.Y"
+-    {FRB->loadMosaicIRAFVarCmd(yyvsp[-1].str, yyvsp[-3].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicIRAFVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 458:
+ #line 1141 "parser.Y"
+-    {FRB->loadMosaicImageWCSAllocCmd((CoordSystem)yyvsp[-2].integer, yyvsp[-1].str);;}
++    {FRB->loadMosaicImageWCSAllocCmd((CoordSystem)(yyvsp[(1) - (3)].integer), (yyvsp[(2) - (3)].str));;}
+     break;
+ 
+   case 459:
+ #line 1143 "parser.Y"
+-    {FRB->loadMosaicImageWCSAllocGZCmd((CoordSystem)yyvsp[-2].integer, yyvsp[-1].str);;}
++    {FRB->loadMosaicImageWCSAllocGZCmd((CoordSystem)(yyvsp[(1) - (3)].integer), (yyvsp[(2) - (3)].str));;}
+     break;
+ 
+   case 460:
+ #line 1145 "parser.Y"
+-    {FRB->loadMosaicImageWCSChannelCmd((CoordSystem)yyvsp[-3].integer, yyvsp[0].str, yyvsp[-2].str);;}
++    {FRB->loadMosaicImageWCSChannelCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(4) - (4)].str), (yyvsp[(2) - (4)].str));;}
+     break;
+ 
+   case 461:
+ #line 1147 "parser.Y"
+-    {FRB->loadMosaicImageWCSMMapCmd((CoordSystem)yyvsp[-3].integer, yyvsp[-2].str,
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageWCSMMapCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(2) - (4)].str),
++	    (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 462:
+ #line 1150 "parser.Y"
+-    {FRB->loadMosaicImageWCSMMapIncrCmd((CoordSystem)yyvsp[-3].integer, yyvsp[-2].str,
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageWCSMMapIncrCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(2) - (4)].str),
++	    (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 463:
+ #line 1153 "parser.Y"
+-    {FRB->loadMosaicImageWCSShareCmd((CoordSystem)yyvsp[-5].integer, 
+-	    (FrameBase::ShmType)yyvsp[-2].integer, yyvsp[-1].integer, yyvsp[-4].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageWCSShareCmd((CoordSystem)(yyvsp[(1) - (6)].integer), 
++	    (FrameBase::ShmType)(yyvsp[(4) - (6)].integer), (yyvsp[(5) - (6)].integer), (yyvsp[(2) - (6)].str), (FrameBase::LoadMethod)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 464:
+ #line 1156 "parser.Y"
+-    {FRB->loadMosaicImageWCSSocketCmd((CoordSystem)yyvsp[-3].integer, yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadMosaicImageWCSSocketCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(4) - (4)].integer), (yyvsp[(2) - (4)].str));;}
+     break;
+ 
+   case 465:
+ #line 1158 "parser.Y"
+-    {FRB->loadMosaicImageWCSSocketGZCmd((CoordSystem)yyvsp[-3].integer, yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadMosaicImageWCSSocketGZCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(4) - (4)].integer), (yyvsp[(2) - (4)].str));;}
+     break;
+ 
+   case 466:
+ #line 1160 "parser.Y"
+-    {FRB->loadMosaicImageWCSVarCmd((CoordSystem)yyvsp[-4].integer, yyvsp[-1].str, yyvsp[-3].str, 
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageWCSVarCmd((CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].str), (yyvsp[(2) - (5)].str), 
++	    (FrameBase::LoadMethod)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 467:
+ #line 1165 "parser.Y"
+-    {FRB->loadMosaicImageNextWCSAllocCmd((CoordSystem)yyvsp[-2].integer, yyvsp[-1].str);;}
++    {FRB->loadMosaicImageNextWCSAllocCmd((CoordSystem)(yyvsp[(1) - (3)].integer), (yyvsp[(2) - (3)].str));;}
+     break;
+ 
+   case 468:
+ #line 1167 "parser.Y"
+-    {FRB->loadMosaicImageNextWCSAllocGZCmd((CoordSystem)yyvsp[-2].integer, yyvsp[-1].str);;}
++    {FRB->loadMosaicImageNextWCSAllocGZCmd((CoordSystem)(yyvsp[(1) - (3)].integer), (yyvsp[(2) - (3)].str));;}
+     break;
+ 
+   case 469:
+ #line 1169 "parser.Y"
+-    {FRB->loadMosaicImageNextWCSChannelCmd((CoordSystem)yyvsp[-3].integer, yyvsp[0].str,yyvsp[-2].str);;}
++    {FRB->loadMosaicImageNextWCSChannelCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(4) - (4)].str),(yyvsp[(2) - (4)].str));;}
+     break;
+ 
+   case 470:
+ #line 1171 "parser.Y"
+-    {FRB->loadMosaicImageNextWCSMMapCmd((CoordSystem)yyvsp[-3].integer, yyvsp[-2].str,
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageNextWCSMMapCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(2) - (4)].str),
++	    (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 471:
+ #line 1174 "parser.Y"
+-    {FRB->loadMosaicImageNextWCSMMapIncrCmd((CoordSystem)yyvsp[-3].integer, yyvsp[-2].str,
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageNextWCSMMapIncrCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(2) - (4)].str),
++	    (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 472:
+ #line 1177 "parser.Y"
+-    {FRB->loadMosaicImageNextWCSShareCmd((CoordSystem)yyvsp[-5].integer, 
+-	    (FrameBase::ShmType)yyvsp[-2].integer, yyvsp[-1].integer, yyvsp[-4].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageNextWCSShareCmd((CoordSystem)(yyvsp[(1) - (6)].integer), 
++	    (FrameBase::ShmType)(yyvsp[(4) - (6)].integer), (yyvsp[(5) - (6)].integer), (yyvsp[(2) - (6)].str), (FrameBase::LoadMethod)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 473:
+ #line 1180 "parser.Y"
+-    {FRB->loadMosaicImageNextWCSSocketCmd((CoordSystem)yyvsp[-3].integer, yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadMosaicImageNextWCSSocketCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(4) - (4)].integer), (yyvsp[(2) - (4)].str));;}
+     break;
+ 
+   case 474:
+ #line 1182 "parser.Y"
+-    {FRB->loadMosaicImageNextWCSSocketGZCmd((CoordSystem)yyvsp[-3].integer, yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadMosaicImageNextWCSSocketGZCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(4) - (4)].integer), (yyvsp[(2) - (4)].str));;}
+     break;
+ 
+   case 475:
+ #line 1184 "parser.Y"
+-    {FRB->loadMosaicImageNextWCSVarCmd((CoordSystem)yyvsp[-4].integer, yyvsp[-1].str, yyvsp[-3].str,
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageNextWCSVarCmd((CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].str), (yyvsp[(2) - (5)].str),
++	    (FrameBase::LoadMethod)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 476:
+ #line 1189 "parser.Y"
+-    {FRB->loadMosaicWCSAllocCmd((CoordSystem)yyvsp[-2].integer, yyvsp[-1].str);;}
++    {FRB->loadMosaicWCSAllocCmd((CoordSystem)(yyvsp[(1) - (3)].integer), (yyvsp[(2) - (3)].str));;}
+     break;
+ 
+   case 477:
+ #line 1191 "parser.Y"
+-    {FRB->loadMosaicWCSAllocGZCmd((CoordSystem)yyvsp[-2].integer, yyvsp[-1].str);;}
++    {FRB->loadMosaicWCSAllocGZCmd((CoordSystem)(yyvsp[(1) - (3)].integer), (yyvsp[(2) - (3)].str));;}
+     break;
+ 
+   case 478:
+ #line 1193 "parser.Y"
+-    {FRB->loadMosaicWCSChannelCmd((CoordSystem)yyvsp[-3].integer, yyvsp[0].str,yyvsp[-2].str);;}
++    {FRB->loadMosaicWCSChannelCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(4) - (4)].str),(yyvsp[(2) - (4)].str));;}
+     break;
+ 
+   case 479:
+ #line 1195 "parser.Y"
+-    {FRB->loadMosaicWCSMMapCmd((CoordSystem)yyvsp[-3].integer, yyvsp[-2].str,
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicWCSMMapCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(2) - (4)].str),
++	    (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 480:
+ #line 1198 "parser.Y"
+-    {FRB->loadMosaicWCSSMMapCmd((CoordSystem)yyvsp[-4].integer, yyvsp[-3].str, yyvsp[-2].str,
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicWCSSMMapCmd((CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(2) - (5)].str), (yyvsp[(3) - (5)].str),
++	    (FrameBase::LoadMethod)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 481:
+ #line 1201 "parser.Y"
+-    {FRB->loadMosaicWCSMMapIncrCmd((CoordSystem)yyvsp[-3].integer, yyvsp[-2].str,
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicWCSMMapIncrCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(2) - (4)].str),
++	    (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 482:
+ #line 1204 "parser.Y"
+-    {FRB->loadMosaicWCSShareCmd((CoordSystem)yyvsp[-5].integer, 
+-	    (FrameBase::ShmType)yyvsp[-2].integer, yyvsp[-1].integer, yyvsp[-4].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicWCSShareCmd((CoordSystem)(yyvsp[(1) - (6)].integer), 
++	    (FrameBase::ShmType)(yyvsp[(4) - (6)].integer), (yyvsp[(5) - (6)].integer), (yyvsp[(2) - (6)].str), (FrameBase::LoadMethod)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 483:
+ #line 1207 "parser.Y"
+-    {FRB->loadMosaicWCSSShareCmd((CoordSystem)yyvsp[-6].integer, 
+-	    (FrameBase::ShmType)yyvsp[-3].integer, yyvsp[-2].integer, yyvsp[-1].integer, yyvsp[-5].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicWCSSShareCmd((CoordSystem)(yyvsp[(1) - (7)].integer), 
++	    (FrameBase::ShmType)(yyvsp[(4) - (7)].integer), (yyvsp[(5) - (7)].integer), (yyvsp[(6) - (7)].integer), (yyvsp[(2) - (7)].str), (FrameBase::LoadMethod)(yyvsp[(7) - (7)].integer));;}
+     break;
+ 
+   case 484:
+ #line 1210 "parser.Y"
+-    {FRB->loadMosaicWCSSocketCmd((CoordSystem)yyvsp[-3].integer, yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadMosaicWCSSocketCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(4) - (4)].integer), (yyvsp[(2) - (4)].str));;}
+     break;
+ 
+   case 485:
+ #line 1212 "parser.Y"
+-    {FRB->loadMosaicWCSSocketGZCmd((CoordSystem)yyvsp[-3].integer, yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadMosaicWCSSocketGZCmd((CoordSystem)(yyvsp[(1) - (4)].integer), (yyvsp[(4) - (4)].integer), (yyvsp[(2) - (4)].str));;}
+     break;
+ 
+   case 486:
+ #line 1214 "parser.Y"
+-    {FRB->loadMosaicWCSVarCmd((CoordSystem)yyvsp[-4].integer, yyvsp[-1].str, yyvsp[-3].str, 
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicWCSVarCmd((CoordSystem)(yyvsp[(1) - (5)].integer), (yyvsp[(4) - (5)].str), (yyvsp[(2) - (5)].str), 
++	    (FrameBase::LoadMethod)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 487:
+ #line 1219 "parser.Y"
+-    {FRB->loadMosaicImageWFPC2AllocCmd(yyvsp[-1].str);;}
++    {FRB->loadMosaicImageWFPC2AllocCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 488:
+ #line 1220 "parser.Y"
+-    {FRB->loadMosaicImageWFPC2AllocGZCmd(yyvsp[-1].str);;}
++    {FRB->loadMosaicImageWFPC2AllocGZCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 489:
+ #line 1221 "parser.Y"
+-    {FRB->loadMosaicImageWFPC2ChannelCmd(yyvsp[0].str,yyvsp[-2].str);;}
++    {FRB->loadMosaicImageWFPC2ChannelCmd((yyvsp[(3) - (3)].str),(yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 490:
+ #line 1223 "parser.Y"
+-    {FRB->loadMosaicImageWFPC2MMapCmd(yyvsp[-2].str,(FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageWFPC2MMapCmd((yyvsp[(1) - (3)].str),(FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 491:
+ #line 1225 "parser.Y"
+-    {FRB->loadMosaicImageWFPC2MMapIncrCmd(yyvsp[-2].str,(FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageWFPC2MMapIncrCmd((yyvsp[(1) - (3)].str),(FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 492:
+ #line 1227 "parser.Y"
+-    {FRB->loadMosaicImageWFPC2ShareCmd((FrameBase::ShmType)yyvsp[-2].integer, yyvsp[-1].integer,
+-	    yyvsp[-4].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageWFPC2ShareCmd((FrameBase::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer),
++	    (yyvsp[(1) - (5)].str), (FrameBase::LoadMethod)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 493:
+ #line 1229 "parser.Y"
+-    {FRB->loadMosaicImageWFPC2SocketCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadMosaicImageWFPC2SocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 494:
+ #line 1230 "parser.Y"
+-    {FRB->loadMosaicImageWFPC2SocketGZCmd(yyvsp[0].integer,yyvsp[-2].str);;}
++    {FRB->loadMosaicImageWFPC2SocketGZCmd((yyvsp[(3) - (3)].integer),(yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 495:
+ #line 1232 "parser.Y"
+-    {FRB->loadMosaicImageWFPC2VarCmd(yyvsp[-1].str, yyvsp[-3].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadMosaicImageWFPC2VarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 498:
+ #line 1238 "parser.Y"
+-    {FRB->loadRGBCubeAllocCmd(yyvsp[-1].str);;}
++    {FRB->loadRGBCubeAllocCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 499:
+ #line 1239 "parser.Y"
+-    {FRB->loadRGBCubeAllocGZCmd(yyvsp[-1].str);;}
++    {FRB->loadRGBCubeAllocGZCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 500:
+ #line 1240 "parser.Y"
+-    {FRB->loadRGBCubeChannelCmd(yyvsp[0].str,yyvsp[-2].str);;}
++    {FRB->loadRGBCubeChannelCmd((yyvsp[(3) - (3)].str),(yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 501:
+ #line 1242 "parser.Y"
+-    {FRB->loadRGBCubeMMapCmd(yyvsp[-2].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadRGBCubeMMapCmd((yyvsp[(1) - (3)].str), (FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 502:
+ #line 1244 "parser.Y"
+-    {FRB->loadRGBCubeSMMapCmd(yyvsp[-3].str, yyvsp[-2].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadRGBCubeSMMapCmd((yyvsp[(1) - (4)].str), (yyvsp[(2) - (4)].str), (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 503:
+ #line 1246 "parser.Y"
+-    {FRB->loadRGBCubeMMapIncrCmd(yyvsp[-2].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadRGBCubeMMapIncrCmd((yyvsp[(1) - (3)].str), (FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 504:
+ #line 1248 "parser.Y"
+-    {FRB->loadRGBCubeShareCmd((FrameBase::ShmType)yyvsp[-2].integer, yyvsp[-1].integer, yyvsp[-4].str, 
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadRGBCubeShareCmd((FrameBase::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(1) - (5)].str), 
++	    (FrameBase::LoadMethod)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 505:
+ #line 1251 "parser.Y"
+-    {FRB->loadRGBCubeSShareCmd((FrameBase::ShmType)yyvsp[-3].integer, yyvsp[-2].integer, yyvsp[-1].integer, yyvsp[-5].str, 
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadRGBCubeSShareCmd((FrameBase::ShmType)(yyvsp[(3) - (6)].integer), (yyvsp[(4) - (6)].integer), (yyvsp[(5) - (6)].integer), (yyvsp[(1) - (6)].str), 
++	    (FrameBase::LoadMethod)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 506:
+ #line 1253 "parser.Y"
+-    {FRB->loadRGBCubeSocketCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadRGBCubeSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 507:
+ #line 1254 "parser.Y"
+-    {FRB->loadRGBCubeSocketGZCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadRGBCubeSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 508:
+ #line 1256 "parser.Y"
+-    {FRB->loadRGBCubeVarCmd(yyvsp[-1].str, yyvsp[-3].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadRGBCubeVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 509:
+ #line 1258 "parser.Y"
+-    {FRB->loadRGBCubeSlaveCmd(yyvsp[-1].str,(FitsFile*)yyvsp[0].ptr);;}
++    {FRB->loadRGBCubeSlaveCmd((yyvsp[(2) - (3)].str),(FitsFile*)(yyvsp[(3) - (3)].ptr));;}
+     break;
+ 
+   case 510:
+ #line 1261 "parser.Y"
+-    {FRB->loadRGBImageAllocCmd(yyvsp[-1].str);;}
++    {FRB->loadRGBImageAllocCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 511:
+ #line 1262 "parser.Y"
+-    {FRB->loadRGBImageAllocGZCmd(yyvsp[-1].str);;}
++    {FRB->loadRGBImageAllocGZCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 512:
+ #line 1263 "parser.Y"
+-    {FRB->loadRGBImageChannelCmd(yyvsp[0].str,yyvsp[-2].str);;}
++    {FRB->loadRGBImageChannelCmd((yyvsp[(3) - (3)].str),(yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 513:
+ #line 1265 "parser.Y"
+-    {FRB->loadRGBImageMMapCmd(yyvsp[-2].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadRGBImageMMapCmd((yyvsp[(1) - (3)].str), (FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 514:
+ #line 1267 "parser.Y"
+-    {FRB->loadRGBImageMMapIncrCmd(yyvsp[-2].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadRGBImageMMapIncrCmd((yyvsp[(1) - (3)].str), (FrameBase::LoadMethod)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 515:
+ #line 1269 "parser.Y"
+-    {FRB->loadRGBImageShareCmd((FrameBase::ShmType)yyvsp[-2].integer, yyvsp[-1].integer, yyvsp[-4].str, 
+-	    (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadRGBImageShareCmd((FrameBase::ShmType)(yyvsp[(3) - (5)].integer), (yyvsp[(4) - (5)].integer), (yyvsp[(1) - (5)].str), 
++	    (FrameBase::LoadMethod)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 516:
+ #line 1271 "parser.Y"
+-    {FRB->loadRGBImageSocketCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadRGBImageSocketCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 517:
+ #line 1272 "parser.Y"
+-    {FRB->loadRGBImageSocketGZCmd(yyvsp[0].integer, yyvsp[-2].str);;}
++    {FRB->loadRGBImageSocketGZCmd((yyvsp[(3) - (3)].integer), (yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 518:
+ #line 1274 "parser.Y"
+-    {FRB->loadRGBImageVarCmd(yyvsp[-1].str, yyvsp[-3].str, (FrameBase::LoadMethod)yyvsp[0].integer);;}
++    {FRB->loadRGBImageVarCmd((yyvsp[(3) - (4)].str), (yyvsp[(1) - (4)].str), (FrameBase::LoadMethod)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 519:
+ #line 1277 "parser.Y"
+-    {FRB->loadIncrDataCmd(yyvsp[-4].integer,yyvsp[-3].integer,yyvsp[-2].integer,yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FRB->loadIncrDataCmd((yyvsp[(2) - (6)].integer),(yyvsp[(3) - (6)].integer),(yyvsp[(4) - (6)].integer),(yyvsp[(5) - (6)].integer),(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 520:
+ #line 1278 "parser.Y"
+-    {FRB->loadIncrMinMaxCmd(yyvsp[-4].integer,yyvsp[-3].integer,yyvsp[-2].integer,yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FRB->loadIncrMinMaxCmd((yyvsp[(2) - (6)].integer),(yyvsp[(3) - (6)].integer),(yyvsp[(4) - (6)].integer),(yyvsp[(5) - (6)].integer),(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 521:
+@@ -6188,22 +6521,22 @@
+ 
+   case 522:
+ #line 1282 "parser.Y"
+-    {FRB->magnifierCmd(yyvsp[0].integer);;}
++    {FRB->magnifierCmd((yyvsp[(1) - (1)].integer));;}
+     break;
+ 
+   case 523:
+ #line 1283 "parser.Y"
+-    {FRB->magnifierGraphicsCmd(yyvsp[0].integer);;}
++    {FRB->magnifierGraphicsCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 524:
+ #line 1284 "parser.Y"
+-    {FRB->magnifierCursorCmd(yyvsp[0].integer);;}
++    {FRB->magnifierCursorCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 525:
+ #line 1285 "parser.Y"
+-    {FRB->magnifierCmd(yyvsp[-2].str, yyvsp[-1].integer, yyvsp[0].integer);;}
++    {FRB->magnifierCmd((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].integer), (yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 526:
+@@ -6213,17 +6546,17 @@
+ 
+   case 527:
+ #line 1287 "parser.Y"
+-    {FRB->updateMagnifierCmd(Vector(yyvsp[-1].real, yyvsp[0].real));;}
++    {FRB->updateMagnifierCmd(Vector((yyvsp[(2) - (3)].real), (yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 528:
+ #line 1288 "parser.Y"
+-    {FRB->magnifierZoomCmd(yyvsp[0].real);;}
++    {FRB->magnifierZoomCmd((yyvsp[(2) - (2)].real));;}
+     break;
+ 
+   case 529:
+ #line 1291 "parser.Y"
+-    {FRB->markerColorCmd(yyvsp[0].str);;}
++    {FRB->markerColorCmd((yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 530:
+@@ -6233,12 +6566,12 @@
+ 
+   case 531:
+ #line 1294 "parser.Y"
+-    {FRB->markerCommandCmd((FrameBase::MarkerFormat)yyvsp[-1].integer,yyvsp[0].str);;}
++    {FRB->markerCommandCmd((FrameBase::MarkerFormat)(yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 532:
+ #line 1296 "parser.Y"
+-    {FRB->markerCommandVarCmd((FrameBase::MarkerFormat)yyvsp[-2].integer,yyvsp[0].str);;}
++    {FRB->markerCommandVarCmd((FrameBase::MarkerFormat)(yyvsp[(2) - (4)].integer),(yyvsp[(4) - (4)].str));;}
+     break;
+ 
+   case 533:
+@@ -6263,405 +6596,405 @@
+ 
+   case 539:
+ #line 1303 "parser.Y"
+-    {FRB->markerFontCmd(yyvsp[0].str);;}
++    {FRB->markerFontCmd((yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 540:
+ #line 1305 "parser.Y"
+-    {FRB->markerAngleCmd(yyvsp[-2].integer,yyvsp[0].real);;}
++    {FRB->markerAngleCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].real));;}
+     break;
+ 
+   case 541:
+ #line 1307 "parser.Y"
+-    {FRB->markerAngleCmd(yyvsp[-4].integer,yyvsp[-2].real,(CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->markerAngleCmd((yyvsp[(1) - (5)].integer),(yyvsp[(3) - (5)].real),(CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFrame)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 542:
+ #line 1311 "parser.Y"
+-    {FRB->markerAnnulusRadiusCmd(yyvsp[-7].integer, 
+-	    yyvsp[-4].real, yyvsp[-3].real, yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerAnnulusRadiusCmd((yyvsp[(1) - (8)].integer), 
++	    (yyvsp[(4) - (8)].real), (yyvsp[(5) - (8)].real), (yyvsp[(6) - (8)].integer),
++	    (CoordSystem)(yyvsp[(7) - (8)].integer), (SkyFormat)(yyvsp[(8) - (8)].integer));;}
+     break;
+ 
+   case 543:
+ #line 1316 "parser.Y"
+-    {FRB->markerAnnulusRadiusCmd(yyvsp[-5].integer,
+-	    yyvsp[-2].str,(CoordSystem)yyvsp[-1].integer,(SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerAnnulusRadiusCmd((yyvsp[(1) - (6)].integer),
++	    (yyvsp[(4) - (6)].str),(CoordSystem)(yyvsp[(5) - (6)].integer),(SkyFormat)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 544:
+ #line 1321 "parser.Y"
+-    {FRB->markerBoxAnnulusRadiusCmd(yyvsp[-8].integer, 
+-	    Vector(yyvsp[-5].real, yyvsp[-4].real), Vector(yyvsp[-3].real, yyvsp[-3].real*yyvsp[-4].real/yyvsp[-5].real), yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerBoxAnnulusRadiusCmd((yyvsp[(1) - (9)].integer), 
++	    Vector((yyvsp[(4) - (9)].real), (yyvsp[(5) - (9)].real)), Vector((yyvsp[(6) - (9)].real), (yyvsp[(6) - (9)].real)*(yyvsp[(5) - (9)].real)/(yyvsp[(4) - (9)].real)), (yyvsp[(7) - (9)].integer),
++	    (CoordSystem)(yyvsp[(8) - (9)].integer), (SkyFormat)(yyvsp[(9) - (9)].integer));;}
+     break;
+ 
+   case 545:
+ #line 1326 "parser.Y"
+-    {FRB->markerBoxAnnulusRadiusCmd(yyvsp[-5].integer,
+-	    yyvsp[-2].str,(CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerBoxAnnulusRadiusCmd((yyvsp[(1) - (6)].integer),
++	    (yyvsp[(4) - (6)].str),(CoordSystem)(yyvsp[(5) - (6)].integer), (SkyFormat)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 546:
+ #line 1331 "parser.Y"
+-    {FRB->markerBoxRadiusCmd(yyvsp[-6].integer,
+-	    Vector(yyvsp[-3].real,yyvsp[-2].real), 
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerBoxRadiusCmd((yyvsp[(1) - (7)].integer),
++	    Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real)), 
++	    (CoordSystem)(yyvsp[(6) - (7)].integer), (SkyFormat)(yyvsp[(7) - (7)].integer));;}
+     break;
+ 
+   case 547:
+ #line 1338 "parser.Y"
+-    {FRB->markerBpandaEditCmd(yyvsp[-11].integer, 
+-	    yyvsp[-8].real, yyvsp[-7].real, yyvsp[-6].integer,
+-	    Vector(yyvsp[-5].real,yyvsp[-4].real), Vector(yyvsp[-3].real,yyvsp[-3].real*yyvsp[-4].real/yyvsp[-5].real), yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->markerBpandaEditCmd((yyvsp[(1) - (12)].integer), 
++	    (yyvsp[(4) - (12)].real), (yyvsp[(5) - (12)].real), (yyvsp[(6) - (12)].integer),
++	    Vector((yyvsp[(7) - (12)].real),(yyvsp[(8) - (12)].real)), Vector((yyvsp[(9) - (12)].real),(yyvsp[(9) - (12)].real)*(yyvsp[(8) - (12)].real)/(yyvsp[(7) - (12)].real)), (yyvsp[(10) - (12)].integer),
++	    (CoordSystem)(yyvsp[(11) - (12)].integer), (SkyFrame)(yyvsp[(12) - (12)].integer));;}
+     break;
+ 
+   case 548:
+ #line 1346 "parser.Y"
+-    {FRB->markerBpandaEditCmd(yyvsp[-8].integer, 
+-	    yyvsp[-5].str, yyvsp[-4].str, 
+-	    (CoordSystem)yyvsp[-3].integer, (SkyFrame)yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerBpandaEditCmd((yyvsp[(1) - (9)].integer), 
++	    (yyvsp[(4) - (9)].str), (yyvsp[(5) - (9)].str), 
++	    (CoordSystem)(yyvsp[(6) - (9)].integer), (SkyFrame)(yyvsp[(7) - (9)].integer),
++	    (CoordSystem)(yyvsp[(8) - (9)].integer), (SkyFormat)(yyvsp[(9) - (9)].integer));;}
+     break;
+ 
+   case 549:
+ #line 1351 "parser.Y"
+-    {FRB->markerCallBackCmd(yyvsp[-4].integer,(CallBack::Type)yyvsp[-2].integer,yyvsp[-1].str,yyvsp[0].str);;}
++    {FRB->markerCallBackCmd((yyvsp[(1) - (5)].integer),(CallBack::Type)(yyvsp[(3) - (5)].integer),(yyvsp[(4) - (5)].str),(yyvsp[(5) - (5)].str));;}
+     break;
+ 
+   case 550:
+ #line 1353 "parser.Y"
+-    {FRB->markerCircleRadiusCmd(yyvsp[-5].integer, yyvsp[-2].real, (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerCircleRadiusCmd((yyvsp[(1) - (6)].integer), (yyvsp[(4) - (6)].real), (CoordSystem)(yyvsp[(5) - (6)].integer), (SkyFormat)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 551:
+ #line 1354 "parser.Y"
+-    {FRB->markerColorCmd(yyvsp[-2].integer,yyvsp[0].str);;}
++    {FRB->markerColorCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 552:
+ #line 1356 "parser.Y"
+-    {FRB->markerCompassArrowCmd(yyvsp[-4].integer,yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FRB->markerCompassArrowCmd((yyvsp[(1) - (5)].integer),(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 553:
+ #line 1358 "parser.Y"
+-    {FRB->markerCompassLabelCmd(yyvsp[-4].integer,yyvsp[-1].str,yyvsp[0].str);;}
++    {FRB->markerCompassLabelCmd((yyvsp[(1) - (5)].integer),(yyvsp[(4) - (5)].str),(yyvsp[(5) - (5)].str));;}
+     break;
+ 
+   case 554:
+ #line 1360 "parser.Y"
+-    {FRB->markerCompassRadiusCmd(yyvsp[-5].integer,yyvsp[-2].real,(CoordSystem)yyvsp[-1].integer,(SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerCompassRadiusCmd((yyvsp[(1) - (6)].integer),(yyvsp[(4) - (6)].real),(CoordSystem)(yyvsp[(5) - (6)].integer),(SkyFormat)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 555:
+ #line 1362 "parser.Y"
+-    {FRB->markerCompassSystemCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->markerCompassSystemCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFrame)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 556:
+ #line 1364 "parser.Y"
+-    {FRB->markerAnnulusCreateRadiusCmd(yyvsp[-5].integer,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerAnnulusCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;}
+     break;
+ 
+   case 557:
+ #line 1366 "parser.Y"
+-    {FRB->markerBoxAnnulusCreateRadiusCmd(yyvsp[-5].integer,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerBoxAnnulusCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;}
+     break;
+ 
+   case 558:
+ #line 1368 "parser.Y"
+-    {FRB->markerBpandaCreateAnglesCmd(yyvsp[-5].integer,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerBpandaCreateAnglesCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;}
+     break;
+ 
+   case 559:
+ #line 1370 "parser.Y"
+-    {FRB->markerBpandaCreateRadiusCmd(yyvsp[-5].integer,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerBpandaCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;}
+     break;
+ 
+   case 560:
+ #line 1372 "parser.Y"
+-    {FRB->markerEllipseAnnulusCreateRadiusCmd(yyvsp[-5].integer,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerEllipseAnnulusCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;}
+     break;
+ 
+   case 561:
+ #line 1374 "parser.Y"
+-    {FRB->markerEpandaCreateAnglesCmd(yyvsp[-5].integer,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerEpandaCreateAnglesCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;}
+     break;
+ 
+   case 562:
+ #line 1376 "parser.Y"
+-    {FRB->markerEpandaCreateRadiusCmd(yyvsp[-5].integer,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerEpandaCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;}
+     break;
+ 
+   case 563:
+ #line 1378 "parser.Y"
+-    {FRB->markerCpandaCreateAnglesCmd(yyvsp[-5].integer,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerCpandaCreateAnglesCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;}
+     break;
+ 
+   case 564:
+ #line 1380 "parser.Y"
+-    {FRB->markerCpandaCreateRadiusCmd(yyvsp[-5].integer,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerCpandaCreateRadiusCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)));;}
+     break;
+ 
+   case 565:
+ #line 1382 "parser.Y"
+-    {FRB->markerPolygonCreateVertexCmd(yyvsp[-6].integer,yyvsp[-2].integer,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerPolygonCreateVertexCmd((yyvsp[(1) - (7)].integer),(yyvsp[(5) - (7)].integer),Vector((yyvsp[(6) - (7)].real),(yyvsp[(7) - (7)].real)));;}
+     break;
+ 
+   case 566:
+ #line 1383 "parser.Y"
+-    {FRB->markerDeleteCmd(yyvsp[-1].integer);;}
++    {FRB->markerDeleteCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 567:
+ #line 1385 "parser.Y"
+-    {FRB->markerAnnulusDeleteRadiusCmd(yyvsp[-3].integer,yyvsp[0].integer);;}
++    {FRB->markerAnnulusDeleteRadiusCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 568:
+ #line 1387 "parser.Y"
+-    {FRB->markerBoxAnnulusDeleteRadiusCmd(yyvsp[-3].integer,yyvsp[0].integer);;}
++    {FRB->markerBoxAnnulusDeleteRadiusCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 569:
+ #line 1388 "parser.Y"
+-    {FRB->markerBpandaDeleteCmd(yyvsp[-3].integer,yyvsp[0].integer);;}
++    {FRB->markerBpandaDeleteCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 570:
+ #line 1390 "parser.Y"
+-    {FRB->markerEllipseAnnulusDeleteRadiusCmd(yyvsp[-3].integer,yyvsp[0].integer);;}
++    {FRB->markerEllipseAnnulusDeleteRadiusCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 571:
+ #line 1392 "parser.Y"
+-    {FRB->markerDeleteCallBackCmd(yyvsp[-4].integer,(CallBack::Type)yyvsp[-1].integer,yyvsp[0].str);;}
++    {FRB->markerDeleteCallBackCmd((yyvsp[(1) - (5)].integer),(CallBack::Type)(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].str));;}
+     break;
+ 
+   case 572:
+ #line 1393 "parser.Y"
+-    {FRB->markerEpandaDeleteCmd(yyvsp[-3].integer,yyvsp[0].integer);;}
++    {FRB->markerEpandaDeleteCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 573:
+ #line 1394 "parser.Y"
+-    {FRB->markerCpandaDeleteCmd(yyvsp[-3].integer,yyvsp[0].integer);;}
++    {FRB->markerCpandaDeleteCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 574:
+ #line 1396 "parser.Y"
+-    {FRB->markerPolygonDeleteVertexCmd(yyvsp[-4].integer,yyvsp[0].integer);;}
++    {FRB->markerPolygonDeleteVertexCmd((yyvsp[(1) - (5)].integer),(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 575:
+ #line 1397 "parser.Y"
+-    {FRB->markerDeleteTagCmd(yyvsp[-2].integer);;}
++    {FRB->markerDeleteTagCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 576:
+ #line 1398 "parser.Y"
+-    {FRB->markerDeleteTagCmd(yyvsp[-3].integer,yyvsp[0].str);;}
++    {FRB->markerDeleteTagCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].str));;}
+     break;
+ 
+   case 577:
+ #line 1399 "parser.Y"
+-    {FRB->markerDeleteTagCmd(yyvsp[-3].integer,yyvsp[0].integer);;}
++    {FRB->markerDeleteTagCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 578:
+ #line 1400 "parser.Y"
+-    {FRB->markerEditBeginCmd(yyvsp[-3].integer,yyvsp[0].integer);;}
++    {FRB->markerEditBeginCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 579:
+ #line 1404 "parser.Y"
+-    {FRB->markerEllipseRadiusCmd(yyvsp[-6].integer, 
+-	    Vector(yyvsp[-3].real, yyvsp[-2].real),
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerEllipseRadiusCmd((yyvsp[(1) - (7)].integer), 
++	    Vector((yyvsp[(4) - (7)].real), (yyvsp[(5) - (7)].real)),
++	    (CoordSystem)(yyvsp[(6) - (7)].integer), (SkyFormat)(yyvsp[(7) - (7)].integer));;}
+     break;
+ 
+   case 580:
+ #line 1410 "parser.Y"
+-    {FRB->markerEllipseAnnulusRadiusCmd(yyvsp[-8].integer, 
+-	    Vector(yyvsp[-5].real,yyvsp[-4].real), Vector(yyvsp[-3].real,yyvsp[-3].real*yyvsp[-4].real/yyvsp[-5].real), yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerEllipseAnnulusRadiusCmd((yyvsp[(1) - (9)].integer), 
++	    Vector((yyvsp[(4) - (9)].real),(yyvsp[(5) - (9)].real)), Vector((yyvsp[(6) - (9)].real),(yyvsp[(6) - (9)].real)*(yyvsp[(5) - (9)].real)/(yyvsp[(4) - (9)].real)), (yyvsp[(7) - (9)].integer),
++	    (CoordSystem)(yyvsp[(8) - (9)].integer), (SkyFormat)(yyvsp[(9) - (9)].integer));;}
+     break;
+ 
+   case 581:
+ #line 1415 "parser.Y"
+-    {FRB->markerEllipseAnnulusRadiusCmd(yyvsp[-5].integer,
+-	    yyvsp[-2].str, (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerEllipseAnnulusRadiusCmd((yyvsp[(1) - (6)].integer),
++	    (yyvsp[(4) - (6)].str), (CoordSystem)(yyvsp[(5) - (6)].integer), (SkyFormat)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 582:
+ #line 1421 "parser.Y"
+-    {FRB->markerEpandaEditCmd(yyvsp[-11].integer, 
+-	    yyvsp[-8].real, yyvsp[-7].real, yyvsp[-6].integer,
+-	    Vector(yyvsp[-5].real,yyvsp[-4].real), Vector(yyvsp[-3].real,yyvsp[-3].real*yyvsp[-4].real/yyvsp[-5].real), yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->markerEpandaEditCmd((yyvsp[(1) - (12)].integer), 
++	    (yyvsp[(4) - (12)].real), (yyvsp[(5) - (12)].real), (yyvsp[(6) - (12)].integer),
++	    Vector((yyvsp[(7) - (12)].real),(yyvsp[(8) - (12)].real)), Vector((yyvsp[(9) - (12)].real),(yyvsp[(9) - (12)].real)*(yyvsp[(8) - (12)].real)/(yyvsp[(7) - (12)].real)), (yyvsp[(10) - (12)].integer),
++	    (CoordSystem)(yyvsp[(11) - (12)].integer), (SkyFrame)(yyvsp[(12) - (12)].integer));;}
+     break;
+ 
+   case 583:
+ #line 1429 "parser.Y"
+-    {FRB->markerEpandaEditCmd(yyvsp[-8].integer, 
+-	    yyvsp[-5].str, yyvsp[-4].str, 
+-	    (CoordSystem)yyvsp[-3].integer, (SkyFrame)yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerEpandaEditCmd((yyvsp[(1) - (9)].integer), 
++	    (yyvsp[(4) - (9)].str), (yyvsp[(5) - (9)].str), 
++	    (CoordSystem)(yyvsp[(6) - (9)].integer), (SkyFrame)(yyvsp[(7) - (9)].integer),
++	    (CoordSystem)(yyvsp[(8) - (9)].integer), (SkyFormat)(yyvsp[(9) - (9)].integer));;}
+     break;
+ 
+   case 584:
+ #line 1433 "parser.Y"
+-    {FRB->markerFontCmd(yyvsp[-2].integer,yyvsp[0].str);;}
++    {FRB->markerFontCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 585:
+ #line 1434 "parser.Y"
+-    {FRB->markerHighliteCmd(yyvsp[-1].integer);;}
++    {FRB->markerHighliteCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 586:
+ #line 1435 "parser.Y"
+-    {FRB->markerHighliteOnlyCmd(yyvsp[-2].integer);;}
++    {FRB->markerHighliteOnlyCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 587:
+ #line 1436 "parser.Y"
+-    {FRB->markerLineArrowCmd(yyvsp[-4].integer,yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FRB->markerLineArrowCmd((yyvsp[(1) - (5)].integer),(yyvsp[(4) - (5)].integer),(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 588:
+ #line 1438 "parser.Y"
+-    {FRB->markerLineCmd(yyvsp[-6].integer, Vector(yyvsp[-1].vector), Vector(yyvsp[0].vector), 
+-	    (CoordSystem)yyvsp[-3].integer, (SkyFrame)yyvsp[-2].integer);;}
++    {FRB->markerLineCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(6) - (7)].vector)), Vector((yyvsp[(7) - (7)].vector)), 
++	    (CoordSystem)(yyvsp[(4) - (7)].integer), (SkyFrame)(yyvsp[(5) - (7)].integer));;}
+     break;
+ 
+   case 589:
+ #line 1441 "parser.Y"
+-    {FRB->markerMoveCmd(yyvsp[-3].integer, Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerMoveCmd((yyvsp[(1) - (4)].integer), Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;}
+     break;
+ 
+   case 590:
+ #line 1442 "parser.Y"
+-    {FRB->markerFrontCmd(yyvsp[-2].integer);;}
++    {FRB->markerFrontCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 591:
+ #line 1443 "parser.Y"
+-    {FRB->markerBackCmd(yyvsp[-2].integer);;}
++    {FRB->markerBackCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 592:
+ #line 1445 "parser.Y"
+-    {FRB->markerMoveToCmd(yyvsp[-5].integer, Vector(yyvsp[-1].real,yyvsp[0].real), (InternalSystem)yyvsp[-2].integer);;}
++    {FRB->markerMoveToCmd((yyvsp[(1) - (6)].integer), Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)), (InternalSystem)(yyvsp[(4) - (6)].integer));;}
+     break;
+ 
+   case 593:
+ #line 1447 "parser.Y"
+-    {FRB->markerMoveToCmd(yyvsp[-5].integer,Vector(yyvsp[0].vector),(CoordSystem)yyvsp[-2].integer,(SkyFrame)yyvsp[-1].integer);;}
++    {FRB->markerMoveToCmd((yyvsp[(1) - (6)].integer),Vector((yyvsp[(6) - (6)].vector)),(CoordSystem)(yyvsp[(4) - (6)].integer),(SkyFrame)(yyvsp[(5) - (6)].integer));;}
+     break;
+ 
+   case 594:
+ #line 1452 "parser.Y"
+-    {FRB->markerCpandaEditCmd(yyvsp[-10].integer, 
+-	    yyvsp[-7].real, yyvsp[-6].real, yyvsp[-5].integer, 
+-	    yyvsp[-4].real, yyvsp[-3].real, yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->markerCpandaEditCmd((yyvsp[(1) - (11)].integer), 
++	    (yyvsp[(4) - (11)].real), (yyvsp[(5) - (11)].real), (yyvsp[(6) - (11)].integer), 
++	    (yyvsp[(7) - (11)].real), (yyvsp[(8) - (11)].real), (yyvsp[(9) - (11)].integer),
++	    (CoordSystem)(yyvsp[(10) - (11)].integer), (SkyFrame)(yyvsp[(11) - (11)].integer));;}
+     break;
+ 
+   case 595:
+ #line 1460 "parser.Y"
+-    {FRB->markerCpandaEditCmd(yyvsp[-8].integer, 
+-	    yyvsp[-5].str, yyvsp[-4].str,
+-	    (CoordSystem)yyvsp[-3].integer, (SkyFrame)yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerCpandaEditCmd((yyvsp[(1) - (9)].integer), 
++	    (yyvsp[(4) - (9)].str), (yyvsp[(5) - (9)].str),
++	    (CoordSystem)(yyvsp[(6) - (9)].integer), (SkyFrame)(yyvsp[(7) - (9)].integer),
++	    (CoordSystem)(yyvsp[(8) - (9)].integer), (SkyFormat)(yyvsp[(9) - (9)].integer));;}
+     break;
+ 
+   case 596:
+ #line 1465 "parser.Y"
+-    {FRB->markerPolygonResetCmd(yyvsp[-6].integer, Vector(yyvsp[-3].real,yyvsp[-2].real),
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerPolygonResetCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real)),
++	    (CoordSystem)(yyvsp[(6) - (7)].integer), (SkyFormat)(yyvsp[(7) - (7)].integer));;}
+     break;
+ 
+   case 597:
+ #line 1469 "parser.Y"
+-    {FRB->markerProjectionCmd(yyvsp[-9].integer, Vector(yyvsp[-5].vector), Vector(yyvsp[-4].vector),
+-	    (CoordSystem)yyvsp[-7].integer, (SkyFrame)yyvsp[-6].integer, yyvsp[-3].real, yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerProjectionCmd((yyvsp[(1) - (10)].integer), Vector((yyvsp[(5) - (10)].vector)), Vector((yyvsp[(6) - (10)].vector)),
++	    (CoordSystem)(yyvsp[(3) - (10)].integer), (SkyFrame)(yyvsp[(4) - (10)].integer), (yyvsp[(7) - (10)].real), (yyvsp[(8) - (10)].integer),
++	    (CoordSystem)(yyvsp[(9) - (10)].integer), (SkyFormat)(yyvsp[(10) - (10)].integer));;}
+     break;
+ 
+   case 598:
+ #line 1473 "parser.Y"
+-    {FRB->markerProjectionSystemCmd(yyvsp[-4].integer,(CoordSystem)yyvsp[-1].integer,(SkyFrame)yyvsp[0].integer);;}
++    {FRB->markerProjectionSystemCmd((yyvsp[(1) - (5)].integer),(CoordSystem)(yyvsp[(4) - (5)].integer),(SkyFrame)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 599:
+ #line 1475 "parser.Y"
+-    {FRB->markerPropertyCmd(yyvsp[-3].integer,yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FRB->markerPropertyCmd((yyvsp[(1) - (4)].integer),(yyvsp[(3) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 600:
+ #line 1476 "parser.Y"
+-    {FRB->markerRotateBeginCmd(yyvsp[-2].integer);;}
++    {FRB->markerRotateBeginCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 601:
+ #line 1478 "parser.Y"
+-    {FRB->markerRulerPointCmd(yyvsp[-6].integer, Vector(yyvsp[-1].vector), Vector(yyvsp[0].vector),
+-	    (CoordSystem)yyvsp[-3].integer, (SkyFrame)yyvsp[-2].integer);;}
++    {FRB->markerRulerPointCmd((yyvsp[(1) - (7)].integer), Vector((yyvsp[(6) - (7)].vector)), Vector((yyvsp[(7) - (7)].vector)),
++	    (CoordSystem)(yyvsp[(4) - (7)].integer), (SkyFrame)(yyvsp[(5) - (7)].integer));;}
+     break;
+ 
+   case 602:
+ #line 1481 "parser.Y"
+-    {FRB->markerRulerSystemCmd(yyvsp[-6].integer, (CoordSystem)yyvsp[-3].integer, (SkyFrame)yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->markerRulerSystemCmd((yyvsp[(1) - (7)].integer), (CoordSystem)(yyvsp[(4) - (7)].integer), (SkyFrame)(yyvsp[(5) - (7)].integer),
++	    (CoordSystem)(yyvsp[(6) - (7)].integer), (SkyFormat)(yyvsp[(7) - (7)].integer));;}
+     break;
+ 
+   case 603:
+ #line 1483 "parser.Y"
+-    {FRB->markerSelectCmd(yyvsp[-1].integer);;}
++    {FRB->markerSelectCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 604:
+ #line 1484 "parser.Y"
+-    {FRB->markerSelectOnlyCmd(yyvsp[-2].integer);;}
++    {FRB->markerSelectOnlyCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 605:
+ #line 1485 "parser.Y"
+-    {FRB->markerTagCmd(yyvsp[-2].integer,yyvsp[0].str);;}
++    {FRB->markerTagCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 606:
+ #line 1486 "parser.Y"
+-    {FRB->markerTextCmd(yyvsp[-2].integer,yyvsp[0].str);;}
++    {FRB->markerTextCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 607:
+ #line 1487 "parser.Y"
+-    {FRB->markerUnhighliteCmd(yyvsp[-1].integer);;}
++    {FRB->markerUnhighliteCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 608:
+ #line 1488 "parser.Y"
+-    {FRB->markerUnselectCmd(yyvsp[-1].integer);;}
++    {FRB->markerUnselectCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 609:
+ #line 1489 "parser.Y"
+-    {FRB->markerVectorArrowCmd(yyvsp[-3].integer,yyvsp[0].integer);;}
++    {FRB->markerVectorArrowCmd((yyvsp[(1) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 610:
+ #line 1492 "parser.Y"
+-    {FRB->markerVectorCmd(yyvsp[-9].integer, Vector(yyvsp[-4].vector), (CoordSystem)yyvsp[-6].integer, (SkyFrame)yyvsp[-5].integer,
+-	    yyvsp[-1].real, (CoordSystem)yyvsp[-3].integer, (SkyFormat)yyvsp[-2].integer, yyvsp[0].real);;}
++    {FRB->markerVectorCmd((yyvsp[(1) - (10)].integer), Vector((yyvsp[(6) - (10)].vector)), (CoordSystem)(yyvsp[(4) - (10)].integer), (SkyFrame)(yyvsp[(5) - (10)].integer),
++	    (yyvsp[(9) - (10)].real), (CoordSystem)(yyvsp[(7) - (10)].integer), (SkyFormat)(yyvsp[(8) - (10)].integer), (yyvsp[(10) - (10)].real));;}
+     break;
+ 
+   case 611:
+ #line 1494 "parser.Y"
+-    {FRB->markerLineWidthCmd(yyvsp[-2].integer,yyvsp[0].integer);;}
++    {FRB->markerLineWidthCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 612:
+@@ -6671,37 +7004,37 @@
+ 
+   case 613:
+ #line 1498 "parser.Y"
+-    {FRB->markerHighliteOnlyCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerHighliteOnlyCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;}
+     break;
+ 
+   case 614:
+ #line 1500 "parser.Y"
+-    {FRB->markerHighliteToggleCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerHighliteToggleCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;}
+     break;
+ 
+   case 618:
+ #line 1505 "parser.Y"
+-    {FRB->markerPreserveCmd(yyvsp[0].integer);;}
++    {FRB->markerPreserveCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 619:
+ #line 1506 "parser.Y"
+-    {FRB->markerPropertyCmd(yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FRB->markerPropertyCmd((yyvsp[(2) - (3)].integer),(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 620:
+ #line 1508 "parser.Y"
+-    {FRB->markerPropertyCmd(yyvsp[-3].integer,yyvsp[-2].integer,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerPropertyCmd((yyvsp[(2) - (5)].integer),(yyvsp[(3) - (5)].integer),Vector((yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].real)));;}
+     break;
+ 
+   case 621:
+ #line 1510 "parser.Y"
+-    {FRB->markerRotateBeginCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerRotateBeginCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;}
+     break;
+ 
+   case 622:
+ #line 1512 "parser.Y"
+-    {FRB->markerRotateMotionCmd(Vector(yyvsp[-2].real,yyvsp[-1].real),yyvsp[0].integer);;}
++    {FRB->markerRotateMotionCmd(Vector((yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].real)),(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 623:
+@@ -6711,108 +7044,108 @@
+ 
+   case 624:
+ #line 1515 "parser.Y"
+-    {FRB->markerSaveCmd(yyvsp[-6].str, (FrameBase::MarkerFormat)yyvsp[-5].integer,
+-	    (CoordSystem)yyvsp[-4].integer, (SkyFrame)yyvsp[-3].integer, (SkyFormat)yyvsp[-2].integer, yyvsp[-1].integer, yyvsp[0].integer);;}
++    {FRB->markerSaveCmd((yyvsp[(2) - (8)].str), (FrameBase::MarkerFormat)(yyvsp[(3) - (8)].integer),
++	    (CoordSystem)(yyvsp[(4) - (8)].integer), (SkyFrame)(yyvsp[(5) - (8)].integer), (SkyFormat)(yyvsp[(6) - (8)].integer), (yyvsp[(7) - (8)].integer), (yyvsp[(8) - (8)].integer));;}
+     break;
+ 
+   case 625:
+ #line 1517 "parser.Y"
+-    {FRB->markerSaveTemplateCmd(yyvsp[0].str);;}
++    {FRB->markerSaveTemplateCmd((yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 627:
+ #line 1520 "parser.Y"
+-    {FRB->markerShowCmd(yyvsp[0].integer);;}
++    {FRB->markerShowCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 628:
+ #line 1522 "parser.Y"
+-    {FRB->markerColorCmd(yyvsp[-2].str,yyvsp[0].str);;}
++    {FRB->markerColorCmd((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 629:
+ #line 1523 "parser.Y"
+-    {FRB->markerCopyCmd(yyvsp[-1].str);;}
++    {FRB->markerCopyCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 630:
+ #line 1524 "parser.Y"
+-    {FRB->markerDeleteCmd(yyvsp[-1].str);;}
++    {FRB->markerDeleteCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 631:
+ #line 1525 "parser.Y"
+-    {FRB->markerCutCmd(yyvsp[-1].str);;}
++    {FRB->markerCutCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 632:
+ #line 1526 "parser.Y"
+-    {FRB->markerFontCmd(yyvsp[-2].str,yyvsp[0].str);;}
++    {FRB->markerFontCmd((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 633:
+ #line 1527 "parser.Y"
+-    {FRB->markerHighliteCmd(yyvsp[-1].str);;}
++    {FRB->markerHighliteCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 634:
+ #line 1528 "parser.Y"
+-    {FRB->markerHighliteOnlyCmd(yyvsp[-2].str);;}
++    {FRB->markerHighliteOnlyCmd((yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 635:
+ #line 1529 "parser.Y"
+-    {FRB->markerMoveCmd(yyvsp[-3].str,Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerMoveCmd((yyvsp[(1) - (4)].str),Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;}
+     break;
+ 
+   case 636:
+ #line 1530 "parser.Y"
+-    {FRB->markerFrontCmd(yyvsp[-2].str);;}
++    {FRB->markerFrontCmd((yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 637:
+ #line 1531 "parser.Y"
+-    {FRB->markerBackCmd(yyvsp[-2].str);;}
++    {FRB->markerBackCmd((yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 638:
+ #line 1533 "parser.Y"
+-    {FRB->markerMoveToCmd(yyvsp[-5].str,Vector(yyvsp[0].vector),(CoordSystem)yyvsp[-2].integer,(SkyFrame)yyvsp[-1].integer);;}
++    {FRB->markerMoveToCmd((yyvsp[(1) - (6)].str),Vector((yyvsp[(6) - (6)].vector)),(CoordSystem)(yyvsp[(4) - (6)].integer),(SkyFrame)(yyvsp[(5) - (6)].integer));;}
+     break;
+ 
+   case 639:
+ #line 1535 "parser.Y"
+-    {FRB->markerPropertyCmd(yyvsp[-3].str,yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FRB->markerPropertyCmd((yyvsp[(1) - (4)].str),(yyvsp[(3) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 640:
+ #line 1536 "parser.Y"
+-    {FRB->markerSelectCmd(yyvsp[-1].str);;}
++    {FRB->markerSelectCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 641:
+ #line 1537 "parser.Y"
+-    {FRB->markerSelectOnlyCmd(yyvsp[-2].str);;}
++    {FRB->markerSelectOnlyCmd((yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 642:
+ #line 1538 "parser.Y"
+-    {FRB->markerUnhighliteCmd(yyvsp[-1].str);;}
++    {FRB->markerUnhighliteCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 643:
+ #line 1539 "parser.Y"
+-    {FRB->markerUnselectCmd(yyvsp[-1].str);;}
++    {FRB->markerUnselectCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 644:
+ #line 1541 "parser.Y"
+-    {FRB->markerTagEditCmd(yyvsp[-1].str,yyvsp[0].str);;}
++    {FRB->markerTagEditCmd((yyvsp[(3) - (4)].str),(yyvsp[(4) - (4)].str));;}
+     break;
+ 
+   case 645:
+ #line 1542 "parser.Y"
+-    {FRB->markerTagDeleteCmd(yyvsp[0].str);;}
++    {FRB->markerTagDeleteCmd((yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 646:
+@@ -6822,12 +7155,12 @@
+ 
+   case 647:
+ #line 1544 "parser.Y"
+-    {FRB->markerTagCmd(yyvsp[0].str);;}
++    {FRB->markerTagCmd((yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 648:
+ #line 1545 "parser.Y"
+-    {FRB->markerTagUpdateCmd(yyvsp[0].str);;}
++    {FRB->markerTagUpdateCmd((yyvsp[(3) - (3)].str));;}
+     break;
+ 
+   case 649:
+@@ -6837,7 +7170,7 @@
+ 
+   case 650:
+ #line 1549 "parser.Y"
+-    {FRB->markerPasteCmd((CoordSystem)yyvsp[-1].integer,(SkyFrame)yyvsp[0].integer);;}
++    {FRB->markerPasteCmd((CoordSystem)(yyvsp[(2) - (3)].integer),(SkyFrame)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 651:
+@@ -6857,197 +7190,197 @@
+ 
+   case 654:
+ #line 1553 "parser.Y"
+-    {FRB->markerLineWidthCmd(yyvsp[0].integer);;}
++    {FRB->markerLineWidthCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 655:
+ #line 1556 "parser.Y"
+-    {yyval.integer = CallBack::SELECTCB;;}
++    {(yyval.integer) = CallBack::SELECTCB;;}
+     break;
+ 
+   case 656:
+ #line 1557 "parser.Y"
+-    {yyval.integer = CallBack::UNSELECTCB;;}
++    {(yyval.integer) = CallBack::UNSELECTCB;;}
+     break;
+ 
+   case 657:
+ #line 1558 "parser.Y"
+-    {yyval.integer = CallBack::HIGHLITECB;;}
++    {(yyval.integer) = CallBack::HIGHLITECB;;}
+     break;
+ 
+   case 658:
+ #line 1559 "parser.Y"
+-    {yyval.integer = CallBack::UNHIGHLITECB;;}
++    {(yyval.integer) = CallBack::UNHIGHLITECB;;}
+     break;
+ 
+   case 659:
+ #line 1560 "parser.Y"
+-    {yyval.integer = CallBack::MOVEBEGINCB;;}
++    {(yyval.integer) = CallBack::MOVEBEGINCB;;}
+     break;
+ 
+   case 660:
+ #line 1561 "parser.Y"
+-    {yyval.integer = CallBack::MOVECB;;}
++    {(yyval.integer) = CallBack::MOVECB;;}
+     break;
+ 
+   case 661:
+ #line 1562 "parser.Y"
+-    {yyval.integer = CallBack::MOVEENDCB;;}
++    {(yyval.integer) = CallBack::MOVEENDCB;;}
+     break;
+ 
+   case 662:
+ #line 1563 "parser.Y"
+-    {yyval.integer = CallBack::EDITBEGINCB;;}
++    {(yyval.integer) = CallBack::EDITBEGINCB;;}
+     break;
+ 
+   case 663:
+ #line 1564 "parser.Y"
+-    {yyval.integer = CallBack::EDITCB;;}
++    {(yyval.integer) = CallBack::EDITCB;;}
+     break;
+ 
+   case 664:
+ #line 1565 "parser.Y"
+-    {yyval.integer = CallBack::EDITENDCB;;}
++    {(yyval.integer) = CallBack::EDITENDCB;;}
+     break;
+ 
+   case 665:
+ #line 1566 "parser.Y"
+-    {yyval.integer = CallBack::ROTATEBEGINCB;;}
++    {(yyval.integer) = CallBack::ROTATEBEGINCB;;}
+     break;
+ 
+   case 666:
+ #line 1567 "parser.Y"
+-    {yyval.integer = CallBack::ROTATECB;;}
++    {(yyval.integer) = CallBack::ROTATECB;;}
+     break;
+ 
+   case 667:
+ #line 1568 "parser.Y"
+-    {yyval.integer = CallBack::ROTATEENDCB;;}
++    {(yyval.integer) = CallBack::ROTATEENDCB;;}
+     break;
+ 
+   case 668:
+ #line 1569 "parser.Y"
+-    {yyval.integer = CallBack::DELETECB;;}
++    {(yyval.integer) = CallBack::DELETECB;;}
+     break;
+ 
+   case 669:
+ #line 1570 "parser.Y"
+-    {yyval.integer = CallBack::TEXTCB;;}
++    {(yyval.integer) = CallBack::TEXTCB;;}
+     break;
+ 
+   case 670:
+ #line 1571 "parser.Y"
+-    {yyval.integer = CallBack::COLORCB;;}
++    {(yyval.integer) = CallBack::COLORCB;;}
+     break;
+ 
+   case 671:
+ #line 1572 "parser.Y"
+-    {yyval.integer = CallBack::LINEWIDTHCB;;}
++    {(yyval.integer) = CallBack::LINEWIDTHCB;;}
+     break;
+ 
+   case 672:
+ #line 1573 "parser.Y"
+-    {yyval.integer = CallBack::PROPERTYCB;;}
++    {(yyval.integer) = CallBack::PROPERTYCB;;}
+     break;
+ 
+   case 673:
+ #line 1574 "parser.Y"
+-    {yyval.integer = CallBack::FONTCB;;}
++    {(yyval.integer) = CallBack::FONTCB;;}
+     break;
+ 
+   case 674:
+ #line 1575 "parser.Y"
+-    {yyval.integer = CallBack::UPDATECB;;}
++    {(yyval.integer) = CallBack::UPDATECB;;}
+     break;
+ 
+   case 675:
+ #line 1582 "parser.Y"
+-    {FRB->createCircleCmd(Vector(yyvsp[-3].real,yyvsp[-2].real)*FRB->getCanvasToRef(),
+-	    yyvsp[-1].real,
++    {FRB->createCircleCmd(Vector((yyvsp[(2) - (5)].real),(yyvsp[(3) - (5)].real))*FRB->getCanvasToRef(),
++	    (yyvsp[(4) - (5)].real),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 676:
+ #line 1589 "parser.Y"
+-    {FRB->createAnnulusCmd(Vector(yyvsp[-5].real,yyvsp[-4].real)*FRB->getCanvasToRef(),
+-	    yyvsp[-3].real,yyvsp[-2].real,yyvsp[-1].integer,
++    {FRB->createAnnulusCmd(Vector((yyvsp[(2) - (7)].real),(yyvsp[(3) - (7)].real))*FRB->getCanvasToRef(),
++	    (yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real),(yyvsp[(6) - (7)].integer),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 677:
+ #line 1597 "parser.Y"
+-    {FRB->createCpandaCmd(Vector(yyvsp[-8].real,yyvsp[-7].real)*FRB->getCanvasToRef(),
+-	    yyvsp[-6].real,yyvsp[-5].real,yyvsp[-4].integer,
+-	    yyvsp[-3].real,yyvsp[-2].real,yyvsp[-1].integer,
++    {FRB->createCpandaCmd(Vector((yyvsp[(2) - (10)].real),(yyvsp[(3) - (10)].real))*FRB->getCanvasToRef(),
++	    (yyvsp[(4) - (10)].real),(yyvsp[(5) - (10)].real),(yyvsp[(6) - (10)].integer),
++	    (yyvsp[(7) - (10)].real),(yyvsp[(8) - (10)].real),(yyvsp[(9) - (10)].integer),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 678:
+ #line 1607 "parser.Y"
+-    {FRB->createEllipseCmd(Vector(yyvsp[-5].real,yyvsp[-4].real)*FRB->getCanvasToRef(),
+-	    Vector(yyvsp[-3].real,yyvsp[-2].real),
+-	    yyvsp[-1].real,
++    {FRB->createEllipseCmd(Vector((yyvsp[(2) - (7)].real),(yyvsp[(3) - (7)].real))*FRB->getCanvasToRef(),
++	    Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real)),
++	    (yyvsp[(6) - (7)].real),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 679:
+ #line 1616 "parser.Y"
+-    {FRB->createEllipseAnnulusCmd(Vector(yyvsp[-7].real,yyvsp[-6].real)*FRB->getCanvasToRef(),
+-	    Vector(yyvsp[-5].real,yyvsp[-4].real), 
+-	    Vector(yyvsp[-3].real,yyvsp[-3].real*yyvsp[-5].real/yyvsp[-4].real),yyvsp[-2].integer,
+-	    yyvsp[-1].real,
++    {FRB->createEllipseAnnulusCmd(Vector((yyvsp[(2) - (9)].real),(yyvsp[(3) - (9)].real))*FRB->getCanvasToRef(),
++	    Vector((yyvsp[(4) - (9)].real),(yyvsp[(5) - (9)].real)), 
++	    Vector((yyvsp[(6) - (9)].real),(yyvsp[(6) - (9)].real)*(yyvsp[(4) - (9)].real)/(yyvsp[(5) - (9)].real)),(yyvsp[(7) - (9)].integer),
++	    (yyvsp[(8) - (9)].real),
+ 	    currentColor,currentWidth,currentFont, 
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 680:
+ #line 1627 "parser.Y"
+-    {FRB->createEpandaCmd(Vector(yyvsp[-10].real,yyvsp[-9].real)*FRB->getCanvasToRef(),
+-	    yyvsp[-8].real,yyvsp[-7].real,yyvsp[-6].integer,
+-	    Vector(yyvsp[-5].real,yyvsp[-4].real),
+-	    Vector(yyvsp[-3].real,yyvsp[-3].real*yyvsp[-5].real/yyvsp[-4].real),yyvsp[-2].integer,
+-	    yyvsp[-1].real,
++    {FRB->createEpandaCmd(Vector((yyvsp[(2) - (12)].real),(yyvsp[(3) - (12)].real))*FRB->getCanvasToRef(),
++	    (yyvsp[(4) - (12)].real),(yyvsp[(5) - (12)].real),(yyvsp[(6) - (12)].integer),
++	    Vector((yyvsp[(7) - (12)].real),(yyvsp[(8) - (12)].real)),
++	    Vector((yyvsp[(9) - (12)].real),(yyvsp[(9) - (12)].real)*(yyvsp[(7) - (12)].real)/(yyvsp[(8) - (12)].real)),(yyvsp[(10) - (12)].integer),
++	    (yyvsp[(11) - (12)].real),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 681:
+ #line 1639 "parser.Y"
+-    {FRB->createBoxCmd(Vector(yyvsp[-5].real,yyvsp[-4].real)*FRB->getCanvasToRef(),
+-	    Vector(yyvsp[-3].real,yyvsp[-2].real),
+-	    yyvsp[-1].real,
++    {FRB->createBoxCmd(Vector((yyvsp[(2) - (7)].real),(yyvsp[(3) - (7)].real))*FRB->getCanvasToRef(),
++	    Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real)),
++	    (yyvsp[(6) - (7)].real),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 682:
+ #line 1648 "parser.Y"
+-    {FRB->createBoxAnnulusCmd(Vector(yyvsp[-7].real,yyvsp[-6].real)*FRB->getCanvasToRef(),
+-	    Vector(yyvsp[-5].real,yyvsp[-4].real),Vector(yyvsp[-3].real,yyvsp[-3].real*yyvsp[-5].real/yyvsp[-4].real),yyvsp[-2].integer,
+-	    yyvsp[-1].real,
++    {FRB->createBoxAnnulusCmd(Vector((yyvsp[(2) - (9)].real),(yyvsp[(3) - (9)].real))*FRB->getCanvasToRef(),
++	    Vector((yyvsp[(4) - (9)].real),(yyvsp[(5) - (9)].real)),Vector((yyvsp[(6) - (9)].real),(yyvsp[(6) - (9)].real)*(yyvsp[(4) - (9)].real)/(yyvsp[(5) - (9)].real)),(yyvsp[(7) - (9)].integer),
++	    (yyvsp[(8) - (9)].real),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 683:
+ #line 1658 "parser.Y"
+-    {FRB->createBpandaCmd(Vector(yyvsp[-10].real,yyvsp[-9].real)*FRB->getCanvasToRef(),
+-	    yyvsp[-8].real,yyvsp[-7].real,yyvsp[-6].integer,
+-	    Vector(yyvsp[-5].real,yyvsp[-4].real),
+-	    Vector(yyvsp[-3].real,yyvsp[-3].real*yyvsp[-5].real/yyvsp[-4].real),yyvsp[-2].integer,
+-	    yyvsp[-1].real,
++    {FRB->createBpandaCmd(Vector((yyvsp[(2) - (12)].real),(yyvsp[(3) - (12)].real))*FRB->getCanvasToRef(),
++	    (yyvsp[(4) - (12)].real),(yyvsp[(5) - (12)].real),(yyvsp[(6) - (12)].integer),
++	    Vector((yyvsp[(7) - (12)].real),(yyvsp[(8) - (12)].real)),
++	    Vector((yyvsp[(9) - (12)].real),(yyvsp[(9) - (12)].real)*(yyvsp[(7) - (12)].real)/(yyvsp[(8) - (12)].real)),(yyvsp[(10) - (12)].integer),
++	    (yyvsp[(11) - (12)].real),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 684:
+ #line 1669 "parser.Y"
+-    {FRB->createLineCmd(Vector(yyvsp[-4].real,yyvsp[-3].real)*FRB->getCanvasToRef(),
+-	    Vector(yyvsp[-2].real,yyvsp[-1].real)*FRB->getCanvasToRef(),
++    {FRB->createLineCmd(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real))*FRB->getCanvasToRef(),
++	    Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real))*FRB->getCanvasToRef(),
+ 	    0, 0,
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+@@ -7055,8 +7388,8 @@
+ 
+   case 685:
+ #line 1677 "parser.Y"
+-    {FRB->createVectCmd(Vector(yyvsp[-4].real,yyvsp[-3].real)*FRB->getCanvasToRef(),
+-	    Vector(yyvsp[-2].real,yyvsp[-1].real)*FRB->getCanvasToRef(),
++    {FRB->createVectCmd(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real))*FRB->getCanvasToRef(),
++	    Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real))*FRB->getCanvasToRef(),
+ 	    1,
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+@@ -7064,9 +7397,9 @@
+ 
+   case 686:
+ #line 1686 "parser.Y"
+-    {FRB->createProjectionCmd(Vector(yyvsp[-5].real,yyvsp[-4].real)*FRB->getCanvasToRef(),
+-	    Vector(yyvsp[-3].real,yyvsp[-2].real)*FRB->getCanvasToRef(),
+-	    yyvsp[-1].real,
++    {FRB->createProjectionCmd(Vector((yyvsp[(2) - (7)].real),(yyvsp[(3) - (7)].real))*FRB->getCanvasToRef(),
++	    Vector((yyvsp[(4) - (7)].real),(yyvsp[(5) - (7)].real))*FRB->getCanvasToRef(),
++	    (yyvsp[(6) - (7)].real),
+ 	    NULL,NULL,
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+@@ -7074,94 +7407,94 @@
+ 
+   case 687:
+ #line 1697 "parser.Y"
+-    {FRB->createProjectionCmd(Vector(yyvsp[-7].real,yyvsp[-6].real)*FRB->getCanvasToRef(),
+-	    Vector(yyvsp[-5].real,yyvsp[-4].real)*FRB->getCanvasToRef(),
+-	    yyvsp[-3].real,
+-	    yyvsp[-2].str,yyvsp[-1].str,
++    {FRB->createProjectionCmd(Vector((yyvsp[(2) - (9)].real),(yyvsp[(3) - (9)].real))*FRB->getCanvasToRef(),
++	    Vector((yyvsp[(4) - (9)].real),(yyvsp[(5) - (9)].real))*FRB->getCanvasToRef(),
++	    (yyvsp[(6) - (9)].real),
++	    (yyvsp[(7) - (9)].str),(yyvsp[(8) - (9)].str),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 688:
+ #line 1707 "parser.Y"
+-    {FRB->createRulerCmd(Vector(yyvsp[-6].real,yyvsp[-5].real)*FRB->getCanvasToRef(),
+-	    Vector(yyvsp[-4].real,yyvsp[-3].real)*FRB->getCanvasToRef(),
+-	    (CoordSystem)yyvsp[-2].integer, (SkyFrame)yyvsp[-1].integer, PHYSICAL, DEGREES,
++    {FRB->createRulerCmd(Vector((yyvsp[(2) - (8)].real),(yyvsp[(3) - (8)].real))*FRB->getCanvasToRef(),
++	    Vector((yyvsp[(4) - (8)].real),(yyvsp[(5) - (8)].real))*FRB->getCanvasToRef(),
++	    (CoordSystem)(yyvsp[(6) - (8)].integer), (SkyFrame)(yyvsp[(7) - (8)].integer), PHYSICAL, DEGREES,
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 689:
+ #line 1715 "parser.Y"
+-    {FRB->createCirclePointCmd(Vector(yyvsp[-2].real,yyvsp[-1].real)*FRB->getCanvasToRef(),
++    {FRB->createCirclePointCmd(Vector((yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].real))*FRB->getCanvasToRef(),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 690:
+ #line 1720 "parser.Y"
+-    {FRB->createBoxPointCmd(Vector(yyvsp[-2].real,yyvsp[-1].real)*FRB->getCanvasToRef(),
++    {FRB->createBoxPointCmd(Vector((yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].real))*FRB->getCanvasToRef(),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 691:
+ #line 1725 "parser.Y"
+-    {FRB->createDiamondPointCmd(Vector(yyvsp[-2].real,yyvsp[-1].real)*FRB->getCanvasToRef(),
++    {FRB->createDiamondPointCmd(Vector((yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].real))*FRB->getCanvasToRef(),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 692:
+ #line 1730 "parser.Y"
+-    {FRB->createCrossPointCmd(Vector(yyvsp[-2].real,yyvsp[-1].real)*FRB->getCanvasToRef(),
++    {FRB->createCrossPointCmd(Vector((yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].real))*FRB->getCanvasToRef(),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 693:
+ #line 1735 "parser.Y"
+-    {FRB->createExPointCmd(Vector(yyvsp[-2].real,yyvsp[-1].real)*FRB->getCanvasToRef(),
++    {FRB->createExPointCmd(Vector((yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].real))*FRB->getCanvasToRef(),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 694:
+ #line 1740 "parser.Y"
+-    {FRB->createArrowPointCmd(Vector(yyvsp[-2].real,yyvsp[-1].real)*FRB->getCanvasToRef(),
++    {FRB->createArrowPointCmd(Vector((yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].real))*FRB->getCanvasToRef(),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 695:
+ #line 1745 "parser.Y"
+-    {FRB->createBoxCirclePointCmd(Vector(yyvsp[-2].real,yyvsp[-1].real)*FRB->getCanvasToRef(),
++    {FRB->createBoxCirclePointCmd(Vector((yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].real))*FRB->getCanvasToRef(),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 696:
+ #line 1752 "parser.Y"
+-    {FRB->createTextCmd(Vector(yyvsp[-3].real,yyvsp[-2].real)*FRB->getCanvasToRef(),
+-	    yyvsp[-1].real,
++    {FRB->createTextCmd(Vector((yyvsp[(2) - (5)].real),(yyvsp[(3) - (5)].real))*FRB->getCanvasToRef(),
++	    (yyvsp[(4) - (5)].real),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 697:
+ #line 1760 "parser.Y"
+-    {FRB->createPolygonCmd(Vector(yyvsp[-4].real,yyvsp[-3].real)*FRB->getCanvasToRef(),
+-	    Vector(yyvsp[-2].real,yyvsp[-1].real),
++    {FRB->createPolygonCmd(Vector((yyvsp[(2) - (6)].real),(yyvsp[(3) - (6)].real))*FRB->getCanvasToRef(),
++	    Vector((yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real)),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+ 
+   case 698:
+ #line 1769 "parser.Y"
+-    {FRB->createCompassCmd(Vector(yyvsp[-5].real,yyvsp[-4].real)*FRB->getCanvasToRef(), 
+-	    yyvsp[-3].real,
++    {FRB->createCompassCmd(Vector((yyvsp[(2) - (7)].real),(yyvsp[(3) - (7)].real))*FRB->getCanvasToRef(), 
++	    (yyvsp[(4) - (7)].real),
+ 	    "N", "E", 1, 1,
+-	    (CoordSystem)yyvsp[-2].integer, (SkyFrame)yyvsp[-1].integer,
++	    (CoordSystem)(yyvsp[(5) - (7)].integer), (SkyFrame)(yyvsp[(6) - (7)].integer),
+ 	    currentColor,currentWidth,currentFont,
+ 	    currentText,currentProps,NULL,taglist,cblist);;}
+     break;
+@@ -7175,22 +7508,22 @@
+ 
+   case 700:
+ #line 1782 "parser.Y"
+-    {FRB->createTemplateCmd(Vector(yyvsp[-2].real,yyvsp[-1].real)*FRB->getCanvasToRef(), yyvsp[0].str);;}
++    {FRB->createTemplateCmd(Vector((yyvsp[(2) - (4)].real),(yyvsp[(3) - (4)].real))*FRB->getCanvasToRef(), (yyvsp[(4) - (4)].str));;}
+     break;
+ 
+   case 701:
+ #line 1785 "parser.Y"
+-    {FRB->createTemplateVarCmd(Vector(yyvsp[-3].real,yyvsp[-2].real)*FRB->getCanvasToRef(), yyvsp[0].str);;}
++    {FRB->createTemplateVarCmd(Vector((yyvsp[(2) - (5)].real),(yyvsp[(3) - (5)].real))*FRB->getCanvasToRef(), (yyvsp[(5) - (5)].str));;}
+     break;
+ 
+   case 702:
+ #line 1789 "parser.Y"
+-    {FRB->markerEditBeginCmd(Vector(yyvsp[-2].real,yyvsp[-1].real),yyvsp[0].integer);;}
++    {FRB->markerEditBeginCmd(Vector((yyvsp[(2) - (4)].real),(yyvsp[(3) - (4)].real)),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 703:
+ #line 1791 "parser.Y"
+-    {FRB->markerEditMotionCmd(Vector(yyvsp[-2].real,yyvsp[-1].real),yyvsp[0].integer);;}
++    {FRB->markerEditMotionCmd(Vector((yyvsp[(2) - (4)].real),(yyvsp[(3) - (4)].real)),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 704:
+@@ -7200,32 +7533,32 @@
+ 
+   case 705:
+ #line 1795 "parser.Y"
+-    {yyval.integer = FrameBase::DS9;;}
++    {(yyval.integer) = FrameBase::DS9;;}
+     break;
+ 
+   case 706:
+ #line 1796 "parser.Y"
+-    {yyval.integer = FrameBase::CIAO;;}
++    {(yyval.integer) = FrameBase::CIAO;;}
+     break;
+ 
+   case 707:
+ #line 1797 "parser.Y"
+-    {yyval.integer = FrameBase::SAOTNG;;}
++    {(yyval.integer) = FrameBase::SAOTNG;;}
+     break;
+ 
+   case 708:
+ #line 1798 "parser.Y"
+-    {yyval.integer = FrameBase::SAOIMAGE;;}
++    {(yyval.integer) = FrameBase::SAOIMAGE;;}
+     break;
+ 
+   case 709:
+ #line 1799 "parser.Y"
+-    {yyval.integer = FrameBase::PROS;;}
++    {(yyval.integer) = FrameBase::PROS;;}
+     break;
+ 
+   case 710:
+ #line 1800 "parser.Y"
+-    {yyval.integer = FrameBase::RAWXY;;}
++    {(yyval.integer) = FrameBase::RAWXY;;}
+     break;
+ 
+   case 711:
+@@ -7240,12 +7573,12 @@
+ 
+   case 713:
+ #line 1805 "parser.Y"
+-    {FRB->getMarkerHandleCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->getMarkerHandleCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 714:
+ #line 1806 "parser.Y"
+-    {FRB->getMarkerIdCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->getMarkerIdCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 715:
+@@ -7255,220 +7588,220 @@
+ 
+   case 716:
+ #line 1809 "parser.Y"
+-    {FRB->getMarkerAngleCmd(yyvsp[-3].integer,(CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->getMarkerAngleCmd((yyvsp[(1) - (4)].integer),(CoordSystem)(yyvsp[(3) - (4)].integer), (SkyFrame)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 717:
+ #line 1811 "parser.Y"
+-    {FRB->getMarkerAnnulusRadiusCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerAnnulusRadiusCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 718:
+ #line 1813 "parser.Y"
+-    {FRB->getMarkerBoxAnnulusRadiusCmd(yyvsp[-4].integer,(CoordSystem)yyvsp[-1].integer,(SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerBoxAnnulusRadiusCmd((yyvsp[(1) - (5)].integer),(CoordSystem)(yyvsp[(4) - (5)].integer),(SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 719:
+ #line 1815 "parser.Y"
+-    {FRB->getMarkerBoxRadiusCmd(yyvsp[-4].integer,(CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerBoxRadiusCmd((yyvsp[(1) - (5)].integer),(CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 720:
+ #line 1817 "parser.Y"
+-    {FRB->getMarkerBpandaAnglesCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->getMarkerBpandaAnglesCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFrame)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 721:
+ #line 1819 "parser.Y"
+-    {FRB->getMarkerBpandaRadiusCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerBpandaRadiusCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 722:
+ #line 1821 "parser.Y"
+-    {FRB->getMarkerCenterCmd(yyvsp[-4].integer, 
+-	    (CoordSystem)yyvsp[-2].integer, (SkyFrame)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerCenterCmd((yyvsp[(1) - (5)].integer), 
++	    (CoordSystem)(yyvsp[(3) - (5)].integer), (SkyFrame)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 723:
+ #line 1824 "parser.Y"
+-    {FRB->getMarkerCircleRadiusCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerCircleRadiusCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 724:
+ #line 1825 "parser.Y"
+-    {FRB->getMarkerColorCmd(yyvsp[-1].integer);;}
++    {FRB->getMarkerColorCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 725:
+ #line 1826 "parser.Y"
+-    {FRB->getMarkerCompassArrowCmd(yyvsp[-2].integer);;}
++    {FRB->getMarkerCompassArrowCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 726:
+ #line 1827 "parser.Y"
+-    {FRB->getMarkerCompassLabelCmd(yyvsp[-2].integer);;}
++    {FRB->getMarkerCompassLabelCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 727:
+ #line 1828 "parser.Y"
+-    {FRB->getMarkerCompassSystemCmd(yyvsp[-2].integer);;}
++    {FRB->getMarkerCompassSystemCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 728:
+ #line 1830 "parser.Y"
+-    {FRB->getMarkerEllipseRadiusCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerEllipseRadiusCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 729:
+ #line 1832 "parser.Y"
+-    {FRB->getMarkerEllipseAnnulusRadiusCmd(yyvsp[-4].integer, 
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerEllipseAnnulusRadiusCmd((yyvsp[(1) - (5)].integer), 
++	    (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 730:
+ #line 1835 "parser.Y"
+-    {FRB->getMarkerEpandaAnglesCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->getMarkerEpandaAnglesCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFrame)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 731:
+ #line 1837 "parser.Y"
+-    {FRB->getMarkerEpandaRadiusCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerEpandaRadiusCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 732:
+ #line 1838 "parser.Y"
+-    {FRB->getMarkerFontCmd(yyvsp[-1].integer);;}
++    {FRB->getMarkerFontCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 733:
+ #line 1839 "parser.Y"
+-    {FRB->getMarkerLineArrowCmd(yyvsp[-2].integer);;}
++    {FRB->getMarkerLineArrowCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 734:
+ #line 1841 "parser.Y"
+-    {FRB->getMarkerLineLengthCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerLineLengthCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 735:
+ #line 1843 "parser.Y"
+-    {FRB->getMarkerLineCmd(yyvsp[-5].integer, (CoordSystem)yyvsp[-2].integer,
+-	    (SkyFrame)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerLineCmd((yyvsp[(1) - (6)].integer), (CoordSystem)(yyvsp[(4) - (6)].integer),
++	    (SkyFrame)(yyvsp[(5) - (6)].integer), (SkyFormat)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 736:
+ #line 1846 "parser.Y"
+-    {FRB->getMarkerMapLenFromRefCmd(yyvsp[-5].integer, yyvsp[-2].real,
+-	    (CoordSystem)yyvsp[-1].integer,(SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerMapLenFromRefCmd((yyvsp[(1) - (6)].integer), (yyvsp[(4) - (6)].real),
++	    (CoordSystem)(yyvsp[(5) - (6)].integer),(SkyFormat)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 737:
+ #line 1849 "parser.Y"
+-    {FRB->getMarkerCpandaAnglesCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFrame)yyvsp[0].integer);;}
++    {FRB->getMarkerCpandaAnglesCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFrame)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 738:
+ #line 1851 "parser.Y"
+-    {FRB->getMarkerCpandaRadiusCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerCpandaRadiusCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 739:
+ #line 1853 "parser.Y"
+-    {FRB->getMarkerProjectionCmd(yyvsp[-5].integer,yyvsp[-3].str,yyvsp[-2].str,yyvsp[-1].str,yyvsp[0].str);;}
++    {FRB->getMarkerProjectionCmd((yyvsp[(1) - (6)].integer),(yyvsp[(3) - (6)].str),(yyvsp[(4) - (6)].str),(yyvsp[(5) - (6)].str),(yyvsp[(6) - (6)].str));;}
+     break;
+ 
+   case 740:
+ #line 1855 "parser.Y"
+-    {FRB->getMarkerProjectionPointsCmd(yyvsp[-5].integer, (CoordSystem)yyvsp[-2].integer,
+-	    (SkyFrame)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerProjectionPointsCmd((yyvsp[(1) - (6)].integer), (CoordSystem)(yyvsp[(4) - (6)].integer),
++	    (SkyFrame)(yyvsp[(5) - (6)].integer), (SkyFormat)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 741:
+ #line 1858 "parser.Y"
+-    {FRB->getMarkerProjectionLengthCmd(yyvsp[-4].integer, 
+-	    (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerProjectionLengthCmd((yyvsp[(1) - (5)].integer), 
++	    (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 742:
+ #line 1860 "parser.Y"
+-    {FRB->getMarkerProjectionMethodCmd(yyvsp[-2].integer);;}
++    {FRB->getMarkerProjectionMethodCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 743:
+ #line 1862 "parser.Y"
+-    {FRB->getMarkerProjectionWidthCmd(yyvsp[-4].integer,(CoordSystem)yyvsp[-1].integer,(SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerProjectionWidthCmd((yyvsp[(1) - (5)].integer),(CoordSystem)(yyvsp[(4) - (5)].integer),(SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 744:
+ #line 1863 "parser.Y"
+-    {FRB->getMarkerProjectionSystemCmd(yyvsp[-2].integer);;}
++    {FRB->getMarkerProjectionSystemCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 745:
+ #line 1864 "parser.Y"
+-    {FRB->getMarkerPropertyCmd(yyvsp[-1].integer);;}
++    {FRB->getMarkerPropertyCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 746:
+ #line 1865 "parser.Y"
+-    {FRB->getMarkerPropertyCmd(yyvsp[-2].integer,yyvsp[0].integer);;}
++    {FRB->getMarkerPropertyCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 747:
+ #line 1867 "parser.Y"
+-    {FRB->getMarkerRulerLengthCmd(yyvsp[-4].integer,(CoordSystem)yyvsp[-1].integer,(SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerRulerLengthCmd((yyvsp[(1) - (5)].integer),(CoordSystem)(yyvsp[(4) - (5)].integer),(SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 748:
+ #line 1869 "parser.Y"
+-    {FRB->getMarkerRulerPointCmd(yyvsp[-5].integer, (CoordSystem)yyvsp[-2].integer,
+-	    (SkyFrame)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerRulerPointCmd((yyvsp[(1) - (6)].integer), (CoordSystem)(yyvsp[(4) - (6)].integer),
++	    (SkyFrame)(yyvsp[(5) - (6)].integer), (SkyFormat)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 749:
+ #line 1871 "parser.Y"
+-    {FRB->getMarkerRulerSystemCmd(yyvsp[-2].integer);;}
++    {FRB->getMarkerRulerSystemCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 750:
+ #line 1872 "parser.Y"
+-    {FRB->getMarkerTagCmd(yyvsp[-1].integer);;}
++    {FRB->getMarkerTagCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 751:
+ #line 1873 "parser.Y"
+-    {FRB->getMarkerTagCmd(yyvsp[-2].integer,yyvsp[0].integer);;}
++    {FRB->getMarkerTagCmd((yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 752:
+ #line 1874 "parser.Y"
+-    {FRB->getMarkerTextCmd(yyvsp[-1].integer);;}
++    {FRB->getMarkerTextCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 753:
+ #line 1875 "parser.Y"
+-    {FRB->getMarkerTypeCmd(yyvsp[-1].integer);;}
++    {FRB->getMarkerTypeCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 754:
+ #line 1876 "parser.Y"
+-    {FRB->getMarkerVectorArrowCmd(yyvsp[-2].integer);;}
++    {FRB->getMarkerVectorArrowCmd((yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 755:
+ #line 1878 "parser.Y"
+-    {FRB->getMarkerVectorLengthCmd(yyvsp[-4].integer, (CoordSystem)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerVectorLengthCmd((yyvsp[(1) - (5)].integer), (CoordSystem)(yyvsp[(4) - (5)].integer), (SkyFormat)(yyvsp[(5) - (5)].integer));;}
+     break;
+ 
+   case 756:
+ #line 1880 "parser.Y"
+-    {FRB->getMarkerVectorCmd(yyvsp[-5].integer, (CoordSystem)yyvsp[-2].integer,
+-	    (SkyFrame)yyvsp[-1].integer, (SkyFormat)yyvsp[0].integer);;}
++    {FRB->getMarkerVectorCmd((yyvsp[(1) - (6)].integer), (CoordSystem)(yyvsp[(4) - (6)].integer),
++	    (SkyFrame)(yyvsp[(5) - (6)].integer), (SkyFormat)(yyvsp[(6) - (6)].integer));;}
+     break;
+ 
+   case 757:
+ #line 1882 "parser.Y"
+-    {FRB->getMarkerLineWidthCmd(yyvsp[-1].integer);;}
++    {FRB->getMarkerLineWidthCmd((yyvsp[(1) - (2)].integer));;}
+     break;
+ 
+   case 759:
+@@ -7478,7 +7811,7 @@
+ 
+   case 760:
+ #line 1886 "parser.Y"
+-    {FRB->getMarkerPolygonSegmentCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->getMarkerPolygonSegmentCmd(Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;}
+     break;
+ 
+   case 761:
+@@ -7488,7 +7821,7 @@
+ 
+   case 762:
+ #line 1888 "parser.Y"
+-    {FRB->getMarkerPropertyCmd(yyvsp[0].integer);;}
++    {FRB->getMarkerPropertyCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 764:
+@@ -7503,27 +7836,27 @@
+ 
+   case 766:
+ #line 1894 "parser.Y"
+-    {FRB->getMarkerColorCmd(yyvsp[-1].str);;}
++    {FRB->getMarkerColorCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 767:
+ #line 1895 "parser.Y"
+-    {FRB->getMarkerFontCmd(yyvsp[-1].str);;}
++    {FRB->getMarkerFontCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 768:
+ #line 1896 "parser.Y"
+-    {FRB->getMarkerPropertyCmd(yyvsp[-2].str,yyvsp[0].integer);;}
++    {FRB->getMarkerPropertyCmd((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 769:
+ #line 1897 "parser.Y"
+-    {FRB->getMarkerTagCmd(yyvsp[-1].str);;}
++    {FRB->getMarkerTagCmd((yyvsp[(1) - (2)].str));;}
+     break;
+ 
+   case 770:
+ #line 1898 "parser.Y"
+-    {FRB->getMarkerTagNumberCmd(yyvsp[-2].str);;}
++    {FRB->getMarkerTagNumberCmd((yyvsp[(1) - (3)].str));;}
+     break;
+ 
+   case 771:
+@@ -7548,7 +7881,7 @@
+ 
+   case 775:
+ #line 1907 "parser.Y"
+-    {FRB->getMarkerSelectedCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->getMarkerSelectedCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;}
+     break;
+ 
+   case 776:
+@@ -7558,7 +7891,7 @@
+ 
+   case 777:
+ #line 1911 "parser.Y"
+-    {FRB->getMarkerHighlitedCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->getMarkerHighlitedCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;}
+     break;
+ 
+   case 778:
+@@ -7591,48 +7924,48 @@
+ 
+   case 782:
+ #line 1932 "parser.Y"
+-    {FRB->markerListCmd((FrameBase::MarkerFormat)yyvsp[-7].integer,
+-	    (CoordSystem)yyvsp[-6].integer, (SkyFrame)yyvsp[-5].integer, (SkyFormat)yyvsp[-4].integer, yyvsp[-3].integer, yyvsp[-2].integer,
++    {FRB->markerListCmd((FrameBase::MarkerFormat)(yyvsp[(1) - (8)].integer),
++	    (CoordSystem)(yyvsp[(2) - (8)].integer), (SkyFrame)(yyvsp[(3) - (8)].integer), (SkyFormat)(yyvsp[(4) - (8)].integer), (yyvsp[(5) - (8)].integer), (yyvsp[(6) - (8)].integer),
+ 	    0, propQMask, propQValue, taglist);;}
+     break;
+ 
+   case 783:
+ #line 1937 "parser.Y"
+-    {FRB->markerListCmd((FrameBase::MarkerFormat)yyvsp[-7].integer, 
+-	    (CoordSystem)yyvsp[-6].integer, (SkyFrame)yyvsp[-5].integer, (SkyFormat)yyvsp[-4].integer, yyvsp[-3].integer, yyvsp[-2].integer,
++    {FRB->markerListCmd((FrameBase::MarkerFormat)(yyvsp[(2) - (9)].integer), 
++	    (CoordSystem)(yyvsp[(3) - (9)].integer), (SkyFrame)(yyvsp[(4) - (9)].integer), (SkyFormat)(yyvsp[(5) - (9)].integer), (yyvsp[(6) - (9)].integer), (yyvsp[(7) - (9)].integer),
+ 	    1, propQMask, propQValue, taglist);;}
+     break;
+ 
+   case 784:
+ #line 1943 "parser.Y"
+-    {FRB->markerLoadCmd((FrameBase::MarkerFormat)yyvsp[-1].integer,yyvsp[0].str);;}
++    {FRB->markerLoadCmd((FrameBase::MarkerFormat)(yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 785:
+ #line 1945 "parser.Y"
+-    {FRB->markerLoadCmd((FrameBase::MarkerFormat)yyvsp[-3].integer,yyvsp[-2].str,
+-	    (CoordSystem)yyvsp[-1].integer,(SkyFrame)yyvsp[0].integer);;}
++    {FRB->markerLoadCmd((FrameBase::MarkerFormat)(yyvsp[(1) - (4)].integer),(yyvsp[(2) - (4)].str),
++	    (CoordSystem)(yyvsp[(3) - (4)].integer),(SkyFrame)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 786:
+ #line 1948 "parser.Y"
+-    {FRB->markerLoadCmd((FrameBase::MarkerFormat)yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FRB->markerLoadCmd((FrameBase::MarkerFormat)(yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 787:
+ #line 1950 "parser.Y"
+-    {FRB->markerLoadCmd((FrameBase::MarkerFormat)yyvsp[-3].integer,yyvsp[-2].integer,
+-	    (CoordSystem)yyvsp[-1].integer,(SkyFrame)yyvsp[0].integer);;}
++    {FRB->markerLoadCmd((FrameBase::MarkerFormat)(yyvsp[(1) - (4)].integer),(yyvsp[(2) - (4)].integer),
++	    (CoordSystem)(yyvsp[(3) - (4)].integer),(SkyFrame)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 788:
+ #line 1953 "parser.Y"
+-    {FRB->markerLoadFitsCmd(yyvsp[-3].str, yyvsp[-2].str, yyvsp[-1].integer, yyvsp[0].str);;}
++    {FRB->markerLoadFitsCmd((yyvsp[(2) - (5)].str), (yyvsp[(3) - (5)].str), (yyvsp[(4) - (5)].integer), (yyvsp[(5) - (5)].str));;}
+     break;
+ 
+   case 789:
+ #line 1956 "parser.Y"
+-    {FRB->markerMoveCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerMoveCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;}
+     break;
+ 
+   case 790:
+@@ -7647,12 +7980,12 @@
+ 
+   case 792:
+ #line 1959 "parser.Y"
+-    {FRB->markerMoveBeginCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerMoveBeginCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 793:
+ #line 1960 "parser.Y"
+-    {FRB->markerMoveMotionCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerMoveMotionCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 794:
+@@ -7662,82 +7995,82 @@
+ 
+   case 795:
+ #line 1963 "parser.Y"
+-    {FRB->markerMoveToCmd(Vector(yyvsp[0].vector), (CoordSystem)yyvsp[-2].integer, (SkyFrame)yyvsp[-1].integer);;}
++    {FRB->markerMoveToCmd(Vector((yyvsp[(4) - (4)].vector)), (CoordSystem)(yyvsp[(2) - (4)].integer), (SkyFrame)(yyvsp[(3) - (4)].integer));;}
+     break;
+ 
+   case 798:
+ #line 1970 "parser.Y"
+-    {setProps(&currentProps,yyvsp[-2].integer,yyvsp[0].integer);;}
++    {setProps(&currentProps,(yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 799:
+ #line 1971 "parser.Y"
+-    {strncpy(currentColor,yyvsp[0].str,16);;}
++    {strncpy(currentColor,(yyvsp[(3) - (3)].str),16);;}
+     break;
+ 
+   case 800:
+ #line 1972 "parser.Y"
+-    {currentWidth = yyvsp[0].integer;;}
++    {currentWidth = (yyvsp[(3) - (3)].integer);;}
+     break;
+ 
+   case 801:
+ #line 1973 "parser.Y"
+-    {strncpy(currentFont,yyvsp[0].str,32);;}
++    {strncpy(currentFont,(yyvsp[(3) - (3)].str),32);;}
+     break;
+ 
+   case 802:
+ #line 1974 "parser.Y"
+-    {strncpy(currentText,yyvsp[0].str,80);;}
++    {strncpy(currentText,(yyvsp[(3) - (3)].str),80);;}
+     break;
+ 
+   case 805:
+ #line 1979 "parser.Y"
+-    {yyval.integer = Marker::NONE;;}
++    {(yyval.integer) = Marker::NONE;;}
+     break;
+ 
+   case 806:
+ #line 1980 "parser.Y"
+-    {yyval.integer = Marker::SELECT;;}
++    {(yyval.integer) = Marker::SELECT;;}
+     break;
+ 
+   case 807:
+ #line 1981 "parser.Y"
+-    {yyval.integer = Marker::HIGHLITE;;}
++    {(yyval.integer) = Marker::HIGHLITE;;}
+     break;
+ 
+   case 808:
+ #line 1982 "parser.Y"
+-    {yyval.integer = Marker::EDIT;;}
++    {(yyval.integer) = Marker::EDIT;;}
+     break;
+ 
+   case 809:
+ #line 1983 "parser.Y"
+-    {yyval.integer = Marker::MOVE;;}
++    {(yyval.integer) = Marker::MOVE;;}
+     break;
+ 
+   case 810:
+ #line 1984 "parser.Y"
+-    {yyval.integer = Marker::ROTATE;;}
++    {(yyval.integer) = Marker::ROTATE;;}
+     break;
+ 
+   case 811:
+ #line 1985 "parser.Y"
+-    {yyval.integer = Marker::DELETE;;}
++    {(yyval.integer) = Marker::DELETE;;}
+     break;
+ 
+   case 812:
+ #line 1986 "parser.Y"
+-    {yyval.integer = Marker::INCLUDE;;}
++    {(yyval.integer) = Marker::INCLUDE;;}
+     break;
+ 
+   case 813:
+ #line 1987 "parser.Y"
+-    {yyval.integer = Marker::SOURCE;;}
++    {(yyval.integer) = Marker::SOURCE;;}
+     break;
+ 
+   case 814:
+ #line 1988 "parser.Y"
+-    {yyval.integer = Marker::FIXED;;}
++    {(yyval.integer) = Marker::FIXED;;}
+     break;
+ 
+   case 817:
+@@ -7757,7 +8090,7 @@
+ 
+   case 821:
+ #line 2000 "parser.Y"
+-    {FRB->markerSelectOnlyCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerSelectOnlyCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 822:
+@@ -7767,12 +8100,12 @@
+ 
+   case 823:
+ #line 2002 "parser.Y"
+-    {FRB->markerSelectToggleCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->markerSelectToggleCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 826:
+ #line 2010 "parser.Y"
+-    {propQMask |= yyvsp[-2].integer; setProps(&propQValue,yyvsp[-2].integer,yyvsp[0].integer);;}
++    {propQMask |= (yyvsp[(1) - (3)].integer); setProps(&propQValue,(yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 827:
+@@ -7787,13 +8120,13 @@
+ 
+   case 832:
+ #line 2021 "parser.Y"
+-    {taglist.append(new Tag(yyvsp[0].str));;}
++    {taglist.append(new Tag((yyvsp[(3) - (3)].str)));;}
+     break;
+ 
+   case 833:
+ #line 2024 "parser.Y"
+     {cblist.append(
+-	new CallBack(FRB->getInterp(),(CallBack::Type)yyvsp[-2].integer,yyvsp[-1].str,yyvsp[0].str));;}
++	new CallBack(FRB->getInterp(),(CallBack::Type)(yyvsp[(3) - (5)].integer),(yyvsp[(4) - (5)].str),(yyvsp[(5) - (5)].str)));;}
+     break;
+ 
+   case 834:
+@@ -7818,67 +8151,67 @@
+ 
+   case 838:
+ #line 2035 "parser.Y"
+-    {FRB->panCmd(Vector(yyvsp[-3].real,yyvsp[-2].real),Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->panCmd(Vector((yyvsp[(1) - (4)].real),(yyvsp[(2) - (4)].real)),Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;}
+     break;
+ 
+   case 839:
+ #line 2037 "parser.Y"
+-    {FRB->panCmd(Vector(yyvsp[-1].real,yyvsp[0].real), (InternalSystem)yyvsp[-2].integer);;}
++    {FRB->panCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), (InternalSystem)(yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 840:
+ #line 2039 "parser.Y"
+-    {FRB->panCmd(Vector(yyvsp[0].vector), (CoordSystem)yyvsp[-2].integer, (SkyFrame)yyvsp[-1].integer);;}
++    {FRB->panCmd(Vector((yyvsp[(3) - (3)].vector)), (CoordSystem)(yyvsp[(1) - (3)].integer), (SkyFrame)(yyvsp[(2) - (3)].integer));;}
+     break;
+ 
+   case 842:
+ #line 2041 "parser.Y"
+-    {FRB->panBBoxCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->panBBoxCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 844:
+ #line 2043 "parser.Y"
+-    {FRB->panPreserveCmd(yyvsp[0].integer);;}
++    {FRB->panPreserveCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 845:
+ #line 2047 "parser.Y"
+-    {FRB->panToCmd(Vector(yyvsp[-1].real,yyvsp[0].real), (InternalSystem)yyvsp[-2].integer);;}
++    {FRB->panToCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)), (InternalSystem)(yyvsp[(1) - (3)].integer));;}
+     break;
+ 
+   case 846:
+ #line 2049 "parser.Y"
+-    {FRB->panToCmd(Vector(yyvsp[0].vector), (CoordSystem)yyvsp[-2].integer, (SkyFrame)yyvsp[-1].integer);;}
++    {FRB->panToCmd(Vector((yyvsp[(3) - (3)].vector)), (CoordSystem)(yyvsp[(1) - (3)].integer), (SkyFrame)(yyvsp[(2) - (3)].integer));;}
+     break;
+ 
+   case 847:
+ #line 2052 "parser.Y"
+-    {FRB->panMotionBeginCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->panMotionBeginCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 848:
+ #line 2053 "parser.Y"
+-    {FRB->panMotionCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->panMotionCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;}
+     break;
+ 
+   case 849:
+ #line 2054 "parser.Y"
+-    {FRB->panMotionEndCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->panMotionEndCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 850:
+ #line 2057 "parser.Y"
+-    {FRB->pannerCmd(yyvsp[0].integer);;}
++    {FRB->pannerCmd((yyvsp[(1) - (1)].integer));;}
+     break;
+ 
+   case 851:
+ #line 2059 "parser.Y"
+-    {FRB->pannerCmd((CoordSystem)yyvsp[-1].integer,(SkyFrame)yyvsp[0].integer);;}
++    {FRB->pannerCmd((CoordSystem)(yyvsp[(2) - (3)].integer),(SkyFrame)(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 852:
+ #line 2060 "parser.Y"
+-    {FRB->pannerCmd(yyvsp[-2].str, yyvsp[-1].integer, yyvsp[0].integer);;}
++    {FRB->pannerCmd((yyvsp[(1) - (3)].str), (yyvsp[(2) - (3)].integer), (yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 853:
+@@ -7888,47 +8221,47 @@
+ 
+   case 854:
+ #line 2065 "parser.Y"
+-    {FRB->psColorSpaceCmd((Widget::PSColorSpace)yyvsp[0].integer);;}
++    {FRB->psColorSpaceCmd((Widget::PSColorSpace)(yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 855:
+ #line 2066 "parser.Y"
+-    {FRB->psLevelCmd(yyvsp[0].integer);;}
++    {FRB->psLevelCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 856:
+ #line 2067 "parser.Y"
+-    {FRB->psResolutionCmd(yyvsp[0].integer);;}
++    {FRB->psResolutionCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 857:
+ #line 2070 "parser.Y"
+-    {yyval.integer = Widget::BW;;}
++    {(yyval.integer) = Widget::BW;;}
+     break;
+ 
+   case 858:
+ #line 2071 "parser.Y"
+-    {yyval.integer = Widget::GRAY;;}
++    {(yyval.integer) = Widget::GRAY;;}
+     break;
+ 
+   case 859:
+ #line 2072 "parser.Y"
+-    {yyval.integer = Widget::RGB;;}
++    {(yyval.integer) = Widget::RGB;;}
+     break;
+ 
+   case 860:
+ #line 2073 "parser.Y"
+-    {yyval.integer = Widget::CMYK;;}
++    {(yyval.integer) = Widget::CMYK;;}
+     break;
+ 
+   case 863:
+ #line 2081 "parser.Y"
+-    {FRB->regionHighliteBeginCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->regionHighliteBeginCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 864:
+ #line 2083 "parser.Y"
+-    {FRB->regionHighliteMotionCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->regionHighliteMotionCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 865:
+@@ -7943,12 +8276,12 @@
+ 
+   case 867:
+ #line 2089 "parser.Y"
+-    {FRB->regionSelectBeginCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->regionSelectBeginCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 868:
+ #line 2090 "parser.Y"
+-    {FRB->regionSelectMotionCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->regionSelectMotionCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 869:
+@@ -7963,37 +8296,37 @@
+ 
+   case 871:
+ #line 2095 "parser.Y"
+-    {FRB->setRGBChannelCmd(yyvsp[0].str);;}
++    {FRB->setRGBChannelCmd((yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 872:
+ #line 2096 "parser.Y"
+-    {FRB->setRGBSystemCmd((CoordSystem)yyvsp[0].integer);;}
++    {FRB->setRGBSystemCmd((CoordSystem)(yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 873:
+ #line 2097 "parser.Y"
+-    {FRB->setRGBViewCmd(yyvsp[-2].integer,yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FRB->setRGBViewCmd((yyvsp[(2) - (4)].integer),(yyvsp[(3) - (4)].integer),(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 874:
+ #line 2100 "parser.Y"
+-    {FRB->rotateCmd(degToRad(yyvsp[0].real));;}
++    {FRB->rotateCmd(degToRad((yyvsp[(1) - (1)].real)));;}
+     break;
+ 
+   case 875:
+ #line 2101 "parser.Y"
+-    {FRB->rotateCmd(degToRad(yyvsp[-1].real));;}
++    {FRB->rotateCmd(degToRad((yyvsp[(1) - (2)].real)));;}
+     break;
+ 
+   case 877:
+ #line 2103 "parser.Y"
+-    {FRB->rotateToCmd(degToRad(yyvsp[0].real));;}
++    {FRB->rotateToCmd(degToRad((yyvsp[(2) - (2)].real)));;}
+     break;
+ 
+   case 878:
+ #line 2104 "parser.Y"
+-    {FRB->rotateToCmd(degToRad(yyvsp[-1].real));;}
++    {FRB->rotateToCmd(degToRad((yyvsp[(2) - (3)].real)));;}
+     break;
+ 
+   case 879:
+@@ -8003,7 +8336,7 @@
+ 
+   case 880:
+ #line 2108 "parser.Y"
+-    {FRB->rotateMotionCmd(degToRad(yyvsp[0].real));;}
++    {FRB->rotateMotionCmd(degToRad((yyvsp[(1) - (1)].real)));;}
+     break;
+ 
+   case 881:
+@@ -8013,67 +8346,67 @@
+ 
+   case 884:
+ #line 2116 "parser.Y"
+-    {FRB->saveArrayFileCmd(yyvsp[0].str);;}
++    {FRB->saveArrayFileCmd((yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 885:
+ #line 2117 "parser.Y"
+-    {FRB->saveArrayChannelCmd(yyvsp[0].str);;}
++    {FRB->saveArrayChannelCmd((yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 886:
+ #line 2118 "parser.Y"
+-    {FRB->saveArraySocketCmd(yyvsp[0].integer);;}
++    {FRB->saveArraySocketCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 890:
+ #line 2126 "parser.Y"
+-    {FRB->saveFitsImageFileCmd(yyvsp[-1].str, yyvsp[0].integer);;}
++    {FRB->saveFitsImageFileCmd((yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 891:
+ #line 2127 "parser.Y"
+-    {FRB->saveFitsImageChannelCmd(yyvsp[-1].str, yyvsp[0].integer);;}
++    {FRB->saveFitsImageChannelCmd((yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 892:
+ #line 2128 "parser.Y"
+-    {FRB->saveFitsImageSocketCmd(yyvsp[-1].integer, yyvsp[0].integer);;}
++    {FRB->saveFitsImageSocketCmd((yyvsp[(2) - (3)].integer), (yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 893:
+ #line 2131 "parser.Y"
+-    {FRB->saveFitsTableFileCmd(yyvsp[-1].str, yyvsp[0].integer);;}
++    {FRB->saveFitsTableFileCmd((yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 894:
+ #line 2132 "parser.Y"
+-    {FRB->saveFitsTableChannelCmd(yyvsp[-1].str, yyvsp[0].integer);;}
++    {FRB->saveFitsTableChannelCmd((yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 895:
+ #line 2133 "parser.Y"
+-    {FRB->saveFitsTableSocketCmd(yyvsp[-1].integer, yyvsp[0].integer);;}
++    {FRB->saveFitsTableSocketCmd((yyvsp[(2) - (3)].integer), (yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 896:
+ #line 2137 "parser.Y"
+-    {FRB->saveFitsResampleFileCmd(yyvsp[-1].str, yyvsp[0].integer);;}
++    {FRB->saveFitsResampleFileCmd((yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 897:
+ #line 2139 "parser.Y"
+-    {FRB->saveFitsResampleChannelCmd(yyvsp[-1].str, yyvsp[0].integer);;}
++    {FRB->saveFitsResampleChannelCmd((yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 898:
+ #line 2141 "parser.Y"
+-    {FRB->saveFitsResampleSocketCmd(yyvsp[-1].integer, yyvsp[0].integer);;}
++    {FRB->saveFitsResampleSocketCmd((yyvsp[(2) - (3)].integer), (yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 899:
+ #line 2145 "parser.Y"
+-    {FRB->smoothCmd((FrameBase::SmoothFunction)yyvsp[-1].integer,yyvsp[0].integer);;}
++    {FRB->smoothCmd((FrameBase::SmoothFunction)(yyvsp[(1) - (2)].integer),(yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 900:
+@@ -8083,17 +8416,17 @@
+ 
+   case 901:
+ #line 2149 "parser.Y"
+-    {yyval.integer = FrameBase::BOXCAR;;}
++    {(yyval.integer) = FrameBase::BOXCAR;;}
+     break;
+ 
+   case 902:
+ #line 2150 "parser.Y"
+-    {yyval.integer = FrameBase::GAUSSIAN;;}
++    {(yyval.integer) = FrameBase::GAUSSIAN;;}
+     break;
+ 
+   case 903:
+ #line 2151 "parser.Y"
+-    {yyval.integer = FrameBase::TOPHAT;;}
++    {(yyval.integer) = FrameBase::TOPHAT;;}
+     break;
+ 
+   case 904:
+@@ -8103,7 +8436,7 @@
+ 
+   case 905:
+ #line 2156 "parser.Y"
+-    {FRB->updateFitsCmd(yyvsp[-4].integer,BBox(yyvsp[-3].real,yyvsp[-2].real,yyvsp[-1].real,yyvsp[0].real),0);;}
++    {FRB->updateFitsCmd((yyvsp[(1) - (5)].integer),BBox((yyvsp[(2) - (5)].real),(yyvsp[(3) - (5)].real),(yyvsp[(4) - (5)].real),(yyvsp[(5) - (5)].real)),0);;}
+     break;
+ 
+   case 906:
+@@ -8113,32 +8446,32 @@
+ 
+   case 907:
+ #line 2159 "parser.Y"
+-    {FRB->updateFitsCmd(yyvsp[-4].integer,BBox(yyvsp[-3].real,yyvsp[-2].real,yyvsp[-1].real,yyvsp[0].real),1);;}
++    {FRB->updateFitsCmd((yyvsp[(2) - (6)].integer),BBox((yyvsp[(3) - (6)].real),(yyvsp[(4) - (6)].real),(yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)),1);;}
+     break;
+ 
+   case 908:
+ #line 2160 "parser.Y"
+-    {FRB->sliceCmd(yyvsp[0].integer);;}
++    {FRB->sliceCmd((yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 909:
+ #line 2163 "parser.Y"
+-    {FRB->warpCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->warpCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;}
+     break;
+ 
+   case 910:
+ #line 2164 "parser.Y"
+-    {FRB->warpToCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->warpToCmd(Vector((yyvsp[(2) - (3)].real),(yyvsp[(3) - (3)].real)));;}
+     break;
+ 
+   case 911:
+ #line 2168 "parser.Y"
+-    {FRB->wcsAlignCmd(yyvsp[-2].integer,(CoordSystem)yyvsp[-1].integer,(SkyFrame)yyvsp[0].integer);;}
++    {FRB->wcsAlignCmd((yyvsp[(2) - (4)].integer),(CoordSystem)(yyvsp[(3) - (4)].integer),(SkyFrame)(yyvsp[(4) - (4)].integer));;}
+     break;
+ 
+   case 912:
+ #line 2170 "parser.Y"
+-    {FRB->wcsZoomCmd((CoordSystem)yyvsp[-2].integer, Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->wcsZoomCmd((CoordSystem)(yyvsp[(2) - (4)].integer), Vector((yyvsp[(3) - (4)].real),(yyvsp[(4) - (4)].real)));;}
+     break;
+ 
+   case 913:
+@@ -8148,38 +8481,38 @@
+ 
+   case 914:
+ #line 2172 "parser.Y"
+-    {FRB->wcsReplaceCmd(yyvsp[0].integer);;}
++    {FRB->wcsReplaceCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 915:
+ #line 2173 "parser.Y"
+-    {FRB->wcsReplaceCmd(yyvsp[0].str);;}
++    {FRB->wcsReplaceCmd((yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 916:
+ #line 2174 "parser.Y"
+-    {FRB->wcsAppendCmd(yyvsp[0].integer);;}
++    {FRB->wcsAppendCmd((yyvsp[(2) - (2)].integer));;}
+     break;
+ 
+   case 917:
+ #line 2175 "parser.Y"
+-    {FRB->wcsAppendCmd(yyvsp[0].str);;}
++    {FRB->wcsAppendCmd((yyvsp[(2) - (2)].str));;}
+     break;
+ 
+   case 918:
+ #line 2178 "parser.Y"
+-    {FRB->zoomCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->zoomCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;}
+     break;
+ 
+   case 919:
+ #line 2180 "parser.Y"
+-    {FRB->zoomAboutCmd(Vector(yyvsp[-5].real,yyvsp[-4].real),Vector(yyvsp[-1].real,yyvsp[0].real),(InternalSystem)yyvsp[-2].integer);;}
++    {FRB->zoomAboutCmd(Vector((yyvsp[(1) - (6)].real),(yyvsp[(2) - (6)].real)),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)),(InternalSystem)(yyvsp[(4) - (6)].integer));;}
+     break;
+ 
+   case 920:
+ #line 2182 "parser.Y"
+-    {FRB->zoomAboutCmd(Vector(yyvsp[-5].real,yyvsp[-4].real),Vector(yyvsp[0].vector),
+-	    (CoordSystem)yyvsp[-2].integer,(SkyFrame)yyvsp[-1].integer);;}
++    {FRB->zoomAboutCmd(Vector((yyvsp[(1) - (6)].real),(yyvsp[(2) - (6)].real)),Vector((yyvsp[(6) - (6)].vector)),
++	    (CoordSystem)(yyvsp[(4) - (6)].integer),(SkyFrame)(yyvsp[(5) - (6)].integer));;}
+     break;
+ 
+   case 922:
+@@ -8189,36 +8522,35 @@
+ 
+   case 923:
+ #line 2188 "parser.Y"
+-    {FRB->zoomToFitCmd(yyvsp[0].real);;}
++    {FRB->zoomToFitCmd((yyvsp[(2) - (2)].real));;}
+     break;
+ 
+   case 924:
+ #line 2189 "parser.Y"
+-    {FRB->zoomToCmd(Vector(yyvsp[-1].real,yyvsp[0].real));;}
++    {FRB->zoomToCmd(Vector((yyvsp[(1) - (2)].real),(yyvsp[(2) - (2)].real)));;}
+     break;
+ 
+   case 925:
+ #line 2191 "parser.Y"
+-    {FRB->zoomToAboutCmd(Vector(yyvsp[-5].real,yyvsp[-4].real),Vector(yyvsp[-1].real,yyvsp[0].real),
+-	    (InternalSystem)yyvsp[-2].integer);;}
++    {FRB->zoomToAboutCmd(Vector((yyvsp[(1) - (6)].real),(yyvsp[(2) - (6)].real)),Vector((yyvsp[(5) - (6)].real),(yyvsp[(6) - (6)].real)),
++	    (InternalSystem)(yyvsp[(4) - (6)].integer));;}
+     break;
+ 
+   case 926:
+ #line 2194 "parser.Y"
+-    {FRB->zoomToAboutCmd(Vector(yyvsp[-5].real,yyvsp[-4].real), Vector(yyvsp[0].vector),
+-	    (CoordSystem)yyvsp[-2].integer, (SkyFrame)yyvsp[-1].integer);;}
++    {FRB->zoomToAboutCmd(Vector((yyvsp[(1) - (6)].real),(yyvsp[(2) - (6)].real)), Vector((yyvsp[(6) - (6)].vector)),
++	    (CoordSystem)(yyvsp[(4) - (6)].integer), (SkyFrame)(yyvsp[(5) - (6)].integer));;}
+     break;
+ 
+ 
++/* Line 1267 of yacc.c.  */
++#line 8548 "parser.C"
++      default: break;
+     }
++  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ 
+-/* Line 1000 of yacc.c.  */
+-#line 8217 "parser.C"
+-
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
+-
+-
++  YYPOPSTACK (yylen);
++  yylen = 0;
+   YY_STACK_PRINT (yyss, yyssp);
+ 
+   *++yyvsp = yyval;
+@@ -8247,99 +8579,65 @@
+   if (!yyerrstatus)
+     {
+       ++yynerrs;
+-#if YYERROR_VERBOSE
+-      yyn = yypact[yystate];
+-
+-      if (YYPACT_NINF < yyn && yyn < YYLAST)
+-	{
+-	  YYSIZE_T yysize = 0;
+-	  int yytype = YYTRANSLATE (yychar);
+-	  const char* yyprefix;
+-	  char *yymsg;
+-	  int yyx;
+-
+-	  /* Start YYX at -YYN if negative to avoid negative indexes in
+-	     YYCHECK.  */
+-	  int yyxbegin = yyn < 0 ? -yyn : 0;
+-
+-	  /* Stay within bounds of both yycheck and yytname.  */
+-	  int yychecklim = YYLAST - yyn;
+-	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-	  int yycount = 0;
+-
+-	  yyprefix = ", expecting ";
+-	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++#if ! YYERROR_VERBOSE
++      yyerror (YY_("syntax error"));
++#else
++      {
++	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
++	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
++	  {
++	    YYSIZE_T yyalloc = 2 * yysize;
++	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
++	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
++	    if (yymsg != yymsgbuf)
++	      YYSTACK_FREE (yymsg);
++	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
++	    if (yymsg)
++	      yymsg_alloc = yyalloc;
++	    else
+ 	      {
+-		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+-		yycount += 1;
+-		if (yycount == 5)
+-		  {
+-		    yysize = 0;
+-		    break;
+-		  }
++		yymsg = yymsgbuf;
++		yymsg_alloc = sizeof yymsgbuf;
+ 	      }
+-	  yysize += (sizeof ("syntax error, unexpected ")
+-		     + yystrlen (yytname[yytype]));
+-	  yymsg = (char *) YYSTACK_ALLOC (yysize);
+-	  if (yymsg != 0)
+-	    {
+-	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+-	      yyp = yystpcpy (yyp, yytname[yytype]);
++	  }
+ 
+-	      if (yycount < 5)
+-		{
+-		  yyprefix = ", expecting ";
+-		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+-		      {
+-			yyp = yystpcpy (yyp, yyprefix);
+-			yyp = yystpcpy (yyp, yytname[yyx]);
+-			yyprefix = " or ";
+-		      }
+-		}
+-	      yyerror (yymsg);
+-	      YYSTACK_FREE (yymsg);
+-	    }
+-	  else
+-	    yyerror ("syntax error; also virtual memory exhausted");
+-	}
+-      else
+-#endif /* YYERROR_VERBOSE */
+-	yyerror ("syntax error");
++	if (0 < yysize && yysize <= yymsg_alloc)
++	  {
++	    (void) yysyntax_error (yymsg, yystate, yychar);
++	    yyerror (yymsg);
++	  }
++	else
++	  {
++	    yyerror (YY_("syntax error"));
++	    if (yysize != 0)
++	      goto yyexhaustedlab;
++	  }
++      }
++#endif
+     }
+ 
+ 
+ 
+   if (yyerrstatus == 3)
+     {
+-      /* If just tried and failed to reuse lookahead token after an
++      /* If just tried and failed to reuse look-ahead token after an
+ 	 error, discard it.  */
+ 
+       if (yychar <= YYEOF)
+-        {
+-          /* If at end of input, pop the error token,
+-	     then the rest of the stack, then return failure.  */
++	{
++	  /* Return failure if at end of input.  */
+ 	  if (yychar == YYEOF)
+-	     for (;;)
+-	       {
+-		 YYPOPSTACK;
+-		 if (yyssp == yyss)
+-		   YYABORT;
+-		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-		 yydestruct (yystos[*yyssp], yyvsp);
+-	       }
+-        }
++	    YYABORT;
++	}
+       else
+ 	{
+-	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+-	  yydestruct (yytoken, &yylval);
++	  yydestruct ("Error: discarding",
++		      yytoken, &yylval);
+ 	  yychar = YYEMPTY;
+-
+ 	}
+     }
+ 
+-  /* Else will try to reuse lookahead token after shifting the error
++  /* Else will try to reuse look-ahead token after shifting the error
+      token.  */
+   goto yyerrlab1;
+ 
+@@ -8349,15 +8647,17 @@
+ `---------------------------------------------------*/
+ yyerrorlab:
+ 
+-#ifdef __GNUC__
+-  /* Pacify GCC when the user code never invokes YYERROR and the label
+-     yyerrorlab therefore never appears in user code.  */
+-  if (0)
++  /* Pacify compilers like GCC when the user code never invokes
++     YYERROR and the label yyerrorlab therefore never appears in user
++     code.  */
++  if (/*CONSTCOND*/ 0)
+      goto yyerrorlab;
+-#endif
+ 
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYERROR.  */
++  YYPOPSTACK (yylen);
++  yylen = 0;
++  YY_STACK_PRINT (yyss, yyssp);
+   yystate = *yyssp;
+   goto yyerrlab1;
+ 
+@@ -8386,9 +8686,10 @@
+       if (yyssp == yyss)
+ 	YYABORT;
+ 
+-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-      yydestruct (yystos[yystate], yyvsp);
+-      YYPOPSTACK;
++
++      yydestruct ("Error: popping",
++		  yystos[yystate], yyvsp);
++      YYPOPSTACK (1);
+       yystate = *yyssp;
+       YY_STACK_PRINT (yyss, yyssp);
+     }
+@@ -8396,11 +8697,12 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  YYDPRINTF ((stderr, "Shifting error token, "));
+-
+   *++yyvsp = yylval;
+ 
+ 
++  /* Shift the error token.  */
++  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
++
+   yystate = yyn;
+   goto yynewstate;
+ 
+@@ -8420,21 +8722,39 @@
+   goto yyreturn;
+ 
+ #ifndef yyoverflow
+-/*----------------------------------------------.
+-| yyoverflowlab -- parser overflow comes here.  |
+-`----------------------------------------------*/
+-yyoverflowlab:
+-  yyerror ("parser stack overflow");
++/*-------------------------------------------------.
++| yyexhaustedlab -- memory exhaustion comes here.  |
++`-------------------------------------------------*/
++yyexhaustedlab:
++  yyerror (YY_("memory exhausted"));
+   yyresult = 2;
+   /* Fall through.  */
+ #endif
+ 
+ yyreturn:
++  if (yychar != YYEOF && yychar != YYEMPTY)
++     yydestruct ("Cleanup: discarding lookahead",
++		 yytoken, &yylval);
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYABORT or YYACCEPT.  */
++  YYPOPSTACK (yylen);
++  YY_STACK_PRINT (yyss, yyssp);
++  while (yyssp != yyss)
++    {
++      yydestruct ("Cleanup: popping",
++		  yystos[*yyssp], yyvsp);
++      YYPOPSTACK (1);
++    }
+ #ifndef yyoverflow
+   if (yyss != yyssa)
+     YYSTACK_FREE (yyss);
+ #endif
+-  return yyresult;
++#if YYERROR_VERBOSE
++  if (yymsg != yymsgbuf)
++    YYSTACK_FREE (yymsg);
++#endif
++  /* Make sure YYID is used.  */
++  return YYID (yyresult);
+ }
+ 
+ 
+--- saods9-4.0b7.orig/saotk/frame/ds9parser.H
++++ saods9-4.0b7/saotk/frame/ds9parser.H
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton interface for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,13 +17,21 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+@@ -152,6 +162,7 @@
+      SYM_XOR = 378
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define STRING 260
+@@ -277,16 +288,18 @@
+ 
+ 
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 127 "ds9parser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 1275 of yacc.c.  */
+-#line 290 "ds9parser.H"
++}
++/* Line 1529 of yacc.c.  */
++#line 302 "ds9parser.H"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -294,5 +307,3 @@
+ 
+ extern YYSTYPE mklval;
+ 
+-
+-
+--- saods9-4.0b7.orig/saotk/frame/xyparser.H
++++ saods9-4.0b7/saotk/frame/xyparser.H
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton interface for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,13 +17,21 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+@@ -85,6 +95,7 @@
+      WCSZ_ = 311
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define HOUR 260
+@@ -143,16 +154,18 @@
+ 
+ 
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 40 "xyparser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 1275 of yacc.c.  */
+-#line 156 "xyparser.H"
++}
++/* Line 1529 of yacc.c.  */
++#line 168 "xyparser.H"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -160,5 +173,3 @@
+ 
+ extern YYSTYPE xylval;
+ 
+-
+-
+--- saods9-4.0b7.orig/saotk/frame/saoparser.C
++++ saods9-4.0b7/saotk/frame/saoparser.C
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton implementation for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,16 +17,24 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+-/* Written by Richard Stallman by simplifying the original so called
+-   ``semantic'' parser.  */
++/* C LALR(1) parser skeleton written by Richard Stallman, by
++   simplifying the original so-called "semantic" parser.  */
+ 
+ /* All symbols defined below should begin with yy or YY, to avoid
+    infringing on user name space.  This should be done even for local
+@@ -36,6 +46,9 @@
+ /* Identify Bison output.  */
+ #define YYBISON 1
+ 
++/* Bison version.  */
++#define YYBISON_VERSION "2.3"
++
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+ 
+@@ -45,8 +58,7 @@
+ /* Using locations.  */
+ #define YYLSP_NEEDED 0
+ 
+-/* If NAME_PREFIX is specified substitute the variables and functions
+-   names.  */
++/* Substitute the variable and function names.  */
+ #define yyparse saoparse
+ #define yylex   saolex
+ #define yyerror saoerror
+@@ -80,6 +92,7 @@
+      VERSION_ = 273
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define STRING 260
+@@ -112,8 +125,8 @@
+ #define DISCARD_(x) {yyclearin; saoDiscard(x);}
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+@@ -166,16 +179,23 @@
+ # define YYERROR_VERBOSE 0
+ #endif
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++/* Enabling the token table.  */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
++#endif
++
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 56 "saoparser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 191 of yacc.c.  */
+-#line 179 "saoparser.C"
++}
++/* Line 193 of yacc.c.  */
++#line 198 "saoparser.C"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -186,56 +206,171 @@
+ /* Copy the second part of user declarations.  */
+ 
+ 
+-/* Line 214 of yacc.c.  */
+-#line 191 "saoparser.C"
++/* Line 216 of yacc.c.  */
++#line 211 "saoparser.C"
++
++#ifdef short
++# undef short
++#endif
++
++#ifdef YYTYPE_UINT8
++typedef YYTYPE_UINT8 yytype_uint8;
++#else
++typedef unsigned char yytype_uint8;
++#endif
++
++#ifdef YYTYPE_INT8
++typedef YYTYPE_INT8 yytype_int8;
++#elif (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++typedef signed char yytype_int8;
++#else
++typedef short int yytype_int8;
++#endif
++
++#ifdef YYTYPE_UINT16
++typedef YYTYPE_UINT16 yytype_uint16;
++#else
++typedef unsigned short int yytype_uint16;
++#endif
++
++#ifdef YYTYPE_INT16
++typedef YYTYPE_INT16 yytype_int16;
++#else
++typedef short int yytype_int16;
++#endif
++
++#ifndef YYSIZE_T
++# ifdef __SIZE_TYPE__
++#  define YYSIZE_T __SIZE_TYPE__
++# elif defined size_t
++#  define YYSIZE_T size_t
++# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
++#  define YYSIZE_T size_t
++# else
++#  define YYSIZE_T unsigned int
++# endif
++#endif
+ 
+-#if ! defined (yyoverflow) || YYERROR_VERBOSE
++#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+ 
+-# ifndef YYFREE
+-#  define YYFREE free
++#ifndef YY_
++# if YYENABLE_NLS
++#  if ENABLE_NLS
++#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
++#   define YY_(msgid) dgettext ("bison-runtime", msgid)
++#  endif
+ # endif
+-# ifndef YYMALLOC
+-#  define YYMALLOC malloc
++# ifndef YY_
++#  define YY_(msgid) msgid
+ # endif
++#endif
++
++/* Suppress unused-variable warnings by "using" E.  */
++#if ! defined lint || defined __GNUC__
++# define YYUSE(e) ((void) (e))
++#else
++# define YYUSE(e) /* empty */
++#endif
++
++/* Identity function, used to suppress warnings about constant conditions.  */
++#ifndef lint
++# define YYID(n) (n)
++#else
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static int
++YYID (int i)
++#else
++static int
++YYID (i)
++    int i;
++#endif
++{
++  return i;
++}
++#endif
++
++#if ! defined yyoverflow || YYERROR_VERBOSE
+ 
+ /* The parser invokes alloca or malloc; define the necessary symbols.  */
+ 
+ # ifdef YYSTACK_USE_ALLOCA
+ #  if YYSTACK_USE_ALLOCA
+-#   define YYSTACK_ALLOC alloca
+-#  endif
+-# else
+-#  if defined (alloca) || defined (_ALLOCA_H)
+-#   define YYSTACK_ALLOC alloca
+-#  else
+ #   ifdef __GNUC__
+ #    define YYSTACK_ALLOC __builtin_alloca
++#   elif defined __BUILTIN_VA_ARG_INCR
++#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
++#   elif defined _AIX
++#    define YYSTACK_ALLOC __alloca
++#   elif defined _MSC_VER
++#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
++#    define alloca _alloca
++#   else
++#    define YYSTACK_ALLOC alloca
++#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#     ifndef _STDLIB_H
++#      define _STDLIB_H 1
++#     endif
++#    endif
+ #   endif
+ #  endif
+ # endif
+ 
+ # ifdef YYSTACK_ALLOC
+-   /* Pacify GCC's `empty if-body' warning. */
+-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+-# else
+-#  if defined (__STDC__) || defined (__cplusplus)
+-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   define YYSIZE_T size_t
++   /* Pacify GCC's `empty if-body' warning.  */
++#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++    /* The OS might guarantee only one guard page at the bottom of the stack,
++       and a page size can be as small as 4096 bytes.  So we cannot safely
++       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
++       to allow for a few compiler-allocated temporary stack slots.  */
++#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+ #  endif
++# else
+ #  define YYSTACK_ALLOC YYMALLOC
+ #  define YYSTACK_FREE YYFREE
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
++#  endif
++#  if (defined __cplusplus && ! defined _STDLIB_H \
++       && ! ((defined YYMALLOC || defined malloc) \
++	     && (defined YYFREE || defined free)))
++#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#   ifndef _STDLIB_H
++#    define _STDLIB_H 1
++#   endif
++#  endif
++#  ifndef YYMALLOC
++#   define YYMALLOC malloc
++#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
++#  ifndef YYFREE
++#   define YYFREE free
++#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void free (void *); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
+ # endif
+-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
++#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+ 
+ 
+-#if (! defined (yyoverflow) \
+-     && (! defined (__cplusplus) \
+-	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
++#if (! defined yyoverflow \
++     && (! defined __cplusplus \
++	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ 
+ /* A type that is properly aligned for any stack member.  */
+ union yyalloc
+ {
+-  short yyss;
++  yytype_int16 yyss;
+   YYSTYPE yyvs;
+   };
+ 
+@@ -245,24 +380,24 @@
+ /* The size of an array large to enough to hold all stacks, each with
+    N elements.  */
+ # define YYSTACK_BYTES(N) \
+-     ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
++     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+ 
+ /* Copy COUNT objects from FROM to TO.  The source and destination do
+    not overlap.  */
+ # ifndef YYCOPY
+-#  if defined (__GNUC__) && 1 < __GNUC__
++#  if defined __GNUC__ && 1 < __GNUC__
+ #   define YYCOPY(To, From, Count) \
+       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+ #  else
+ #   define YYCOPY(To, From, Count)		\
+       do					\
+ 	{					\
+-	  register YYSIZE_T yyi;		\
++	  YYSIZE_T yyi;				\
+ 	  for (yyi = 0; yyi < (Count); yyi++)	\
+ 	    (To)[yyi] = (From)[yyi];		\
+ 	}					\
+-      while (0)
++      while (YYID (0))
+ #  endif
+ # endif
+ 
+@@ -280,39 +415,33 @@
+ 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ 	yyptr += yynewbytes / sizeof (*yyptr);				\
+       }									\
+-    while (0)
+-
+-#endif
++    while (YYID (0))
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-   typedef signed char yysigned_char;
+-#else
+-   typedef short yysigned_char;
+ #endif
+ 
+-/* YYFINAL -- State number of the termination state. */
++/* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  3
+ /* YYLAST -- Last index in YYTABLE.  */
+ #define YYLAST   160
+ 
+-/* YYNTOKENS -- Number of terminals. */
++/* YYNTOKENS -- Number of terminals.  */
+ #define YYNTOKENS  30
+-/* YYNNTS -- Number of nonterminals. */
++/* YYNNTS -- Number of nonterminals.  */
+ #define YYNNTS  31
+-/* YYNRULES -- Number of rules. */
++/* YYNRULES -- Number of rules.  */
+ #define YYNRULES  59
+-/* YYNRULES -- Number of states. */
++/* YYNRULES -- Number of states.  */
+ #define YYNSTATES  139
+ 
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   273
+ 
+-#define YYTRANSLATE(YYX) 						\
++#define YYTRANSLATE(YYX)						\
+   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ 
+ /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+-static const unsigned char yytranslate[] =
++static const yytype_uint8 yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       19,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+@@ -347,7 +476,7 @@
+ #if YYDEBUG
+ /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+    YYRHS.  */
+-static const unsigned char yyprhs[] =
++static const yytype_uint8 yyprhs[] =
+ {
+        0,     0,     3,     7,    11,    14,    15,    18,    20,    24,
+       26,    28,    30,    32,    34,    36,    38,    40,    41,    43,
+@@ -357,8 +486,8 @@
+      207,   209,   213,   215,   217,   218,   219,   223,   225,   226
+ };
+ 
+-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+-static const yysigned_char yyrhs[] =
++/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
++static const yytype_int8 yyrhs[] =
+ {
+       31,     0,    -1,    46,    32,    56,    -1,    32,    33,    34,
+       -1,    33,    34,    -1,    -1,    10,    36,    -1,    18,    -1,
+@@ -387,7 +516,7 @@
+ };
+ 
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+-static const unsigned short yyrline[] =
++static const yytype_uint16 yyrline[] =
+ {
+        0,    93,    93,    96,    97,   100,   101,   102,   103,   104,
+      107,   108,   109,   112,   113,   116,   117,   120,   121,   124,
+@@ -398,9 +527,9 @@
+ };
+ #endif
+ 
+-#if YYDEBUG || YYERROR_VERBOSE
+-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
++/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
++   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+ {
+   "$end", "error", "$undefined", "INT", "REAL", "STRING", "EOF_",
+@@ -418,7 +547,7 @@
+ # ifdef YYPRINT
+ /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+    token YYLEX-NUM.  */
+-static const unsigned short yytoknum[] =
++static const yytype_uint16 yytoknum[] =
+ {
+        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+      265,   266,   267,   268,   269,   270,   271,   272,   273,    10,
+@@ -427,7 +556,7 @@
+ # endif
+ 
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+-static const unsigned char yyr1[] =
++static const yytype_uint8 yyr1[] =
+ {
+        0,    30,    31,    32,    32,    33,    33,    33,    33,    33,
+       34,    34,    34,    35,    35,    36,    36,    37,    37,    38,
+@@ -438,7 +567,7 @@
+ };
+ 
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+-static const unsigned char yyr2[] =
++static const yytype_uint8 yyr2[] =
+ {
+        0,     2,     3,     3,     2,     0,     2,     1,     3,     1,
+        1,     1,     1,     1,     1,     1,     1,     0,     1,     0,
+@@ -451,7 +580,7 @@
+ /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+-static const unsigned char yydefact[] =
++static const yytype_uint8 yydefact[] =
+ {
+       30,     0,    31,     1,     0,     7,    55,    31,     0,    32,
+        9,    16,    15,     6,     0,     0,     2,    12,    10,    11,
+@@ -469,8 +598,8 @@
+        0,    17,    17,    23,    23,    21,    21,    44,    41
+ };
+ 
+-/* YYDEFGOTO[NTERM-NUM]. */
+-static const yysigned_char yydefgoto[] =
++/* YYDEFGOTO[NTERM-NUM].  */
++static const yytype_int8 yydefgoto[] =
+ {
+       -1,     1,     7,     8,    20,    44,    13,    53,    35,    59,
+       89,    90,   112,    68,   102,    60,     2,     9,    23,    33,
+@@ -481,7 +610,7 @@
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+    STATE-NUM.  */
+ #define YYPACT_NINF -71
+-static const short yypact[] =
++static const yytype_int16 yypact[] =
+ {
+      -71,    21,   119,   -71,    11,   -71,   -71,   116,    16,    31,
+      -71,   -71,   -71,   -71,    22,    16,   -71,   -71,   -71,   -71,
+@@ -500,7 +629,7 @@
+ };
+ 
+ /* YYPGOTO[NTERM-NUM].  */
+-static const yysigned_char yypgoto[] =
++static const yytype_int8 yypgoto[] =
+ {
+      -71,   -71,   -71,    80,    71,   -10,   -71,   -28,   -27,    19,
+      -70,   -71,   -40,    -2,   -71,   -29,   -71,   -71,   -71,   -71,
+@@ -513,7 +642,7 @@
+    number is the opposite.  If zero, do what YYDEFACT says.
+    If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -55
+-static const short yytable[] =
++static const yytype_int16 yytable[] =
+ {
+       36,    37,    38,    39,    16,    41,    45,    46,    47,    48,
+       49,    92,    51,    50,    66,    94,    69,    54,    55,    56,
+@@ -534,7 +663,7 @@
+       58
+ };
+ 
+-static const short yycheck[] =
++static const yytype_int16 yycheck[] =
+ {
+       27,    28,    29,    30,     7,    32,    35,    36,    37,    38,
+       39,    81,    41,    40,    54,    85,    56,    45,    46,    47,
+@@ -557,7 +686,7 @@
+ 
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+    symbol of state STATE-NUM.  */
+-static const unsigned char yystos[] =
++static const yytype_uint8 yystos[] =
+ {
+        0,    31,    46,     0,    10,    18,    29,    32,    33,    47,
+       57,    13,    14,    36,    58,    33,    56,     6,    19,    20,
+@@ -575,22 +704,6 @@
+       37,    43,    43,    37,    37,    40,    40,    39,    39
+ };
+ 
+-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+-# define YYSIZE_T __SIZE_TYPE__
+-#endif
+-#if ! defined (YYSIZE_T) && defined (size_t)
+-# define YYSIZE_T size_t
+-#endif
+-#if ! defined (YYSIZE_T)
+-# if defined (__STDC__) || defined (__cplusplus)
+-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+-#  define YYSIZE_T size_t
+-# endif
+-#endif
+-#if ! defined (YYSIZE_T)
+-# define YYSIZE_T unsigned int
+-#endif
+-
+ #define yyerrok		(yyerrstatus = 0)
+ #define yyclearin	(yychar = YYEMPTY)
+ #define YYEMPTY		(-2)
+@@ -616,30 +729,63 @@
+       yychar = (Token);						\
+       yylval = (Value);						\
+       yytoken = YYTRANSLATE (yychar);				\
+-      YYPOPSTACK;						\
++      YYPOPSTACK (1);						\
+       goto yybackup;						\
+     }								\
+   else								\
+-    { 								\
+-      yyerror ("syntax error: cannot back up");\
++    {								\
++      yyerror (YY_("syntax error: cannot back up")); \
+       YYERROR;							\
+     }								\
+-while (0)
++while (YYID (0))
++
+ 
+ #define YYTERROR	1
+ #define YYERRCODE	256
+ 
+-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+-   are run).  */
+ 
++/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
++   If N is 0, then set CURRENT to the empty location which ends
++   the previous symbol: RHS[0] (always defined).  */
++
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)		\
+-   ((Current).first_line   = (Rhs)[1].first_line,	\
+-    (Current).first_column = (Rhs)[1].first_column,	\
+-    (Current).last_line    = (Rhs)[N].last_line,	\
+-    (Current).last_column  = (Rhs)[N].last_column)
++# define YYLLOC_DEFAULT(Current, Rhs, N)				\
++    do									\
++      if (YYID (N))                                                    \
++	{								\
++	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
++	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
++	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
++	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
++	}								\
++      else								\
++	{								\
++	  (Current).first_line   = (Current).last_line   =		\
++	    YYRHSLOC (Rhs, 0).last_line;				\
++	  (Current).first_column = (Current).last_column =		\
++	    YYRHSLOC (Rhs, 0).last_column;				\
++	}								\
++    while (YYID (0))
++#endif
++
++
++/* YY_LOCATION_PRINT -- Print the location on the stream.
++   This macro was not mandated originally: define only if we know
++   we won't break user code: when these are the locations we know.  */
++
++#ifndef YY_LOCATION_PRINT
++# if YYLTYPE_IS_TRIVIAL
++#  define YY_LOCATION_PRINT(File, Loc)			\
++     fprintf (File, "%d.%d-%d.%d",			\
++	      (Loc).first_line, (Loc).first_column,	\
++	      (Loc).last_line,  (Loc).last_column)
++# else
++#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# endif
+ #endif
+ 
++
+ /* YYLEX -- calling `yylex' with the right arguments.  */
+ 
+ #ifdef YYLEX_PARAM
+@@ -660,42 +806,96 @@
+ do {						\
+   if (yydebug)					\
+     YYFPRINTF Args;				\
+-} while (0)
++} while (YYID (0))
+ 
+-# define YYDSYMPRINT(Args)			\
+-do {						\
+-  if (yydebug)					\
+-    yysymprint Args;				\
+-} while (0)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
++do {									  \
++  if (yydebug)								  \
++    {									  \
++      YYFPRINTF (stderr, "%s ", Title);					  \
++      yy_symbol_print (stderr,						  \
++		  Type, Value); \
++      YYFPRINTF (stderr, "\n");						  \
++    }									  \
++} while (YYID (0))
+ 
+-# define YYDSYMPRINTF(Title, Token, Value, Location)		\
+-do {								\
+-  if (yydebug)							\
+-    {								\
+-      YYFPRINTF (stderr, "%s ", Title);				\
+-      yysymprint (stderr, 					\
+-                  Token, Value);	\
+-      YYFPRINTF (stderr, "\n");					\
+-    }								\
+-} while (0)
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_value_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (!yyvaluep)
++    return;
++# ifdef YYPRINT
++  if (yytype < YYNTOKENS)
++    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++# else
++  YYUSE (yyoutput);
++# endif
++  switch (yytype)
++    {
++      default:
++	break;
++    }
++}
++
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (yytype < YYNTOKENS)
++    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
++  else
++    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++
++  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
++  YYFPRINTF (yyoutput, ")");
++}
+ 
+ /*------------------------------------------------------------------.
+ | yy_stack_print -- Print the state stack from its BOTTOM up to its |
+ | TOP (included).                                                   |
+ `------------------------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_stack_print (short *bottom, short *top)
++yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+ #else
+ static void
+ yy_stack_print (bottom, top)
+-    short *bottom;
+-    short *top;
++    yytype_int16 *bottom;
++    yytype_int16 *top;
+ #endif
+ {
+   YYFPRINTF (stderr, "Stack now");
+-  for (/* Nothing. */; bottom <= top; ++bottom)
++  for (; bottom <= top; ++bottom)
+     YYFPRINTF (stderr, " %d", *bottom);
+   YYFPRINTF (stderr, "\n");
+ }
+@@ -704,45 +904,52 @@
+ do {								\
+   if (yydebug)							\
+     yy_stack_print ((Bottom), (Top));				\
+-} while (0)
++} while (YYID (0))
+ 
+ 
+ /*------------------------------------------------.
+ | Report that the YYRULE is going to be reduced.  |
+ `------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_reduce_print (int yyrule)
++yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+ #else
+ static void
+-yy_reduce_print (yyrule)
++yy_reduce_print (yyvsp, yyrule)
++    YYSTYPE *yyvsp;
+     int yyrule;
+ #endif
+ {
++  int yynrhs = yyr2[yyrule];
+   int yyi;
+-  unsigned int yylno = yyrline[yyrule];
+-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+-             yyrule - 1, yylno);
+-  /* Print the symbols being reduced, and their result.  */
+-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
++  unsigned long int yylno = yyrline[yyrule];
++  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
++	     yyrule - 1, yylno);
++  /* The symbols being reduced.  */
++  for (yyi = 0; yyi < yynrhs; yyi++)
++    {
++      fprintf (stderr, "   $%d = ", yyi + 1);
++      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
++		       &(yyvsp[(yyi + 1) - (yynrhs)])
++		       		       );
++      fprintf (stderr, "\n");
++    }
+ }
+ 
+ # define YY_REDUCE_PRINT(Rule)		\
+ do {					\
+   if (yydebug)				\
+-    yy_reduce_print (Rule);		\
+-} while (0)
++    yy_reduce_print (yyvsp, Rule); \
++} while (YYID (0))
+ 
+ /* Nonzero means print parse trace.  It is left uninitialized so that
+    multiple parsers can coexist.  */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
+-# define YYDSYMPRINT(Args)
+-# define YYDSYMPRINTF(Title, Token, Value, Location)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+ # define YY_STACK_PRINT(Bottom, Top)
+ # define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
+@@ -757,13 +964,9 @@
+    if the built-in stack extension method is used).
+ 
+    Do not make this value too large; the results are undefined if
+-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
++   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+    evaluated with infinite-precision integer arithmetic.  */
+ 
+-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
+-# undef YYMAXDEPTH
+-#endif
+-
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
+@@ -773,45 +976,47 @@
+ #if YYERROR_VERBOSE
+ 
+ # ifndef yystrlen
+-#  if defined (__GLIBC__) && defined (_STRING_H)
++#  if defined __GLIBC__ && defined _STRING_H
+ #   define yystrlen strlen
+ #  else
+ /* Return the length of YYSTR.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static YYSIZE_T
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystrlen (const char *yystr)
+-#   else
++#else
++static YYSIZE_T
+ yystrlen (yystr)
+-     const char *yystr;
+-#   endif
++    const char *yystr;
++#endif
+ {
+-  register const char *yys = yystr;
+-
+-  while (*yys++ != '\0')
++  YYSIZE_T yylen;
++  for (yylen = 0; yystr[yylen]; yylen++)
+     continue;
+-
+-  return yys - yystr - 1;
++  return yylen;
+ }
+ #  endif
+ # endif
+ 
+ # ifndef yystpcpy
+-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
++#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+ #   define yystpcpy stpcpy
+ #  else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+    YYDEST.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static char *
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystpcpy (char *yydest, const char *yysrc)
+-#   else
++#else
++static char *
+ yystpcpy (yydest, yysrc)
+-     char *yydest;
+-     const char *yysrc;
+-#   endif
++    char *yydest;
++    const char *yysrc;
++#endif
+ {
+-  register char *yyd = yydest;
+-  register const char *yys = yysrc;
++  char *yyd = yydest;
++  const char *yys = yysrc;
+ 
+   while ((*yyd++ = *yys++) != '\0')
+     continue;
+@@ -821,70 +1026,192 @@
+ #  endif
+ # endif
+ 
+-#endif /* !YYERROR_VERBOSE */
++# ifndef yytnamerr
++/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
++   quotes and backslashes, so that it's suitable for yyerror.  The
++   heuristic is that double-quoting is unnecessary unless the string
++   contains an apostrophe, a comma, or backslash (other than
++   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
++   null, do not copy; instead, return the length of what the result
++   would have been.  */
++static YYSIZE_T
++yytnamerr (char *yyres, const char *yystr)
++{
++  if (*yystr == '"')
++    {
++      YYSIZE_T yyn = 0;
++      char const *yyp = yystr;
+ 
+-
++      for (;;)
++	switch (*++yyp)
++	  {
++	  case '\'':
++	  case ',':
++	    goto do_not_strip_quotes;
++
++	  case '\\':
++	    if (*++yyp != '\\')
++	      goto do_not_strip_quotes;
++	    /* Fall through.  */
++	  default:
++	    if (yyres)
++	      yyres[yyn] = *yyp;
++	    yyn++;
++	    break;
+ 
+-#if YYDEBUG
+-/*--------------------------------.
+-| Print this symbol on YYOUTPUT.  |
+-`--------------------------------*/
++	  case '"':
++	    if (yyres)
++	      yyres[yyn] = '\0';
++	    return yyn;
++	  }
++    do_not_strip_quotes: ;
++    }
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-static void
+-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+-#else
+-static void
+-yysymprint (yyoutput, yytype, yyvaluep)
+-    FILE *yyoutput;
+-    int yytype;
+-    YYSTYPE *yyvaluep;
+-#endif
++  if (! yyres)
++    return yystrlen (yystr);
++
++  return yystpcpy (yyres, yystr) - yyres;
++}
++# endif
++
++/* Copy into YYRESULT an error message about the unexpected token
++   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
++   including the terminating null byte.  If YYRESULT is null, do not
++   copy anything; just return the number of bytes that would be
++   copied.  As a special case, return 0 if an ordinary "syntax error"
++   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
++   size calculation.  */
++static YYSIZE_T
++yysyntax_error (char *yyresult, int yystate, int yychar)
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  int yyn = yypact[yystate];
+ 
+-  if (yytype < YYNTOKENS)
++  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
++    return 0;
++  else
+     {
+-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+-# ifdef YYPRINT
+-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++      int yytype = YYTRANSLATE (yychar);
++      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
++      YYSIZE_T yysize = yysize0;
++      YYSIZE_T yysize1;
++      int yysize_overflow = 0;
++      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++      int yyx;
++
++# if 0
++      /* This is so xgettext sees the translatable formats that are
++	 constructed on the fly.  */
++      YY_("syntax error, unexpected %s");
++      YY_("syntax error, unexpected %s, expecting %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+ # endif
+-    }
+-  else
+-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++      char *yyfmt;
++      char const *yyf;
++      static char const yyunexpected[] = "syntax error, unexpected %s";
++      static char const yyexpecting[] = ", expecting %s";
++      static char const yyor[] = " or %s";
++      char yyformat[sizeof yyunexpected
++		    + sizeof yyexpecting - 1
++		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
++		       * (sizeof yyor - 1))];
++      char const *yyprefix = yyexpecting;
++
++      /* Start YYX at -YYN if negative to avoid negative indexes in
++	 YYCHECK.  */
++      int yyxbegin = yyn < 0 ? -yyn : 0;
++
++      /* Stay within bounds of both yycheck and yytname.  */
++      int yychecklim = YYLAST - yyn + 1;
++      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++      int yycount = 1;
++
++      yyarg[0] = yytname[yytype];
++      yyfmt = yystpcpy (yyformat, yyunexpected);
++
++      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++	  {
++	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++	      {
++		yycount = 1;
++		yysize = yysize0;
++		yyformat[sizeof yyunexpected - 1] = '\0';
++		break;
++	      }
++	    yyarg[yycount++] = yytname[yyx];
++	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++	    yysize_overflow |= (yysize1 < yysize);
++	    yysize = yysize1;
++	    yyfmt = yystpcpy (yyfmt, yyprefix);
++	    yyprefix = yyor;
++	  }
+ 
+-  switch (yytype)
+-    {
+-      default:
+-        break;
++      yyf = YY_(yyformat);
++      yysize1 = yysize + yystrlen (yyf);
++      yysize_overflow |= (yysize1 < yysize);
++      yysize = yysize1;
++
++      if (yysize_overflow)
++	return YYSIZE_MAXIMUM;
++
++      if (yyresult)
++	{
++	  /* Avoid sprintf, as that infringes on the user's name space.
++	     Don't have undefined behavior even if the translation
++	     produced a string with the wrong number of "%s"s.  */
++	  char *yyp = yyresult;
++	  int yyi = 0;
++	  while ((*yyp = *yyf) != '\0')
++	    {
++	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
++		{
++		  yyp += yytnamerr (yyp, yyarg[yyi++]);
++		  yyf += 2;
++		}
++	      else
++		{
++		  yyp++;
++		  yyf++;
++		}
++	    }
++	}
++      return yysize;
+     }
+-  YYFPRINTF (yyoutput, ")");
+ }
++#endif /* YYERROR_VERBOSE */
++
+ 
+-#endif /* ! YYDEBUG */
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+ `-----------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yydestruct (int yytype, YYSTYPE *yyvaluep)
++yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+ #else
+ static void
+-yydestruct (yytype, yyvaluep)
++yydestruct (yymsg, yytype, yyvaluep)
++    const char *yymsg;
+     int yytype;
+     YYSTYPE *yyvaluep;
+ #endif
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  YYUSE (yyvaluep);
++
++  if (!yymsg)
++    yymsg = "Deleting";
++  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ 
+   switch (yytype)
+     {
+ 
+       default:
+-        break;
++	break;
+     }
+ }
+ 
+@@ -892,13 +1219,13 @@
+ /* Prevent warnings from -Wmissing-prototypes.  */
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void *YYPARSE_PARAM);
+-# else
++#else
+ int yyparse ();
+-# endif
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void);
+ #else
+ int yyparse ();
+@@ -907,10 +1234,10 @@
+ 
+ 
+ 
+-/* The lookahead symbol.  */
++/* The look-ahead symbol.  */
+ int yychar;
+ 
+-/* The semantic value of the lookahead symbol.  */
++/* The semantic value of the look-ahead symbol.  */
+ YYSTYPE yylval;
+ 
+ /* Number of syntax errors so far.  */
+@@ -923,14 +1250,18 @@
+ `----------*/
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
+-int yyparse (void *YYPARSE_PARAM)
+-# else
+-int yyparse (YYPARSE_PARAM)
+-  void *YYPARSE_PARAM;
+-# endif
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++int
++yyparse (void *YYPARSE_PARAM)
++#else
++int
++yyparse (YYPARSE_PARAM)
++    void *YYPARSE_PARAM;
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ int
+ yyparse (void)
+ #else
+@@ -941,13 +1272,19 @@
+ #endif
+ {
+   
+-  register int yystate;
+-  register int yyn;
++  int yystate;
++  int yyn;
+   int yyresult;
+   /* Number of tokens to shift before error messages enabled.  */
+   int yyerrstatus;
+-  /* Lookahead token as an internal (translated) token number.  */
++  /* Look-ahead token as an internal (translated) token number.  */
+   int yytoken = 0;
++#if YYERROR_VERBOSE
++  /* Buffer for error messages, and its allocated size.  */
++  char yymsgbuf[128];
++  char *yymsg = yymsgbuf;
++  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
++#endif
+ 
+   /* Three stacks and their tools:
+      `yyss': related to states,
+@@ -958,18 +1295,18 @@
+      to reallocate them elsewhere.  */
+ 
+   /* The state stack.  */
+-  short	yyssa[YYINITDEPTH];
+-  short *yyss = yyssa;
+-  register short *yyssp;
++  yytype_int16 yyssa[YYINITDEPTH];
++  yytype_int16 *yyss = yyssa;
++  yytype_int16 *yyssp;
+ 
+   /* The semantic value stack.  */
+   YYSTYPE yyvsa[YYINITDEPTH];
+   YYSTYPE *yyvs = yyvsa;
+-  register YYSTYPE *yyvsp;
++  YYSTYPE *yyvsp;
+ 
+ 
+ 
+-#define YYPOPSTACK   (yyvsp--, yyssp--)
++#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+ 
+   YYSIZE_T yystacksize = YYINITDEPTH;
+ 
+@@ -978,9 +1315,9 @@
+   YYSTYPE yyval;
+ 
+ 
+-  /* When reducing, the number of symbols on the RHS of the reduced
+-     rule.  */
+-  int yylen;
++  /* The number of symbols on the RHS of the reduced rule.
++     Keep to zero when no symbol should be popped.  */
++  int yylen = 0;
+ 
+   YYDPRINTF ((stderr, "Starting parse\n"));
+ 
+@@ -1004,8 +1341,7 @@
+ `------------------------------------------------------------*/
+  yynewstate:
+   /* In all cases, when you get here, the value and location stacks
+-     have just been pushed. so pushing a state here evens the stacks.
+-     */
++     have just been pushed.  So pushing a state here evens the stacks.  */
+   yyssp++;
+ 
+  yysetstate:
+@@ -1018,18 +1354,18 @@
+ 
+ #ifdef yyoverflow
+       {
+-	/* Give user a chance to reallocate the stack. Use copies of
++	/* Give user a chance to reallocate the stack.  Use copies of
+ 	   these so that the &'s don't force the real ones into
+ 	   memory.  */
+ 	YYSTYPE *yyvs1 = yyvs;
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 
+ 
+ 	/* Each stack pointer address is followed by the size of the
+ 	   data in use in that stack, in bytes.  This used to be a
+ 	   conditional around just the two extra args, but that might
+ 	   be undefined if yyoverflow is a macro.  */
+-	yyoverflow ("parser stack overflow",
++	yyoverflow (YY_("memory exhausted"),
+ 		    &yyss1, yysize * sizeof (*yyssp),
+ 		    &yyvs1, yysize * sizeof (*yyvsp),
+ 
+@@ -1040,21 +1376,21 @@
+       }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+-      goto yyoverflowlab;
++      goto yyexhaustedlab;
+ # else
+       /* Extend the stack our own way.  */
+       if (YYMAXDEPTH <= yystacksize)
+-	goto yyoverflowlab;
++	goto yyexhaustedlab;
+       yystacksize *= 2;
+       if (YYMAXDEPTH < yystacksize)
+ 	yystacksize = YYMAXDEPTH;
+ 
+       {
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 	union yyalloc *yyptr =
+ 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ 	if (! yyptr)
+-	  goto yyoverflowlab;
++	  goto yyexhaustedlab;
+ 	YYSTACK_RELOCATE (yyss);
+ 	YYSTACK_RELOCATE (yyvs);
+ 
+@@ -1085,19 +1421,17 @@
+ `-----------*/
+ yybackup:
+ 
+-/* Do appropriate processing given the current state.  */
+-/* Read a lookahead token if we need one and don't already have one.  */
+-/* yyresume: */
+-
+-  /* First try to decide what to do without reference to lookahead token.  */
++  /* Do appropriate processing given the current state.  Read a
++     look-ahead token if we need one and don't already have one.  */
+ 
++  /* First try to decide what to do without reference to look-ahead token.  */
+   yyn = yypact[yystate];
+   if (yyn == YYPACT_NINF)
+     goto yydefault;
+ 
+-  /* Not known => get a lookahead token if don't already have one.  */
++  /* Not known => get a look-ahead token if don't already have one.  */
+ 
+-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
++  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+   if (yychar == YYEMPTY)
+     {
+       YYDPRINTF ((stderr, "Reading a token: "));
+@@ -1112,7 +1446,7 @@
+   else
+     {
+       yytoken = YYTRANSLATE (yychar);
+-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
++      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+     }
+ 
+   /* If the proper action on seeing token YYTOKEN is to reduce or to
+@@ -1132,22 +1466,21 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  /* Shift the lookahead token.  */
+-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+-
+-  /* Discard the token being shifted unless it is eof.  */
+-  if (yychar != YYEOF)
+-    yychar = YYEMPTY;
+-
+-  *++yyvsp = yylval;
+-
+-
+   /* Count tokens shifted since error; after three, turn off error
+      status.  */
+   if (yyerrstatus)
+     yyerrstatus--;
+ 
++  /* Shift the look-ahead token.  */
++  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
++
++  /* Discard the shifted token unless it is eof.  */
++  if (yychar != YYEOF)
++    yychar = YYEMPTY;
++
+   yystate = yyn;
++  *++yyvsp = yylval;
++
+   goto yynewstate;
+ 
+ 
+@@ -1194,12 +1527,12 @@
+ 
+   case 13:
+ #line 112 "saoparser.Y"
+-    {yyval.real=yyvsp[0].real;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 14:
+ #line 113 "saoparser.Y"
+-    {yyval.real=yyvsp[0].integer;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 15:
+@@ -1214,46 +1547,46 @@
+ 
+   case 23:
+ #line 132 "saoparser.Y"
+-    {yyval.real = 0;;}
++    {(yyval.real) = 0;;}
+     break;
+ 
+   case 24:
+ #line 133 "saoparser.Y"
+-    {yyval.real = yyvsp[0].real;;}
++    {(yyval.real) = (yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 25:
+ #line 136 "saoparser.Y"
+-    {yyval.real = degToRad(yyvsp[0].real);;}
++    {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;}
+     break;
+ 
+   case 26:
+ #line 139 "saoparser.Y"
+-    {yyval.real = FITSPTR->mapLenToRef(yyvsp[0].real, IMAGE);;}
++    {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), IMAGE);;}
+     break;
+ 
+   case 27:
+ #line 143 "saoparser.Y"
+     {
+-	  Vector r = FITSPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real), IMAGE);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), IMAGE);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 28:
+ #line 151 "saoparser.Y"
+-    {yyval.integer = yyvsp[0].integer;;}
++    {(yyval.integer) = (yyvsp[(3) - (3)].integer);;}
+     break;
+ 
+   case 29:
+ #line 155 "saoparser.Y"
+     {
+-	  Vector r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real), IMAGE);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), IMAGE);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -1289,15 +1622,15 @@
+ 
+   case 35:
+ #line 180 "saoparser.Y"
+-    {FR->createCircleCmd(Vector(yyvsp[-4].vector),
+-	    yyvsp[-2].real,
++    {FR->createCircleCmd(Vector((yyvsp[(3) - (7)].vector)),
++	    (yyvsp[(5) - (7)].real),
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 36:
+ #line 184 "saoparser.Y"
+-    {FR->createAnnulusCmd(Vector(yyvsp[-6].vector),
+-	    yyvsp[-4].real,yyvsp[-2].real,1,
++    {FR->createAnnulusCmd(Vector((yyvsp[(3) - (9)].vector)),
++	    (yyvsp[(5) - (9)].real),(yyvsp[(7) - (9)].real),1,
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+@@ -1309,9 +1642,9 @@
+   case 38:
+ #line 189 "saoparser.Y"
+     {
+-	  aAnnuli[0] = yyvsp[-7].real;
+-	  aAnnuli[1] = yyvsp[-5].real;
+-	  FR->createAnnulusCmd(Vector(yyvsp[-9].vector),
++	  aAnnuli[0] = (yyvsp[(5) - (12)].real);
++	  aAnnuli[1] = (yyvsp[(7) - (12)].real);
++	  FR->createAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)),
+ 	    aNum,aAnnuli,
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);
+ 	;}
+@@ -1319,8 +1652,8 @@
+ 
+   case 39:
+ #line 197 "saoparser.Y"
+-    {FR->createAnnulusCmd(Vector(yyvsp[-8].vector),
+-	    yyvsp[-6].real,yyvsp[-4].real,yyvsp[-2].integer,
++    {FR->createAnnulusCmd(Vector((yyvsp[(3) - (11)].vector)),
++	    (yyvsp[(5) - (11)].real),(yyvsp[(7) - (11)].real),(yyvsp[(9) - (11)].integer),
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+@@ -1329,16 +1662,16 @@
+     {
+ 	  // for ellipse annulus
+ 	  aStatus = 1;
+-	  aCenter = Vector(yyvsp[-6].vector);
+-	  aAngle = yyvsp[-2].real;
+-	  aVector[0] = Vector(yyvsp[-4].vector);
++	  aCenter = Vector((yyvsp[(3) - (9)].vector));
++	  aAngle = (yyvsp[(7) - (9)].real);
++	  aVector[0] = Vector((yyvsp[(5) - (9)].vector));
+ 	  aNum = 1;
+ 	  strncpy(aComment,localComment,80);
+ 	  aProps = localProps;
+ 
+-	  FR->createEllipseCmd(Vector(yyvsp[-6].vector),
+-	    Vector(yyvsp[-4].vector),
+-	    yyvsp[-2].real,
++	  FR->createEllipseCmd(Vector((yyvsp[(3) - (9)].vector)),
++	    Vector((yyvsp[(5) - (9)].vector)),
++	    (yyvsp[(7) - (9)].real),
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);
+ 	;}
+     break;
+@@ -1347,7 +1680,7 @@
+ #line 220 "saoparser.Y"
+     {	
+ 	  aStatus = 2;
+-	  aVector[aNum++] = Vector(yyvsp[-13].vector);
++	  aVector[aNum++] = Vector((yyvsp[(5) - (18)].vector));
+ 	;}
+     break;
+ 
+@@ -1356,25 +1689,25 @@
+     {
+ 	  // for box annulus
+ 	  aStatus = 3;
+-	  aCenter = Vector(yyvsp[-6].vector);
+-	  aAngle = yyvsp[-2].real;
+-	  aVector[0] = Vector(yyvsp[-4].vector);
++	  aCenter = Vector((yyvsp[(3) - (9)].vector));
++	  aAngle = (yyvsp[(7) - (9)].real);
++	  aVector[0] = Vector((yyvsp[(5) - (9)].vector));
+ 	  aNum = 1;
+ 	  strncpy(aComment,localComment,80);
+ 	  aProps = localProps;
+ 
+-	  FR->createBoxCmd(Vector(yyvsp[-6].vector),
+-	    Vector(yyvsp[-4].vector),
+-	    yyvsp[-2].real,
++	  FR->createBoxCmd(Vector((yyvsp[(3) - (9)].vector)),
++	    Vector((yyvsp[(5) - (9)].vector)),
++	    (yyvsp[(7) - (9)].real),
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);
+ 	;}
+     break;
+ 
+   case 43:
+ #line 242 "saoparser.Y"
+-    {FR->createBoxCmd(Vector(yyvsp[-6].vector),
+-	    Vector(yyvsp[-4].vector),
+-	    yyvsp[-2].real,
++    {FR->createBoxCmd(Vector((yyvsp[(3) - (9)].vector)),
++	    Vector((yyvsp[(5) - (9)].vector)),
++	    (yyvsp[(7) - (9)].real),
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+@@ -1382,13 +1715,13 @@
+ #line 248 "saoparser.Y"
+     {	
+ 	  aStatus = 4;
+-	  aVector[aNum++] = Vector(yyvsp[-13].vector);
++	  aVector[aNum++] = Vector((yyvsp[(5) - (18)].vector));
+ 	;}
+     break;
+ 
+   case 45:
+ #line 254 "saoparser.Y"
+-    {FR->createBoxCirclePointCmd(Vector(yyvsp[-2].vector),
++    {FR->createBoxCirclePointCmd(Vector((yyvsp[(3) - (5)].vector)),
+ 	    color,1,font,text,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+@@ -1405,12 +1738,12 @@
+ 
+   case 50:
+ #line 266 "saoparser.Y"
+-    {polylist.append(new Vertex(yyvsp[0].vector));;}
++    {polylist.append(new Vertex((yyvsp[(1) - (1)].vector)));;}
+     break;
+ 
+   case 53:
+ #line 273 "saoparser.Y"
+-    {aAnnuli[aNum++] = yyvsp[0].real;;}
++    {aAnnuli[aNum++] = (yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 54:
+@@ -1454,19 +1787,18 @@
+ 
+   case 59:
+ #line 309 "saoparser.Y"
+-    {strncpy(localComment,yyvsp[-1].str,80);;}
++    {strncpy(localComment,(yyvsp[(3) - (4)].str),80);;}
+     break;
+ 
+ 
++/* Line 1267 of yacc.c.  */
++#line 1796 "saoparser.C"
++      default: break;
+     }
++  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ 
+-/* Line 1000 of yacc.c.  */
+-#line 1465 "saoparser.C"
+-
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
+-
+-
++  YYPOPSTACK (yylen);
++  yylen = 0;
+   YY_STACK_PRINT (yyss, yyssp);
+ 
+   *++yyvsp = yyval;
+@@ -1495,99 +1827,65 @@
+   if (!yyerrstatus)
+     {
+       ++yynerrs;
+-#if YYERROR_VERBOSE
+-      yyn = yypact[yystate];
+-
+-      if (YYPACT_NINF < yyn && yyn < YYLAST)
+-	{
+-	  YYSIZE_T yysize = 0;
+-	  int yytype = YYTRANSLATE (yychar);
+-	  const char* yyprefix;
+-	  char *yymsg;
+-	  int yyx;
+-
+-	  /* Start YYX at -YYN if negative to avoid negative indexes in
+-	     YYCHECK.  */
+-	  int yyxbegin = yyn < 0 ? -yyn : 0;
+-
+-	  /* Stay within bounds of both yycheck and yytname.  */
+-	  int yychecklim = YYLAST - yyn;
+-	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-	  int yycount = 0;
+-
+-	  yyprefix = ", expecting ";
+-	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++#if ! YYERROR_VERBOSE
++      yyerror (YY_("syntax error"));
++#else
++      {
++	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
++	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
++	  {
++	    YYSIZE_T yyalloc = 2 * yysize;
++	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
++	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
++	    if (yymsg != yymsgbuf)
++	      YYSTACK_FREE (yymsg);
++	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
++	    if (yymsg)
++	      yymsg_alloc = yyalloc;
++	    else
+ 	      {
+-		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+-		yycount += 1;
+-		if (yycount == 5)
+-		  {
+-		    yysize = 0;
+-		    break;
+-		  }
++		yymsg = yymsgbuf;
++		yymsg_alloc = sizeof yymsgbuf;
+ 	      }
+-	  yysize += (sizeof ("syntax error, unexpected ")
+-		     + yystrlen (yytname[yytype]));
+-	  yymsg = (char *) YYSTACK_ALLOC (yysize);
+-	  if (yymsg != 0)
+-	    {
+-	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+-	      yyp = yystpcpy (yyp, yytname[yytype]);
++	  }
+ 
+-	      if (yycount < 5)
+-		{
+-		  yyprefix = ", expecting ";
+-		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+-		      {
+-			yyp = yystpcpy (yyp, yyprefix);
+-			yyp = yystpcpy (yyp, yytname[yyx]);
+-			yyprefix = " or ";
+-		      }
+-		}
+-	      yyerror (yymsg);
+-	      YYSTACK_FREE (yymsg);
+-	    }
+-	  else
+-	    yyerror ("syntax error; also virtual memory exhausted");
+-	}
+-      else
+-#endif /* YYERROR_VERBOSE */
+-	yyerror ("syntax error");
++	if (0 < yysize && yysize <= yymsg_alloc)
++	  {
++	    (void) yysyntax_error (yymsg, yystate, yychar);
++	    yyerror (yymsg);
++	  }
++	else
++	  {
++	    yyerror (YY_("syntax error"));
++	    if (yysize != 0)
++	      goto yyexhaustedlab;
++	  }
++      }
++#endif
+     }
+ 
+ 
+ 
+   if (yyerrstatus == 3)
+     {
+-      /* If just tried and failed to reuse lookahead token after an
++      /* If just tried and failed to reuse look-ahead token after an
+ 	 error, discard it.  */
+ 
+       if (yychar <= YYEOF)
+-        {
+-          /* If at end of input, pop the error token,
+-	     then the rest of the stack, then return failure.  */
++	{
++	  /* Return failure if at end of input.  */
+ 	  if (yychar == YYEOF)
+-	     for (;;)
+-	       {
+-		 YYPOPSTACK;
+-		 if (yyssp == yyss)
+-		   YYABORT;
+-		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-		 yydestruct (yystos[*yyssp], yyvsp);
+-	       }
+-        }
++	    YYABORT;
++	}
+       else
+ 	{
+-	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+-	  yydestruct (yytoken, &yylval);
++	  yydestruct ("Error: discarding",
++		      yytoken, &yylval);
+ 	  yychar = YYEMPTY;
+-
+ 	}
+     }
+ 
+-  /* Else will try to reuse lookahead token after shifting the error
++  /* Else will try to reuse look-ahead token after shifting the error
+      token.  */
+   goto yyerrlab1;
+ 
+@@ -1597,15 +1895,17 @@
+ `---------------------------------------------------*/
+ yyerrorlab:
+ 
+-#ifdef __GNUC__
+-  /* Pacify GCC when the user code never invokes YYERROR and the label
+-     yyerrorlab therefore never appears in user code.  */
+-  if (0)
++  /* Pacify compilers like GCC when the user code never invokes
++     YYERROR and the label yyerrorlab therefore never appears in user
++     code.  */
++  if (/*CONSTCOND*/ 0)
+      goto yyerrorlab;
+-#endif
+ 
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYERROR.  */
++  YYPOPSTACK (yylen);
++  yylen = 0;
++  YY_STACK_PRINT (yyss, yyssp);
+   yystate = *yyssp;
+   goto yyerrlab1;
+ 
+@@ -1634,9 +1934,10 @@
+       if (yyssp == yyss)
+ 	YYABORT;
+ 
+-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-      yydestruct (yystos[yystate], yyvsp);
+-      YYPOPSTACK;
++
++      yydestruct ("Error: popping",
++		  yystos[yystate], yyvsp);
++      YYPOPSTACK (1);
+       yystate = *yyssp;
+       YY_STACK_PRINT (yyss, yyssp);
+     }
+@@ -1644,11 +1945,12 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  YYDPRINTF ((stderr, "Shifting error token, "));
+-
+   *++yyvsp = yylval;
+ 
+ 
++  /* Shift the error token.  */
++  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
++
+   yystate = yyn;
+   goto yynewstate;
+ 
+@@ -1668,21 +1970,39 @@
+   goto yyreturn;
+ 
+ #ifndef yyoverflow
+-/*----------------------------------------------.
+-| yyoverflowlab -- parser overflow comes here.  |
+-`----------------------------------------------*/
+-yyoverflowlab:
+-  yyerror ("parser stack overflow");
++/*-------------------------------------------------.
++| yyexhaustedlab -- memory exhaustion comes here.  |
++`-------------------------------------------------*/
++yyexhaustedlab:
++  yyerror (YY_("memory exhausted"));
+   yyresult = 2;
+   /* Fall through.  */
+ #endif
+ 
+ yyreturn:
++  if (yychar != YYEOF && yychar != YYEMPTY)
++     yydestruct ("Cleanup: discarding lookahead",
++		 yytoken, &yylval);
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYABORT or YYACCEPT.  */
++  YYPOPSTACK (yylen);
++  YY_STACK_PRINT (yyss, yyssp);
++  while (yyssp != yyss)
++    {
++      yydestruct ("Cleanup: popping",
++		  yystos[*yyssp], yyvsp);
++      YYPOPSTACK (1);
++    }
+ #ifndef yyoverflow
+   if (yyss != yyssa)
+     YYSTACK_FREE (yyss);
+ #endif
+-  return yyresult;
++#if YYERROR_VERBOSE
++  if (yymsg != yymsgbuf)
++    YYSTACK_FREE (yymsg);
++#endif
++  /* Make sure YYID is used.  */
++  return YYID (yyresult);
+ }
+ 
+ 
+--- saods9-4.0b7.orig/saotk/frame/ds9parser.Y
++++ saods9-4.0b7/saotk/frame/ds9parser.Y
+@@ -12,8 +12,8 @@
+ #define DISCARD_(x) {yyclearin; mkDiscard(x);}
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+--- saods9-4.0b7.orig/saotk/frame/prosparser.H
++++ saods9-4.0b7/saotk/frame/prosparser.H
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton interface for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,13 +17,21 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+@@ -62,6 +72,7 @@
+      VERSION_ = 288
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define STRING 260
+@@ -97,16 +108,18 @@
+ 
+ 
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 65 "prosparser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 1275 of yacc.c.  */
+-#line 110 "prosparser.H"
++}
++/* Line 1529 of yacc.c.  */
++#line 122 "prosparser.H"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -114,5 +127,3 @@
+ 
+ extern YYSTYPE proslval;
+ 
+-
+-
+--- saods9-4.0b7.orig/saotk/frame/ciaolex.C
++++ saods9-4.0b7/saotk/frame/ciaolex.C
+@@ -4,7 +4,7 @@
+ /* A lexical scanner generated by flex */
+ 
+ /* Scanner skeleton version:
+- * $Header: /proj/rd/cvsroot/saods9/saotk/frame/ciaolex.C,v 1.79 2005/08/24 20:37:45 joye Exp $
++ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+  */
+ 
+ #define FLEX_SCANNER
+@@ -12,7 +12,6 @@
+ #define YY_FLEX_MINOR_VERSION 5
+ 
+ 
+-
+ /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+ #ifdef c_plusplus
+ #ifndef __cplusplus
+@@ -24,8 +23,12 @@
+ #ifdef __cplusplus
+ 
+ #include <stdlib.h>
+-#include <iostream>
+-using namespace std;
++#include <fstream>
++using std::istream;
++using std::ostream;
++#ifndef _WIN32
++#include <unistd.h>
++#endif
+ 
+ /* Use prototypes in function declarations. */
+ #define YY_USE_PROTOS
+@@ -65,6 +68,7 @@
+ #define YY_PROTO(proto) ()
+ #endif
+ 
++
+ /* Returned upon end-of-file. */
+ #define YY_NULL 0
+ 
+@@ -412,7 +416,7 @@
+   extern ciaoFlexLexer* ciaolexx;
+   extern int ciaosign;
+ /* rules */
+-#line 416 "ciaolex.C"
++#line 420 "ciaolex.C"
+ 
+ /* Macros after this point can all be overridden by user definitions in
+  * section 1.
+@@ -536,13 +540,13 @@
+ YY_DECL
+ 	{
+ 	register yy_state_type yy_current_state;
+-	register char *yy_cp = NULL, *yy_bp = NULL;
++	register char *yy_cp, *yy_bp;
+ 	register int yy_act;
+ 
+ #line 28 "ciaolex.L"
+ 
+ 
+-#line 546 "ciaolex.C"
++#line 550 "ciaolex.C"
+ 
+ 	if ( yy_init )
+ 		{
+@@ -817,7 +821,7 @@
+ #line 121 "ciaolex.L"
+ ECHO;
+ 	YY_BREAK
+-#line 821 "ciaolex.C"
++#line 825 "ciaolex.C"
+ 
+ 	case YY_END_OF_BUFFER:
+ 		{
+@@ -1333,6 +1337,7 @@
+ 	return c;
+ 	}
+ 
++
+ void yyFlexLexer::yyrestart( istream* input_file )
+ 	{
+ 	if ( ! yy_current_buffer )
+--- saods9-4.0b7.orig/saotk/frame/xyparser.Y
++++ saods9-4.0b7/saotk/frame/xyparser.Y
+@@ -10,8 +10,8 @@
+ #define FITSPTR (FR->findFits(1))
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+--- saods9-4.0b7.orig/saotk/frame/callback.C
++++ saods9-4.0b7/saotk/frame/callback.C
+@@ -2,8 +2,9 @@
+ // Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+ // For conditions of distribution and use, see copyright notice in "copyright"
+ 
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <cstring>
++#include <iostream>
+ 
+ #include "callback.h"
+ 
+--- saods9-4.0b7.orig/saotk/frame/parser.Y
++++ saods9-4.0b7/saotk/frame/parser.Y
+@@ -12,8 +12,8 @@
+ #define FITSPTR (FRB->findFits(1))
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "frame.h"
+--- saods9-4.0b7.orig/saotk/frame/saolex.C
++++ saods9-4.0b7/saotk/frame/saolex.C
+@@ -4,7 +4,7 @@
+ /* A lexical scanner generated by flex */
+ 
+ /* Scanner skeleton version:
+- * $Header: /proj/rd/cvsroot/saods9/saotk/frame/saolex.C,v 1.76 2005/08/11 21:32:52 joye Exp $
++ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+  */
+ 
+ #define FLEX_SCANNER
+@@ -12,7 +12,6 @@
+ #define YY_FLEX_MINOR_VERSION 5
+ 
+ 
+-
+ /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+ #ifdef c_plusplus
+ #ifndef __cplusplus
+@@ -24,8 +23,12 @@
+ #ifdef __cplusplus
+ 
+ #include <stdlib.h>
+-#include <iostream>
+-using namespace std;
++#include <fstream>
++using std::istream;
++using std::ostream;
++#ifndef _WIN32
++#include <unistd.h>
++#endif
+ 
+ /* Use prototypes in function declarations. */
+ #define YY_USE_PROTOS
+@@ -65,6 +68,7 @@
+ #define YY_PROTO(proto) ()
+ #endif
+ 
++
+ /* Returned upon end-of-file. */
+ #define YY_NULL 0
+ 
+@@ -424,7 +428,7 @@
+ #define DISCARD 1
+ 
+ /* rules */
+-#line 428 "saolex.C"
++#line 432 "saolex.C"
+ 
+ /* Macros after this point can all be overridden by user definitions in
+  * section 1.
+@@ -548,13 +552,13 @@
+ YY_DECL
+ 	{
+ 	register yy_state_type yy_current_state;
+-	register char *yy_cp = NULL, *yy_bp = NULL;
++	register char *yy_cp, *yy_bp;
+ 	register int yy_act;
+ 
+ #line 29 "saolex.L"
+ 
+ 
+-#line 558 "saolex.C"
++#line 562 "saolex.C"
+ 
+ 	if ( yy_init )
+ 		{
+@@ -808,7 +812,7 @@
+ #line 109 "saolex.L"
+ ECHO;
+ 	YY_BREAK
+-#line 812 "saolex.C"
++#line 816 "saolex.C"
+ 
+ 	case YY_END_OF_BUFFER:
+ 		{
+@@ -1324,6 +1328,7 @@
+ 	return c;
+ 	}
+ 
++
+ void yyFlexLexer::yyrestart( istream* input_file )
+ 	{
+ 	if ( ! yy_current_buffer )
+--- saods9-4.0b7.orig/saotk/frame/saoparser.H
++++ saods9-4.0b7/saotk/frame/saoparser.H
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton interface for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,13 +17,21 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+@@ -47,6 +57,7 @@
+      VERSION_ = 273
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define STRING 260
+@@ -67,16 +78,18 @@
+ 
+ 
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 56 "saoparser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 1275 of yacc.c.  */
+-#line 80 "saoparser.H"
++}
++/* Line 1529 of yacc.c.  */
++#line 92 "saoparser.H"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -84,5 +97,3 @@
+ 
+ extern YYSTYPE saolval;
+ 
+-
+-
+--- saods9-4.0b7.orig/saotk/frame/ciaoparser.H
++++ saods9-4.0b7/saotk/frame/ciaoparser.H
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton interface for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,13 +17,21 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+@@ -52,6 +62,7 @@
+      VERSION_ = 278
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define HOUR 260
+@@ -77,16 +88,18 @@
+ 
+ 
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 43 "ciaoparser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 1275 of yacc.c.  */
+-#line 90 "ciaoparser.H"
++}
++/* Line 1529 of yacc.c.  */
++#line 102 "ciaoparser.H"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -94,5 +107,3 @@
+ 
+ extern YYSTYPE ciaolval;
+ 
+-
+-
+--- saods9-4.0b7.orig/saotk/frame/tngparser.H
++++ saods9-4.0b7/saotk/frame/tngparser.H
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton interface for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,13 +17,21 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+@@ -70,6 +80,7 @@
+      YELLOW_ = 296
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define STRING 260
+@@ -113,16 +124,18 @@
+ 
+ 
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 60 "tngparser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 1275 of yacc.c.  */
+-#line 126 "tngparser.H"
++}
++/* Line 1529 of yacc.c.  */
++#line 138 "tngparser.H"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -130,5 +143,3 @@
+ 
+ extern YYSTYPE tnglval;
+ 
+-
+-
+--- saods9-4.0b7.orig/saotk/frame/grid.C
++++ saods9-4.0b7/saotk/frame/grid.C
+@@ -2,7 +2,7 @@
+ // Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+ // For conditions of distribution and use, see copyright notice in "copyright"
+ 
+-#include <iomanip.h>
++#include <iomanip>
+ 
+ #include "grid.h"
+ #include "util.h"
+--- saods9-4.0b7.orig/saotk/frame/xylex.C
++++ saods9-4.0b7/saotk/frame/xylex.C
+@@ -4,7 +4,7 @@
+ /* A lexical scanner generated by flex */
+ 
+ /* Scanner skeleton version:
+- * $Header: /proj/rd/cvsroot/saods9/saotk/frame/xylex.C,v 1.76 2005/08/11 21:32:53 joye Exp $
++ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+  */
+ 
+ #define FLEX_SCANNER
+@@ -12,7 +12,6 @@
+ #define YY_FLEX_MINOR_VERSION 5
+ 
+ 
+-
+ /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+ #ifdef c_plusplus
+ #ifndef __cplusplus
+@@ -24,8 +23,12 @@
+ #ifdef __cplusplus
+ 
+ #include <stdlib.h>
+-#include <iostream>
+-using namespace std;
++#include <fstream>
++using std::istream;
++using std::ostream;
++#ifndef _WIN32
++#include <unistd.h>
++#endif
+ 
+ /* Use prototypes in function declarations. */
+ #define YY_USE_PROTOS
+@@ -65,6 +68,7 @@
+ #define YY_PROTO(proto) ()
+ #endif
+ 
++
+ /* Returned upon end-of-file. */
+ #define YY_NULL 0
+ 
+@@ -446,7 +450,7 @@
+   extern xyFlexLexer* xylexx;
+   extern int xysign;
+ /* rules */
+-#line 450 "xylex.C"
++#line 454 "xylex.C"
+ 
+ /* Macros after this point can all be overridden by user definitions in
+  * section 1.
+@@ -570,13 +574,13 @@
+ YY_DECL
+ 	{
+ 	register yy_state_type yy_current_state;
+-	register char *yy_cp = NULL, *yy_bp = NULL;
++	register char *yy_cp, *yy_bp;
+ 	register int yy_act;
+ 
+ #line 28 "xylex.L"
+ 
+ 
+-#line 580 "xylex.C"
++#line 584 "xylex.C"
+ 
+ 	if ( yy_init )
+ 		{
+@@ -997,7 +1001,7 @@
+ #line 145 "xylex.L"
+ ECHO;
+ 	YY_BREAK
+-#line 1001 "xylex.C"
++#line 1005 "xylex.C"
+ 
+ 	case YY_END_OF_BUFFER:
+ 		{
+@@ -1513,6 +1517,7 @@
+ 	return c;
+ 	}
+ 
++
+ void yyFlexLexer::yyrestart( istream* input_file )
+ 	{
+ 	if ( ! yy_current_buffer )
+--- saods9-4.0b7.orig/saotk/frame/ds9lex.C
++++ saods9-4.0b7/saotk/frame/ds9lex.C
+@@ -4,7 +4,7 @@
+ /* A lexical scanner generated by flex */
+ 
+ /* Scanner skeleton version:
+- * $Header: /proj/rd/cvsroot/saods9/saotk/frame/ds9lex.C,v 1.98 2005/08/11 21:32:11 joye Exp $
++ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+  */
+ 
+ #define FLEX_SCANNER
+@@ -12,7 +12,6 @@
+ #define YY_FLEX_MINOR_VERSION 5
+ 
+ 
+-
+ /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+ #ifdef c_plusplus
+ #ifndef __cplusplus
+@@ -24,8 +23,12 @@
+ #ifdef __cplusplus
+ 
+ #include <stdlib.h>
+-#include <iostream>
+-using namespace std;
++#include <fstream>
++using std::istream;
++using std::ostream;
++#ifndef _WIN32
++#include <unistd.h>
++#endif
+ 
+ /* Use prototypes in function declarations. */
+ #define YY_USE_PROTOS
+@@ -65,6 +68,7 @@
+ #define YY_PROTO(proto) ()
+ #endif
+ 
++
+ /* Returned upon end-of-file. */
+ #define YY_NULL 0
+ 
+@@ -628,7 +632,7 @@
+ #define DISCARD 1
+ 
+ /* rules */
+-#line 632 "ds9lex.C"
++#line 636 "ds9lex.C"
+ 
+ /* Macros after this point can all be overridden by user definitions in
+  * section 1.
+@@ -752,13 +756,13 @@
+ YY_DECL
+ 	{
+ 	register yy_state_type yy_current_state;
+-	register char *yy_cp = NULL, *yy_bp = NULL;
++	register char *yy_cp, *yy_bp;
+ 	register int yy_act;
+ 
+ #line 30 "ds9lex.L"
+ 
+ 
+-#line 762 "ds9lex.C"
++#line 766 "ds9lex.C"
+ 
+ 	if ( yy_init )
+ 		{
+@@ -1579,7 +1583,7 @@
+ #line 272 "ds9lex.L"
+ ECHO;
+ 	YY_BREAK
+-#line 1583 "ds9lex.C"
++#line 1587 "ds9lex.C"
+ 
+ 	case YY_END_OF_BUFFER:
+ 		{
+@@ -2095,6 +2099,7 @@
+ 	return c;
+ 	}
+ 
++
+ void yyFlexLexer::yyrestart( istream* input_file )
+ 	{
+ 	if ( ! yy_current_buffer )
+--- saods9-4.0b7.orig/saotk/frame/ciaoparser.Y
++++ saods9-4.0b7/saotk/frame/ciaoparser.Y
+@@ -10,8 +10,8 @@
+ #define FITSPTR (FR->findFits(1))
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+--- saods9-4.0b7.orig/saotk/frame/prosparser.Y
++++ saods9-4.0b7/saotk/frame/prosparser.Y
+@@ -12,8 +12,8 @@
+ #define DISCARD_(x) {yyclearin; prosDiscard(x);}
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+--- saods9-4.0b7.orig/saotk/frame/proslex.C
++++ saods9-4.0b7/saotk/frame/proslex.C
+@@ -4,7 +4,7 @@
+ /* A lexical scanner generated by flex */
+ 
+ /* Scanner skeleton version:
+- * $Header: /proj/rd/cvsroot/saods9/saotk/frame/proslex.C,v 1.76 2005/08/11 21:32:51 joye Exp $
++ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+  */
+ 
+ #define FLEX_SCANNER
+@@ -12,7 +12,6 @@
+ #define YY_FLEX_MINOR_VERSION 5
+ 
+ 
+-
+ /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+ #ifdef c_plusplus
+ #ifndef __cplusplus
+@@ -24,8 +23,12 @@
+ #ifdef __cplusplus
+ 
+ #include <stdlib.h>
+-#include <iostream>
+-using namespace std;
++#include <fstream>
++using std::istream;
++using std::ostream;
++#ifndef _WIN32
++#include <unistd.h>
++#endif
+ 
+ /* Use prototypes in function declarations. */
+ #define YY_USE_PROTOS
+@@ -65,6 +68,7 @@
+ #define YY_PROTO(proto) ()
+ #endif
+ 
++
+ /* Returned upon end-of-file. */
+ #define YY_NULL 0
+ 
+@@ -482,7 +486,7 @@
+ #define DISCARD 1
+ 
+ /* rules */
+-#line 486 "proslex.C"
++#line 490 "proslex.C"
+ 
+ /* Macros after this point can all be overridden by user definitions in
+  * section 1.
+@@ -606,13 +610,13 @@
+ YY_DECL
+ 	{
+ 	register yy_state_type yy_current_state;
+-	register char *yy_cp = NULL, *yy_bp = NULL;
++	register char *yy_cp, *yy_bp;
+ 	register int yy_act;
+ 
+ #line 30 "proslex.L"
+ 
+ 
+-#line 616 "proslex.C"
++#line 620 "proslex.C"
+ 
+ 	if ( yy_init )
+ 		{
+@@ -986,7 +990,7 @@
+ #line 172 "proslex.L"
+ ECHO;
+ 	YY_BREAK
+-#line 990 "proslex.C"
++#line 994 "proslex.C"
+ 
+ 	case YY_END_OF_BUFFER:
+ 		{
+@@ -1502,6 +1506,7 @@
+ 	return c;
+ 	}
+ 
++
+ void yyFlexLexer::yyrestart( istream* input_file )
+ 	{
+ 	if ( ! yy_current_buffer )
+--- saods9-4.0b7.orig/saotk/frame/ds9parser.C
++++ saods9-4.0b7/saotk/frame/ds9parser.C
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton implementation for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,16 +17,24 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+-/* Written by Richard Stallman by simplifying the original so called
+-   ``semantic'' parser.  */
++/* C LALR(1) parser skeleton written by Richard Stallman, by
++   simplifying the original so-called "semantic" parser.  */
+ 
+ /* All symbols defined below should begin with yy or YY, to avoid
+    infringing on user name space.  This should be done even for local
+@@ -36,6 +46,9 @@
+ /* Identify Bison output.  */
+ #define YYBISON 1
+ 
++/* Bison version.  */
++#define YYBISON_VERSION "2.3"
++
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+ 
+@@ -45,8 +58,7 @@
+ /* Using locations.  */
+ #define YYLSP_NEEDED 0
+ 
+-/* If NAME_PREFIX is specified substitute the variables and functions
+-   names.  */
++/* Substitute the variable and function names.  */
+ #define yyparse mkparse
+ #define yylex   mklex
+ #define yyerror mkerror
+@@ -185,6 +197,7 @@
+      SYM_XOR = 378
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define STRING 260
+@@ -322,8 +335,8 @@
+ #define DISCARD_(x) {yyclearin; mkDiscard(x);}
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+@@ -447,16 +460,23 @@
+ # define YYERROR_VERBOSE 0
+ #endif
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++/* Enabling the token table.  */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
++#endif
++
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 127 "ds9parser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 191 of yacc.c.  */
+-#line 460 "ds9parser.C"
++}
++/* Line 193 of yacc.c.  */
++#line 479 "ds9parser.C"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -467,56 +487,171 @@
+ /* Copy the second part of user declarations.  */
+ 
+ 
+-/* Line 214 of yacc.c.  */
+-#line 472 "ds9parser.C"
++/* Line 216 of yacc.c.  */
++#line 492 "ds9parser.C"
++
++#ifdef short
++# undef short
++#endif
++
++#ifdef YYTYPE_UINT8
++typedef YYTYPE_UINT8 yytype_uint8;
++#else
++typedef unsigned char yytype_uint8;
++#endif
++
++#ifdef YYTYPE_INT8
++typedef YYTYPE_INT8 yytype_int8;
++#elif (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++typedef signed char yytype_int8;
++#else
++typedef short int yytype_int8;
++#endif
++
++#ifdef YYTYPE_UINT16
++typedef YYTYPE_UINT16 yytype_uint16;
++#else
++typedef unsigned short int yytype_uint16;
++#endif
++
++#ifdef YYTYPE_INT16
++typedef YYTYPE_INT16 yytype_int16;
++#else
++typedef short int yytype_int16;
++#endif
++
++#ifndef YYSIZE_T
++# ifdef __SIZE_TYPE__
++#  define YYSIZE_T __SIZE_TYPE__
++# elif defined size_t
++#  define YYSIZE_T size_t
++# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
++#  define YYSIZE_T size_t
++# else
++#  define YYSIZE_T unsigned int
++# endif
++#endif
+ 
+-#if ! defined (yyoverflow) || YYERROR_VERBOSE
++#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+ 
+-# ifndef YYFREE
+-#  define YYFREE free
++#ifndef YY_
++# if YYENABLE_NLS
++#  if ENABLE_NLS
++#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
++#   define YY_(msgid) dgettext ("bison-runtime", msgid)
++#  endif
+ # endif
+-# ifndef YYMALLOC
+-#  define YYMALLOC malloc
++# ifndef YY_
++#  define YY_(msgid) msgid
+ # endif
++#endif
++
++/* Suppress unused-variable warnings by "using" E.  */
++#if ! defined lint || defined __GNUC__
++# define YYUSE(e) ((void) (e))
++#else
++# define YYUSE(e) /* empty */
++#endif
++
++/* Identity function, used to suppress warnings about constant conditions.  */
++#ifndef lint
++# define YYID(n) (n)
++#else
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static int
++YYID (int i)
++#else
++static int
++YYID (i)
++    int i;
++#endif
++{
++  return i;
++}
++#endif
++
++#if ! defined yyoverflow || YYERROR_VERBOSE
+ 
+ /* The parser invokes alloca or malloc; define the necessary symbols.  */
+ 
+ # ifdef YYSTACK_USE_ALLOCA
+ #  if YYSTACK_USE_ALLOCA
+-#   define YYSTACK_ALLOC alloca
+-#  endif
+-# else
+-#  if defined (alloca) || defined (_ALLOCA_H)
+-#   define YYSTACK_ALLOC alloca
+-#  else
+ #   ifdef __GNUC__
+ #    define YYSTACK_ALLOC __builtin_alloca
++#   elif defined __BUILTIN_VA_ARG_INCR
++#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
++#   elif defined _AIX
++#    define YYSTACK_ALLOC __alloca
++#   elif defined _MSC_VER
++#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
++#    define alloca _alloca
++#   else
++#    define YYSTACK_ALLOC alloca
++#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#     ifndef _STDLIB_H
++#      define _STDLIB_H 1
++#     endif
++#    endif
+ #   endif
+ #  endif
+ # endif
+ 
+ # ifdef YYSTACK_ALLOC
+-   /* Pacify GCC's `empty if-body' warning. */
+-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+-# else
+-#  if defined (__STDC__) || defined (__cplusplus)
+-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   define YYSIZE_T size_t
++   /* Pacify GCC's `empty if-body' warning.  */
++#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++    /* The OS might guarantee only one guard page at the bottom of the stack,
++       and a page size can be as small as 4096 bytes.  So we cannot safely
++       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
++       to allow for a few compiler-allocated temporary stack slots.  */
++#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+ #  endif
++# else
+ #  define YYSTACK_ALLOC YYMALLOC
+ #  define YYSTACK_FREE YYFREE
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
++#  endif
++#  if (defined __cplusplus && ! defined _STDLIB_H \
++       && ! ((defined YYMALLOC || defined malloc) \
++	     && (defined YYFREE || defined free)))
++#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#   ifndef _STDLIB_H
++#    define _STDLIB_H 1
++#   endif
++#  endif
++#  ifndef YYMALLOC
++#   define YYMALLOC malloc
++#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
++#  ifndef YYFREE
++#   define YYFREE free
++#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void free (void *); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
+ # endif
+-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
++#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+ 
+ 
+-#if (! defined (yyoverflow) \
+-     && (! defined (__cplusplus) \
+-	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
++#if (! defined yyoverflow \
++     && (! defined __cplusplus \
++	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ 
+ /* A type that is properly aligned for any stack member.  */
+ union yyalloc
+ {
+-  short yyss;
++  yytype_int16 yyss;
+   YYSTYPE yyvs;
+   };
+ 
+@@ -526,24 +661,24 @@
+ /* The size of an array large to enough to hold all stacks, each with
+    N elements.  */
+ # define YYSTACK_BYTES(N) \
+-     ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
++     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+ 
+ /* Copy COUNT objects from FROM to TO.  The source and destination do
+    not overlap.  */
+ # ifndef YYCOPY
+-#  if defined (__GNUC__) && 1 < __GNUC__
++#  if defined __GNUC__ && 1 < __GNUC__
+ #   define YYCOPY(To, From, Count) \
+       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+ #  else
+ #   define YYCOPY(To, From, Count)		\
+       do					\
+ 	{					\
+-	  register YYSIZE_T yyi;		\
++	  YYSIZE_T yyi;				\
+ 	  for (yyi = 0; yyi < (Count); yyi++)	\
+ 	    (To)[yyi] = (From)[yyi];		\
+ 	}					\
+-      while (0)
++      while (YYID (0))
+ #  endif
+ # endif
+ 
+@@ -561,39 +696,33 @@
+ 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ 	yyptr += yynewbytes / sizeof (*yyptr);				\
+       }									\
+-    while (0)
+-
+-#endif
++    while (YYID (0))
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-   typedef signed char yysigned_char;
+-#else
+-   typedef short yysigned_char;
+ #endif
+ 
+-/* YYFINAL -- State number of the termination state. */
++/* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  3
+ /* YYLAST -- Last index in YYTABLE.  */
+ #define YYLAST   2269
+ 
+-/* YYNTOKENS -- Number of terminals. */
++/* YYNTOKENS -- Number of terminals.  */
+ #define YYNTOKENS  136
+-/* YYNNTS -- Number of nonterminals. */
++/* YYNNTS -- Number of nonterminals.  */
+ #define YYNNTS  71
+-/* YYNRULES -- Number of rules. */
++/* YYNRULES -- Number of rules.  */
+ #define YYNRULES  306
+-/* YYNRULES -- Number of states. */
++/* YYNRULES -- Number of states.  */
+ #define YYNSTATES  792
+ 
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   378
+ 
+-#define YYTRANSLATE(YYX) 						\
++#define YYTRANSLATE(YYX)						\
+   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ 
+ /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+-static const unsigned char yytranslate[] =
++static const yytype_uint8 yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      125,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+@@ -638,7 +767,7 @@
+ #if YYDEBUG
+ /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+    YYRHS.  */
+-static const unsigned short yyprhs[] =
++static const yytype_uint16 yyprhs[] =
+ {
+        0,     0,     3,     7,    11,    14,    15,    18,    20,    24,
+       27,    31,    32,    36,    37,    41,    42,    46,    50,    55,
+@@ -673,8 +802,8 @@
+     1202,  1206,  1208,  1210,  1214,  1216,  1220
+ };
+ 
+-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+-static const short yyrhs[] =
++/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
++static const yytype_int16 yyrhs[] =
+ {
+      137,     0,    -1,   180,   138,   206,    -1,   138,   139,   153,
+       -1,   139,   153,    -1,    -1,    35,   155,    -1,    84,    -1,
+@@ -802,7 +931,7 @@
+ };
+ 
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+-static const unsigned short yyrline[] =
++static const yytype_uint16 yyrline[] =
+ {
+        0,   281,   281,   284,   285,   288,   289,   290,   292,   293,
+      294,   296,   296,   297,   297,   298,   298,   300,   301,   303,
+@@ -838,9 +967,9 @@
+ };
+ #endif
+ 
+-#if YYDEBUG || YYERROR_VERBOSE
+-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
++/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
++   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+ {
+   "$end", "error", "$undefined", "INT", "REAL", "STRING", "HOUR",
+@@ -880,7 +1009,7 @@
+ # ifdef YYPRINT
+ /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+    token YYLEX-NUM.  */
+-static const unsigned short yytoknum[] =
++static const yytype_uint16 yytoknum[] =
+ {
+        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+@@ -900,7 +1029,7 @@
+ # endif
+ 
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+-static const unsigned char yyr1[] =
++static const yytype_uint8 yyr1[] =
+ {
+        0,   136,   137,   138,   138,   139,   139,   139,   139,   139,
+      139,   140,   139,   141,   139,   142,   139,   139,   139,   139,
+@@ -936,7 +1065,7 @@
+ };
+ 
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+-static const unsigned char yyr2[] =
++static const yytype_uint8 yyr2[] =
+ {
+        0,     2,     3,     3,     2,     0,     2,     1,     3,     2,
+        3,     0,     3,     0,     3,     0,     3,     3,     4,     1,
+@@ -974,7 +1103,7 @@
+ /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+-static const unsigned short yydefact[] =
++static const yytype_uint16 yydefact[] =
+ {
+      193,     0,   236,     1,    95,   126,     0,    94,   131,   125,
+      127,   130,     0,   129,    92,   128,    15,    93,     0,     7,
+@@ -1058,8 +1187,8 @@
+      270,   263
+ };
+ 
+-/* YYDEFGOTO[NTERM-NUM]. */
+-static const short yydefgoto[] =
++/* YYDEFGOTO[NTERM-NUM].  */
++static const yytype_int16 yydefgoto[] =
+ {
+       -1,     1,    49,    50,    94,    95,    83,    51,    86,   113,
+      191,   371,   432,   501,   452,   453,   518,    93,   250,    58,
+@@ -1074,7 +1203,7 @@
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+    STATE-NUM.  */
+ #define YYPACT_NINF -623
+-static const short yypact[] =
++static const yytype_int16 yypact[] =
+ {
+     -623,    44,  1482,  -623,  -623,  -623,    -4,  -623,  -623,  -623,
+     -623,  -623,   865,  -623,  -623,  -623,  -623,  -623,    33,  -623,
+@@ -1159,7 +1288,7 @@
+ };
+ 
+ /* YYPGOTO[NTERM-NUM].  */
+-static const short yypgoto[] =
++static const yytype_int16 yypgoto[] =
+ {
+     -623,  -623,  -623,   457,  -623,  -623,  -623,  -623,  -623,   103,
+     -623,   623,  -623,  -623,  -512,  -623,  -623,   420,   -80,  -623,
+@@ -1176,7 +1305,7 @@
+    number is the opposite.  If zero, do what YYDEFACT says.
+    If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -307
+-static const short yytable[] =
++static const yytype_int16 yytable[] =
+ {
+      114,   592,   593,   204,   595,   206,   208,   209,   210,   211,
+       89,   -53,   214,   215,   216,   217,   218,   219,   -29,   221,
+@@ -1407,7 +1536,7 @@
+       38,    39,    40,    41,    42,    43,    44,    45,    46,    47
+ };
+ 
+-static const short yycheck[] =
++static const yytype_int16 yycheck[] =
+ {
+       81,   513,   514,   124,   516,   126,   127,   128,   129,   130,
+       49,     5,   133,   134,   135,   136,   137,   138,     5,   140,
+@@ -1640,7 +1769,7 @@
+ 
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+    symbol of state STATE-NUM.  */
+-static const unsigned char yystos[] =
++static const yytype_uint8 yystos[] =
+ {
+        0,   137,   180,     0,    17,    22,    35,    38,    40,    48,
+       49,    51,    52,    54,    56,    58,    60,    66,    81,    84,
+@@ -1724,22 +1853,6 @@
+      147,   147
+ };
+ 
+-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+-# define YYSIZE_T __SIZE_TYPE__
+-#endif
+-#if ! defined (YYSIZE_T) && defined (size_t)
+-# define YYSIZE_T size_t
+-#endif
+-#if ! defined (YYSIZE_T)
+-# if defined (__STDC__) || defined (__cplusplus)
+-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+-#  define YYSIZE_T size_t
+-# endif
+-#endif
+-#if ! defined (YYSIZE_T)
+-# define YYSIZE_T unsigned int
+-#endif
+-
+ #define yyerrok		(yyerrstatus = 0)
+ #define yyclearin	(yychar = YYEMPTY)
+ #define YYEMPTY		(-2)
+@@ -1765,30 +1878,63 @@
+       yychar = (Token);						\
+       yylval = (Value);						\
+       yytoken = YYTRANSLATE (yychar);				\
+-      YYPOPSTACK;						\
++      YYPOPSTACK (1);						\
+       goto yybackup;						\
+     }								\
+   else								\
+-    { 								\
+-      yyerror ("syntax error: cannot back up");\
++    {								\
++      yyerror (YY_("syntax error: cannot back up")); \
+       YYERROR;							\
+     }								\
+-while (0)
++while (YYID (0))
++
+ 
+ #define YYTERROR	1
+ #define YYERRCODE	256
+ 
+-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+-   are run).  */
+ 
++/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
++   If N is 0, then set CURRENT to the empty location which ends
++   the previous symbol: RHS[0] (always defined).  */
++
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)		\
+-   ((Current).first_line   = (Rhs)[1].first_line,	\
+-    (Current).first_column = (Rhs)[1].first_column,	\
+-    (Current).last_line    = (Rhs)[N].last_line,	\
+-    (Current).last_column  = (Rhs)[N].last_column)
++# define YYLLOC_DEFAULT(Current, Rhs, N)				\
++    do									\
++      if (YYID (N))                                                    \
++	{								\
++	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
++	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
++	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
++	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
++	}								\
++      else								\
++	{								\
++	  (Current).first_line   = (Current).last_line   =		\
++	    YYRHSLOC (Rhs, 0).last_line;				\
++	  (Current).first_column = (Current).last_column =		\
++	    YYRHSLOC (Rhs, 0).last_column;				\
++	}								\
++    while (YYID (0))
++#endif
++
++
++/* YY_LOCATION_PRINT -- Print the location on the stream.
++   This macro was not mandated originally: define only if we know
++   we won't break user code: when these are the locations we know.  */
++
++#ifndef YY_LOCATION_PRINT
++# if YYLTYPE_IS_TRIVIAL
++#  define YY_LOCATION_PRINT(File, Loc)			\
++     fprintf (File, "%d.%d-%d.%d",			\
++	      (Loc).first_line, (Loc).first_column,	\
++	      (Loc).last_line,  (Loc).last_column)
++# else
++#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# endif
+ #endif
+ 
++
+ /* YYLEX -- calling `yylex' with the right arguments.  */
+ 
+ #ifdef YYLEX_PARAM
+@@ -1809,42 +1955,96 @@
+ do {						\
+   if (yydebug)					\
+     YYFPRINTF Args;				\
+-} while (0)
++} while (YYID (0))
+ 
+-# define YYDSYMPRINT(Args)			\
+-do {						\
+-  if (yydebug)					\
+-    yysymprint Args;				\
+-} while (0)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
++do {									  \
++  if (yydebug)								  \
++    {									  \
++      YYFPRINTF (stderr, "%s ", Title);					  \
++      yy_symbol_print (stderr,						  \
++		  Type, Value); \
++      YYFPRINTF (stderr, "\n");						  \
++    }									  \
++} while (YYID (0))
+ 
+-# define YYDSYMPRINTF(Title, Token, Value, Location)		\
+-do {								\
+-  if (yydebug)							\
+-    {								\
+-      YYFPRINTF (stderr, "%s ", Title);				\
+-      yysymprint (stderr, 					\
+-                  Token, Value);	\
+-      YYFPRINTF (stderr, "\n");					\
+-    }								\
+-} while (0)
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_value_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (!yyvaluep)
++    return;
++# ifdef YYPRINT
++  if (yytype < YYNTOKENS)
++    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++# else
++  YYUSE (yyoutput);
++# endif
++  switch (yytype)
++    {
++      default:
++	break;
++    }
++}
++
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (yytype < YYNTOKENS)
++    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
++  else
++    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++
++  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
++  YYFPRINTF (yyoutput, ")");
++}
+ 
+ /*------------------------------------------------------------------.
+ | yy_stack_print -- Print the state stack from its BOTTOM up to its |
+ | TOP (included).                                                   |
+ `------------------------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_stack_print (short *bottom, short *top)
++yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+ #else
+ static void
+ yy_stack_print (bottom, top)
+-    short *bottom;
+-    short *top;
++    yytype_int16 *bottom;
++    yytype_int16 *top;
+ #endif
+ {
+   YYFPRINTF (stderr, "Stack now");
+-  for (/* Nothing. */; bottom <= top; ++bottom)
++  for (; bottom <= top; ++bottom)
+     YYFPRINTF (stderr, " %d", *bottom);
+   YYFPRINTF (stderr, "\n");
+ }
+@@ -1853,45 +2053,52 @@
+ do {								\
+   if (yydebug)							\
+     yy_stack_print ((Bottom), (Top));				\
+-} while (0)
++} while (YYID (0))
+ 
+ 
+ /*------------------------------------------------.
+ | Report that the YYRULE is going to be reduced.  |
+ `------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_reduce_print (int yyrule)
++yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+ #else
+ static void
+-yy_reduce_print (yyrule)
++yy_reduce_print (yyvsp, yyrule)
++    YYSTYPE *yyvsp;
+     int yyrule;
+ #endif
+ {
++  int yynrhs = yyr2[yyrule];
+   int yyi;
+-  unsigned int yylno = yyrline[yyrule];
+-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+-             yyrule - 1, yylno);
+-  /* Print the symbols being reduced, and their result.  */
+-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
++  unsigned long int yylno = yyrline[yyrule];
++  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
++	     yyrule - 1, yylno);
++  /* The symbols being reduced.  */
++  for (yyi = 0; yyi < yynrhs; yyi++)
++    {
++      fprintf (stderr, "   $%d = ", yyi + 1);
++      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
++		       &(yyvsp[(yyi + 1) - (yynrhs)])
++		       		       );
++      fprintf (stderr, "\n");
++    }
+ }
+ 
+ # define YY_REDUCE_PRINT(Rule)		\
+ do {					\
+   if (yydebug)				\
+-    yy_reduce_print (Rule);		\
+-} while (0)
++    yy_reduce_print (yyvsp, Rule); \
++} while (YYID (0))
+ 
+ /* Nonzero means print parse trace.  It is left uninitialized so that
+    multiple parsers can coexist.  */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
+-# define YYDSYMPRINT(Args)
+-# define YYDSYMPRINTF(Title, Token, Value, Location)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+ # define YY_STACK_PRINT(Bottom, Top)
+ # define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
+@@ -1906,13 +2113,9 @@
+    if the built-in stack extension method is used).
+ 
+    Do not make this value too large; the results are undefined if
+-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
++   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+    evaluated with infinite-precision integer arithmetic.  */
+ 
+-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
+-# undef YYMAXDEPTH
+-#endif
+-
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
+@@ -1922,45 +2125,47 @@
+ #if YYERROR_VERBOSE
+ 
+ # ifndef yystrlen
+-#  if defined (__GLIBC__) && defined (_STRING_H)
++#  if defined __GLIBC__ && defined _STRING_H
+ #   define yystrlen strlen
+ #  else
+ /* Return the length of YYSTR.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static YYSIZE_T
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystrlen (const char *yystr)
+-#   else
++#else
++static YYSIZE_T
+ yystrlen (yystr)
+-     const char *yystr;
+-#   endif
++    const char *yystr;
++#endif
+ {
+-  register const char *yys = yystr;
+-
+-  while (*yys++ != '\0')
++  YYSIZE_T yylen;
++  for (yylen = 0; yystr[yylen]; yylen++)
+     continue;
+-
+-  return yys - yystr - 1;
++  return yylen;
+ }
+ #  endif
+ # endif
+ 
+ # ifndef yystpcpy
+-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
++#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+ #   define yystpcpy stpcpy
+ #  else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+    YYDEST.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static char *
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystpcpy (char *yydest, const char *yysrc)
+-#   else
++#else
++static char *
+ yystpcpy (yydest, yysrc)
+-     char *yydest;
+-     const char *yysrc;
+-#   endif
++    char *yydest;
++    const char *yysrc;
++#endif
+ {
+-  register char *yyd = yydest;
+-  register const char *yys = yysrc;
++  char *yyd = yydest;
++  const char *yys = yysrc;
+ 
+   while ((*yyd++ = *yys++) != '\0')
+     continue;
+@@ -1970,70 +2175,192 @@
+ #  endif
+ # endif
+ 
+-#endif /* !YYERROR_VERBOSE */
++# ifndef yytnamerr
++/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
++   quotes and backslashes, so that it's suitable for yyerror.  The
++   heuristic is that double-quoting is unnecessary unless the string
++   contains an apostrophe, a comma, or backslash (other than
++   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
++   null, do not copy; instead, return the length of what the result
++   would have been.  */
++static YYSIZE_T
++yytnamerr (char *yyres, const char *yystr)
++{
++  if (*yystr == '"')
++    {
++      YYSIZE_T yyn = 0;
++      char const *yyp = yystr;
++
++      for (;;)
++	switch (*++yyp)
++	  {
++	  case '\'':
++	  case ',':
++	    goto do_not_strip_quotes;
++
++	  case '\\':
++	    if (*++yyp != '\\')
++	      goto do_not_strip_quotes;
++	    /* Fall through.  */
++	  default:
++	    if (yyres)
++	      yyres[yyn] = *yyp;
++	    yyn++;
++	    break;
+ 
+-
++	  case '"':
++	    if (yyres)
++	      yyres[yyn] = '\0';
++	    return yyn;
++	  }
++    do_not_strip_quotes: ;
++    }
+ 
+-#if YYDEBUG
+-/*--------------------------------.
+-| Print this symbol on YYOUTPUT.  |
+-`--------------------------------*/
++  if (! yyres)
++    return yystrlen (yystr);
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-static void
+-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+-#else
+-static void
+-yysymprint (yyoutput, yytype, yyvaluep)
+-    FILE *yyoutput;
+-    int yytype;
+-    YYSTYPE *yyvaluep;
+-#endif
++  return yystpcpy (yyres, yystr) - yyres;
++}
++# endif
++
++/* Copy into YYRESULT an error message about the unexpected token
++   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
++   including the terminating null byte.  If YYRESULT is null, do not
++   copy anything; just return the number of bytes that would be
++   copied.  As a special case, return 0 if an ordinary "syntax error"
++   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
++   size calculation.  */
++static YYSIZE_T
++yysyntax_error (char *yyresult, int yystate, int yychar)
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  int yyn = yypact[yystate];
+ 
+-  if (yytype < YYNTOKENS)
++  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
++    return 0;
++  else
+     {
+-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+-# ifdef YYPRINT
+-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++      int yytype = YYTRANSLATE (yychar);
++      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
++      YYSIZE_T yysize = yysize0;
++      YYSIZE_T yysize1;
++      int yysize_overflow = 0;
++      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++      int yyx;
++
++# if 0
++      /* This is so xgettext sees the translatable formats that are
++	 constructed on the fly.  */
++      YY_("syntax error, unexpected %s");
++      YY_("syntax error, unexpected %s, expecting %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+ # endif
+-    }
+-  else
+-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++      char *yyfmt;
++      char const *yyf;
++      static char const yyunexpected[] = "syntax error, unexpected %s";
++      static char const yyexpecting[] = ", expecting %s";
++      static char const yyor[] = " or %s";
++      char yyformat[sizeof yyunexpected
++		    + sizeof yyexpecting - 1
++		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
++		       * (sizeof yyor - 1))];
++      char const *yyprefix = yyexpecting;
++
++      /* Start YYX at -YYN if negative to avoid negative indexes in
++	 YYCHECK.  */
++      int yyxbegin = yyn < 0 ? -yyn : 0;
++
++      /* Stay within bounds of both yycheck and yytname.  */
++      int yychecklim = YYLAST - yyn + 1;
++      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++      int yycount = 1;
++
++      yyarg[0] = yytname[yytype];
++      yyfmt = yystpcpy (yyformat, yyunexpected);
++
++      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++	  {
++	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++	      {
++		yycount = 1;
++		yysize = yysize0;
++		yyformat[sizeof yyunexpected - 1] = '\0';
++		break;
++	      }
++	    yyarg[yycount++] = yytname[yyx];
++	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++	    yysize_overflow |= (yysize1 < yysize);
++	    yysize = yysize1;
++	    yyfmt = yystpcpy (yyfmt, yyprefix);
++	    yyprefix = yyor;
++	  }
+ 
+-  switch (yytype)
+-    {
+-      default:
+-        break;
++      yyf = YY_(yyformat);
++      yysize1 = yysize + yystrlen (yyf);
++      yysize_overflow |= (yysize1 < yysize);
++      yysize = yysize1;
++
++      if (yysize_overflow)
++	return YYSIZE_MAXIMUM;
++
++      if (yyresult)
++	{
++	  /* Avoid sprintf, as that infringes on the user's name space.
++	     Don't have undefined behavior even if the translation
++	     produced a string with the wrong number of "%s"s.  */
++	  char *yyp = yyresult;
++	  int yyi = 0;
++	  while ((*yyp = *yyf) != '\0')
++	    {
++	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
++		{
++		  yyp += yytnamerr (yyp, yyarg[yyi++]);
++		  yyf += 2;
++		}
++	      else
++		{
++		  yyp++;
++		  yyf++;
++		}
++	    }
++	}
++      return yysize;
+     }
+-  YYFPRINTF (yyoutput, ")");
+ }
++#endif /* YYERROR_VERBOSE */
++
+ 
+-#endif /* ! YYDEBUG */
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+ `-----------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yydestruct (int yytype, YYSTYPE *yyvaluep)
++yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+ #else
+ static void
+-yydestruct (yytype, yyvaluep)
++yydestruct (yymsg, yytype, yyvaluep)
++    const char *yymsg;
+     int yytype;
+     YYSTYPE *yyvaluep;
+ #endif
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  YYUSE (yyvaluep);
++
++  if (!yymsg)
++    yymsg = "Deleting";
++  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ 
+   switch (yytype)
+     {
+ 
+       default:
+-        break;
++	break;
+     }
+ }
+ 
+@@ -2041,13 +2368,13 @@
+ /* Prevent warnings from -Wmissing-prototypes.  */
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void *YYPARSE_PARAM);
+-# else
++#else
+ int yyparse ();
+-# endif
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void);
+ #else
+ int yyparse ();
+@@ -2056,10 +2383,10 @@
+ 
+ 
+ 
+-/* The lookahead symbol.  */
++/* The look-ahead symbol.  */
+ int yychar;
+ 
+-/* The semantic value of the lookahead symbol.  */
++/* The semantic value of the look-ahead symbol.  */
+ YYSTYPE yylval;
+ 
+ /* Number of syntax errors so far.  */
+@@ -2072,14 +2399,18 @@
+ `----------*/
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
+-int yyparse (void *YYPARSE_PARAM)
+-# else
+-int yyparse (YYPARSE_PARAM)
+-  void *YYPARSE_PARAM;
+-# endif
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++int
++yyparse (void *YYPARSE_PARAM)
++#else
++int
++yyparse (YYPARSE_PARAM)
++    void *YYPARSE_PARAM;
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ int
+ yyparse (void)
+ #else
+@@ -2090,13 +2421,19 @@
+ #endif
+ {
+   
+-  register int yystate;
+-  register int yyn;
++  int yystate;
++  int yyn;
+   int yyresult;
+   /* Number of tokens to shift before error messages enabled.  */
+   int yyerrstatus;
+-  /* Lookahead token as an internal (translated) token number.  */
++  /* Look-ahead token as an internal (translated) token number.  */
+   int yytoken = 0;
++#if YYERROR_VERBOSE
++  /* Buffer for error messages, and its allocated size.  */
++  char yymsgbuf[128];
++  char *yymsg = yymsgbuf;
++  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
++#endif
+ 
+   /* Three stacks and their tools:
+      `yyss': related to states,
+@@ -2107,18 +2444,18 @@
+      to reallocate them elsewhere.  */
+ 
+   /* The state stack.  */
+-  short	yyssa[YYINITDEPTH];
+-  short *yyss = yyssa;
+-  register short *yyssp;
++  yytype_int16 yyssa[YYINITDEPTH];
++  yytype_int16 *yyss = yyssa;
++  yytype_int16 *yyssp;
+ 
+   /* The semantic value stack.  */
+   YYSTYPE yyvsa[YYINITDEPTH];
+   YYSTYPE *yyvs = yyvsa;
+-  register YYSTYPE *yyvsp;
++  YYSTYPE *yyvsp;
+ 
+ 
+ 
+-#define YYPOPSTACK   (yyvsp--, yyssp--)
++#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+ 
+   YYSIZE_T yystacksize = YYINITDEPTH;
+ 
+@@ -2127,9 +2464,9 @@
+   YYSTYPE yyval;
+ 
+ 
+-  /* When reducing, the number of symbols on the RHS of the reduced
+-     rule.  */
+-  int yylen;
++  /* The number of symbols on the RHS of the reduced rule.
++     Keep to zero when no symbol should be popped.  */
++  int yylen = 0;
+ 
+   YYDPRINTF ((stderr, "Starting parse\n"));
+ 
+@@ -2153,8 +2490,7 @@
+ `------------------------------------------------------------*/
+  yynewstate:
+   /* In all cases, when you get here, the value and location stacks
+-     have just been pushed. so pushing a state here evens the stacks.
+-     */
++     have just been pushed.  So pushing a state here evens the stacks.  */
+   yyssp++;
+ 
+  yysetstate:
+@@ -2167,18 +2503,18 @@
+ 
+ #ifdef yyoverflow
+       {
+-	/* Give user a chance to reallocate the stack. Use copies of
++	/* Give user a chance to reallocate the stack.  Use copies of
+ 	   these so that the &'s don't force the real ones into
+ 	   memory.  */
+ 	YYSTYPE *yyvs1 = yyvs;
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 
+ 
+ 	/* Each stack pointer address is followed by the size of the
+ 	   data in use in that stack, in bytes.  This used to be a
+ 	   conditional around just the two extra args, but that might
+ 	   be undefined if yyoverflow is a macro.  */
+-	yyoverflow ("parser stack overflow",
++	yyoverflow (YY_("memory exhausted"),
+ 		    &yyss1, yysize * sizeof (*yyssp),
+ 		    &yyvs1, yysize * sizeof (*yyvsp),
+ 
+@@ -2189,21 +2525,21 @@
+       }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+-      goto yyoverflowlab;
++      goto yyexhaustedlab;
+ # else
+       /* Extend the stack our own way.  */
+       if (YYMAXDEPTH <= yystacksize)
+-	goto yyoverflowlab;
++	goto yyexhaustedlab;
+       yystacksize *= 2;
+       if (YYMAXDEPTH < yystacksize)
+ 	yystacksize = YYMAXDEPTH;
+ 
+       {
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 	union yyalloc *yyptr =
+ 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ 	if (! yyptr)
+-	  goto yyoverflowlab;
++	  goto yyexhaustedlab;
+ 	YYSTACK_RELOCATE (yyss);
+ 	YYSTACK_RELOCATE (yyvs);
+ 
+@@ -2234,19 +2570,17 @@
+ `-----------*/
+ yybackup:
+ 
+-/* Do appropriate processing given the current state.  */
+-/* Read a lookahead token if we need one and don't already have one.  */
+-/* yyresume: */
+-
+-  /* First try to decide what to do without reference to lookahead token.  */
++  /* Do appropriate processing given the current state.  Read a
++     look-ahead token if we need one and don't already have one.  */
+ 
++  /* First try to decide what to do without reference to look-ahead token.  */
+   yyn = yypact[yystate];
+   if (yyn == YYPACT_NINF)
+     goto yydefault;
+ 
+-  /* Not known => get a lookahead token if don't already have one.  */
++  /* Not known => get a look-ahead token if don't already have one.  */
+ 
+-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
++  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+   if (yychar == YYEMPTY)
+     {
+       YYDPRINTF ((stderr, "Reading a token: "));
+@@ -2261,7 +2595,7 @@
+   else
+     {
+       yytoken = YYTRANSLATE (yychar);
+-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
++      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+     }
+ 
+   /* If the proper action on seeing token YYTOKEN is to reduce or to
+@@ -2281,22 +2615,21 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  /* Shift the lookahead token.  */
+-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+-
+-  /* Discard the token being shifted unless it is eof.  */
+-  if (yychar != YYEOF)
+-    yychar = YYEMPTY;
+-
+-  *++yyvsp = yylval;
+-
+-
+   /* Count tokens shifted since error; after three, turn off error
+      status.  */
+   if (yyerrstatus)
+     yyerrstatus--;
+ 
++  /* Shift the look-ahead token.  */
++  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
++
++  /* Discard the shifted token unless it is eof.  */
++  if (yychar != YYEOF)
++    yychar = YYEMPTY;
++
+   yystate = yyn;
++  *++yyvsp = yylval;
++
+   goto yynewstate;
+ 
+ 
+@@ -2338,22 +2671,22 @@
+ 
+   case 9:
+ #line 293 "ds9parser.Y"
+-    {globalTile = yyvsp[0].integer;;}
++    {globalTile = (yyvsp[(2) - (2)].integer);;}
+     break;
+ 
+   case 10:
+ #line 294 "ds9parser.Y"
+-    {globalTile = yyvsp[0].integer;;}
++    {globalTile = (yyvsp[(3) - (3)].integer);;}
+     break;
+ 
+   case 11:
+ #line 296 "ds9parser.Y"
+-    {globalSystem=(CoordSystem)yyvsp[0].integer;;}
++    {globalSystem=(CoordSystem)(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 13:
+ #line 297 "ds9parser.Y"
+-    {globalSystem=globalWCS; globalSky=(SkyFrame)yyvsp[0].integer;;}
++    {globalSystem=globalWCS; globalSky=(SkyFrame)(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 15:
+@@ -2378,7 +2711,7 @@
+ 
+   case 27:
+ #line 314 "ds9parser.Y"
+-    {strncpy(localComment,yyvsp[-1].str,80);}
++    {strncpy(localComment,(yyvsp[(3) - (4)].str),80);}
+     break;
+ 
+   case 29:
+@@ -2388,7 +2721,7 @@
+ 
+   case 30:
+ #line 317 "ds9parser.Y"
+-    {strncpy(localComment,yyvsp[-1].str,80);}
++    {strncpy(localComment,(yyvsp[(4) - (5)].str),80);}
+     break;
+ 
+   case 32:
+@@ -2398,7 +2731,7 @@
+ 
+   case 33:
+ #line 321 "ds9parser.Y"
+-    {strncpy(localComment,yyvsp[-1].str,80);}
++    {strncpy(localComment,(yyvsp[(2) - (3)].str),80);}
+     break;
+ 
+   case 35:
+@@ -2408,7 +2741,7 @@
+ 
+   case 36:
+ #line 323 "ds9parser.Y"
+-    {strncpy(localComment,yyvsp[-1].str,80);}
++    {strncpy(localComment,(yyvsp[(3) - (4)].str),80);}
+     break;
+ 
+   case 39:
+@@ -2418,12 +2751,12 @@
+ 
+   case 40:
+ #line 331 "ds9parser.Y"
+-    {yyval.real=yyvsp[0].real;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 41:
+ #line 332 "ds9parser.Y"
+-    {yyval.real=yyvsp[0].integer;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 42:
+@@ -2438,47 +2771,47 @@
+ 
+   case 44:
+ #line 339 "ds9parser.Y"
+-    {yyval.integer=(yyvsp[0].integer ? 1 : 0);;}
++    {(yyval.integer)=((yyvsp[(1) - (1)].integer) ? 1 : 0);;}
+     break;
+ 
+   case 45:
+ #line 341 "ds9parser.Y"
+-    {yyval.integer=1;;}
++    {(yyval.integer)=1;;}
+     break;
+ 
+   case 46:
+ #line 342 "ds9parser.Y"
+-    {yyval.integer=1;;}
++    {(yyval.integer)=1;;}
+     break;
+ 
+   case 47:
+ #line 343 "ds9parser.Y"
+-    {yyval.integer=1;;}
++    {(yyval.integer)=1;;}
+     break;
+ 
+   case 48:
+ #line 344 "ds9parser.Y"
+-    {yyval.integer=1;;}
++    {(yyval.integer)=1;;}
+     break;
+ 
+   case 49:
+ #line 346 "ds9parser.Y"
+-    {yyval.integer=0;;}
++    {(yyval.integer)=0;;}
+     break;
+ 
+   case 50:
+ #line 347 "ds9parser.Y"
+-    {yyval.integer=0;;}
++    {(yyval.integer)=0;;}
+     break;
+ 
+   case 51:
+ #line 348 "ds9parser.Y"
+-    {yyval.integer=0;;}
++    {(yyval.integer)=0;;}
+     break;
+ 
+   case 52:
+ #line 349 "ds9parser.Y"
+-    {yyval.integer=0;;}
++    {(yyval.integer)=0;;}
+     break;
+ 
+   case 59:
+@@ -2498,127 +2831,127 @@
+ 
+   case 62:
+ #line 369 "ds9parser.Y"
+-    {yyval.real = FR->mapAngleToRef(0,localSystem,localSky);;}
++    {(yyval.real) = FR->mapAngleToRef(0,localSystem,localSky);;}
+     break;
+ 
+   case 63:
+ #line 370 "ds9parser.Y"
+-    {yyval.real = yyvsp[0].real;;}
++    {(yyval.real) = (yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 64:
+ #line 373 "ds9parser.Y"
+-    {yyval.real = FR->mapAngleToRef(degToRad(yyvsp[0].real),localSystem,localSky);;}
++    {(yyval.real) = FR->mapAngleToRef(degToRad((yyvsp[(1) - (1)].real)),localSystem,localSky);;}
+     break;
+ 
+   case 65:
+ #line 374 "ds9parser.Y"
+-    {yyval.real = FR->mapAngleToRef(degToRad(yyvsp[0].real),localSystem,localSky);;}
++    {(yyval.real) = FR->mapAngleToRef(degToRad((yyvsp[(1) - (1)].real)),localSystem,localSky);;}
+     break;
+ 
+   case 66:
+ #line 375 "ds9parser.Y"
+-    {yyval.real = FR->mapAngleToRef(yyvsp[0].real,localSystem,localSky);;}
++    {(yyval.real) = FR->mapAngleToRef((yyvsp[(1) - (1)].real),localSystem,localSky);;}
+     break;
+ 
+   case 67:
+ #line 378 "ds9parser.Y"
+-    {yyval.real = FITSPTR->mapLenToRef(yyvsp[0].real, localSystem, DEGREES);;}
++    {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), localSystem, DEGREES);;}
+     break;
+ 
+   case 68:
+ #line 379 "ds9parser.Y"
+-    {yyval.real = FITSPTR->mapLenToRef(yyvsp[0].real, PHYSICAL);;}
++    {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), PHYSICAL);;}
+     break;
+ 
+   case 69:
+ #line 380 "ds9parser.Y"
+-    {yyval.real = FITSPTR->mapLenToRef(yyvsp[0].real, IMAGE);;}
++    {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), IMAGE);;}
+     break;
+ 
+   case 70:
+ #line 381 "ds9parser.Y"
+-    {yyval.real = FITSPTR->mapLenToRef(yyvsp[0].real, checkWCSSystem(), DEGREES);;}
++    {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), DEGREES);;}
+     break;
+ 
+   case 71:
+ #line 382 "ds9parser.Y"
+-    {yyval.real = FITSPTR->mapLenToRef(yyvsp[0].real, checkWCSSystem(), ARCMIN);;}
++    {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), ARCMIN);;}
+     break;
+ 
+   case 72:
+ #line 383 "ds9parser.Y"
+-    {yyval.real = FITSPTR->mapLenToRef(yyvsp[0].real, checkWCSSystem(), ARCSEC);;}
++    {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), checkWCSSystem(), ARCSEC);;}
+     break;
+ 
+   case 73:
+ #line 387 "ds9parser.Y"
+     {
+-	  Vector r = FITSPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real), localSystem, DEGREES);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), localSystem, DEGREES);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 74:
+ #line 394 "ds9parser.Y"
+     {
+-	  Vector r = FITSPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real), PHYSICAL);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), PHYSICAL);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 75:
+ #line 401 "ds9parser.Y"
+     {
+-	  Vector r = FITSPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real), IMAGE);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), IMAGE);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 76:
+ #line 408 "ds9parser.Y"
+     {
+-	  Vector r=FITSPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real),checkWCSSystem(),DEGREES);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r=FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),DEGREES);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 77:
+ #line 415 "ds9parser.Y"
+     {
+-	  Vector r=FITSPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real),checkWCSSystem(),ARCMIN);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r=FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),ARCMIN);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 78:
+ #line 422 "ds9parser.Y"
+     {
+-	  Vector r=FITSPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real),checkWCSSystem(),ARCSEC);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r=FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),checkWCSSystem(),ARCSEC);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 79:
+ #line 430 "ds9parser.Y"
+-    {yyval.integer = yyvsp[0].integer;;}
++    {(yyval.integer) = (yyvsp[(3) - (3)].integer);;}
+     break;
+ 
+   case 80:
+ #line 433 "ds9parser.Y"
+-    {yyval.real = parseDMS(yyvsp[0].str);;}
++    {(yyval.real) = parseDMS((yyvsp[(1) - (1)].str));;}
+     break;
+ 
+   case 81:
+@@ -2628,13 +2961,13 @@
+ 	  CoordSystem sys = checkWCSSystem();
+ 	  SkyFrame sky = checkWCSSky();
+ 	  if (sky == GALACTIC || sky == ECLIPTIC) 
+-	    r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real), sys, sky);
++	    r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), sys, sky);
+ 	  else
+-	    r = FITSPTR->mapToRef(Vector(yyvsp[-2].real*360./24.,yyvsp[0].real), sys, sky);
++	    r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real)*360./24.,(yyvsp[(3) - (3)].real)), sys, sky);
+ 
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -2647,11 +2980,11 @@
+ #line 451 "ds9parser.Y"
+     {
+ 	  Vector r = FITSPTR->mapToRef(
+-	    Vector(hmsToDegree(mksign2,yyvsp[-7].integer,yyvsp[-6].integer,yyvsp[-5].real),dmsToDegree(mksign,yyvsp[-2].integer,yyvsp[-1].real,yyvsp[0].real)),
++	    Vector(hmsToDegree(mksign2,(yyvsp[(1) - (8)].integer),(yyvsp[(2) - (8)].integer),(yyvsp[(3) - (8)].real)),dmsToDegree(mksign,(yyvsp[(6) - (8)].integer),(yyvsp[(7) - (8)].real),(yyvsp[(8) - (8)].real))),
+ 	    checkWCSSystem(), checkWCSSky());
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -2664,470 +2997,470 @@
+ #line 461 "ds9parser.Y"
+     {
+ 	  Vector r = FITSPTR->mapToRef(
+-	    Vector(dmsToDegree(mksign2,yyvsp[-7].integer,yyvsp[-6].real,yyvsp[-5].real),dmsToDegree(mksign,yyvsp[-2].integer,yyvsp[-1].real,yyvsp[0].real)),
++	    Vector(dmsToDegree(mksign2,(yyvsp[(1) - (8)].integer),(yyvsp[(2) - (8)].real),(yyvsp[(3) - (8)].real)),dmsToDegree(mksign,(yyvsp[(6) - (8)].integer),(yyvsp[(7) - (8)].real),(yyvsp[(8) - (8)].real))),
+ 	    checkWCSSystem(), checkWCSSky());
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 86:
+ #line 470 "ds9parser.Y"
+     {
+-	  Vector r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real), localSystem, localSky);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), localSystem, localSky);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 87:
+ #line 477 "ds9parser.Y"
+     {
+-	  Vector r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real), 
++	  Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), 
+ 	    checkWCSSystem(), checkWCSSky());
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 88:
+ #line 485 "ds9parser.Y"
+     {
+-	  Vector r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real), IMAGE);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), IMAGE);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 89:
+ #line 492 "ds9parser.Y"
+     {
+-	  Vector r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real), PHYSICAL);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
++	  Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), PHYSICAL);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
+ 	;}
+     break;
+ 
+   case 90:
+ #line 498 "ds9parser.Y"
+     {
+-	  Vector rx = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[-2].real), IMAGE);
+-	  Vector ry = FITSPTR->mapToRef(Vector(yyvsp[0].real,yyvsp[0].real), PHYSICAL);
+-	  yyval.vector[0] = rx[0];
+-	  yyval.vector[1] = ry[0];
+-	  yyval.vector[2] = 1;
++	  Vector rx = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(1) - (3)].real)), IMAGE);
++	  Vector ry = FITSPTR->mapToRef(Vector((yyvsp[(3) - (3)].real),(yyvsp[(3) - (3)].real)), PHYSICAL);
++	  (yyval.vector)[0] = rx[0];
++	  (yyval.vector)[1] = ry[0];
++	  (yyval.vector)[2] = 1;
+ 	;}
+     break;
+ 
+   case 91:
+ #line 506 "ds9parser.Y"
+     {
+-	  Vector rx = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[-2].real), PHYSICAL);
+-	  Vector ry = FITSPTR->mapToRef(Vector(yyvsp[0].real,yyvsp[0].real), IMAGE);
+-	  yyval.vector[0] = rx[0];
+-	  yyval.vector[1] = ry[0];
+-	  yyval.vector[2] = 1;
++	  Vector rx = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(1) - (3)].real)), PHYSICAL);
++	  Vector ry = FITSPTR->mapToRef(Vector((yyvsp[(3) - (3)].real),(yyvsp[(3) - (3)].real)), IMAGE);
++	  (yyval.vector)[0] = rx[0];
++	  (yyval.vector)[1] = ry[0];
++	  (yyval.vector)[2] = 1;
+ 	;}
+     break;
+ 
+   case 92:
+ #line 515 "ds9parser.Y"
+-    {yyval.integer = IMAGE;;}
++    {(yyval.integer) = IMAGE;;}
+     break;
+ 
+   case 93:
+ #line 516 "ds9parser.Y"
+-    {yyval.integer = PHYSICAL;;}
++    {(yyval.integer) = PHYSICAL;;}
+     break;
+ 
+   case 94:
+ #line 517 "ds9parser.Y"
+-    {yyval.integer = DETECTOR;;}
++    {(yyval.integer) = DETECTOR;;}
+     break;
+ 
+   case 95:
+ #line 518 "ds9parser.Y"
+-    {yyval.integer = AMPLIFIER;;}
++    {(yyval.integer) = AMPLIFIER;;}
+     break;
+ 
+   case 96:
+ #line 519 "ds9parser.Y"
+-    {yyval.integer = yyvsp[0].integer; globalWCS = (CoordSystem)yyvsp[0].integer;;}
++    {(yyval.integer) = (yyvsp[(1) - (1)].integer); globalWCS = (CoordSystem)(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 97:
+ #line 522 "ds9parser.Y"
+-    {yyval.integer = WCS;;}
++    {(yyval.integer) = WCS;;}
+     break;
+ 
+   case 98:
+ #line 523 "ds9parser.Y"
+-    {yyval.integer = WCSA;;}
++    {(yyval.integer) = WCSA;;}
+     break;
+ 
+   case 99:
+ #line 524 "ds9parser.Y"
+-    {yyval.integer = WCSB;;}
++    {(yyval.integer) = WCSB;;}
+     break;
+ 
+   case 100:
+ #line 525 "ds9parser.Y"
+-    {yyval.integer = WCSC;;}
++    {(yyval.integer) = WCSC;;}
+     break;
+ 
+   case 101:
+ #line 526 "ds9parser.Y"
+-    {yyval.integer = WCSD;;}
++    {(yyval.integer) = WCSD;;}
+     break;
+ 
+   case 102:
+ #line 527 "ds9parser.Y"
+-    {yyval.integer = WCSE;;}
++    {(yyval.integer) = WCSE;;}
+     break;
+ 
+   case 103:
+ #line 528 "ds9parser.Y"
+-    {yyval.integer = WCSF;;}
++    {(yyval.integer) = WCSF;;}
+     break;
+ 
+   case 104:
+ #line 529 "ds9parser.Y"
+-    {yyval.integer = WCSG;;}
++    {(yyval.integer) = WCSG;;}
+     break;
+ 
+   case 105:
+ #line 530 "ds9parser.Y"
+-    {yyval.integer = WCSH;;}
++    {(yyval.integer) = WCSH;;}
+     break;
+ 
+   case 106:
+ #line 531 "ds9parser.Y"
+-    {yyval.integer = WCSI;;}
++    {(yyval.integer) = WCSI;;}
+     break;
+ 
+   case 107:
+ #line 532 "ds9parser.Y"
+-    {yyval.integer = WCSJ;;}
++    {(yyval.integer) = WCSJ;;}
+     break;
+ 
+   case 108:
+ #line 533 "ds9parser.Y"
+-    {yyval.integer = WCSK;;}
++    {(yyval.integer) = WCSK;;}
+     break;
+ 
+   case 109:
+ #line 534 "ds9parser.Y"
+-    {yyval.integer = WCSL;;}
++    {(yyval.integer) = WCSL;;}
+     break;
+ 
+   case 110:
+ #line 535 "ds9parser.Y"
+-    {yyval.integer = WCSM;;}
++    {(yyval.integer) = WCSM;;}
+     break;
+ 
+   case 111:
+ #line 536 "ds9parser.Y"
+-    {yyval.integer = WCSN;;}
++    {(yyval.integer) = WCSN;;}
+     break;
+ 
+   case 112:
+ #line 537 "ds9parser.Y"
+-    {yyval.integer = WCSO;;}
++    {(yyval.integer) = WCSO;;}
+     break;
+ 
+   case 113:
+ #line 538 "ds9parser.Y"
+-    {yyval.integer = WCSP;;}
++    {(yyval.integer) = WCSP;;}
+     break;
+ 
+   case 114:
+ #line 539 "ds9parser.Y"
+-    {yyval.integer = WCSQ;;}
++    {(yyval.integer) = WCSQ;;}
+     break;
+ 
+   case 115:
+ #line 540 "ds9parser.Y"
+-    {yyval.integer = WCSR;;}
++    {(yyval.integer) = WCSR;;}
+     break;
+ 
+   case 116:
+ #line 541 "ds9parser.Y"
+-    {yyval.integer = WCSS;;}
++    {(yyval.integer) = WCSS;;}
+     break;
+ 
+   case 117:
+ #line 542 "ds9parser.Y"
+-    {yyval.integer = WCST;;}
++    {(yyval.integer) = WCST;;}
+     break;
+ 
+   case 118:
+ #line 543 "ds9parser.Y"
+-    {yyval.integer = WCSU;;}
++    {(yyval.integer) = WCSU;;}
+     break;
+ 
+   case 119:
+ #line 544 "ds9parser.Y"
+-    {yyval.integer = WCSV;;}
++    {(yyval.integer) = WCSV;;}
+     break;
+ 
+   case 120:
+ #line 545 "ds9parser.Y"
+-    {yyval.integer = WCSW;;}
++    {(yyval.integer) = WCSW;;}
+     break;
+ 
+   case 121:
+ #line 546 "ds9parser.Y"
+-    {yyval.integer = WCSX;;}
++    {(yyval.integer) = WCSX;;}
+     break;
+ 
+   case 122:
+ #line 547 "ds9parser.Y"
+-    {yyval.integer = WCSY;;}
++    {(yyval.integer) = WCSY;;}
+     break;
+ 
+   case 123:
+ #line 548 "ds9parser.Y"
+-    {yyval.integer = WCSZ;;}
++    {(yyval.integer) = WCSZ;;}
+     break;
+ 
+   case 124:
+ #line 549 "ds9parser.Y"
+-    {yyval.integer = WCS0;;}
++    {(yyval.integer) = WCS0;;}
+     break;
+ 
+   case 125:
+ #line 552 "ds9parser.Y"
+-    {yyval.integer = FK4;;}
++    {(yyval.integer) = FK4;;}
+     break;
+ 
+   case 126:
+ #line 553 "ds9parser.Y"
+-    {yyval.integer = FK4;;}
++    {(yyval.integer) = FK4;;}
+     break;
+ 
+   case 127:
+ #line 554 "ds9parser.Y"
+-    {yyval.integer = FK5;;}
++    {(yyval.integer) = FK5;;}
+     break;
+ 
+   case 128:
+ #line 555 "ds9parser.Y"
+-    {yyval.integer = FK5;;}
++    {(yyval.integer) = FK5;;}
+     break;
+ 
+   case 129:
+ #line 556 "ds9parser.Y"
+-    {yyval.integer = ICRS;;}
++    {(yyval.integer) = ICRS;;}
+     break;
+ 
+   case 130:
+ #line 557 "ds9parser.Y"
+-    {yyval.integer = GALACTIC;;}
++    {(yyval.integer) = GALACTIC;;}
+     break;
+ 
+   case 131:
+ #line 558 "ds9parser.Y"
+-    {yyval.integer = ECLIPTIC;;}
++    {(yyval.integer) = ECLIPTIC;;}
+     break;
+ 
+   case 132:
+ #line 561 "ds9parser.Y"
+-    {yyval.integer=DEGREES;;}
++    {(yyval.integer)=DEGREES;;}
+     break;
+ 
+   case 133:
+ #line 562 "ds9parser.Y"
+-    {yyval.integer=ARCMIN;;}
++    {(yyval.integer)=ARCMIN;;}
+     break;
+ 
+   case 134:
+ #line 563 "ds9parser.Y"
+-    {yyval.integer=ARCSEC;;}
++    {(yyval.integer)=ARCSEC;;}
+     break;
+ 
+   case 135:
+ #line 566 "ds9parser.Y"
+-    {yyval.integer = Marker::SELECT;;}
++    {(yyval.integer) = Marker::SELECT;;}
+     break;
+ 
+   case 136:
+ #line 567 "ds9parser.Y"
+-    {yyval.integer = Marker::EDIT;;}
++    {(yyval.integer) = Marker::EDIT;;}
+     break;
+ 
+   case 137:
+ #line 568 "ds9parser.Y"
+-    {yyval.integer = Marker::MOVE;;}
++    {(yyval.integer) = Marker::MOVE;;}
+     break;
+ 
+   case 138:
+ #line 569 "ds9parser.Y"
+-    {yyval.integer = Marker::ROTATE;;}
++    {(yyval.integer) = Marker::ROTATE;;}
+     break;
+ 
+   case 139:
+ #line 570 "ds9parser.Y"
+-    {yyval.integer = Marker::DELETE;;}
++    {(yyval.integer) = Marker::DELETE;;}
+     break;
+ 
+   case 140:
+ #line 571 "ds9parser.Y"
+-    {yyval.integer = Marker::HIGHLITE;;}
++    {(yyval.integer) = Marker::HIGHLITE;;}
+     break;
+ 
+   case 141:
+ #line 572 "ds9parser.Y"
+-    {yyval.integer = Marker::INCLUDE;;}
++    {(yyval.integer) = Marker::INCLUDE;;}
+     break;
+ 
+   case 142:
+ #line 573 "ds9parser.Y"
+-    {yyval.integer = Marker::SOURCE;;}
++    {(yyval.integer) = Marker::SOURCE;;}
+     break;
+ 
+   case 143:
+ #line 574 "ds9parser.Y"
+-    {yyval.integer = Marker::FIXED;;}
++    {(yyval.integer) = Marker::FIXED;;}
+     break;
+ 
+   case 144:
+ #line 577 "ds9parser.Y"
+-    {yyval.integer = CallBack::SELECTCB;;}
++    {(yyval.integer) = CallBack::SELECTCB;;}
+     break;
+ 
+   case 145:
+ #line 578 "ds9parser.Y"
+-    {yyval.integer = CallBack::UNSELECTCB;;}
++    {(yyval.integer) = CallBack::UNSELECTCB;;}
+     break;
+ 
+   case 146:
+ #line 579 "ds9parser.Y"
+-    {yyval.integer = CallBack::HIGHLITECB;;}
++    {(yyval.integer) = CallBack::HIGHLITECB;;}
+     break;
+ 
+   case 147:
+ #line 580 "ds9parser.Y"
+-    {yyval.integer = CallBack::UNHIGHLITECB;;}
++    {(yyval.integer) = CallBack::UNHIGHLITECB;;}
+     break;
+ 
+   case 148:
+ #line 581 "ds9parser.Y"
+-    {yyval.integer = CallBack::MOVEBEGINCB;;}
++    {(yyval.integer) = CallBack::MOVEBEGINCB;;}
+     break;
+ 
+   case 149:
+ #line 582 "ds9parser.Y"
+-    {yyval.integer = CallBack::MOVECB;;}
++    {(yyval.integer) = CallBack::MOVECB;;}
+     break;
+ 
+   case 150:
+ #line 583 "ds9parser.Y"
+-    {yyval.integer = CallBack::MOVEENDCB;;}
++    {(yyval.integer) = CallBack::MOVEENDCB;;}
+     break;
+ 
+   case 151:
+ #line 584 "ds9parser.Y"
+-    {yyval.integer = CallBack::EDITBEGINCB;;}
++    {(yyval.integer) = CallBack::EDITBEGINCB;;}
+     break;
+ 
+   case 152:
+ #line 585 "ds9parser.Y"
+-    {yyval.integer = CallBack::EDITCB;;}
++    {(yyval.integer) = CallBack::EDITCB;;}
+     break;
+ 
+   case 153:
+ #line 586 "ds9parser.Y"
+-    {yyval.integer = CallBack::EDITENDCB;;}
++    {(yyval.integer) = CallBack::EDITENDCB;;}
+     break;
+ 
+   case 154:
+ #line 587 "ds9parser.Y"
+-    {yyval.integer = CallBack::ROTATEBEGINCB;;}
++    {(yyval.integer) = CallBack::ROTATEBEGINCB;;}
+     break;
+ 
+   case 155:
+ #line 588 "ds9parser.Y"
+-    {yyval.integer = CallBack::ROTATECB;;}
++    {(yyval.integer) = CallBack::ROTATECB;;}
+     break;
+ 
+   case 156:
+ #line 589 "ds9parser.Y"
+-    {yyval.integer = CallBack::ROTATEENDCB;;}
++    {(yyval.integer) = CallBack::ROTATEENDCB;;}
+     break;
+ 
+   case 157:
+ #line 590 "ds9parser.Y"
+-    {yyval.integer = CallBack::DELETECB;;}
++    {(yyval.integer) = CallBack::DELETECB;;}
+     break;
+ 
+   case 158:
+ #line 591 "ds9parser.Y"
+-    {yyval.integer = CallBack::TEXTCB;;}
++    {(yyval.integer) = CallBack::TEXTCB;;}
+     break;
+ 
+   case 159:
+ #line 592 "ds9parser.Y"
+-    {yyval.integer = CallBack::COLORCB;;}
++    {(yyval.integer) = CallBack::COLORCB;;}
+     break;
+ 
+   case 160:
+ #line 593 "ds9parser.Y"
+-    {yyval.integer = CallBack::LINEWIDTHCB;;}
++    {(yyval.integer) = CallBack::LINEWIDTHCB;;}
+     break;
+ 
+   case 161:
+ #line 594 "ds9parser.Y"
+-    {yyval.integer = CallBack::PROPERTYCB;;}
++    {(yyval.integer) = CallBack::PROPERTYCB;;}
+     break;
+ 
+   case 162:
+ #line 595 "ds9parser.Y"
+-    {yyval.integer = CallBack::FONTCB;;}
++    {(yyval.integer) = CallBack::FONTCB;;}
+     break;
+ 
+   case 163:
+ #line 596 "ds9parser.Y"
+-    {yyval.integer = CallBack::UPDATECB;;}
++    {(yyval.integer) = CallBack::UPDATECB;;}
+     break;
+ 
+   case 166:
+ #line 604 "ds9parser.Y"
+     {
+-	  setProps(&globalProps,yyvsp[-2].integer,yyvsp[0].integer);
+-	  setProps(&localProps,yyvsp[-2].integer,yyvsp[0].integer);
++	  setProps(&globalProps,(yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));
++	  setProps(&localProps,(yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));
+ 	;}
+     break;
+ 
+   case 167:
+ #line 609 "ds9parser.Y"
+     {
+-	  strncpy(globalColor,yyvsp[0].str,16);
+-	  strncpy(localColor,yyvsp[0].str,16);
++	  strncpy(globalColor,(yyvsp[(3) - (3)].str),16);
++	  strncpy(localColor,(yyvsp[(3) - (3)].str),16);
+ 	;}
+     break;
+ 
+   case 168:
+ #line 613 "ds9parser.Y"
+-    {globalWidth = localWidth = yyvsp[0].integer;;}
++    {globalWidth = localWidth = (yyvsp[(3) - (3)].integer);;}
+     break;
+ 
+   case 169:
+ #line 615 "ds9parser.Y"
+     {
+-	  strncpy(globalFont,yyvsp[0].str,32);
+-	  strncpy(localFont,yyvsp[0].str,32);
++	  strncpy(globalFont,(yyvsp[(3) - (3)].str),32);
++	  strncpy(localFont,(yyvsp[(3) - (3)].str),32);
+ 	;}
+     break;
+ 
+   case 170:
+ #line 620 "ds9parser.Y"
+     {
+-	  strncpy(globalText,yyvsp[0].str,80);
+-	  strncpy(localText,yyvsp[0].str,80);
++	  strncpy(globalText,(yyvsp[(3) - (3)].str),80);
++	  strncpy(localText,(yyvsp[(3) - (3)].str),80);
+ 	;}
+     break;
+ 
+@@ -3150,22 +3483,22 @@
+   case 173:
+ #line 635 "ds9parser.Y"
+     {
+-	  globalPoint = localPoint = yyvsp[0].integer;
++	  globalPoint = localPoint = (yyvsp[(3) - (3)].integer);
+ 	;}
+     break;
+ 
+   case 174:
+ #line 639 "ds9parser.Y"
+     {
+-	  globalLine1 = localLine1 = yyvsp[-1].integer;
+-	  globalLine2 = localLine2 = yyvsp[0].integer;
++	  globalLine1 = localLine1 = (yyvsp[(3) - (4)].integer);
++	  globalLine2 = localLine2 = (yyvsp[(4) - (4)].integer);
+ 	;}
+     break;
+ 
+   case 175:
+ #line 644 "ds9parser.Y"
+     {
+-	  globalVector = localVector = yyvsp[0].integer;
++	  globalVector = localVector = (yyvsp[(3) - (3)].integer);
+ 	;}
+     break;
+ 
+@@ -3178,43 +3511,43 @@
+   case 177:
+ #line 651 "ds9parser.Y"
+     {
+-	  strncpy(globalCompassNorth,yyvsp[-3].str,80);
+-	  strncpy(globalCompassEast,yyvsp[-2].str,80);
+-	  strncpy(localCompassNorth,yyvsp[-3].str,80);
+-	  strncpy(localCompassEast,yyvsp[-2].str,80);
+-	  globalCompassNArrow = localCompassNArrow = yyvsp[-1].integer;
+-	  globalCompassEArrow = localCompassEArrow = yyvsp[0].integer;
++	  strncpy(globalCompassNorth,(yyvsp[(4) - (7)].str),80);
++	  strncpy(globalCompassEast,(yyvsp[(5) - (7)].str),80);
++	  strncpy(localCompassNorth,(yyvsp[(4) - (7)].str),80);
++	  strncpy(localCompassEast,(yyvsp[(5) - (7)].str),80);
++	  globalCompassNArrow = localCompassNArrow = (yyvsp[(6) - (7)].integer);
++	  globalCompassEArrow = localCompassEArrow = (yyvsp[(7) - (7)].integer);
+ 	;}
+     break;
+ 
+   case 178:
+ #line 660 "ds9parser.Y"
+     {
+-	  globalTextAngle = localTextAngle = yyvsp[0].real;
++	  globalTextAngle = localTextAngle = (yyvsp[(3) - (3)].real);
+ 	;}
+     break;
+ 
+   case 179:
+ #line 663 "ds9parser.Y"
+-    {globalWCS = (CoordSystem)yyvsp[0].integer;;}
++    {globalWCS = (CoordSystem)(yyvsp[(3) - (3)].integer);;}
+     break;
+ 
+   case 180:
+ #line 667 "ds9parser.Y"
+     {
+-	  globalRulerCoordSystem = localRulerCoordSystem = (CoordSystem)yyvsp[-3].integer;
+-	  globalRulerSkyFrame = localRulerSkyFrame = (SkyFrame)yyvsp[-2].integer;
+-	  globalRulerDistSystem = localRulerDistSystem = (CoordSystem)yyvsp[-1].integer;
+-	  globalRulerDistFormat = localRulerDistFormat = (SkyFormat)yyvsp[0].integer;
++	  globalRulerCoordSystem = localRulerCoordSystem = (CoordSystem)(yyvsp[(1) - (4)].integer);
++	  globalRulerSkyFrame = localRulerSkyFrame = (SkyFrame)(yyvsp[(2) - (4)].integer);
++	  globalRulerDistSystem = localRulerDistSystem = (CoordSystem)(yyvsp[(3) - (4)].integer);
++	  globalRulerDistFormat = localRulerDistFormat = (SkyFormat)(yyvsp[(4) - (4)].integer);
+ 	;}
+     break;
+ 
+   case 181:
+ #line 674 "ds9parser.Y"
+     {
+-	  globalRulerCoordSystem = localRulerCoordSystem = (CoordSystem)yyvsp[-1].integer;
++	  globalRulerCoordSystem = localRulerCoordSystem = (CoordSystem)(yyvsp[(1) - (2)].integer);
+ 	  globalRulerSkyFrame = localRulerSkyFrame = FK5;
+-	  globalRulerDistSystem = localRulerDistSystem = (CoordSystem)yyvsp[0].integer;
++	  globalRulerDistSystem = localRulerDistSystem = (CoordSystem)(yyvsp[(2) - (2)].integer);
+ 	  globalRulerDistFormat = localRulerDistFormat = DEGREES;
+ 	;}
+     break;
+@@ -3222,10 +3555,10 @@
+   case 182:
+ #line 681 "ds9parser.Y"
+     {
+-	  globalRulerCoordSystem = localRulerCoordSystem = (CoordSystem)yyvsp[-1].integer;
++	  globalRulerCoordSystem = localRulerCoordSystem = (CoordSystem)(yyvsp[(1) - (2)].integer);
+ 	  globalRulerSkyFrame = localRulerSkyFrame = FK5;
+ 	  globalRulerDistSystem = localRulerDistSystem = WCS;
+-	  globalRulerDistFormat = localRulerDistFormat = (SkyFormat)yyvsp[0].integer;
++	  globalRulerDistFormat = localRulerDistFormat = (SkyFormat)(yyvsp[(2) - (2)].integer);
+ 	;}
+     break;
+ 
+@@ -3233,8 +3566,8 @@
+ #line 688 "ds9parser.Y"
+     {
+ 	  globalRulerCoordSystem = localRulerCoordSystem = WCS;
+-	  globalRulerSkyFrame = localRulerSkyFrame = (SkyFrame)yyvsp[-1].integer;
+-	  globalRulerDistSystem = localRulerDistSystem = (CoordSystem)yyvsp[0].integer;
++	  globalRulerSkyFrame = localRulerSkyFrame = (SkyFrame)(yyvsp[(1) - (2)].integer);
++	  globalRulerDistSystem = localRulerDistSystem = (CoordSystem)(yyvsp[(2) - (2)].integer);
+ 	  globalRulerDistFormat = localRulerDistFormat = DEGREES;
+ 	;}
+     break;
+@@ -3243,9 +3576,9 @@
+ #line 695 "ds9parser.Y"
+     {
+ 	  globalRulerCoordSystem = localRulerCoordSystem = WCS;
+-	  globalRulerSkyFrame = localRulerSkyFrame = (SkyFrame)yyvsp[-1].integer;
++	  globalRulerSkyFrame = localRulerSkyFrame = (SkyFrame)(yyvsp[(1) - (2)].integer);
+ 	  globalRulerDistSystem = localRulerDistSystem = WCS;
+-	  globalRulerDistFormat = localRulerDistFormat = (SkyFormat)yyvsp[0].integer;
++	  globalRulerDistFormat = localRulerDistFormat = (SkyFormat)(yyvsp[(2) - (2)].integer);
+ 	;}
+     break;
+ 
+@@ -3254,7 +3587,7 @@
+     {
+ 	  globalRulerCoordSystem = localRulerCoordSystem = WCS;
+ 	  globalRulerSkyFrame = localRulerSkyFrame = FK5;
+-	  globalRulerDistSystem = localRulerDistSystem = (CoordSystem)yyvsp[0].integer;
++	  globalRulerDistSystem = localRulerDistSystem = (CoordSystem)(yyvsp[(2) - (2)].integer);
+ 	  globalRulerDistFormat = localRulerDistFormat = DEGREES;
+ 	;}
+     break;
+@@ -3265,7 +3598,7 @@
+ 	  globalRulerCoordSystem = localRulerCoordSystem = WCS;
+ 	  globalRulerSkyFrame = localRulerSkyFrame = FK5;
+ 	  globalRulerDistSystem = localRulerDistSystem = WCS;
+-	  globalRulerDistFormat = localRulerDistFormat = (SkyFormat)yyvsp[0].integer;
++	  globalRulerDistFormat = localRulerDistFormat = (SkyFormat)(yyvsp[(2) - (2)].integer);
+ 	;}
+     break;
+ 
+@@ -3275,7 +3608,7 @@
+ 	  globalRulerCoordSystem = localRulerCoordSystem = IMAGE;
+ 	  globalRulerSkyFrame = localRulerSkyFrame = FK5;
+ 	  globalRulerDistSystem = localRulerDistSystem = WCS;
+-	  globalRulerDistFormat = localRulerDistFormat = (SkyFormat)yyvsp[0].integer;
++	  globalRulerDistFormat = localRulerDistFormat = (SkyFormat)(yyvsp[(1) - (1)].integer);
+ 	;}
+     break;
+ 
+@@ -3292,15 +3625,15 @@
+   case 189:
+ #line 732 "ds9parser.Y"
+     {
+-	  globalCompassCoordSystem = localCompassCoordSystem = (CoordSystem)yyvsp[-1].integer;
+-	  globalCompassSkyFrame = localCompassSkyFrame = (SkyFrame)yyvsp[0].integer;
++	  globalCompassCoordSystem = localCompassCoordSystem = (CoordSystem)(yyvsp[(1) - (2)].integer);
++	  globalCompassSkyFrame = localCompassSkyFrame = (SkyFrame)(yyvsp[(2) - (2)].integer);
+ 	;}
+     break;
+ 
+   case 190:
+ #line 737 "ds9parser.Y"
+     {
+-	  globalCompassCoordSystem = localCompassCoordSystem = (CoordSystem)yyvsp[0].integer;
++	  globalCompassCoordSystem = localCompassCoordSystem = (CoordSystem)(yyvsp[(1) - (1)].integer);
+ 	  globalCompassSkyFrame = localCompassSkyFrame = FK5;
+ 	;}
+     break;
+@@ -3309,7 +3642,7 @@
+ #line 742 "ds9parser.Y"
+     {
+ 	  globalCompassCoordSystem = localCompassCoordSystem = WCS;
+-	  globalCompassSkyFrame = localCompassSkyFrame = (SkyFrame)yyvsp[0].integer;
++	  globalCompassSkyFrame = localCompassSkyFrame = (SkyFrame)(yyvsp[(1) - (1)].integer);
+ 	;}
+     break;
+ 
+@@ -3362,38 +3695,38 @@
+ 
+   case 196:
+ #line 794 "ds9parser.Y"
+-    {setProps(&localProps,yyvsp[-2].integer,yyvsp[0].integer);;}
++    {setProps(&localProps,(yyvsp[(1) - (3)].integer),(yyvsp[(3) - (3)].integer));;}
+     break;
+ 
+   case 197:
+ #line 795 "ds9parser.Y"
+-    {strncpy(localColor,yyvsp[0].str,16);;}
++    {strncpy(localColor,(yyvsp[(3) - (3)].str),16);;}
+     break;
+ 
+   case 198:
+ #line 796 "ds9parser.Y"
+-    {localWidth = yyvsp[0].integer;;}
++    {localWidth = (yyvsp[(3) - (3)].integer);;}
+     break;
+ 
+   case 199:
+ #line 797 "ds9parser.Y"
+-    {strncpy(localFont,yyvsp[0].str,32);;}
++    {strncpy(localFont,(yyvsp[(3) - (3)].str),32);;}
+     break;
+ 
+   case 200:
+ #line 798 "ds9parser.Y"
+-    {strncpy(localText,yyvsp[0].str,80);;}
++    {strncpy(localText,(yyvsp[(3) - (3)].str),80);;}
+     break;
+ 
+   case 201:
+ #line 799 "ds9parser.Y"
+-    {taglist.append(new Tag(yyvsp[0].str));;}
++    {taglist.append(new Tag((yyvsp[(3) - (3)].str)));;}
+     break;
+ 
+   case 202:
+ #line 800 "ds9parser.Y"
+     {cblist.append(
+-	    new CallBack(FR->getInterp(),(CallBack::Type)yyvsp[-2].integer,yyvsp[-1].str,yyvsp[0].str));;}
++	    new CallBack(FR->getInterp(),(CallBack::Type)(yyvsp[(3) - (5)].integer),(yyvsp[(4) - (5)].str),(yyvsp[(5) - (5)].str)));;}
+     break;
+ 
+   case 203:
+@@ -3408,50 +3741,50 @@
+ 
+   case 205:
+ #line 805 "ds9parser.Y"
+-    {localPoint = yyvsp[0].integer;;}
++    {localPoint = (yyvsp[(3) - (3)].integer);;}
+     break;
+ 
+   case 206:
+ #line 806 "ds9parser.Y"
+-    {localLine1=yyvsp[-1].integer; localLine2=yyvsp[0].integer;;}
++    {localLine1=(yyvsp[(3) - (4)].integer); localLine2=(yyvsp[(4) - (4)].integer);;}
+     break;
+ 
+   case 207:
+ #line 807 "ds9parser.Y"
+-    {localVector=yyvsp[0].integer;;}
++    {localVector=(yyvsp[(3) - (3)].integer);;}
+     break;
+ 
+   case 209:
+ #line 810 "ds9parser.Y"
+     {
+-	  strncpy(localCompassNorth,yyvsp[-3].str,80);
+-	  strncpy(localCompassEast,yyvsp[-2].str,80);
+-	  localCompassNArrow = yyvsp[-1].integer;
+-	  localCompassEArrow = yyvsp[0].integer;
++	  strncpy(localCompassNorth,(yyvsp[(4) - (7)].str),80);
++	  strncpy(localCompassEast,(yyvsp[(5) - (7)].str),80);
++	  localCompassNArrow = (yyvsp[(6) - (7)].integer);
++	  localCompassEArrow = (yyvsp[(7) - (7)].integer);
+ 	;}
+     break;
+ 
+   case 210:
+ #line 816 "ds9parser.Y"
+-    {localTextAngle=yyvsp[0].real;;}
++    {localTextAngle=(yyvsp[(3) - (3)].real);;}
+     break;
+ 
+   case 214:
+ #line 823 "ds9parser.Y"
+     {
+-	  localRulerCoordSystem = (CoordSystem)yyvsp[-3].integer;
+-	  localRulerSkyFrame = (SkyFrame)yyvsp[-2].integer;
+-	  localRulerDistSystem = (CoordSystem)yyvsp[-1].integer;
+-	  localRulerDistFormat = (SkyFormat)yyvsp[0].integer;
++	  localRulerCoordSystem = (CoordSystem)(yyvsp[(1) - (4)].integer);
++	  localRulerSkyFrame = (SkyFrame)(yyvsp[(2) - (4)].integer);
++	  localRulerDistSystem = (CoordSystem)(yyvsp[(3) - (4)].integer);
++	  localRulerDistFormat = (SkyFormat)(yyvsp[(4) - (4)].integer);
+ 	;}
+     break;
+ 
+   case 215:
+ #line 830 "ds9parser.Y"
+     {
+-	  localRulerCoordSystem = (CoordSystem)yyvsp[-1].integer;
++	  localRulerCoordSystem = (CoordSystem)(yyvsp[(1) - (2)].integer);
+ 	  localRulerSkyFrame = FK5;
+-	  localRulerDistSystem = (CoordSystem)yyvsp[0].integer;
++	  localRulerDistSystem = (CoordSystem)(yyvsp[(2) - (2)].integer);
+ 	  localRulerDistFormat = DEGREES;
+ 	;}
+     break;
+@@ -3459,10 +3792,10 @@
+   case 216:
+ #line 837 "ds9parser.Y"
+     {
+-	  localRulerCoordSystem = (CoordSystem)yyvsp[-1].integer;
++	  localRulerCoordSystem = (CoordSystem)(yyvsp[(1) - (2)].integer);
+ 	  localRulerSkyFrame = FK5;
+ 	  localRulerDistSystem = WCS;
+-	  localRulerDistFormat = (SkyFormat)yyvsp[0].integer;
++	  localRulerDistFormat = (SkyFormat)(yyvsp[(2) - (2)].integer);
+ 	;}
+     break;
+ 
+@@ -3470,8 +3803,8 @@
+ #line 844 "ds9parser.Y"
+     {
+ 	  localRulerCoordSystem = WCS;
+-	  localRulerSkyFrame = (SkyFrame)yyvsp[-1].integer;
+-	  localRulerDistSystem = (CoordSystem)yyvsp[0].integer;
++	  localRulerSkyFrame = (SkyFrame)(yyvsp[(1) - (2)].integer);
++	  localRulerDistSystem = (CoordSystem)(yyvsp[(2) - (2)].integer);
+ 	  localRulerDistFormat = DEGREES;
+ 	;}
+     break;
+@@ -3480,9 +3813,9 @@
+ #line 851 "ds9parser.Y"
+     {
+ 	  localRulerCoordSystem = WCS;
+-	  localRulerSkyFrame = (SkyFrame)yyvsp[-1].integer;
++	  localRulerSkyFrame = (SkyFrame)(yyvsp[(1) - (2)].integer);
+ 	  localRulerDistSystem = WCS;
+-	  localRulerDistFormat = (SkyFormat)yyvsp[0].integer;
++	  localRulerDistFormat = (SkyFormat)(yyvsp[(2) - (2)].integer);
+ 	;}
+     break;
+ 
+@@ -3491,7 +3824,7 @@
+     {
+ 	  localRulerCoordSystem = WCS;
+ 	  localRulerSkyFrame = FK5;
+-	  localRulerDistSystem = (CoordSystem)yyvsp[0].integer;
++	  localRulerDistSystem = (CoordSystem)(yyvsp[(2) - (2)].integer);
+ 	  localRulerDistFormat = DEGREES;
+ 	;}
+     break;
+@@ -3502,7 +3835,7 @@
+ 	  localRulerCoordSystem = WCS;
+ 	  localRulerSkyFrame = FK5;
+ 	  localRulerDistSystem = WCS;
+-	  localRulerDistFormat = (SkyFormat)yyvsp[0].integer;
++	  localRulerDistFormat = (SkyFormat)(yyvsp[(2) - (2)].integer);
+ 	;}
+     break;
+ 
+@@ -3512,7 +3845,7 @@
+ 	  localRulerCoordSystem = IMAGE;
+ 	  localRulerSkyFrame = FK5;
+ 	  localRulerDistSystem = WCS;
+-	  localRulerDistFormat = (SkyFormat)yyvsp[0].integer;
++	  localRulerDistFormat = (SkyFormat)(yyvsp[(1) - (1)].integer);
+ 	;}
+     break;
+ 
+@@ -3529,15 +3862,15 @@
+   case 223:
+ #line 888 "ds9parser.Y"
+     {
+-	  localCompassCoordSystem = (CoordSystem)yyvsp[-1].integer;
+-	  localCompassSkyFrame = (SkyFrame)yyvsp[0].integer;
++	  localCompassCoordSystem = (CoordSystem)(yyvsp[(1) - (2)].integer);
++	  localCompassSkyFrame = (SkyFrame)(yyvsp[(2) - (2)].integer);
+ 	;}
+     break;
+ 
+   case 224:
+ #line 893 "ds9parser.Y"
+     {
+-	  localCompassCoordSystem = (CoordSystem)yyvsp[0].integer;
++	  localCompassCoordSystem = (CoordSystem)(yyvsp[(1) - (1)].integer);
+ 	  localCompassSkyFrame = FK5;
+ 	;}
+     break;
+@@ -3546,7 +3879,7 @@
+ #line 898 "ds9parser.Y"
+     {
+ 	  localCompassCoordSystem = WCS;
+-	  localCompassSkyFrame = (SkyFrame)yyvsp[0].integer;
++	  localCompassSkyFrame = (SkyFrame)(yyvsp[(1) - (1)].integer);
+ 	;}
+     break;
+ 
+@@ -3580,7 +3913,7 @@
+ 
+   case 231:
+ #line 914 "ds9parser.Y"
+-    {aAngle=yyvsp[-1].real;localEpanda=2;;}
++    {aAngle=(yyvsp[(9) - (10)].real);localEpanda=2;;}
+     break;
+ 
+   case 232:
+@@ -3595,7 +3928,7 @@
+ 
+   case 234:
+ #line 919 "ds9parser.Y"
+-    {aAngle=yyvsp[-1].real;localBpanda=2;;}
++    {aAngle=(yyvsp[(9) - (10)].real);localBpanda=2;;}
+     break;
+ 
+   case 235:
+@@ -3648,37 +3981,37 @@
+ 
+   case 237:
+ #line 964 "ds9parser.Y"
+-    {yyval.integer = CIRCLE;;}
++    {(yyval.integer) = CIRCLE;;}
+     break;
+ 
+   case 238:
+ #line 965 "ds9parser.Y"
+-    {yyval.integer = BOX;;}
++    {(yyval.integer) = BOX;;}
+     break;
+ 
+   case 239:
+ #line 966 "ds9parser.Y"
+-    {yyval.integer = DIAMOND;;}
++    {(yyval.integer) = DIAMOND;;}
+     break;
+ 
+   case 240:
+ #line 967 "ds9parser.Y"
+-    {yyval.integer = CROSS;;}
++    {(yyval.integer) = CROSS;;}
+     break;
+ 
+   case 241:
+ #line 968 "ds9parser.Y"
+-    {yyval.integer = XPT;;}
++    {(yyval.integer) = XPT;;}
+     break;
+ 
+   case 242:
+ #line 969 "ds9parser.Y"
+-    {yyval.integer = ARROW;;}
++    {(yyval.integer) = ARROW;;}
+     break;
+ 
+   case 243:
+ #line 970 "ds9parser.Y"
+-    {yyval.integer = BOXCIRCLE;;}
++    {(yyval.integer) = BOXCIRCLE;;}
+     break;
+ 
+   case 244:
+@@ -3698,7 +4031,7 @@
+ 
+   case 247:
+ #line 979 "ds9parser.Y"
+-    {FR->createTextCmd(Vector(yyvsp[-3].vector),
++    {FR->createTextCmd(Vector((yyvsp[(3) - (6)].vector)),
+ 	    localTextAngle,
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+@@ -3706,16 +4039,16 @@
+ 
+   case 248:
+ #line 984 "ds9parser.Y"
+-    {FR->createCompositeCmd(Vector(yyvsp[-5].vector),
+-	    yyvsp[-3].real,
++    {FR->createCompositeCmd(Vector((yyvsp[(3) - (8)].vector)),
++	    (yyvsp[(5) - (8)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 249:
+ #line 989 "ds9parser.Y"
+-    {FR->createVectCmd(Vector(yyvsp[-7].vector),
+-	    yyvsp[-5].real,yyvsp[-3].real,
++    {FR->createVectCmd(Vector((yyvsp[(3) - (10)].vector)),
++	    (yyvsp[(5) - (10)].real),(yyvsp[(7) - (10)].real),
+ 	    localVector,
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+@@ -3725,9 +4058,9 @@
+ #line 995 "ds9parser.Y"
+     {
+ 	  // hard coded into projection.tcl
+-	  FR->createProjectionCmd(Vector(yyvsp[-7].vector),
+-	    Vector(yyvsp[-5].vector),
+-	    yyvsp[-3].real,
++	  FR->createProjectionCmd(Vector((yyvsp[(3) - (10)].vector)),
++	    Vector((yyvsp[(5) - (10)].vector)),
++	    (yyvsp[(7) - (10)].real),
+ 	    "ProjectionPlot", "ProjectionPlotDelete",
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);
+@@ -3736,8 +4069,8 @@
+ 
+   case 251:
+ #line 1005 "ds9parser.Y"
+-    {FR->createRulerCmd(Vector(yyvsp[-5].vector),
+-	    Vector(yyvsp[-3].vector),
++    {FR->createRulerCmd(Vector((yyvsp[(3) - (8)].vector)),
++	    Vector((yyvsp[(5) - (8)].vector)),
+    	    localRulerCoordSystem, localRulerSkyFrame,
+ 	    localRulerDistSystem, localRulerDistFormat,
+ 	    localColor,localWidth,localFont,
+@@ -3746,8 +4079,8 @@
+ 
+   case 252:
+ #line 1012 "ds9parser.Y"
+-    {FR->createCompassCmd(Vector(yyvsp[-5].vector), 
+-	   yyvsp[-3].real,
++    {FR->createCompassCmd(Vector((yyvsp[(3) - (8)].vector)), 
++	   (yyvsp[(5) - (8)].real),
+ 	   localCompassNorth, localCompassEast, 
+ 	   localCompassNArrow, localCompassEArrow,
+    	   localCompassCoordSystem, localCompassSkyFrame,
+@@ -3757,16 +4090,16 @@
+ 
+   case 253:
+ #line 1022 "ds9parser.Y"
+-    {FR->createCircleCmd(Vector(yyvsp[-5].vector),
+-	    yyvsp[-3].real,
++    {FR->createCircleCmd(Vector((yyvsp[(3) - (8)].vector)),
++	    (yyvsp[(5) - (8)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 254:
+ #line 1027 "ds9parser.Y"
+-    {FR->createAnnulusCmd(Vector(yyvsp[-7].vector),
+-	    yyvsp[-5].real,yyvsp[-3].real,1,
++    {FR->createAnnulusCmd(Vector((yyvsp[(3) - (10)].vector)),
++	    (yyvsp[(5) - (10)].real),(yyvsp[(7) - (10)].real),1,
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+@@ -3774,9 +4107,9 @@
+   case 255:
+ #line 1033 "ds9parser.Y"
+     {
+-	  aAnnuli[0] = yyvsp[-7].real;
+-	  aAnnuli[1] = yyvsp[-5].real;
+-	  FR->createAnnulusCmd(Vector(yyvsp[-9].vector),
++	  aAnnuli[0] = (yyvsp[(5) - (12)].real);
++	  aAnnuli[1] = (yyvsp[(7) - (12)].real);
++	  FR->createAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)),
+ 	    aNum,aAnnuli,
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);
+@@ -3785,8 +4118,8 @@
+ 
+   case 256:
+ #line 1043 "ds9parser.Y"
+-    {FR->createAnnulusCmd(Vector(yyvsp[-9].vector),
+-	    yyvsp[-7].real,yyvsp[-5].real,yyvsp[-3].integer,
++    {FR->createAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)),
++	    (yyvsp[(5) - (12)].real),(yyvsp[(7) - (12)].real),(yyvsp[(9) - (12)].integer),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+@@ -3798,14 +4131,14 @@
+ 	  case 0: /* ignore it */
+ 	    break;
+ 	  case 1: /* normal cpanda */
+-	    FR->createCpandaCmd(Vector(yyvsp[-15].vector),
+-	      yyvsp[-13].real,yyvsp[-11].real,yyvsp[-9].integer,
+-	      yyvsp[-7].real,yyvsp[-5].real,yyvsp[-3].integer,
++	    FR->createCpandaCmd(Vector((yyvsp[(3) - (18)].vector)),
++	      (yyvsp[(5) - (18)].real),(yyvsp[(7) - (18)].real),(yyvsp[(9) - (18)].integer),
++	      (yyvsp[(11) - (18)].real),(yyvsp[(13) - (18)].real),(yyvsp[(15) - (18)].integer),
+ 	      localColor,localWidth,localFont,
+ 	      localText,localProps,localComment,taglist,cblist);
+ 	    break;
+ 	  case 2: /* one of our special pandas */
+-	    FR->createCpandaCmd(Vector(yyvsp[-15].vector),
++	    FR->createCpandaCmd(Vector((yyvsp[(3) - (18)].vector)),
+ 	      aAngNum,aAngles,
+ 	      aNum,aAnnuli,
+ 	      localColor,localWidth,localFont,
+@@ -3820,9 +4153,9 @@
+     {
+ 	  // for ellipse annulus
+ 	  aStatus = 1;
+-	  aCenter = Vector(yyvsp[-7].vector);
+-	  aAngles[0] = yyvsp[-3].real;
+-	  aVector[0] = Vector(yyvsp[-5].vector);
++	  aCenter = Vector((yyvsp[(3) - (10)].vector));
++	  aAngles[0] = (yyvsp[(7) - (10)].real);
++	  aVector[0] = Vector((yyvsp[(5) - (10)].vector));
+ 	  aNumsao = 1;
+ 	  strncpy(aColor,localColor,16);
+ 	  aWidth = localWidth;
+@@ -3831,9 +4164,9 @@
+ 	  strncpy(aComment,localComment,80);
+ 	  aProps = localProps;
+ 
+-	  FR->createEllipseCmd(Vector(yyvsp[-7].vector),
+-	    Vector(yyvsp[-5].vector),
+-	    yyvsp[-3].real,
++	  FR->createEllipseCmd(Vector((yyvsp[(3) - (10)].vector)),
++	    Vector((yyvsp[(5) - (10)].vector)),
++	    (yyvsp[(7) - (10)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);
+ 	;}
+@@ -3843,9 +4176,9 @@
+ #line 1093 "ds9parser.Y"
+     {
+ 	  // prefered syntax
+-	  FR->createEllipseAnnulusCmd(Vector(yyvsp[-9].vector),
+-	    Vector(yyvsp[-7].vector),Vector(yyvsp[-5].vector),1,
+-	    yyvsp[-3].real,
++	  FR->createEllipseAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)),
++	    Vector((yyvsp[(5) - (12)].vector)),Vector((yyvsp[(7) - (12)].vector)),1,
++	    (yyvsp[(9) - (12)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);
+ 	;}
+@@ -3855,9 +4188,9 @@
+ #line 1103 "ds9parser.Y"
+     {
+ 	  // prefered syntax
+-	  FR->createEllipseAnnulusCmd(Vector(yyvsp[-11].vector),
+-	    Vector(yyvsp[-9].vector),Vector(yyvsp[-7].vector),yyvsp[-5].integer,
+-	    yyvsp[-3].real,
++	  FR->createEllipseAnnulusCmd(Vector((yyvsp[(3) - (14)].vector)),
++	    Vector((yyvsp[(5) - (14)].vector)),Vector((yyvsp[(7) - (14)].vector)),(yyvsp[(9) - (14)].integer),
++	    (yyvsp[(11) - (14)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);
+ 	;}
+@@ -3867,11 +4200,11 @@
+ #line 1113 "ds9parser.Y"
+     {
+ 	  // prefered syntax
+-	  aVector[0] = Vector(yyvsp[-9].vector);
+-	  aVector[1] = Vector(yyvsp[-7].vector);
+-	  FR->createEllipseAnnulusCmd(Vector(yyvsp[-11].vector),
++	  aVector[0] = Vector((yyvsp[(5) - (14)].vector));
++	  aVector[1] = Vector((yyvsp[(7) - (14)].vector));
++	  FR->createEllipseAnnulusCmd(Vector((yyvsp[(3) - (14)].vector)),
+ 	    aNum,aVector,
+-	    yyvsp[-3].real,
++	    (yyvsp[(11) - (14)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);
+ 	;}
+@@ -3882,7 +4215,7 @@
+     {	
+ 	  // old saoimage syntax
+ 	  aStatus = 2;
+-	  aVector[aNumsao++] = Vector(yyvsp[-13].vector);
++	  aVector[aNumsao++] = Vector((yyvsp[(5) - (18)].vector));
+ 	;}
+     break;
+ 
+@@ -3893,15 +4226,15 @@
+ 	  case 0: /* ignore it */
+ 	    break;
+ 	  case 1: /* normal epanda */
+-	    FR->createEpandaCmd(Vector(yyvsp[-17].vector),
+-	      yyvsp[-15].real,yyvsp[-13].real,yyvsp[-11].integer,
+-	      Vector(yyvsp[-9].vector),Vector(yyvsp[-7].vector),yyvsp[-5].integer,
+-	      yyvsp[-3].real,
++	    FR->createEpandaCmd(Vector((yyvsp[(3) - (20)].vector)),
++	      (yyvsp[(5) - (20)].real),(yyvsp[(7) - (20)].real),(yyvsp[(9) - (20)].integer),
++	      Vector((yyvsp[(11) - (20)].vector)),Vector((yyvsp[(13) - (20)].vector)),(yyvsp[(15) - (20)].integer),
++	      (yyvsp[(17) - (20)].real),
+ 	      localColor,localWidth,localFont,
+ 	      localText,localProps,localComment,taglist,cblist);
+ 	    break;
+ 	  case 2: /* one of our special pandas */
+-	    FR->createEpandaCmd(Vector(yyvsp[-17].vector),
++	    FR->createEpandaCmd(Vector((yyvsp[(3) - (20)].vector)),
+ 	      aAngNum,aAngles,
+ 	      aNum,aVector,
+ 	      aAngle,
+@@ -3917,9 +4250,9 @@
+     {
+ 	  // for box annulus
+ 	  aStatus = 3;
+-	  aCenter = Vector(yyvsp[-7].vector);
+-	  aAngles[0] = yyvsp[-3].real;
+-	  aVector[0] = Vector(yyvsp[-5].vector);
++	  aCenter = Vector((yyvsp[(3) - (10)].vector));
++	  aAngles[0] = (yyvsp[(7) - (10)].real);
++	  aVector[0] = Vector((yyvsp[(5) - (10)].vector));
+ 	  aNumsao = 1;
+ 	  strncpy(aColor,localColor,16);
+ 	  aWidth = localWidth;
+@@ -3928,9 +4261,9 @@
+ 	  strncpy(aComment,localComment,80);
+ 	  aProps = localProps;
+ 
+-	  FR->createBoxCmd(Vector(yyvsp[-7].vector),
+-	    Vector(yyvsp[-5].vector),
+-	    yyvsp[-3].real,
++	  FR->createBoxCmd(Vector((yyvsp[(3) - (10)].vector)),
++	    Vector((yyvsp[(5) - (10)].vector)),
++	    (yyvsp[(7) - (10)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);
+ 	;}
+@@ -3938,9 +4271,9 @@
+ 
+   case 265:
+ #line 1178 "ds9parser.Y"
+-    {FR->createBoxCmd(Vector(yyvsp[-7].vector),
+-	    Vector(yyvsp[-5].vector),
+-	    yyvsp[-3].real,
++    {FR->createBoxCmd(Vector((yyvsp[(3) - (10)].vector)),
++	    Vector((yyvsp[(5) - (10)].vector)),
++	    (yyvsp[(7) - (10)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+@@ -3949,9 +4282,9 @@
+ #line 1185 "ds9parser.Y"
+     {
+ 	  // prefered syntax
+-	  FR->createBoxAnnulusCmd(Vector(yyvsp[-9].vector),
+-	    Vector(yyvsp[-7].vector),Vector(yyvsp[-5].vector),1,
+-	    yyvsp[-3].real,
++	  FR->createBoxAnnulusCmd(Vector((yyvsp[(3) - (12)].vector)),
++	    Vector((yyvsp[(5) - (12)].vector)),Vector((yyvsp[(7) - (12)].vector)),1,
++	    (yyvsp[(9) - (12)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);
+ 	;}
+@@ -3961,11 +4294,11 @@
+ #line 1195 "ds9parser.Y"
+     {
+ 	  // prefered syntax
+-	  aVector[0] = Vector(yyvsp[-9].vector);
+-	  aVector[1] = Vector(yyvsp[-7].vector);
+-	  FR->createBoxAnnulusCmd(Vector(yyvsp[-11].vector),
++	  aVector[0] = Vector((yyvsp[(5) - (14)].vector));
++	  aVector[1] = Vector((yyvsp[(7) - (14)].vector));
++	  FR->createBoxAnnulusCmd(Vector((yyvsp[(3) - (14)].vector)),
+ 	    aNum,aVector,
+-	    yyvsp[-3].real,
++	    (yyvsp[(11) - (14)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);
+ 	;}
+@@ -3975,9 +4308,9 @@
+ #line 1207 "ds9parser.Y"
+     {
+ 	  // prefered syntax
+-	  FR->createBoxAnnulusCmd(Vector(yyvsp[-11].vector),
+-	    Vector(yyvsp[-9].vector),Vector(yyvsp[-7].vector),yyvsp[-5].integer,
+-	    yyvsp[-3].real,
++	  FR->createBoxAnnulusCmd(Vector((yyvsp[(3) - (14)].vector)),
++	    Vector((yyvsp[(5) - (14)].vector)),Vector((yyvsp[(7) - (14)].vector)),(yyvsp[(9) - (14)].integer),
++	    (yyvsp[(11) - (14)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);
+ 	;}
+@@ -3988,7 +4321,7 @@
+     {	
+ 	  // old saoimage syntax
+ 	  aStatus = 4;
+-	  aVector[aNumsao++] = Vector(yyvsp[-13].vector);
++	  aVector[aNumsao++] = Vector((yyvsp[(5) - (18)].vector));
+ 	;}
+     break;
+ 
+@@ -3999,15 +4332,15 @@
+ 	  case 0: /* ignore it */
+ 	    break;
+ 	  case 1: /* normal bpanda */
+-	    FR->createBpandaCmd(Vector(yyvsp[-17].vector),
+-	      yyvsp[-15].real,yyvsp[-13].real,yyvsp[-11].integer,
+-	      Vector(yyvsp[-9].vector),Vector(yyvsp[-7].vector),yyvsp[-5].integer,
+-	      yyvsp[-3].real,
++	    FR->createBpandaCmd(Vector((yyvsp[(3) - (20)].vector)),
++	      (yyvsp[(5) - (20)].real),(yyvsp[(7) - (20)].real),(yyvsp[(9) - (20)].integer),
++	      Vector((yyvsp[(11) - (20)].vector)),Vector((yyvsp[(13) - (20)].vector)),(yyvsp[(15) - (20)].integer),
++	      (yyvsp[(17) - (20)].real),
+ 	      localColor,localWidth,localFont,
+ 	      localText,localProps,localComment,taglist,cblist);
+ 	    break;
+ 	  case 2: /* one of our special pandas */
+-	    FR->createBpandaCmd(Vector(yyvsp[-17].vector),
++	    FR->createBpandaCmd(Vector((yyvsp[(3) - (20)].vector)),
+ 	      aAngNum,aAngles,
+ 	      aNum,aVector,
+ 	      aAngle,
+@@ -4020,8 +4353,8 @@
+ 
+   case 271:
+ #line 1249 "ds9parser.Y"
+-    {FR->createLineCmd(Vector(yyvsp[-5].vector),
+-	    Vector(yyvsp[-3].vector),
++    {FR->createLineCmd(Vector((yyvsp[(3) - (8)].vector)),
++	    Vector((yyvsp[(5) - (8)].vector)),
+ 	    localLine1,localLine2,
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+@@ -4032,37 +4365,37 @@
+     {
+ 	  switch (localPoint) {
+ 	  case CIRCLE:
+-	    FR->createCirclePointCmd(Vector(yyvsp[-3].vector),
++	    FR->createCirclePointCmd(Vector((yyvsp[(3) - (6)].vector)),
+ 	      localColor,localWidth,localFont,
+ 	      localText,localProps,localComment,taglist,cblist);
+ 	    break;
+ 	  case BOX:
+-	    FR->createBoxPointCmd(Vector(yyvsp[-3].vector),
++	    FR->createBoxPointCmd(Vector((yyvsp[(3) - (6)].vector)),
+ 	      localColor,localWidth,localFont,
+ 	      localText,localProps,localComment,taglist,cblist);
+ 	    break;
+ 	  case DIAMOND:
+-	    FR->createDiamondPointCmd(Vector(yyvsp[-3].vector),
++	    FR->createDiamondPointCmd(Vector((yyvsp[(3) - (6)].vector)),
+ 	      localColor,localWidth,localFont,
+ 	      localText,localProps,localComment,taglist,cblist);
+ 	    break;
+ 	  case CROSS:
+-	    FR->createCrossPointCmd(Vector(yyvsp[-3].vector),
++	    FR->createCrossPointCmd(Vector((yyvsp[(3) - (6)].vector)),
+ 	      localColor,localWidth,localFont,
+ 	      localText,localProps,localComment,taglist,cblist);
+ 	    break;
+ 	  case XPT:
+-	    FR->createExPointCmd(Vector(yyvsp[-3].vector),
++	    FR->createExPointCmd(Vector((yyvsp[(3) - (6)].vector)),
+ 	      localColor,localWidth,localFont,
+ 	      localText,localProps,localComment,taglist,cblist);
+ 	    break;
+ 	  case ARROW:
+-	    FR->createArrowPointCmd(Vector(yyvsp[-3].vector),
++	    FR->createArrowPointCmd(Vector((yyvsp[(3) - (6)].vector)),
+ 	      localColor,localWidth,localFont,
+ 	      localText,localProps,localComment,taglist,cblist);
+ 	    break;
+ 	  case BOXCIRCLE:
+-	    FR->createBoxCirclePointCmd(Vector(yyvsp[-3].vector),
++	    FR->createBoxCirclePointCmd(Vector((yyvsp[(3) - (6)].vector)),
+ 	      localColor,localWidth,localFont,
+ 	      localText,localProps,localComment,taglist,cblist);
+ 	    break;
+@@ -4072,49 +4405,49 @@
+ 
+   case 273:
+ #line 1296 "ds9parser.Y"
+-    {FR->createCirclePointCmd(Vector(yyvsp[-3].vector),
++    {FR->createCirclePointCmd(Vector((yyvsp[(4) - (7)].vector)),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 274:
+ #line 1300 "ds9parser.Y"
+-    {FR->createBoxPointCmd(Vector(yyvsp[-3].vector),
++    {FR->createBoxPointCmd(Vector((yyvsp[(4) - (7)].vector)),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 275:
+ #line 1304 "ds9parser.Y"
+-    {FR->createDiamondPointCmd(Vector(yyvsp[-3].vector),
++    {FR->createDiamondPointCmd(Vector((yyvsp[(4) - (7)].vector)),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 276:
+ #line 1308 "ds9parser.Y"
+-    {FR->createCrossPointCmd(Vector(yyvsp[-3].vector),
++    {FR->createCrossPointCmd(Vector((yyvsp[(4) - (7)].vector)),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 277:
+ #line 1312 "ds9parser.Y"
+-    {FR->createExPointCmd(Vector(yyvsp[-3].vector),
++    {FR->createExPointCmd(Vector((yyvsp[(4) - (7)].vector)),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 278:
+ #line 1316 "ds9parser.Y"
+-    {FR->createArrowPointCmd(Vector(yyvsp[-3].vector),
++    {FR->createArrowPointCmd(Vector((yyvsp[(4) - (7)].vector)),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 279:
+ #line 1320 "ds9parser.Y"
+-    {FR->createBoxCirclePointCmd(Vector(yyvsp[-3].vector),
++    {FR->createBoxCirclePointCmd(Vector((yyvsp[(4) - (7)].vector)),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+@@ -4133,7 +4466,7 @@
+ 
+   case 286:
+ #line 1337 "ds9parser.Y"
+-    {FR->createTextCmd(Vector(yyvsp[-3].vector),
++    {FR->createTextCmd(Vector((yyvsp[(3) - (6)].vector)),
+ 	    localTextAngle,
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+@@ -4141,12 +4474,12 @@
+ 
+   case 287:
+ #line 1341 "ds9parser.Y"
+-    {strncpy(localText,yyvsp[-1].str,80);;}
++    {strncpy(localText,(yyvsp[(5) - (6)].str),80);;}
+     break;
+ 
+   case 288:
+ #line 1343 "ds9parser.Y"
+-    {FR->createTextCmd(Vector(yyvsp[-6].vector),
++    {FR->createTextCmd(Vector((yyvsp[(3) - (9)].vector)),
+ 	    localTextAngle,
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+@@ -4154,16 +4487,16 @@
+ 
+   case 289:
+ #line 1348 "ds9parser.Y"
+-    {FR->createCompositeCmd(Vector(yyvsp[-5].vector),
+-	    yyvsp[-3].real,
++    {FR->createCompositeCmd(Vector((yyvsp[(3) - (8)].vector)),
++	    (yyvsp[(5) - (8)].real),
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 290:
+ #line 1353 "ds9parser.Y"
+-    {FR->createVectCmd(Vector(yyvsp[-7].vector),
+-	    yyvsp[-5].real,yyvsp[-3].real,
++    {FR->createVectCmd(Vector((yyvsp[(3) - (10)].vector)),
++	    (yyvsp[(5) - (10)].real),(yyvsp[(7) - (10)].real),
+ 	    localVector,
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);;}
+@@ -4173,9 +4506,9 @@
+ #line 1359 "ds9parser.Y"
+     {
+ 	  // hard coded into projection.tcl
+-	  FR->createProjectionCmd(Vector(yyvsp[-7].vector),
+-	    Vector(yyvsp[-5].vector),
+-	    yyvsp[-3].real,
++	  FR->createProjectionCmd(Vector((yyvsp[(3) - (10)].vector)),
++	    Vector((yyvsp[(5) - (10)].vector)),
++	    (yyvsp[(7) - (10)].real),
+ 	    "ProjectionPlot", "ProjectionPlotDelete",
+ 	    localColor,localWidth,localFont,
+ 	    localText,localProps,localComment,taglist,cblist);
+@@ -4184,8 +4517,8 @@
+ 
+   case 292:
+ #line 1369 "ds9parser.Y"
+-    {FR->createRulerCmd(Vector(yyvsp[-5].vector),
+-	    Vector(yyvsp[-3].vector),
++    {FR->createRulerCmd(Vector((yyvsp[(3) - (8)].vector)),
++	    Vector((yyvsp[(5) - (8)].vector)),
+    	    localRulerCoordSystem, localRulerSkyFrame,
+ 	    localRulerDistSystem, localRulerDistFormat,
+ 	    localColor,localWidth,localFont,
+@@ -4194,8 +4527,8 @@
+ 
+   case 293:
+ #line 1376 "ds9parser.Y"
+-    {FR->createCompassCmd(Vector(yyvsp[-5].vector), 
+-	   yyvsp[-3].real,
++    {FR->createCompassCmd(Vector((yyvsp[(3) - (8)].vector)), 
++	   (yyvsp[(5) - (8)].real),
+ 	   localCompassNorth, localCompassEast, 
+ 	   localCompassNArrow, localCompassEArrow,
+    	   localCompassCoordSystem, localCompassSkyFrame,
+@@ -4205,14 +4538,14 @@
+ 
+   case 296:
+ #line 1389 "ds9parser.Y"
+-    {polylist.append(new Vertex(yyvsp[0].vector));;}
++    {polylist.append(new Vertex((yyvsp[(1) - (1)].vector)));;}
+     break;
+ 
+   case 299:
+ #line 1397 "ds9parser.Y"
+     {
+ 	  if (aNum < MAXANNULI)
+-	    aAnnuli[aNum++] = yyvsp[0].real;
++	    aAnnuli[aNum++] = (yyvsp[(1) - (1)].real);
+ 	;}
+     break;
+ 
+@@ -4220,13 +4553,13 @@
+ #line 1408 "ds9parser.Y"
+     {
+ 	  if (aAngNum < MAXANGLES)
+-	    aAngles[aAngNum++] = yyvsp[0].real;
++	    aAngles[aAngNum++] = (yyvsp[(1) - (1)].real);
+ 	;}
+     break;
+ 
+   case 305:
+ #line 1418 "ds9parser.Y"
+-    {aVector[aNum++] = Vector(yyvsp[-2].real,yyvsp[0].real);;}
++    {aVector[aNum++] = Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real));;}
+     break;
+ 
+   case 306:
+@@ -4260,15 +4593,14 @@
+     break;
+ 
+ 
++/* Line 1267 of yacc.c.  */
++#line 4598 "ds9parser.C"
++      default: break;
+     }
++  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ 
+-/* Line 1000 of yacc.c.  */
+-#line 4267 "ds9parser.C"
+-
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
+-
+-
++  YYPOPSTACK (yylen);
++  yylen = 0;
+   YY_STACK_PRINT (yyss, yyssp);
+ 
+   *++yyvsp = yyval;
+@@ -4297,99 +4629,65 @@
+   if (!yyerrstatus)
+     {
+       ++yynerrs;
+-#if YYERROR_VERBOSE
+-      yyn = yypact[yystate];
+-
+-      if (YYPACT_NINF < yyn && yyn < YYLAST)
+-	{
+-	  YYSIZE_T yysize = 0;
+-	  int yytype = YYTRANSLATE (yychar);
+-	  const char* yyprefix;
+-	  char *yymsg;
+-	  int yyx;
+-
+-	  /* Start YYX at -YYN if negative to avoid negative indexes in
+-	     YYCHECK.  */
+-	  int yyxbegin = yyn < 0 ? -yyn : 0;
+-
+-	  /* Stay within bounds of both yycheck and yytname.  */
+-	  int yychecklim = YYLAST - yyn;
+-	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-	  int yycount = 0;
+-
+-	  yyprefix = ", expecting ";
+-	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++#if ! YYERROR_VERBOSE
++      yyerror (YY_("syntax error"));
++#else
++      {
++	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
++	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
++	  {
++	    YYSIZE_T yyalloc = 2 * yysize;
++	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
++	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
++	    if (yymsg != yymsgbuf)
++	      YYSTACK_FREE (yymsg);
++	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
++	    if (yymsg)
++	      yymsg_alloc = yyalloc;
++	    else
+ 	      {
+-		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+-		yycount += 1;
+-		if (yycount == 5)
+-		  {
+-		    yysize = 0;
+-		    break;
+-		  }
++		yymsg = yymsgbuf;
++		yymsg_alloc = sizeof yymsgbuf;
+ 	      }
+-	  yysize += (sizeof ("syntax error, unexpected ")
+-		     + yystrlen (yytname[yytype]));
+-	  yymsg = (char *) YYSTACK_ALLOC (yysize);
+-	  if (yymsg != 0)
+-	    {
+-	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+-	      yyp = yystpcpy (yyp, yytname[yytype]);
++	  }
+ 
+-	      if (yycount < 5)
+-		{
+-		  yyprefix = ", expecting ";
+-		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+-		      {
+-			yyp = yystpcpy (yyp, yyprefix);
+-			yyp = yystpcpy (yyp, yytname[yyx]);
+-			yyprefix = " or ";
+-		      }
+-		}
+-	      yyerror (yymsg);
+-	      YYSTACK_FREE (yymsg);
+-	    }
+-	  else
+-	    yyerror ("syntax error; also virtual memory exhausted");
+-	}
+-      else
+-#endif /* YYERROR_VERBOSE */
+-	yyerror ("syntax error");
++	if (0 < yysize && yysize <= yymsg_alloc)
++	  {
++	    (void) yysyntax_error (yymsg, yystate, yychar);
++	    yyerror (yymsg);
++	  }
++	else
++	  {
++	    yyerror (YY_("syntax error"));
++	    if (yysize != 0)
++	      goto yyexhaustedlab;
++	  }
++      }
++#endif
+     }
+ 
+ 
+ 
+   if (yyerrstatus == 3)
+     {
+-      /* If just tried and failed to reuse lookahead token after an
++      /* If just tried and failed to reuse look-ahead token after an
+ 	 error, discard it.  */
+ 
+       if (yychar <= YYEOF)
+-        {
+-          /* If at end of input, pop the error token,
+-	     then the rest of the stack, then return failure.  */
++	{
++	  /* Return failure if at end of input.  */
+ 	  if (yychar == YYEOF)
+-	     for (;;)
+-	       {
+-		 YYPOPSTACK;
+-		 if (yyssp == yyss)
+-		   YYABORT;
+-		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-		 yydestruct (yystos[*yyssp], yyvsp);
+-	       }
+-        }
++	    YYABORT;
++	}
+       else
+ 	{
+-	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+-	  yydestruct (yytoken, &yylval);
++	  yydestruct ("Error: discarding",
++		      yytoken, &yylval);
+ 	  yychar = YYEMPTY;
+-
+ 	}
+     }
+ 
+-  /* Else will try to reuse lookahead token after shifting the error
++  /* Else will try to reuse look-ahead token after shifting the error
+      token.  */
+   goto yyerrlab1;
+ 
+@@ -4399,15 +4697,17 @@
+ `---------------------------------------------------*/
+ yyerrorlab:
+ 
+-#ifdef __GNUC__
+-  /* Pacify GCC when the user code never invokes YYERROR and the label
+-     yyerrorlab therefore never appears in user code.  */
+-  if (0)
++  /* Pacify compilers like GCC when the user code never invokes
++     YYERROR and the label yyerrorlab therefore never appears in user
++     code.  */
++  if (/*CONSTCOND*/ 0)
+      goto yyerrorlab;
+-#endif
+ 
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYERROR.  */
++  YYPOPSTACK (yylen);
++  yylen = 0;
++  YY_STACK_PRINT (yyss, yyssp);
+   yystate = *yyssp;
+   goto yyerrlab1;
+ 
+@@ -4436,9 +4736,10 @@
+       if (yyssp == yyss)
+ 	YYABORT;
+ 
+-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-      yydestruct (yystos[yystate], yyvsp);
+-      YYPOPSTACK;
++
++      yydestruct ("Error: popping",
++		  yystos[yystate], yyvsp);
++      YYPOPSTACK (1);
+       yystate = *yyssp;
+       YY_STACK_PRINT (yyss, yyssp);
+     }
+@@ -4446,11 +4747,12 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  YYDPRINTF ((stderr, "Shifting error token, "));
+-
+   *++yyvsp = yylval;
+ 
+ 
++  /* Shift the error token.  */
++  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
++
+   yystate = yyn;
+   goto yynewstate;
+ 
+@@ -4470,21 +4772,39 @@
+   goto yyreturn;
+ 
+ #ifndef yyoverflow
+-/*----------------------------------------------.
+-| yyoverflowlab -- parser overflow comes here.  |
+-`----------------------------------------------*/
+-yyoverflowlab:
+-  yyerror ("parser stack overflow");
++/*-------------------------------------------------.
++| yyexhaustedlab -- memory exhaustion comes here.  |
++`-------------------------------------------------*/
++yyexhaustedlab:
++  yyerror (YY_("memory exhausted"));
+   yyresult = 2;
+   /* Fall through.  */
+ #endif
+ 
+ yyreturn:
++  if (yychar != YYEOF && yychar != YYEMPTY)
++     yydestruct ("Cleanup: discarding lookahead",
++		 yytoken, &yylval);
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYABORT or YYACCEPT.  */
++  YYPOPSTACK (yylen);
++  YY_STACK_PRINT (yyss, yyssp);
++  while (yyssp != yyss)
++    {
++      yydestruct ("Cleanup: popping",
++		  yystos[*yyssp], yyvsp);
++      YYPOPSTACK (1);
++    }
+ #ifndef yyoverflow
+   if (yyss != yyssa)
+     YYSTACK_FREE (yyss);
+ #endif
+-  return yyresult;
++#if YYERROR_VERBOSE
++  if (yymsg != yymsgbuf)
++    YYSTACK_FREE (yymsg);
++#endif
++  /* Make sure YYID is used.  */
++  return YYID (yyresult);
+ }
+ 
+ 
+--- saods9-4.0b7.orig/saotk/frame/tngparser.C
++++ saods9-4.0b7/saotk/frame/tngparser.C
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton implementation for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,16 +17,24 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+-/* Written by Richard Stallman by simplifying the original so called
+-   ``semantic'' parser.  */
++/* C LALR(1) parser skeleton written by Richard Stallman, by
++   simplifying the original so-called "semantic" parser.  */
+ 
+ /* All symbols defined below should begin with yy or YY, to avoid
+    infringing on user name space.  This should be done even for local
+@@ -36,6 +46,9 @@
+ /* Identify Bison output.  */
+ #define YYBISON 1
+ 
++/* Bison version.  */
++#define YYBISON_VERSION "2.3"
++
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+ 
+@@ -45,8 +58,7 @@
+ /* Using locations.  */
+ #define YYLSP_NEEDED 0
+ 
+-/* If NAME_PREFIX is specified substitute the variables and functions
+-   names.  */
++/* Substitute the variable and function names.  */
+ #define yyparse tngparse
+ #define yylex   tnglex
+ #define yyerror tngerror
+@@ -103,6 +115,7 @@
+      YELLOW_ = 296
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define STRING 260
+@@ -158,8 +171,8 @@
+ #define DISCARD_(x) {yyclearin; tngDiscard(x);}
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+@@ -216,16 +229,23 @@
+ # define YYERROR_VERBOSE 0
+ #endif
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++/* Enabling the token table.  */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
++#endif
++
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 60 "tngparser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 191 of yacc.c.  */
+-#line 229 "tngparser.C"
++}
++/* Line 193 of yacc.c.  */
++#line 248 "tngparser.C"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -236,56 +256,171 @@
+ /* Copy the second part of user declarations.  */
+ 
+ 
+-/* Line 214 of yacc.c.  */
+-#line 241 "tngparser.C"
++/* Line 216 of yacc.c.  */
++#line 261 "tngparser.C"
+ 
+-#if ! defined (yyoverflow) || YYERROR_VERBOSE
++#ifdef short
++# undef short
++#endif
++
++#ifdef YYTYPE_UINT8
++typedef YYTYPE_UINT8 yytype_uint8;
++#else
++typedef unsigned char yytype_uint8;
++#endif
+ 
+-# ifndef YYFREE
+-#  define YYFREE free
++#ifdef YYTYPE_INT8
++typedef YYTYPE_INT8 yytype_int8;
++#elif (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++typedef signed char yytype_int8;
++#else
++typedef short int yytype_int8;
++#endif
++
++#ifdef YYTYPE_UINT16
++typedef YYTYPE_UINT16 yytype_uint16;
++#else
++typedef unsigned short int yytype_uint16;
++#endif
++
++#ifdef YYTYPE_INT16
++typedef YYTYPE_INT16 yytype_int16;
++#else
++typedef short int yytype_int16;
++#endif
++
++#ifndef YYSIZE_T
++# ifdef __SIZE_TYPE__
++#  define YYSIZE_T __SIZE_TYPE__
++# elif defined size_t
++#  define YYSIZE_T size_t
++# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
++#  define YYSIZE_T size_t
++# else
++#  define YYSIZE_T unsigned int
+ # endif
+-# ifndef YYMALLOC
+-#  define YYMALLOC malloc
++#endif
++
++#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
++
++#ifndef YY_
++# if YYENABLE_NLS
++#  if ENABLE_NLS
++#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
++#   define YY_(msgid) dgettext ("bison-runtime", msgid)
++#  endif
++# endif
++# ifndef YY_
++#  define YY_(msgid) msgid
+ # endif
++#endif
++
++/* Suppress unused-variable warnings by "using" E.  */
++#if ! defined lint || defined __GNUC__
++# define YYUSE(e) ((void) (e))
++#else
++# define YYUSE(e) /* empty */
++#endif
++
++/* Identity function, used to suppress warnings about constant conditions.  */
++#ifndef lint
++# define YYID(n) (n)
++#else
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static int
++YYID (int i)
++#else
++static int
++YYID (i)
++    int i;
++#endif
++{
++  return i;
++}
++#endif
++
++#if ! defined yyoverflow || YYERROR_VERBOSE
+ 
+ /* The parser invokes alloca or malloc; define the necessary symbols.  */
+ 
+ # ifdef YYSTACK_USE_ALLOCA
+ #  if YYSTACK_USE_ALLOCA
+-#   define YYSTACK_ALLOC alloca
+-#  endif
+-# else
+-#  if defined (alloca) || defined (_ALLOCA_H)
+-#   define YYSTACK_ALLOC alloca
+-#  else
+ #   ifdef __GNUC__
+ #    define YYSTACK_ALLOC __builtin_alloca
++#   elif defined __BUILTIN_VA_ARG_INCR
++#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
++#   elif defined _AIX
++#    define YYSTACK_ALLOC __alloca
++#   elif defined _MSC_VER
++#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
++#    define alloca _alloca
++#   else
++#    define YYSTACK_ALLOC alloca
++#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#     ifndef _STDLIB_H
++#      define _STDLIB_H 1
++#     endif
++#    endif
+ #   endif
+ #  endif
+ # endif
+ 
+ # ifdef YYSTACK_ALLOC
+-   /* Pacify GCC's `empty if-body' warning. */
+-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+-# else
+-#  if defined (__STDC__) || defined (__cplusplus)
+-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   define YYSIZE_T size_t
++   /* Pacify GCC's `empty if-body' warning.  */
++#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++    /* The OS might guarantee only one guard page at the bottom of the stack,
++       and a page size can be as small as 4096 bytes.  So we cannot safely
++       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
++       to allow for a few compiler-allocated temporary stack slots.  */
++#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+ #  endif
++# else
+ #  define YYSTACK_ALLOC YYMALLOC
+ #  define YYSTACK_FREE YYFREE
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
++#  endif
++#  if (defined __cplusplus && ! defined _STDLIB_H \
++       && ! ((defined YYMALLOC || defined malloc) \
++	     && (defined YYFREE || defined free)))
++#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#   ifndef _STDLIB_H
++#    define _STDLIB_H 1
++#   endif
++#  endif
++#  ifndef YYMALLOC
++#   define YYMALLOC malloc
++#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
++#  ifndef YYFREE
++#   define YYFREE free
++#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void free (void *); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
+ # endif
+-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
++#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+ 
+ 
+-#if (! defined (yyoverflow) \
+-     && (! defined (__cplusplus) \
+-	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
++#if (! defined yyoverflow \
++     && (! defined __cplusplus \
++	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ 
+ /* A type that is properly aligned for any stack member.  */
+ union yyalloc
+ {
+-  short yyss;
++  yytype_int16 yyss;
+   YYSTYPE yyvs;
+   };
+ 
+@@ -295,24 +430,24 @@
+ /* The size of an array large to enough to hold all stacks, each with
+    N elements.  */
+ # define YYSTACK_BYTES(N) \
+-     ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
++     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+ 
+ /* Copy COUNT objects from FROM to TO.  The source and destination do
+    not overlap.  */
+ # ifndef YYCOPY
+-#  if defined (__GNUC__) && 1 < __GNUC__
++#  if defined __GNUC__ && 1 < __GNUC__
+ #   define YYCOPY(To, From, Count) \
+       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+ #  else
+ #   define YYCOPY(To, From, Count)		\
+       do					\
+ 	{					\
+-	  register YYSIZE_T yyi;		\
++	  YYSIZE_T yyi;				\
+ 	  for (yyi = 0; yyi < (Count); yyi++)	\
+ 	    (To)[yyi] = (From)[yyi];		\
+ 	}					\
+-      while (0)
++      while (YYID (0))
+ #  endif
+ # endif
+ 
+@@ -330,39 +465,33 @@
+ 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ 	yyptr += yynewbytes / sizeof (*yyptr);				\
+       }									\
+-    while (0)
++    while (YYID (0))
+ 
+ #endif
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-   typedef signed char yysigned_char;
+-#else
+-   typedef short yysigned_char;
+-#endif
+-
+-/* YYFINAL -- State number of the termination state. */
++/* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  3
+ /* YYLAST -- Last index in YYTABLE.  */
+ #define YYLAST   136
+ 
+-/* YYNTOKENS -- Number of terminals. */
++/* YYNTOKENS -- Number of terminals.  */
+ #define YYNTOKENS  51
+-/* YYNNTS -- Number of nonterminals. */
++/* YYNNTS -- Number of nonterminals.  */
+ #define YYNNTS  33
+-/* YYNRULES -- Number of rules. */
++/* YYNRULES -- Number of rules.  */
+ #define YYNRULES  80
+-/* YYNRULES -- Number of states. */
++/* YYNRULES -- Number of states.  */
+ #define YYNSTATES  143
+ 
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   296
+ 
+-#define YYTRANSLATE(YYX) 						\
++#define YYTRANSLATE(YYX)						\
+   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ 
+ /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+-static const unsigned char yytranslate[] =
++static const yytype_uint8 yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       42,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+@@ -399,7 +528,7 @@
+ #if YYDEBUG
+ /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+    YYRHS.  */
+-static const unsigned char yyprhs[] =
++static const yytype_uint8 yyprhs[] =
+ {
+        0,     0,     3,     6,    10,    13,    14,    17,    19,    23,
+       25,    27,    29,    31,    33,    35,    37,    39,    40,    42,
+@@ -412,8 +541,8 @@
+      234
+ };
+ 
+-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+-static const yysigned_char yyrhs[] =
++/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
++static const yytype_int8 yyrhs[] =
+ {
+       52,     0,    -1,    68,    53,    -1,    53,    54,    55,    -1,
+       54,    55,    -1,    -1,    16,    57,    -1,    39,    -1,    69,
+@@ -442,7 +571,7 @@
+ };
+ 
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+-static const unsigned short yyrline[] =
++static const yytype_uint16 yyrline[] =
+ {
+        0,   123,   123,   126,   127,   130,   131,   132,   133,   134,
+      137,   138,   139,   142,   143,   146,   147,   150,   151,   154,
+@@ -456,9 +585,9 @@
+ };
+ #endif
+ 
+-#if YYDEBUG || YYERROR_VERBOSE
+-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
++/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
++   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+ {
+   "$end", "error", "$undefined", "INT", "REAL", "STRING", "DEGREE",
+@@ -480,7 +609,7 @@
+ # ifdef YYPRINT
+ /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+    token YYLEX-NUM.  */
+-static const unsigned short yytoknum[] =
++static const yytype_uint16 yytoknum[] =
+ {
+        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+@@ -492,7 +621,7 @@
+ # endif
+ 
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+-static const unsigned char yyr1[] =
++static const yytype_uint8 yyr1[] =
+ {
+        0,    51,    52,    53,    53,    54,    54,    54,    54,    54,
+       55,    55,    55,    56,    56,    57,    57,    58,    58,    59,
+@@ -506,7 +635,7 @@
+ };
+ 
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+-static const unsigned char yyr2[] =
++static const yytype_uint8 yyr2[] =
+ {
+        0,     2,     2,     3,     2,     0,     2,     1,     3,     1,
+        1,     1,     1,     1,     1,     1,     1,     0,     1,     0,
+@@ -522,7 +651,7 @@
+ /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+-static const unsigned char yydefact[] =
++static const yytype_uint8 yydefact[] =
+ {
+       38,     0,    39,     1,     0,     7,    60,    39,     0,    40,
+        9,    16,    15,     6,     0,     0,     0,     0,     0,    12,
+@@ -541,8 +670,8 @@
+       49,    45,    44
+ };
+ 
+-/* YYDEFGOTO[NTERM-NUM]. */
+-static const short yydefgoto[] =
++/* YYDEFGOTO[NTERM-NUM].  */
++static const yytype_int16 yydefgoto[] =
+ {
+       -1,     1,     7,     8,    22,    63,    13,    80,    46,    88,
+      131,   132,   101,    99,    64,    89,    77,     2,     9,    25,
+@@ -553,7 +682,7 @@
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+    STATE-NUM.  */
+ #define YYPACT_NINF -87
+-static const short yypact[] =
++static const yytype_int16 yypact[] =
+ {
+      -87,     6,    -5,   -87,   -18,   -87,   -13,     0,    -7,   -28,
+      -87,   -87,   -87,   -87,   -41,   -22,    -4,    42,    -7,   -87,
+@@ -573,7 +702,7 @@
+ };
+ 
+ /* YYPGOTO[NTERM-NUM].  */
+-static const yysigned_char yypgoto[] =
++static const yytype_int8 yypgoto[] =
+ {
+      -87,   -87,   -87,    89,    79,     9,   -87,     1,    76,   -86,
+      -17,   -87,   -87,    17,    30,   -23,   -87,   -87,   -87,   -87,
+@@ -586,7 +715,7 @@
+    number is the opposite.  If zero, do what YYDEFACT says.
+    If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -22
+-static const short yytable[] =
++static const yytype_int16 yytable[] =
+ {
+       -2,    19,    14,    -5,   107,    41,     3,    15,    -5,    26,
+       16,     4,    11,    12,    42,   111,     4,   113,   -21,    23,
+@@ -604,7 +733,7 @@
+        0,    75,    59,    60,    76,    61,    62
+ };
+ 
+-static const short yycheck[] =
++static const yytype_int16 yycheck[] =
+ {
+        0,     8,    15,     8,    90,    17,     0,    20,     8,    50,
+       23,    16,    30,    31,    26,   101,    16,   103,     8,    47,
+@@ -624,7 +753,7 @@
+ 
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+    symbol of state STATE-NUM.  */
+-static const unsigned char yystos[] =
++static const yytype_uint8 yystos[] =
+ {
+        0,    52,    68,     0,    16,    39,    49,    53,    54,    69,
+       76,    30,    31,    57,    15,    20,    23,    79,    54,     8,
+@@ -643,22 +772,6 @@
+       80,    80,    80
+ };
+ 
+-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+-# define YYSIZE_T __SIZE_TYPE__
+-#endif
+-#if ! defined (YYSIZE_T) && defined (size_t)
+-# define YYSIZE_T size_t
+-#endif
+-#if ! defined (YYSIZE_T)
+-# if defined (__STDC__) || defined (__cplusplus)
+-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+-#  define YYSIZE_T size_t
+-# endif
+-#endif
+-#if ! defined (YYSIZE_T)
+-# define YYSIZE_T unsigned int
+-#endif
+-
+ #define yyerrok		(yyerrstatus = 0)
+ #define yyclearin	(yychar = YYEMPTY)
+ #define YYEMPTY		(-2)
+@@ -684,30 +797,63 @@
+       yychar = (Token);						\
+       yylval = (Value);						\
+       yytoken = YYTRANSLATE (yychar);				\
+-      YYPOPSTACK;						\
++      YYPOPSTACK (1);						\
+       goto yybackup;						\
+     }								\
+   else								\
+-    { 								\
+-      yyerror ("syntax error: cannot back up");\
++    {								\
++      yyerror (YY_("syntax error: cannot back up")); \
+       YYERROR;							\
+     }								\
+-while (0)
++while (YYID (0))
++
+ 
+ #define YYTERROR	1
+ #define YYERRCODE	256
+ 
+-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+-   are run).  */
+ 
++/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
++   If N is 0, then set CURRENT to the empty location which ends
++   the previous symbol: RHS[0] (always defined).  */
++
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)		\
+-   ((Current).first_line   = (Rhs)[1].first_line,	\
+-    (Current).first_column = (Rhs)[1].first_column,	\
+-    (Current).last_line    = (Rhs)[N].last_line,	\
+-    (Current).last_column  = (Rhs)[N].last_column)
++# define YYLLOC_DEFAULT(Current, Rhs, N)				\
++    do									\
++      if (YYID (N))                                                    \
++	{								\
++	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
++	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
++	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
++	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
++	}								\
++      else								\
++	{								\
++	  (Current).first_line   = (Current).last_line   =		\
++	    YYRHSLOC (Rhs, 0).last_line;				\
++	  (Current).first_column = (Current).last_column =		\
++	    YYRHSLOC (Rhs, 0).last_column;				\
++	}								\
++    while (YYID (0))
++#endif
++
++
++/* YY_LOCATION_PRINT -- Print the location on the stream.
++   This macro was not mandated originally: define only if we know
++   we won't break user code: when these are the locations we know.  */
++
++#ifndef YY_LOCATION_PRINT
++# if YYLTYPE_IS_TRIVIAL
++#  define YY_LOCATION_PRINT(File, Loc)			\
++     fprintf (File, "%d.%d-%d.%d",			\
++	      (Loc).first_line, (Loc).first_column,	\
++	      (Loc).last_line,  (Loc).last_column)
++# else
++#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# endif
+ #endif
+ 
++
+ /* YYLEX -- calling `yylex' with the right arguments.  */
+ 
+ #ifdef YYLEX_PARAM
+@@ -728,42 +874,96 @@
+ do {						\
+   if (yydebug)					\
+     YYFPRINTF Args;				\
+-} while (0)
++} while (YYID (0))
+ 
+-# define YYDSYMPRINT(Args)			\
+-do {						\
+-  if (yydebug)					\
+-    yysymprint Args;				\
+-} while (0)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
++do {									  \
++  if (yydebug)								  \
++    {									  \
++      YYFPRINTF (stderr, "%s ", Title);					  \
++      yy_symbol_print (stderr,						  \
++		  Type, Value); \
++      YYFPRINTF (stderr, "\n");						  \
++    }									  \
++} while (YYID (0))
+ 
+-# define YYDSYMPRINTF(Title, Token, Value, Location)		\
+-do {								\
+-  if (yydebug)							\
+-    {								\
+-      YYFPRINTF (stderr, "%s ", Title);				\
+-      yysymprint (stderr, 					\
+-                  Token, Value);	\
+-      YYFPRINTF (stderr, "\n");					\
+-    }								\
+-} while (0)
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_value_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (!yyvaluep)
++    return;
++# ifdef YYPRINT
++  if (yytype < YYNTOKENS)
++    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++# else
++  YYUSE (yyoutput);
++# endif
++  switch (yytype)
++    {
++      default:
++	break;
++    }
++}
++
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (yytype < YYNTOKENS)
++    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
++  else
++    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++
++  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
++  YYFPRINTF (yyoutput, ")");
++}
+ 
+ /*------------------------------------------------------------------.
+ | yy_stack_print -- Print the state stack from its BOTTOM up to its |
+ | TOP (included).                                                   |
+ `------------------------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_stack_print (short *bottom, short *top)
++yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+ #else
+ static void
+ yy_stack_print (bottom, top)
+-    short *bottom;
+-    short *top;
++    yytype_int16 *bottom;
++    yytype_int16 *top;
+ #endif
+ {
+   YYFPRINTF (stderr, "Stack now");
+-  for (/* Nothing. */; bottom <= top; ++bottom)
++  for (; bottom <= top; ++bottom)
+     YYFPRINTF (stderr, " %d", *bottom);
+   YYFPRINTF (stderr, "\n");
+ }
+@@ -772,45 +972,52 @@
+ do {								\
+   if (yydebug)							\
+     yy_stack_print ((Bottom), (Top));				\
+-} while (0)
++} while (YYID (0))
+ 
+ 
+ /*------------------------------------------------.
+ | Report that the YYRULE is going to be reduced.  |
+ `------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_reduce_print (int yyrule)
++yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+ #else
+ static void
+-yy_reduce_print (yyrule)
++yy_reduce_print (yyvsp, yyrule)
++    YYSTYPE *yyvsp;
+     int yyrule;
+ #endif
+ {
++  int yynrhs = yyr2[yyrule];
+   int yyi;
+-  unsigned int yylno = yyrline[yyrule];
+-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+-             yyrule - 1, yylno);
+-  /* Print the symbols being reduced, and their result.  */
+-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
++  unsigned long int yylno = yyrline[yyrule];
++  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
++	     yyrule - 1, yylno);
++  /* The symbols being reduced.  */
++  for (yyi = 0; yyi < yynrhs; yyi++)
++    {
++      fprintf (stderr, "   $%d = ", yyi + 1);
++      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
++		       &(yyvsp[(yyi + 1) - (yynrhs)])
++		       		       );
++      fprintf (stderr, "\n");
++    }
+ }
+ 
+ # define YY_REDUCE_PRINT(Rule)		\
+ do {					\
+   if (yydebug)				\
+-    yy_reduce_print (Rule);		\
+-} while (0)
++    yy_reduce_print (yyvsp, Rule); \
++} while (YYID (0))
+ 
+ /* Nonzero means print parse trace.  It is left uninitialized so that
+    multiple parsers can coexist.  */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
+-# define YYDSYMPRINT(Args)
+-# define YYDSYMPRINTF(Title, Token, Value, Location)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+ # define YY_STACK_PRINT(Bottom, Top)
+ # define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
+@@ -825,13 +1032,9 @@
+    if the built-in stack extension method is used).
+ 
+    Do not make this value too large; the results are undefined if
+-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
++   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+    evaluated with infinite-precision integer arithmetic.  */
+ 
+-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
+-# undef YYMAXDEPTH
+-#endif
+-
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
+@@ -841,45 +1044,47 @@
+ #if YYERROR_VERBOSE
+ 
+ # ifndef yystrlen
+-#  if defined (__GLIBC__) && defined (_STRING_H)
++#  if defined __GLIBC__ && defined _STRING_H
+ #   define yystrlen strlen
+ #  else
+ /* Return the length of YYSTR.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static YYSIZE_T
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystrlen (const char *yystr)
+-#   else
++#else
++static YYSIZE_T
+ yystrlen (yystr)
+-     const char *yystr;
+-#   endif
++    const char *yystr;
++#endif
+ {
+-  register const char *yys = yystr;
+-
+-  while (*yys++ != '\0')
++  YYSIZE_T yylen;
++  for (yylen = 0; yystr[yylen]; yylen++)
+     continue;
+-
+-  return yys - yystr - 1;
++  return yylen;
+ }
+ #  endif
+ # endif
+ 
+ # ifndef yystpcpy
+-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
++#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+ #   define yystpcpy stpcpy
+ #  else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+    YYDEST.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static char *
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystpcpy (char *yydest, const char *yysrc)
+-#   else
++#else
++static char *
+ yystpcpy (yydest, yysrc)
+-     char *yydest;
+-     const char *yysrc;
+-#   endif
++    char *yydest;
++    const char *yysrc;
++#endif
+ {
+-  register char *yyd = yydest;
+-  register const char *yys = yysrc;
++  char *yyd = yydest;
++  const char *yys = yysrc;
+ 
+   while ((*yyd++ = *yys++) != '\0')
+     continue;
+@@ -889,70 +1094,192 @@
+ #  endif
+ # endif
+ 
+-#endif /* !YYERROR_VERBOSE */
++# ifndef yytnamerr
++/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
++   quotes and backslashes, so that it's suitable for yyerror.  The
++   heuristic is that double-quoting is unnecessary unless the string
++   contains an apostrophe, a comma, or backslash (other than
++   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
++   null, do not copy; instead, return the length of what the result
++   would have been.  */
++static YYSIZE_T
++yytnamerr (char *yyres, const char *yystr)
++{
++  if (*yystr == '"')
++    {
++      YYSIZE_T yyn = 0;
++      char const *yyp = yystr;
+ 
+-
++      for (;;)
++	switch (*++yyp)
++	  {
++	  case '\'':
++	  case ',':
++	    goto do_not_strip_quotes;
++
++	  case '\\':
++	    if (*++yyp != '\\')
++	      goto do_not_strip_quotes;
++	    /* Fall through.  */
++	  default:
++	    if (yyres)
++	      yyres[yyn] = *yyp;
++	    yyn++;
++	    break;
++
++	  case '"':
++	    if (yyres)
++	      yyres[yyn] = '\0';
++	    return yyn;
++	  }
++    do_not_strip_quotes: ;
++    }
+ 
+-#if YYDEBUG
+-/*--------------------------------.
+-| Print this symbol on YYOUTPUT.  |
+-`--------------------------------*/
++  if (! yyres)
++    return yystrlen (yystr);
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-static void
+-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+-#else
+-static void
+-yysymprint (yyoutput, yytype, yyvaluep)
+-    FILE *yyoutput;
+-    int yytype;
+-    YYSTYPE *yyvaluep;
+-#endif
++  return yystpcpy (yyres, yystr) - yyres;
++}
++# endif
++
++/* Copy into YYRESULT an error message about the unexpected token
++   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
++   including the terminating null byte.  If YYRESULT is null, do not
++   copy anything; just return the number of bytes that would be
++   copied.  As a special case, return 0 if an ordinary "syntax error"
++   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
++   size calculation.  */
++static YYSIZE_T
++yysyntax_error (char *yyresult, int yystate, int yychar)
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  int yyn = yypact[yystate];
+ 
+-  if (yytype < YYNTOKENS)
++  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
++    return 0;
++  else
+     {
+-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+-# ifdef YYPRINT
+-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++      int yytype = YYTRANSLATE (yychar);
++      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
++      YYSIZE_T yysize = yysize0;
++      YYSIZE_T yysize1;
++      int yysize_overflow = 0;
++      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++      int yyx;
++
++# if 0
++      /* This is so xgettext sees the translatable formats that are
++	 constructed on the fly.  */
++      YY_("syntax error, unexpected %s");
++      YY_("syntax error, unexpected %s, expecting %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+ # endif
+-    }
+-  else
+-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++      char *yyfmt;
++      char const *yyf;
++      static char const yyunexpected[] = "syntax error, unexpected %s";
++      static char const yyexpecting[] = ", expecting %s";
++      static char const yyor[] = " or %s";
++      char yyformat[sizeof yyunexpected
++		    + sizeof yyexpecting - 1
++		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
++		       * (sizeof yyor - 1))];
++      char const *yyprefix = yyexpecting;
++
++      /* Start YYX at -YYN if negative to avoid negative indexes in
++	 YYCHECK.  */
++      int yyxbegin = yyn < 0 ? -yyn : 0;
++
++      /* Stay within bounds of both yycheck and yytname.  */
++      int yychecklim = YYLAST - yyn + 1;
++      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++      int yycount = 1;
++
++      yyarg[0] = yytname[yytype];
++      yyfmt = yystpcpy (yyformat, yyunexpected);
++
++      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++	  {
++	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++	      {
++		yycount = 1;
++		yysize = yysize0;
++		yyformat[sizeof yyunexpected - 1] = '\0';
++		break;
++	      }
++	    yyarg[yycount++] = yytname[yyx];
++	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++	    yysize_overflow |= (yysize1 < yysize);
++	    yysize = yysize1;
++	    yyfmt = yystpcpy (yyfmt, yyprefix);
++	    yyprefix = yyor;
++	  }
++
++      yyf = YY_(yyformat);
++      yysize1 = yysize + yystrlen (yyf);
++      yysize_overflow |= (yysize1 < yysize);
++      yysize = yysize1;
+ 
+-  switch (yytype)
+-    {
+-      default:
+-        break;
++      if (yysize_overflow)
++	return YYSIZE_MAXIMUM;
++
++      if (yyresult)
++	{
++	  /* Avoid sprintf, as that infringes on the user's name space.
++	     Don't have undefined behavior even if the translation
++	     produced a string with the wrong number of "%s"s.  */
++	  char *yyp = yyresult;
++	  int yyi = 0;
++	  while ((*yyp = *yyf) != '\0')
++	    {
++	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
++		{
++		  yyp += yytnamerr (yyp, yyarg[yyi++]);
++		  yyf += 2;
++		}
++	      else
++		{
++		  yyp++;
++		  yyf++;
++		}
++	    }
++	}
++      return yysize;
+     }
+-  YYFPRINTF (yyoutput, ")");
+ }
++#endif /* YYERROR_VERBOSE */
++
+ 
+-#endif /* ! YYDEBUG */
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+ `-----------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yydestruct (int yytype, YYSTYPE *yyvaluep)
++yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+ #else
+ static void
+-yydestruct (yytype, yyvaluep)
++yydestruct (yymsg, yytype, yyvaluep)
++    const char *yymsg;
+     int yytype;
+     YYSTYPE *yyvaluep;
+ #endif
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  YYUSE (yyvaluep);
++
++  if (!yymsg)
++    yymsg = "Deleting";
++  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ 
+   switch (yytype)
+     {
+ 
+       default:
+-        break;
++	break;
+     }
+ }
+ 
+@@ -960,13 +1287,13 @@
+ /* Prevent warnings from -Wmissing-prototypes.  */
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void *YYPARSE_PARAM);
+-# else
++#else
+ int yyparse ();
+-# endif
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void);
+ #else
+ int yyparse ();
+@@ -975,10 +1302,10 @@
+ 
+ 
+ 
+-/* The lookahead symbol.  */
++/* The look-ahead symbol.  */
+ int yychar;
+ 
+-/* The semantic value of the lookahead symbol.  */
++/* The semantic value of the look-ahead symbol.  */
+ YYSTYPE yylval;
+ 
+ /* Number of syntax errors so far.  */
+@@ -991,14 +1318,18 @@
+ `----------*/
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
+-int yyparse (void *YYPARSE_PARAM)
+-# else
+-int yyparse (YYPARSE_PARAM)
+-  void *YYPARSE_PARAM;
+-# endif
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++int
++yyparse (void *YYPARSE_PARAM)
++#else
++int
++yyparse (YYPARSE_PARAM)
++    void *YYPARSE_PARAM;
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ int
+ yyparse (void)
+ #else
+@@ -1009,13 +1340,19 @@
+ #endif
+ {
+   
+-  register int yystate;
+-  register int yyn;
++  int yystate;
++  int yyn;
+   int yyresult;
+   /* Number of tokens to shift before error messages enabled.  */
+   int yyerrstatus;
+-  /* Lookahead token as an internal (translated) token number.  */
++  /* Look-ahead token as an internal (translated) token number.  */
+   int yytoken = 0;
++#if YYERROR_VERBOSE
++  /* Buffer for error messages, and its allocated size.  */
++  char yymsgbuf[128];
++  char *yymsg = yymsgbuf;
++  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
++#endif
+ 
+   /* Three stacks and their tools:
+      `yyss': related to states,
+@@ -1026,18 +1363,18 @@
+      to reallocate them elsewhere.  */
+ 
+   /* The state stack.  */
+-  short	yyssa[YYINITDEPTH];
+-  short *yyss = yyssa;
+-  register short *yyssp;
++  yytype_int16 yyssa[YYINITDEPTH];
++  yytype_int16 *yyss = yyssa;
++  yytype_int16 *yyssp;
+ 
+   /* The semantic value stack.  */
+   YYSTYPE yyvsa[YYINITDEPTH];
+   YYSTYPE *yyvs = yyvsa;
+-  register YYSTYPE *yyvsp;
++  YYSTYPE *yyvsp;
+ 
+ 
+ 
+-#define YYPOPSTACK   (yyvsp--, yyssp--)
++#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+ 
+   YYSIZE_T yystacksize = YYINITDEPTH;
+ 
+@@ -1046,9 +1383,9 @@
+   YYSTYPE yyval;
+ 
+ 
+-  /* When reducing, the number of symbols on the RHS of the reduced
+-     rule.  */
+-  int yylen;
++  /* The number of symbols on the RHS of the reduced rule.
++     Keep to zero when no symbol should be popped.  */
++  int yylen = 0;
+ 
+   YYDPRINTF ((stderr, "Starting parse\n"));
+ 
+@@ -1072,8 +1409,7 @@
+ `------------------------------------------------------------*/
+  yynewstate:
+   /* In all cases, when you get here, the value and location stacks
+-     have just been pushed. so pushing a state here evens the stacks.
+-     */
++     have just been pushed.  So pushing a state here evens the stacks.  */
+   yyssp++;
+ 
+  yysetstate:
+@@ -1086,18 +1422,18 @@
+ 
+ #ifdef yyoverflow
+       {
+-	/* Give user a chance to reallocate the stack. Use copies of
++	/* Give user a chance to reallocate the stack.  Use copies of
+ 	   these so that the &'s don't force the real ones into
+ 	   memory.  */
+ 	YYSTYPE *yyvs1 = yyvs;
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 
+ 
+ 	/* Each stack pointer address is followed by the size of the
+ 	   data in use in that stack, in bytes.  This used to be a
+ 	   conditional around just the two extra args, but that might
+ 	   be undefined if yyoverflow is a macro.  */
+-	yyoverflow ("parser stack overflow",
++	yyoverflow (YY_("memory exhausted"),
+ 		    &yyss1, yysize * sizeof (*yyssp),
+ 		    &yyvs1, yysize * sizeof (*yyvsp),
+ 
+@@ -1108,21 +1444,21 @@
+       }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+-      goto yyoverflowlab;
++      goto yyexhaustedlab;
+ # else
+       /* Extend the stack our own way.  */
+       if (YYMAXDEPTH <= yystacksize)
+-	goto yyoverflowlab;
++	goto yyexhaustedlab;
+       yystacksize *= 2;
+       if (YYMAXDEPTH < yystacksize)
+ 	yystacksize = YYMAXDEPTH;
+ 
+       {
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 	union yyalloc *yyptr =
+ 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ 	if (! yyptr)
+-	  goto yyoverflowlab;
++	  goto yyexhaustedlab;
+ 	YYSTACK_RELOCATE (yyss);
+ 	YYSTACK_RELOCATE (yyvs);
+ 
+@@ -1153,19 +1489,17 @@
+ `-----------*/
+ yybackup:
+ 
+-/* Do appropriate processing given the current state.  */
+-/* Read a lookahead token if we need one and don't already have one.  */
+-/* yyresume: */
+-
+-  /* First try to decide what to do without reference to lookahead token.  */
++  /* Do appropriate processing given the current state.  Read a
++     look-ahead token if we need one and don't already have one.  */
+ 
++  /* First try to decide what to do without reference to look-ahead token.  */
+   yyn = yypact[yystate];
+   if (yyn == YYPACT_NINF)
+     goto yydefault;
+ 
+-  /* Not known => get a lookahead token if don't already have one.  */
++  /* Not known => get a look-ahead token if don't already have one.  */
+ 
+-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
++  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+   if (yychar == YYEMPTY)
+     {
+       YYDPRINTF ((stderr, "Reading a token: "));
+@@ -1180,7 +1514,7 @@
+   else
+     {
+       yytoken = YYTRANSLATE (yychar);
+-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
++      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+     }
+ 
+   /* If the proper action on seeing token YYTOKEN is to reduce or to
+@@ -1200,22 +1534,21 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  /* Shift the lookahead token.  */
+-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+-
+-  /* Discard the token being shifted unless it is eof.  */
+-  if (yychar != YYEOF)
+-    yychar = YYEMPTY;
+-
+-  *++yyvsp = yylval;
+-
+-
+   /* Count tokens shifted since error; after three, turn off error
+      status.  */
+   if (yyerrstatus)
+     yyerrstatus--;
+ 
++  /* Shift the look-ahead token.  */
++  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
++
++  /* Discard the shifted token unless it is eof.  */
++  if (yychar != YYEOF)
++    yychar = YYEMPTY;
++
+   yystate = yyn;
++  *++yyvsp = yylval;
++
+   goto yynewstate;
+ 
+ 
+@@ -1262,12 +1595,12 @@
+ 
+   case 13:
+ #line 142 "tngparser.Y"
+-    {yyval.real=yyvsp[0].real;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 14:
+ #line 143 "tngparser.Y"
+-    {yyval.real=yyvsp[0].integer;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 15:
+@@ -1282,42 +1615,42 @@
+ 
+   case 23:
+ #line 162 "tngparser.Y"
+-    {yyval.real = 0;;}
++    {(yyval.real) = 0;;}
+     break;
+ 
+   case 24:
+ #line 163 "tngparser.Y"
+-    {yyval.real = yyvsp[0].real;;}
++    {(yyval.real) = (yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 25:
+ #line 166 "tngparser.Y"
+-    {yyval.real = degToRad(yyvsp[0].real);;}
++    {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;}
+     break;
+ 
+   case 26:
+ #line 167 "tngparser.Y"
+-    {yyval.real = degToRad(yyvsp[0].real);;}
++    {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;}
+     break;
+ 
+   case 27:
+ #line 170 "tngparser.Y"
+-    {yyval.real = FITSPTR->mapLenToRef(yyvsp[0].real,IMAGE);;}
++    {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real),IMAGE);;}
+     break;
+ 
+   case 28:
+ #line 174 "tngparser.Y"
+     {
+-	  Vector r = FITSPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real), IMAGE);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), IMAGE);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 29:
+ #line 182 "tngparser.Y"
+-    {yyval.real = parseDMS(yyvsp[0].str);;}
++    {(yyval.real) = parseDMS((yyvsp[(1) - (1)].str));;}
+     break;
+ 
+   case 30:
+@@ -1327,60 +1660,60 @@
+ 	  CoordSystem sys = checkWCSSystem();
+ 	  SkyFrame sky = checkWCSSky();
+ 	  if (sky == GALACTIC || sky == ECLIPTIC) 
+-	    r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real), sys, sky);
++	    r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), sys, sky);
+ 	  else
+-	    r = FITSPTR->mapToRef(Vector(yyvsp[-2].real*360./24.,yyvsp[0].real), sys, sky);
++	    r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real)*360./24.,(yyvsp[(3) - (3)].real)), sys, sky);
+ 
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 31:
+ #line 200 "tngparser.Y"
+     {
+-	  Vector r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real), localSystem, localSky);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), localSystem, localSky);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 32:
+ #line 207 "tngparser.Y"
+     {
+-	  Vector r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real),
++	  Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),
+ 	    checkWCSSystem(), checkWCSSky());
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 33:
+ #line 216 "tngparser.Y"
+-    {yyval.integer = FK4;;}
++    {(yyval.integer) = FK4;;}
+     break;
+ 
+   case 34:
+ #line 217 "tngparser.Y"
+-    {yyval.integer = FK5;;}
++    {(yyval.integer) = FK5;;}
+     break;
+ 
+   case 35:
+ #line 218 "tngparser.Y"
+-    {yyval.integer = GALACTIC;;}
++    {(yyval.integer) = GALACTIC;;}
+     break;
+ 
+   case 36:
+ #line 219 "tngparser.Y"
+-    {yyval.integer = ECLIPTIC;;}
++    {(yyval.integer) = ECLIPTIC;;}
+     break;
+ 
+   case 37:
+ #line 220 "tngparser.Y"
+-    {yyval.integer = ICRS;;}
++    {(yyval.integer) = ICRS;;}
+     break;
+ 
+   case 38:
+@@ -1431,34 +1764,34 @@
+ 
+   case 43:
+ #line 256 "tngparser.Y"
+-    {FR->createCircleCmd(Vector(yyvsp[-4].vector),
+-	    yyvsp[-2].real,
++    {FR->createCircleCmd(Vector((yyvsp[(3) - (7)].vector)),
++	    (yyvsp[(5) - (7)].real),
+ 	    localColor,1,globalFont,localText,
+ 	    localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 44:
+ #line 262 "tngparser.Y"
+-    {FR->createEllipseCmd(Vector(yyvsp[-6].vector),
+-	    Vector(yyvsp[-4].vector),
+-	    yyvsp[-2].real,
++    {FR->createEllipseCmd(Vector((yyvsp[(3) - (9)].vector)),
++	    Vector((yyvsp[(5) - (9)].vector)),
++	    (yyvsp[(7) - (9)].real),
+ 	    localColor,1,globalFont,localText,
+ 	    localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 45:
+ #line 269 "tngparser.Y"
+-    {FR->createBoxCmd(Vector(yyvsp[-6].vector),
+-	    Vector(yyvsp[-4].vector),
+-	    yyvsp[-2].real,
++    {FR->createBoxCmd(Vector((yyvsp[(3) - (9)].vector)),
++	    Vector((yyvsp[(5) - (9)].vector)),
++	    (yyvsp[(7) - (9)].real),
+ 	    localColor,1,globalFont,localText,
+ 	    localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 46:
+ #line 276 "tngparser.Y"
+-    {FR->createLineCmd(Vector(yyvsp[-4].vector),
+-	    Vector(yyvsp[-2].vector),
++    {FR->createLineCmd(Vector((yyvsp[(3) - (7)].vector)),
++	    Vector((yyvsp[(5) - (7)].vector)),
+ 	    0,0,
+ 	    localColor,1,globalFont,localText,
+ 	    localProps,localComment,taglist,cblist);;}
+@@ -1466,19 +1799,19 @@
+ 
+   case 47:
+ #line 283 "tngparser.Y"
+-    {FR->createBoxCirclePointCmd(Vector(yyvsp[-2].vector),
++    {FR->createBoxCirclePointCmd(Vector((yyvsp[(3) - (5)].vector)),
+ 	    localColor,1,globalFont,localText,
+ 	    localProps,localComment,taglist,cblist);;}
+     break;
+ 
+   case 48:
+ #line 287 "tngparser.Y"
+-    {strncpy(localText,yyvsp[-1].str,80);;}
++    {strncpy(localText,(yyvsp[(5) - (6)].str),80);;}
+     break;
+ 
+   case 49:
+ #line 288 "tngparser.Y"
+-    {FR->createTextCmd(Vector(yyvsp[-5].vector),
++    {FR->createTextCmd(Vector((yyvsp[(3) - (8)].vector)),
+ 	    0,
+ 	    localColor,1,globalFont,localText,
+ 	    localProps,localComment,taglist,cblist);;}
+@@ -1498,7 +1831,7 @@
+ 
+   case 54:
+ #line 303 "tngparser.Y"
+-    {polylist.append(new Vertex(yyvsp[0].vector));;}
++    {polylist.append(new Vertex((yyvsp[(1) - (1)].vector)));;}
+     break;
+ 
+   case 56:
+@@ -1518,7 +1851,7 @@
+ 
+   case 61:
+ #line 309 "tngparser.Y"
+-    {strncpy(globalText,yyvsp[0].str,80);;}
++    {strncpy(globalText,(yyvsp[(3) - (3)].str),80);;}
+     break;
+ 
+   case 63:
+@@ -1584,7 +1917,7 @@
+ 
+   case 74:
+ #line 331 "tngparser.Y"
+-    {strncpy(localComment,yyvsp[0].str,80);;}
++    {strncpy(localComment,(yyvsp[(3) - (3)].str),80);;}
+     break;
+ 
+   case 77:
+@@ -1609,20 +1942,19 @@
+ #line 346 "tngparser.Y"
+     {
+ 	    globalSystem = localSystem = WCS;
+-	    globalSky = localSky = (SkyFrame)yyvsp[-1].integer;
++	    globalSky = localSky = (SkyFrame)(yyvsp[(2) - (3)].integer);
+ 	  ;}
+     break;
+ 
+ 
++/* Line 1267 of yacc.c.  */
++#line 1952 "tngparser.C"
++      default: break;
+     }
++  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ 
+-/* Line 1000 of yacc.c.  */
+-#line 1621 "tngparser.C"
+-
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
+-
+-
++  YYPOPSTACK (yylen);
++  yylen = 0;
+   YY_STACK_PRINT (yyss, yyssp);
+ 
+   *++yyvsp = yyval;
+@@ -1651,99 +1983,65 @@
+   if (!yyerrstatus)
+     {
+       ++yynerrs;
+-#if YYERROR_VERBOSE
+-      yyn = yypact[yystate];
+-
+-      if (YYPACT_NINF < yyn && yyn < YYLAST)
+-	{
+-	  YYSIZE_T yysize = 0;
+-	  int yytype = YYTRANSLATE (yychar);
+-	  const char* yyprefix;
+-	  char *yymsg;
+-	  int yyx;
+-
+-	  /* Start YYX at -YYN if negative to avoid negative indexes in
+-	     YYCHECK.  */
+-	  int yyxbegin = yyn < 0 ? -yyn : 0;
+-
+-	  /* Stay within bounds of both yycheck and yytname.  */
+-	  int yychecklim = YYLAST - yyn;
+-	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-	  int yycount = 0;
+-
+-	  yyprefix = ", expecting ";
+-	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++#if ! YYERROR_VERBOSE
++      yyerror (YY_("syntax error"));
++#else
++      {
++	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
++	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
++	  {
++	    YYSIZE_T yyalloc = 2 * yysize;
++	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
++	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
++	    if (yymsg != yymsgbuf)
++	      YYSTACK_FREE (yymsg);
++	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
++	    if (yymsg)
++	      yymsg_alloc = yyalloc;
++	    else
+ 	      {
+-		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+-		yycount += 1;
+-		if (yycount == 5)
+-		  {
+-		    yysize = 0;
+-		    break;
+-		  }
++		yymsg = yymsgbuf;
++		yymsg_alloc = sizeof yymsgbuf;
+ 	      }
+-	  yysize += (sizeof ("syntax error, unexpected ")
+-		     + yystrlen (yytname[yytype]));
+-	  yymsg = (char *) YYSTACK_ALLOC (yysize);
+-	  if (yymsg != 0)
+-	    {
+-	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+-	      yyp = yystpcpy (yyp, yytname[yytype]);
++	  }
+ 
+-	      if (yycount < 5)
+-		{
+-		  yyprefix = ", expecting ";
+-		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+-		      {
+-			yyp = yystpcpy (yyp, yyprefix);
+-			yyp = yystpcpy (yyp, yytname[yyx]);
+-			yyprefix = " or ";
+-		      }
+-		}
+-	      yyerror (yymsg);
+-	      YYSTACK_FREE (yymsg);
+-	    }
+-	  else
+-	    yyerror ("syntax error; also virtual memory exhausted");
+-	}
+-      else
+-#endif /* YYERROR_VERBOSE */
+-	yyerror ("syntax error");
++	if (0 < yysize && yysize <= yymsg_alloc)
++	  {
++	    (void) yysyntax_error (yymsg, yystate, yychar);
++	    yyerror (yymsg);
++	  }
++	else
++	  {
++	    yyerror (YY_("syntax error"));
++	    if (yysize != 0)
++	      goto yyexhaustedlab;
++	  }
++      }
++#endif
+     }
+ 
+ 
+ 
+   if (yyerrstatus == 3)
+     {
+-      /* If just tried and failed to reuse lookahead token after an
++      /* If just tried and failed to reuse look-ahead token after an
+ 	 error, discard it.  */
+ 
+       if (yychar <= YYEOF)
+-        {
+-          /* If at end of input, pop the error token,
+-	     then the rest of the stack, then return failure.  */
++	{
++	  /* Return failure if at end of input.  */
+ 	  if (yychar == YYEOF)
+-	     for (;;)
+-	       {
+-		 YYPOPSTACK;
+-		 if (yyssp == yyss)
+-		   YYABORT;
+-		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-		 yydestruct (yystos[*yyssp], yyvsp);
+-	       }
+-        }
++	    YYABORT;
++	}
+       else
+ 	{
+-	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+-	  yydestruct (yytoken, &yylval);
++	  yydestruct ("Error: discarding",
++		      yytoken, &yylval);
+ 	  yychar = YYEMPTY;
+-
+ 	}
+     }
+ 
+-  /* Else will try to reuse lookahead token after shifting the error
++  /* Else will try to reuse look-ahead token after shifting the error
+      token.  */
+   goto yyerrlab1;
+ 
+@@ -1753,15 +2051,17 @@
+ `---------------------------------------------------*/
+ yyerrorlab:
+ 
+-#ifdef __GNUC__
+-  /* Pacify GCC when the user code never invokes YYERROR and the label
+-     yyerrorlab therefore never appears in user code.  */
+-  if (0)
++  /* Pacify compilers like GCC when the user code never invokes
++     YYERROR and the label yyerrorlab therefore never appears in user
++     code.  */
++  if (/*CONSTCOND*/ 0)
+      goto yyerrorlab;
+-#endif
+ 
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYERROR.  */
++  YYPOPSTACK (yylen);
++  yylen = 0;
++  YY_STACK_PRINT (yyss, yyssp);
+   yystate = *yyssp;
+   goto yyerrlab1;
+ 
+@@ -1790,9 +2090,10 @@
+       if (yyssp == yyss)
+ 	YYABORT;
+ 
+-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-      yydestruct (yystos[yystate], yyvsp);
+-      YYPOPSTACK;
++
++      yydestruct ("Error: popping",
++		  yystos[yystate], yyvsp);
++      YYPOPSTACK (1);
+       yystate = *yyssp;
+       YY_STACK_PRINT (yyss, yyssp);
+     }
+@@ -1800,11 +2101,12 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  YYDPRINTF ((stderr, "Shifting error token, "));
+-
+   *++yyvsp = yylval;
+ 
+ 
++  /* Shift the error token.  */
++  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
++
+   yystate = yyn;
+   goto yynewstate;
+ 
+@@ -1824,21 +2126,39 @@
+   goto yyreturn;
+ 
+ #ifndef yyoverflow
+-/*----------------------------------------------.
+-| yyoverflowlab -- parser overflow comes here.  |
+-`----------------------------------------------*/
+-yyoverflowlab:
+-  yyerror ("parser stack overflow");
++/*-------------------------------------------------.
++| yyexhaustedlab -- memory exhaustion comes here.  |
++`-------------------------------------------------*/
++yyexhaustedlab:
++  yyerror (YY_("memory exhausted"));
+   yyresult = 2;
+   /* Fall through.  */
+ #endif
+ 
+ yyreturn:
++  if (yychar != YYEOF && yychar != YYEMPTY)
++     yydestruct ("Cleanup: discarding lookahead",
++		 yytoken, &yylval);
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYABORT or YYACCEPT.  */
++  YYPOPSTACK (yylen);
++  YY_STACK_PRINT (yyss, yyssp);
++  while (yyssp != yyss)
++    {
++      yydestruct ("Cleanup: popping",
++		  yystos[*yyssp], yyvsp);
++      YYPOPSTACK (1);
++    }
+ #ifndef yyoverflow
+   if (yyss != yyssa)
+     YYSTACK_FREE (yyss);
+ #endif
+-  return yyresult;
++#if YYERROR_VERBOSE
++  if (yymsg != yymsgbuf)
++    YYSTACK_FREE (yymsg);
++#endif
++  /* Make sure YYID is used.  */
++  return YYID (yyresult);
+ }
+ 
+ 
+--- saods9-4.0b7.orig/saotk/frame/fitsimage.h
++++ saods9-4.0b7/saotk/frame/fitsimage.h
+@@ -12,7 +12,7 @@
+ 
+ class FitsFile;
+ 
+-#include "wcs.h"
++#include "../../wcssubs-3.5.6/wcs.h"
+ 
+ class FitsImage {
+ protected:
+@@ -405,33 +405,33 @@
+   char* getKeyword(const char*);
+   int findKeyword(const char*);
+ 
+-  int FitsImage::saveFitsImageFile(const char* fn, int compress)
++  int saveFitsImageFile(const char* fn, int compress)
+     {return image_ ? image_->saveFitsImageFile(fn, compress) : 0;}
+ 
+-  int FitsImage::saveFitsImageChannel(Tcl_Interp* interp, const char* ch, 
++  int saveFitsImageChannel(Tcl_Interp* interp, const char* ch, 
+ 				      int compress)
+     {return image_ ? image_->saveFitsImageChannel(interp, ch, compress) : 0;}
+ 
+-  int FitsImage::saveFitsImageSocket(int s, int compress)
++  int saveFitsImageSocket(int s, int compress)
+     {return image_ ? image_->saveFitsImageSocket(s, compress) : 0;}
+ 
+-  int FitsImage::saveFitsTableFile(const char* fn, int compress)
++  int saveFitsTableFile(const char* fn, int compress)
+     {return fits_ ? fits_->saveFitsTableFile(fn, compress) : 0;}
+ 
+-  int FitsImage::saveFitsTableChannel(Tcl_Interp* interp, const char* ch, 
++  int saveFitsTableChannel(Tcl_Interp* interp, const char* ch, 
+ 				      int compress)
+     {return fits_ ? fits_->saveFitsTableChannel(interp, ch, compress): 0;}
+ 
+-  int FitsImage::saveFitsTableSocket(int s, int compress)
++  int saveFitsTableSocket(int s, int compress)
+     {return fits_ ? fits_->saveFitsTableSocket(s, compress) : 0;}
+ 
+-  int FitsImage::saveArrayFile(const char* fn)
++  int saveArrayFile(const char* fn)
+     {return image_ ? image_->saveArrayFile(fn) : 0;}
+ 
+-  int FitsImage::saveArrayChannel(Tcl_Interp* interp, const char* ch)
++  int saveArrayChannel(Tcl_Interp* interp, const char* ch)
+     {return image_ ? image_->saveArrayChannel(interp, ch) : 0;}
+ 
+-  int FitsImage::saveArraySocket(int s)
++  int saveArraySocket(int s)
+     {return image_ ? image_->saveArraySocket(s) : 0;}
+ };
+ 
+--- saods9-4.0b7.orig/saotk/frame/contourscale.C
++++ saods9-4.0b7/saotk/frame/contourscale.C
+@@ -3,7 +3,7 @@
+ // For conditions of distribution and use, see copyright notice in "copyright"
+ 
+ #include <math.h>
+-#include <iostream.h>
++#include <iostream>
+ 
+ #include "contourscale.h"
+ #include "framebase.h"
+--- saods9-4.0b7.orig/saotk/frame/lex.C
++++ saods9-4.0b7/saotk/frame/lex.C
+@@ -4,7 +4,7 @@
+ /* A lexical scanner generated by flex */
+ 
+ /* Scanner skeleton version:
+- * $Header: /proj/rd/cvsroot/saods9/saotk/frame/lex.C,v 1.181 2005/08/24 21:41:24 joye Exp $
++ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
+  */
+ 
+ #define FLEX_SCANNER
+@@ -12,7 +12,6 @@
+ #define YY_FLEX_MINOR_VERSION 5
+ 
+ 
+-
+ /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+ #ifdef c_plusplus
+ #ifndef __cplusplus
+@@ -24,8 +23,12 @@
+ #ifdef __cplusplus
+ 
+ #include <stdlib.h>
+-#include <iostream>
+-using namespace std;
++#include <fstream>
++using std::istream;
++using std::ostream;
++#ifndef _WIN32
++#include <unistd.h>
++#endif
+ 
+ /* Use prototypes in function declarations. */
+ #define YY_USE_PROTOS
+@@ -65,6 +68,7 @@
+ #define YY_PROTO(proto) ()
+ #endif
+ 
++
+ /* Returned upon end-of-file. */
+ #define YY_NULL 0
+ 
+@@ -995,7 +999,7 @@
+   extern frFlexLexer* frlexx;
+   extern int frsign;
+ /* rules */
+-#line 999 "lex.C"
++#line 1003 "lex.C"
+ 
+ /* Macros after this point can all be overridden by user definitions in
+  * section 1.
+@@ -1119,13 +1123,13 @@
+ YY_DECL
+ 	{
+ 	register yy_state_type yy_current_state;
+-	register char *yy_cp = NULL, *yy_bp = NULL;
++	register char *yy_cp, *yy_bp;
+ 	register int yy_act;
+ 
+ #line 29 "lex.L"
+ 
+ 
+-#line 1129 "lex.C"
++#line 1133 "lex.C"
+ 
+ 	if ( yy_init )
+ 		{
+@@ -2810,7 +2814,7 @@
+ #line 417 "lex.L"
+ ECHO;
+ 	YY_BREAK
+-#line 2814 "lex.C"
++#line 2818 "lex.C"
+ case YY_STATE_EOF(INITIAL):
+ 	yyterminate();
+ 
+@@ -3328,6 +3332,7 @@
+ 	return c;
+ 	}
+ 
++
+ void yyFlexLexer::yyrestart( istream* input_file )
+ 	{
+ 	if ( ! yy_current_buffer )
+--- saods9-4.0b7.orig/saotk/frame/xyparser.C
++++ saods9-4.0b7/saotk/frame/xyparser.C
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton implementation for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,16 +17,24 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+-/* Written by Richard Stallman by simplifying the original so called
+-   ``semantic'' parser.  */
++/* C LALR(1) parser skeleton written by Richard Stallman, by
++   simplifying the original so-called "semantic" parser.  */
+ 
+ /* All symbols defined below should begin with yy or YY, to avoid
+    infringing on user name space.  This should be done even for local
+@@ -36,6 +46,9 @@
+ /* Identify Bison output.  */
+ #define YYBISON 1
+ 
++/* Bison version.  */
++#define YYBISON_VERSION "2.3"
++
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+ 
+@@ -45,8 +58,7 @@
+ /* Using locations.  */
+ #define YYLSP_NEEDED 0
+ 
+-/* If NAME_PREFIX is specified substitute the variables and functions
+-   names.  */
++/* Substitute the variable and function names.  */
+ #define yyparse xyparse
+ #define yylex   xylex
+ #define yyerror xyerror
+@@ -118,6 +130,7 @@
+      WCSZ_ = 311
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define HOUR 260
+@@ -186,8 +199,8 @@
+ #define FITSPTR (FR->findFits(1))
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+@@ -226,16 +239,23 @@
+ # define YYERROR_VERBOSE 0
+ #endif
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++/* Enabling the token table.  */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
++#endif
++
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 40 "xyparser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 191 of yacc.c.  */
+-#line 239 "xyparser.C"
++}
++/* Line 193 of yacc.c.  */
++#line 258 "xyparser.C"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -246,56 +266,171 @@
+ /* Copy the second part of user declarations.  */
+ 
+ 
+-/* Line 214 of yacc.c.  */
+-#line 251 "xyparser.C"
++/* Line 216 of yacc.c.  */
++#line 271 "xyparser.C"
+ 
+-#if ! defined (yyoverflow) || YYERROR_VERBOSE
++#ifdef short
++# undef short
++#endif
++
++#ifdef YYTYPE_UINT8
++typedef YYTYPE_UINT8 yytype_uint8;
++#else
++typedef unsigned char yytype_uint8;
++#endif
+ 
+-# ifndef YYFREE
+-#  define YYFREE free
++#ifdef YYTYPE_INT8
++typedef YYTYPE_INT8 yytype_int8;
++#elif (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++typedef signed char yytype_int8;
++#else
++typedef short int yytype_int8;
++#endif
++
++#ifdef YYTYPE_UINT16
++typedef YYTYPE_UINT16 yytype_uint16;
++#else
++typedef unsigned short int yytype_uint16;
++#endif
++
++#ifdef YYTYPE_INT16
++typedef YYTYPE_INT16 yytype_int16;
++#else
++typedef short int yytype_int16;
++#endif
++
++#ifndef YYSIZE_T
++# ifdef __SIZE_TYPE__
++#  define YYSIZE_T __SIZE_TYPE__
++# elif defined size_t
++#  define YYSIZE_T size_t
++# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
++#  define YYSIZE_T size_t
++# else
++#  define YYSIZE_T unsigned int
+ # endif
+-# ifndef YYMALLOC
+-#  define YYMALLOC malloc
++#endif
++
++#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
++
++#ifndef YY_
++# if YYENABLE_NLS
++#  if ENABLE_NLS
++#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
++#   define YY_(msgid) dgettext ("bison-runtime", msgid)
++#  endif
++# endif
++# ifndef YY_
++#  define YY_(msgid) msgid
+ # endif
++#endif
++
++/* Suppress unused-variable warnings by "using" E.  */
++#if ! defined lint || defined __GNUC__
++# define YYUSE(e) ((void) (e))
++#else
++# define YYUSE(e) /* empty */
++#endif
++
++/* Identity function, used to suppress warnings about constant conditions.  */
++#ifndef lint
++# define YYID(n) (n)
++#else
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static int
++YYID (int i)
++#else
++static int
++YYID (i)
++    int i;
++#endif
++{
++  return i;
++}
++#endif
++
++#if ! defined yyoverflow || YYERROR_VERBOSE
+ 
+ /* The parser invokes alloca or malloc; define the necessary symbols.  */
+ 
+ # ifdef YYSTACK_USE_ALLOCA
+ #  if YYSTACK_USE_ALLOCA
+-#   define YYSTACK_ALLOC alloca
+-#  endif
+-# else
+-#  if defined (alloca) || defined (_ALLOCA_H)
+-#   define YYSTACK_ALLOC alloca
+-#  else
+ #   ifdef __GNUC__
+ #    define YYSTACK_ALLOC __builtin_alloca
++#   elif defined __BUILTIN_VA_ARG_INCR
++#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
++#   elif defined _AIX
++#    define YYSTACK_ALLOC __alloca
++#   elif defined _MSC_VER
++#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
++#    define alloca _alloca
++#   else
++#    define YYSTACK_ALLOC alloca
++#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#     ifndef _STDLIB_H
++#      define _STDLIB_H 1
++#     endif
++#    endif
+ #   endif
+ #  endif
+ # endif
+ 
+ # ifdef YYSTACK_ALLOC
+-   /* Pacify GCC's `empty if-body' warning. */
+-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+-# else
+-#  if defined (__STDC__) || defined (__cplusplus)
+-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   define YYSIZE_T size_t
++   /* Pacify GCC's `empty if-body' warning.  */
++#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++    /* The OS might guarantee only one guard page at the bottom of the stack,
++       and a page size can be as small as 4096 bytes.  So we cannot safely
++       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
++       to allow for a few compiler-allocated temporary stack slots.  */
++#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+ #  endif
++# else
+ #  define YYSTACK_ALLOC YYMALLOC
+ #  define YYSTACK_FREE YYFREE
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
++#  endif
++#  if (defined __cplusplus && ! defined _STDLIB_H \
++       && ! ((defined YYMALLOC || defined malloc) \
++	     && (defined YYFREE || defined free)))
++#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#   ifndef _STDLIB_H
++#    define _STDLIB_H 1
++#   endif
++#  endif
++#  ifndef YYMALLOC
++#   define YYMALLOC malloc
++#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
++#  ifndef YYFREE
++#   define YYFREE free
++#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void free (void *); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
+ # endif
+-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
++#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+ 
+ 
+-#if (! defined (yyoverflow) \
+-     && (! defined (__cplusplus) \
+-	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
++#if (! defined yyoverflow \
++     && (! defined __cplusplus \
++	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ 
+ /* A type that is properly aligned for any stack member.  */
+ union yyalloc
+ {
+-  short yyss;
++  yytype_int16 yyss;
+   YYSTYPE yyvs;
+   };
+ 
+@@ -305,24 +440,24 @@
+ /* The size of an array large to enough to hold all stacks, each with
+    N elements.  */
+ # define YYSTACK_BYTES(N) \
+-     ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
++     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+ 
+ /* Copy COUNT objects from FROM to TO.  The source and destination do
+    not overlap.  */
+ # ifndef YYCOPY
+-#  if defined (__GNUC__) && 1 < __GNUC__
++#  if defined __GNUC__ && 1 < __GNUC__
+ #   define YYCOPY(To, From, Count) \
+       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+ #  else
+ #   define YYCOPY(To, From, Count)		\
+       do					\
+ 	{					\
+-	  register YYSIZE_T yyi;		\
++	  YYSIZE_T yyi;				\
+ 	  for (yyi = 0; yyi < (Count); yyi++)	\
+ 	    (To)[yyi] = (From)[yyi];		\
+ 	}					\
+-      while (0)
++      while (YYID (0))
+ #  endif
+ # endif
+ 
+@@ -340,39 +475,33 @@
+ 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ 	yyptr += yynewbytes / sizeof (*yyptr);				\
+       }									\
+-    while (0)
++    while (YYID (0))
+ 
+ #endif
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-   typedef signed char yysigned_char;
+-#else
+-   typedef short yysigned_char;
+-#endif
+-
+-/* YYFINAL -- State number of the termination state. */
++/* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  3
+ /* YYLAST -- Last index in YYTABLE.  */
+ #define YYLAST   138
+ 
+-/* YYNTOKENS -- Number of terminals. */
++/* YYNTOKENS -- Number of terminals.  */
+ #define YYNTOKENS  60
+-/* YYNNTS -- Number of nonterminals. */
++/* YYNNTS -- Number of nonterminals.  */
+ #define YYNNTS  20
+-/* YYNRULES -- Number of rules. */
++/* YYNRULES -- Number of rules.  */
+ #define YYNRULES  75
+-/* YYNRULES -- Number of states. */
++/* YYNRULES -- Number of states.  */
+ #define YYNSTATES  96
+ 
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   311
+ 
+-#define YYTRANSLATE(YYX) 						\
++#define YYTRANSLATE(YYX)						\
+   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ 
+ /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+-static const unsigned char yytranslate[] =
++static const yytype_uint8 yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       57,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+@@ -411,7 +540,7 @@
+ #if YYDEBUG
+ /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+    YYRHS.  */
+-static const unsigned char yyprhs[] =
++static const yytype_uint8 yyprhs[] =
+ {
+        0,     0,     3,     4,     7,    11,    14,    15,    18,    20,
+       22,    25,    26,    30,    31,    33,    36,    38,    40,    42,
+@@ -423,8 +552,8 @@
+      161,   163,   165,   167,   169,   171
+ };
+ 
+-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+-static const yysigned_char yyrhs[] =
++/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
++static const yytype_int8 yyrhs[] =
+ {
+       61,     0,    -1,    -1,    62,    63,    -1,    63,    64,    69,
+       -1,    64,    69,    -1,    -1,    16,    71,    -1,    29,    -1,
+@@ -447,7 +576,7 @@
+ };
+ 
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+-static const unsigned short yyrline[] =
++static const yytype_uint16 yyrline[] =
+ {
+        0,   115,   115,   115,   121,   122,   125,   126,   127,   128,
+      129,   131,   131,   134,   135,   138,   139,   142,   145,   146,
+@@ -460,9 +589,9 @@
+ };
+ #endif
+ 
+-#if YYDEBUG || YYERROR_VERBOSE
+-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
++/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
++   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+ {
+   "$end", "error", "$undefined", "INT", "REAL", "HOUR", "MINUTE",
+@@ -482,7 +611,7 @@
+ # ifdef YYPRINT
+ /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+    token YYLEX-NUM.  */
+-static const unsigned short yytoknum[] =
++static const yytype_uint16 yytoknum[] =
+ {
+        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+@@ -494,7 +623,7 @@
+ # endif
+ 
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+-static const unsigned char yyr1[] =
++static const yytype_uint8 yyr1[] =
+ {
+        0,    60,    62,    61,    63,    63,    64,    64,    64,    64,
+       64,    65,    64,    66,    66,    67,    67,    68,    69,    69,
+@@ -507,7 +636,7 @@
+ };
+ 
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+-static const unsigned char yyr2[] =
++static const yytype_uint8 yyr2[] =
+ {
+        0,     2,     0,     2,     3,     2,     0,     2,     1,     1,
+        2,     0,     3,     0,     1,     2,     1,     1,     1,     1,
+@@ -522,7 +651,7 @@
+ /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+-static const unsigned char yydefact[] =
++static const yytype_uint8 yydefact[] =
+ {
+        2,     0,    11,     1,    39,    38,     0,    40,    35,    36,
+       37,     8,    41,    42,    43,    44,    45,    46,    47,    48,
+@@ -536,8 +665,8 @@
+        0,     0,     0,     0,    32,    30
+ };
+ 
+-/* YYDEFGOTO[NTERM-NUM]. */
+-static const yysigned_char yydefgoto[] =
++/* YYDEFGOTO[NTERM-NUM].  */
++static const yytype_int8 yydefgoto[] =
+ {
+       -1,     1,     2,    39,    40,    41,    76,    77,    78,    50,
+       79,    45,    72,    57,    58,    87,    86,    42,    67,    59
+@@ -546,7 +675,7 @@
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+    STATE-NUM.  */
+ #define YYPACT_NINF -46
+-static const yysigned_char yypact[] =
++static const yytype_int8 yypact[] =
+ {
+      -46,     4,    47,   -46,   -46,   -46,   -24,   -46,   -46,   -46,
+      -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,
+@@ -561,7 +690,7 @@
+ };
+ 
+ /* YYPGOTO[NTERM-NUM].  */
+-static const yysigned_char yypgoto[] =
++static const yytype_int8 yypgoto[] =
+ {
+      -46,   -46,   -46,   -46,    73,   -46,   -46,   -46,    36,    69,
+       33,   -46,    51,    42,   -46,   -46,   -46,   -46,   -46,   -46
+@@ -572,7 +701,7 @@
+    number is the opposite.  If zero, do what YYDEFACT says.
+    If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -7
+-static const yysigned_char yytable[] =
++static const yytype_int8 yytable[] =
+ {
+       -3,    60,    43,    44,     3,    61,    62,    63,    64,    65,
+       69,    66,    -6,     4,    71,     5,     6,     7,    75,    52,
+@@ -590,7 +719,7 @@
+        0,     0,     0,     0,     0,     0,     0,    88,    89
+ };
+ 
+-static const yysigned_char yycheck[] =
++static const yytype_int8 yycheck[] =
+ {
+        0,    14,    26,    27,     0,    18,    19,    20,    21,    22,
+        9,    24,    12,    13,    59,    15,    16,    17,     3,     4,
+@@ -610,7 +739,7 @@
+ 
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+    symbol of state STATE-NUM.  */
+-static const unsigned char yystos[] =
++static const yytype_uint8 yystos[] =
+ {
+        0,    61,    62,     0,    13,    15,    16,    17,    23,    25,
+       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+@@ -624,22 +753,6 @@
+        3,     3,     9,     9,    10,    10
+ };
+ 
+-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+-# define YYSIZE_T __SIZE_TYPE__
+-#endif
+-#if ! defined (YYSIZE_T) && defined (size_t)
+-# define YYSIZE_T size_t
+-#endif
+-#if ! defined (YYSIZE_T)
+-# if defined (__STDC__) || defined (__cplusplus)
+-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+-#  define YYSIZE_T size_t
+-# endif
+-#endif
+-#if ! defined (YYSIZE_T)
+-# define YYSIZE_T unsigned int
+-#endif
+-
+ #define yyerrok		(yyerrstatus = 0)
+ #define yyclearin	(yychar = YYEMPTY)
+ #define YYEMPTY		(-2)
+@@ -665,30 +778,63 @@
+       yychar = (Token);						\
+       yylval = (Value);						\
+       yytoken = YYTRANSLATE (yychar);				\
+-      YYPOPSTACK;						\
++      YYPOPSTACK (1);						\
+       goto yybackup;						\
+     }								\
+   else								\
+-    { 								\
+-      yyerror ("syntax error: cannot back up");\
++    {								\
++      yyerror (YY_("syntax error: cannot back up")); \
+       YYERROR;							\
+     }								\
+-while (0)
++while (YYID (0))
++
+ 
+ #define YYTERROR	1
+ #define YYERRCODE	256
+ 
+-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+-   are run).  */
+ 
++/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
++   If N is 0, then set CURRENT to the empty location which ends
++   the previous symbol: RHS[0] (always defined).  */
++
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)		\
+-   ((Current).first_line   = (Rhs)[1].first_line,	\
+-    (Current).first_column = (Rhs)[1].first_column,	\
+-    (Current).last_line    = (Rhs)[N].last_line,	\
+-    (Current).last_column  = (Rhs)[N].last_column)
++# define YYLLOC_DEFAULT(Current, Rhs, N)				\
++    do									\
++      if (YYID (N))                                                    \
++	{								\
++	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
++	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
++	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
++	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
++	}								\
++      else								\
++	{								\
++	  (Current).first_line   = (Current).last_line   =		\
++	    YYRHSLOC (Rhs, 0).last_line;				\
++	  (Current).first_column = (Current).last_column =		\
++	    YYRHSLOC (Rhs, 0).last_column;				\
++	}								\
++    while (YYID (0))
++#endif
++
++
++/* YY_LOCATION_PRINT -- Print the location on the stream.
++   This macro was not mandated originally: define only if we know
++   we won't break user code: when these are the locations we know.  */
++
++#ifndef YY_LOCATION_PRINT
++# if YYLTYPE_IS_TRIVIAL
++#  define YY_LOCATION_PRINT(File, Loc)			\
++     fprintf (File, "%d.%d-%d.%d",			\
++	      (Loc).first_line, (Loc).first_column,	\
++	      (Loc).last_line,  (Loc).last_column)
++# else
++#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# endif
+ #endif
+ 
++
+ /* YYLEX -- calling `yylex' with the right arguments.  */
+ 
+ #ifdef YYLEX_PARAM
+@@ -709,42 +855,96 @@
+ do {						\
+   if (yydebug)					\
+     YYFPRINTF Args;				\
+-} while (0)
++} while (YYID (0))
+ 
+-# define YYDSYMPRINT(Args)			\
+-do {						\
+-  if (yydebug)					\
+-    yysymprint Args;				\
+-} while (0)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
++do {									  \
++  if (yydebug)								  \
++    {									  \
++      YYFPRINTF (stderr, "%s ", Title);					  \
++      yy_symbol_print (stderr,						  \
++		  Type, Value); \
++      YYFPRINTF (stderr, "\n");						  \
++    }									  \
++} while (YYID (0))
+ 
+-# define YYDSYMPRINTF(Title, Token, Value, Location)		\
+-do {								\
+-  if (yydebug)							\
+-    {								\
+-      YYFPRINTF (stderr, "%s ", Title);				\
+-      yysymprint (stderr, 					\
+-                  Token, Value);	\
+-      YYFPRINTF (stderr, "\n");					\
+-    }								\
+-} while (0)
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_value_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (!yyvaluep)
++    return;
++# ifdef YYPRINT
++  if (yytype < YYNTOKENS)
++    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++# else
++  YYUSE (yyoutput);
++# endif
++  switch (yytype)
++    {
++      default:
++	break;
++    }
++}
++
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (yytype < YYNTOKENS)
++    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
++  else
++    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++
++  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
++  YYFPRINTF (yyoutput, ")");
++}
+ 
+ /*------------------------------------------------------------------.
+ | yy_stack_print -- Print the state stack from its BOTTOM up to its |
+ | TOP (included).                                                   |
+ `------------------------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_stack_print (short *bottom, short *top)
++yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+ #else
+ static void
+ yy_stack_print (bottom, top)
+-    short *bottom;
+-    short *top;
++    yytype_int16 *bottom;
++    yytype_int16 *top;
+ #endif
+ {
+   YYFPRINTF (stderr, "Stack now");
+-  for (/* Nothing. */; bottom <= top; ++bottom)
++  for (; bottom <= top; ++bottom)
+     YYFPRINTF (stderr, " %d", *bottom);
+   YYFPRINTF (stderr, "\n");
+ }
+@@ -753,45 +953,52 @@
+ do {								\
+   if (yydebug)							\
+     yy_stack_print ((Bottom), (Top));				\
+-} while (0)
++} while (YYID (0))
+ 
+ 
+ /*------------------------------------------------.
+ | Report that the YYRULE is going to be reduced.  |
+ `------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_reduce_print (int yyrule)
++yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+ #else
+ static void
+-yy_reduce_print (yyrule)
++yy_reduce_print (yyvsp, yyrule)
++    YYSTYPE *yyvsp;
+     int yyrule;
+ #endif
+ {
++  int yynrhs = yyr2[yyrule];
+   int yyi;
+-  unsigned int yylno = yyrline[yyrule];
+-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+-             yyrule - 1, yylno);
+-  /* Print the symbols being reduced, and their result.  */
+-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
++  unsigned long int yylno = yyrline[yyrule];
++  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
++	     yyrule - 1, yylno);
++  /* The symbols being reduced.  */
++  for (yyi = 0; yyi < yynrhs; yyi++)
++    {
++      fprintf (stderr, "   $%d = ", yyi + 1);
++      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
++		       &(yyvsp[(yyi + 1) - (yynrhs)])
++		       		       );
++      fprintf (stderr, "\n");
++    }
+ }
+ 
+ # define YY_REDUCE_PRINT(Rule)		\
+ do {					\
+   if (yydebug)				\
+-    yy_reduce_print (Rule);		\
+-} while (0)
++    yy_reduce_print (yyvsp, Rule); \
++} while (YYID (0))
+ 
+ /* Nonzero means print parse trace.  It is left uninitialized so that
+    multiple parsers can coexist.  */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
+-# define YYDSYMPRINT(Args)
+-# define YYDSYMPRINTF(Title, Token, Value, Location)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+ # define YY_STACK_PRINT(Bottom, Top)
+ # define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
+@@ -806,13 +1013,9 @@
+    if the built-in stack extension method is used).
+ 
+    Do not make this value too large; the results are undefined if
+-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
++   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+    evaluated with infinite-precision integer arithmetic.  */
+ 
+-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
+-# undef YYMAXDEPTH
+-#endif
+-
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
+@@ -822,45 +1025,47 @@
+ #if YYERROR_VERBOSE
+ 
+ # ifndef yystrlen
+-#  if defined (__GLIBC__) && defined (_STRING_H)
++#  if defined __GLIBC__ && defined _STRING_H
+ #   define yystrlen strlen
+ #  else
+ /* Return the length of YYSTR.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static YYSIZE_T
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystrlen (const char *yystr)
+-#   else
++#else
++static YYSIZE_T
+ yystrlen (yystr)
+-     const char *yystr;
+-#   endif
++    const char *yystr;
++#endif
+ {
+-  register const char *yys = yystr;
+-
+-  while (*yys++ != '\0')
++  YYSIZE_T yylen;
++  for (yylen = 0; yystr[yylen]; yylen++)
+     continue;
+-
+-  return yys - yystr - 1;
++  return yylen;
+ }
+ #  endif
+ # endif
+ 
+ # ifndef yystpcpy
+-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
++#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+ #   define yystpcpy stpcpy
+ #  else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+    YYDEST.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static char *
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystpcpy (char *yydest, const char *yysrc)
+-#   else
++#else
++static char *
+ yystpcpy (yydest, yysrc)
+-     char *yydest;
+-     const char *yysrc;
+-#   endif
++    char *yydest;
++    const char *yysrc;
++#endif
+ {
+-  register char *yyd = yydest;
+-  register const char *yys = yysrc;
++  char *yyd = yydest;
++  const char *yys = yysrc;
+ 
+   while ((*yyd++ = *yys++) != '\0')
+     continue;
+@@ -870,70 +1075,192 @@
+ #  endif
+ # endif
+ 
+-#endif /* !YYERROR_VERBOSE */
++# ifndef yytnamerr
++/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
++   quotes and backslashes, so that it's suitable for yyerror.  The
++   heuristic is that double-quoting is unnecessary unless the string
++   contains an apostrophe, a comma, or backslash (other than
++   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
++   null, do not copy; instead, return the length of what the result
++   would have been.  */
++static YYSIZE_T
++yytnamerr (char *yyres, const char *yystr)
++{
++  if (*yystr == '"')
++    {
++      YYSIZE_T yyn = 0;
++      char const *yyp = yystr;
+ 
+-
++      for (;;)
++	switch (*++yyp)
++	  {
++	  case '\'':
++	  case ',':
++	    goto do_not_strip_quotes;
++
++	  case '\\':
++	    if (*++yyp != '\\')
++	      goto do_not_strip_quotes;
++	    /* Fall through.  */
++	  default:
++	    if (yyres)
++	      yyres[yyn] = *yyp;
++	    yyn++;
++	    break;
++
++	  case '"':
++	    if (yyres)
++	      yyres[yyn] = '\0';
++	    return yyn;
++	  }
++    do_not_strip_quotes: ;
++    }
+ 
+-#if YYDEBUG
+-/*--------------------------------.
+-| Print this symbol on YYOUTPUT.  |
+-`--------------------------------*/
++  if (! yyres)
++    return yystrlen (yystr);
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-static void
+-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+-#else
+-static void
+-yysymprint (yyoutput, yytype, yyvaluep)
+-    FILE *yyoutput;
+-    int yytype;
+-    YYSTYPE *yyvaluep;
+-#endif
++  return yystpcpy (yyres, yystr) - yyres;
++}
++# endif
++
++/* Copy into YYRESULT an error message about the unexpected token
++   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
++   including the terminating null byte.  If YYRESULT is null, do not
++   copy anything; just return the number of bytes that would be
++   copied.  As a special case, return 0 if an ordinary "syntax error"
++   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
++   size calculation.  */
++static YYSIZE_T
++yysyntax_error (char *yyresult, int yystate, int yychar)
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  int yyn = yypact[yystate];
+ 
+-  if (yytype < YYNTOKENS)
++  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
++    return 0;
++  else
+     {
+-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+-# ifdef YYPRINT
+-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++      int yytype = YYTRANSLATE (yychar);
++      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
++      YYSIZE_T yysize = yysize0;
++      YYSIZE_T yysize1;
++      int yysize_overflow = 0;
++      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++      int yyx;
++
++# if 0
++      /* This is so xgettext sees the translatable formats that are
++	 constructed on the fly.  */
++      YY_("syntax error, unexpected %s");
++      YY_("syntax error, unexpected %s, expecting %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+ # endif
+-    }
+-  else
+-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++      char *yyfmt;
++      char const *yyf;
++      static char const yyunexpected[] = "syntax error, unexpected %s";
++      static char const yyexpecting[] = ", expecting %s";
++      static char const yyor[] = " or %s";
++      char yyformat[sizeof yyunexpected
++		    + sizeof yyexpecting - 1
++		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
++		       * (sizeof yyor - 1))];
++      char const *yyprefix = yyexpecting;
++
++      /* Start YYX at -YYN if negative to avoid negative indexes in
++	 YYCHECK.  */
++      int yyxbegin = yyn < 0 ? -yyn : 0;
++
++      /* Stay within bounds of both yycheck and yytname.  */
++      int yychecklim = YYLAST - yyn + 1;
++      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++      int yycount = 1;
++
++      yyarg[0] = yytname[yytype];
++      yyfmt = yystpcpy (yyformat, yyunexpected);
++
++      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++	  {
++	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++	      {
++		yycount = 1;
++		yysize = yysize0;
++		yyformat[sizeof yyunexpected - 1] = '\0';
++		break;
++	      }
++	    yyarg[yycount++] = yytname[yyx];
++	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++	    yysize_overflow |= (yysize1 < yysize);
++	    yysize = yysize1;
++	    yyfmt = yystpcpy (yyfmt, yyprefix);
++	    yyprefix = yyor;
++	  }
++
++      yyf = YY_(yyformat);
++      yysize1 = yysize + yystrlen (yyf);
++      yysize_overflow |= (yysize1 < yysize);
++      yysize = yysize1;
+ 
+-  switch (yytype)
+-    {
+-      default:
+-        break;
++      if (yysize_overflow)
++	return YYSIZE_MAXIMUM;
++
++      if (yyresult)
++	{
++	  /* Avoid sprintf, as that infringes on the user's name space.
++	     Don't have undefined behavior even if the translation
++	     produced a string with the wrong number of "%s"s.  */
++	  char *yyp = yyresult;
++	  int yyi = 0;
++	  while ((*yyp = *yyf) != '\0')
++	    {
++	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
++		{
++		  yyp += yytnamerr (yyp, yyarg[yyi++]);
++		  yyf += 2;
++		}
++	      else
++		{
++		  yyp++;
++		  yyf++;
++		}
++	    }
++	}
++      return yysize;
+     }
+-  YYFPRINTF (yyoutput, ")");
+ }
++#endif /* YYERROR_VERBOSE */
++
+ 
+-#endif /* ! YYDEBUG */
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+ `-----------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yydestruct (int yytype, YYSTYPE *yyvaluep)
++yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+ #else
+ static void
+-yydestruct (yytype, yyvaluep)
++yydestruct (yymsg, yytype, yyvaluep)
++    const char *yymsg;
+     int yytype;
+     YYSTYPE *yyvaluep;
+ #endif
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  YYUSE (yyvaluep);
++
++  if (!yymsg)
++    yymsg = "Deleting";
++  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ 
+   switch (yytype)
+     {
+ 
+       default:
+-        break;
++	break;
+     }
+ }
+ 
+@@ -941,13 +1268,13 @@
+ /* Prevent warnings from -Wmissing-prototypes.  */
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void *YYPARSE_PARAM);
+-# else
++#else
+ int yyparse ();
+-# endif
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void);
+ #else
+ int yyparse ();
+@@ -956,10 +1283,10 @@
+ 
+ 
+ 
+-/* The lookahead symbol.  */
++/* The look-ahead symbol.  */
+ int yychar;
+ 
+-/* The semantic value of the lookahead symbol.  */
++/* The semantic value of the look-ahead symbol.  */
+ YYSTYPE yylval;
+ 
+ /* Number of syntax errors so far.  */
+@@ -972,14 +1299,18 @@
+ `----------*/
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
+-int yyparse (void *YYPARSE_PARAM)
+-# else
+-int yyparse (YYPARSE_PARAM)
+-  void *YYPARSE_PARAM;
+-# endif
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++int
++yyparse (void *YYPARSE_PARAM)
++#else
++int
++yyparse (YYPARSE_PARAM)
++    void *YYPARSE_PARAM;
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ int
+ yyparse (void)
+ #else
+@@ -990,13 +1321,19 @@
+ #endif
+ {
+   
+-  register int yystate;
+-  register int yyn;
++  int yystate;
++  int yyn;
+   int yyresult;
+   /* Number of tokens to shift before error messages enabled.  */
+   int yyerrstatus;
+-  /* Lookahead token as an internal (translated) token number.  */
++  /* Look-ahead token as an internal (translated) token number.  */
+   int yytoken = 0;
++#if YYERROR_VERBOSE
++  /* Buffer for error messages, and its allocated size.  */
++  char yymsgbuf[128];
++  char *yymsg = yymsgbuf;
++  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
++#endif
+ 
+   /* Three stacks and their tools:
+      `yyss': related to states,
+@@ -1007,18 +1344,18 @@
+      to reallocate them elsewhere.  */
+ 
+   /* The state stack.  */
+-  short	yyssa[YYINITDEPTH];
+-  short *yyss = yyssa;
+-  register short *yyssp;
++  yytype_int16 yyssa[YYINITDEPTH];
++  yytype_int16 *yyss = yyssa;
++  yytype_int16 *yyssp;
+ 
+   /* The semantic value stack.  */
+   YYSTYPE yyvsa[YYINITDEPTH];
+   YYSTYPE *yyvs = yyvsa;
+-  register YYSTYPE *yyvsp;
++  YYSTYPE *yyvsp;
+ 
+ 
+ 
+-#define YYPOPSTACK   (yyvsp--, yyssp--)
++#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+ 
+   YYSIZE_T yystacksize = YYINITDEPTH;
+ 
+@@ -1027,9 +1364,9 @@
+   YYSTYPE yyval;
+ 
+ 
+-  /* When reducing, the number of symbols on the RHS of the reduced
+-     rule.  */
+-  int yylen;
++  /* The number of symbols on the RHS of the reduced rule.
++     Keep to zero when no symbol should be popped.  */
++  int yylen = 0;
+ 
+   YYDPRINTF ((stderr, "Starting parse\n"));
+ 
+@@ -1053,8 +1390,7 @@
+ `------------------------------------------------------------*/
+  yynewstate:
+   /* In all cases, when you get here, the value and location stacks
+-     have just been pushed. so pushing a state here evens the stacks.
+-     */
++     have just been pushed.  So pushing a state here evens the stacks.  */
+   yyssp++;
+ 
+  yysetstate:
+@@ -1067,18 +1403,18 @@
+ 
+ #ifdef yyoverflow
+       {
+-	/* Give user a chance to reallocate the stack. Use copies of
++	/* Give user a chance to reallocate the stack.  Use copies of
+ 	   these so that the &'s don't force the real ones into
+ 	   memory.  */
+ 	YYSTYPE *yyvs1 = yyvs;
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 
+ 
+ 	/* Each stack pointer address is followed by the size of the
+ 	   data in use in that stack, in bytes.  This used to be a
+ 	   conditional around just the two extra args, but that might
+ 	   be undefined if yyoverflow is a macro.  */
+-	yyoverflow ("parser stack overflow",
++	yyoverflow (YY_("memory exhausted"),
+ 		    &yyss1, yysize * sizeof (*yyssp),
+ 		    &yyvs1, yysize * sizeof (*yyvsp),
+ 
+@@ -1089,21 +1425,21 @@
+       }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+-      goto yyoverflowlab;
++      goto yyexhaustedlab;
+ # else
+       /* Extend the stack our own way.  */
+       if (YYMAXDEPTH <= yystacksize)
+-	goto yyoverflowlab;
++	goto yyexhaustedlab;
+       yystacksize *= 2;
+       if (YYMAXDEPTH < yystacksize)
+ 	yystacksize = YYMAXDEPTH;
+ 
+       {
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 	union yyalloc *yyptr =
+ 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ 	if (! yyptr)
+-	  goto yyoverflowlab;
++	  goto yyexhaustedlab;
+ 	YYSTACK_RELOCATE (yyss);
+ 	YYSTACK_RELOCATE (yyvs);
+ 
+@@ -1134,19 +1470,17 @@
+ `-----------*/
+ yybackup:
+ 
+-/* Do appropriate processing given the current state.  */
+-/* Read a lookahead token if we need one and don't already have one.  */
+-/* yyresume: */
+-
+-  /* First try to decide what to do without reference to lookahead token.  */
++  /* Do appropriate processing given the current state.  Read a
++     look-ahead token if we need one and don't already have one.  */
+ 
++  /* First try to decide what to do without reference to look-ahead token.  */
+   yyn = yypact[yystate];
+   if (yyn == YYPACT_NINF)
+     goto yydefault;
+ 
+-  /* Not known => get a lookahead token if don't already have one.  */
++  /* Not known => get a look-ahead token if don't already have one.  */
+ 
+-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
++  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+   if (yychar == YYEMPTY)
+     {
+       YYDPRINTF ((stderr, "Reading a token: "));
+@@ -1161,7 +1495,7 @@
+   else
+     {
+       yytoken = YYTRANSLATE (yychar);
+-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
++      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+     }
+ 
+   /* If the proper action on seeing token YYTOKEN is to reduce or to
+@@ -1181,22 +1515,21 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  /* Shift the lookahead token.  */
+-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+-
+-  /* Discard the token being shifted unless it is eof.  */
+-  if (yychar != YYEOF)
+-    yychar = YYEMPTY;
+-
+-  *++yyvsp = yylval;
+-
+-
+   /* Count tokens shifted since error; after three, turn off error
+      status.  */
+   if (yyerrstatus)
+     yyerrstatus--;
+ 
++  /* Shift the look-ahead token.  */
++  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
++
++  /* Discard the shifted token unless it is eof.  */
++  if (yychar != YYEOF)
++    yychar = YYEMPTY;
++
+   yystate = yyn;
++  *++yyvsp = yylval;
++
+   goto yynewstate;
+ 
+ 
+@@ -1246,12 +1579,12 @@
+ 
+   case 9:
+ #line 128 "xyparser.Y"
+-    {globalSystem = (CoordSystem)yyvsp[0].integer;;}
++    {globalSystem = (CoordSystem)(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 10:
+ #line 130 "xyparser.Y"
+-    {globalSystem = (CoordSystem)yyvsp[-1].integer; globalSky = (SkyFrame)yyvsp[0].integer;;}
++    {globalSystem = (CoordSystem)(yyvsp[(1) - (2)].integer); globalSky = (SkyFrame)(yyvsp[(2) - (2)].integer);;}
+     break;
+ 
+   case 11:
+@@ -1271,12 +1604,12 @@
+ 
+   case 21:
+ #line 150 "xyparser.Y"
+-    {yyval.real=yyvsp[0].real;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 22:
+ #line 151 "xyparser.Y"
+-    {yyval.real=yyvsp[0].integer;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 23:
+@@ -1291,7 +1624,7 @@
+ 
+   case 27:
+ #line 162 "xyparser.Y"
+-    {yyval.real = parseDMS(yyvsp[0].str);;}
++    {(yyval.real) = parseDMS((yyvsp[(1) - (1)].str));;}
+     break;
+ 
+   case 28:
+@@ -1299,13 +1632,13 @@
+     {
+ 	  Vector r;
+ 	  if (localSky == GALACTIC || localSky == ECLIPTIC) 
+-	    r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real),localSystem,localSky);
++	    r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),localSystem,localSky);
+ 	  else
+-	    r = FITSPTR->mapToRef(Vector(yyvsp[-2].real*360./24.,yyvsp[0].real),localSystem,localSky);
++	    r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real)*360./24.,(yyvsp[(3) - (3)].real)),localSystem,localSky);
+ 
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -1318,12 +1651,12 @@
+ #line 178 "xyparser.Y"
+     {
+ 	  Vector r = FITSPTR->mapToRef(
+-	    Vector(hmsToDegree(xysign2,yyvsp[-7].integer,yyvsp[-6].integer,yyvsp[-5].real), 
+-	    dmsToDegree(xysign,yyvsp[-2].integer,yyvsp[-1].real,yyvsp[0].real)),
++	    Vector(hmsToDegree(xysign2,(yyvsp[(1) - (8)].integer),(yyvsp[(2) - (8)].integer),(yyvsp[(3) - (8)].real)), 
++	    dmsToDegree(xysign,(yyvsp[(6) - (8)].integer),(yyvsp[(7) - (8)].real),(yyvsp[(8) - (8)].real))),
+ 	    localSystem, localSky);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -1336,238 +1669,238 @@
+ #line 189 "xyparser.Y"
+     {
+ 	  Vector r = FITSPTR->mapToRef(
+-	    Vector(dmsToDegree(xysign2,yyvsp[-7].integer,yyvsp[-6].real,yyvsp[-5].real),
+-	    dmsToDegree(xysign,yyvsp[-2].integer,yyvsp[-1].real,yyvsp[0].real)),
++	    Vector(dmsToDegree(xysign2,(yyvsp[(1) - (8)].integer),(yyvsp[(2) - (8)].real),(yyvsp[(3) - (8)].real)),
++	    dmsToDegree(xysign,(yyvsp[(6) - (8)].integer),(yyvsp[(7) - (8)].real),(yyvsp[(8) - (8)].real))),
+ 	    localSystem, localSky);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 33:
+ #line 199 "xyparser.Y"
+     {
+-	  Vector r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real),localSystem,localSky);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),localSystem,localSky);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 34:
+ #line 206 "xyparser.Y"
+     {
+-	  Vector r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real),localSystem,localSky);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)),localSystem,localSky);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 35:
+ #line 214 "xyparser.Y"
+-    {yyval.integer = IMAGE;;}
++    {(yyval.integer) = IMAGE;;}
+     break;
+ 
+   case 36:
+ #line 215 "xyparser.Y"
+-    {yyval.integer = IMAGE;;}
++    {(yyval.integer) = IMAGE;;}
+     break;
+ 
+   case 37:
+ #line 216 "xyparser.Y"
+-    {yyval.integer = PHYSICAL;;}
++    {(yyval.integer) = PHYSICAL;;}
+     break;
+ 
+   case 38:
+ #line 217 "xyparser.Y"
+-    {yyval.integer = PHYSICAL;;}
++    {(yyval.integer) = PHYSICAL;;}
+     break;
+ 
+   case 39:
+ #line 218 "xyparser.Y"
+-    {yyval.integer = AMPLIFIER;;}
++    {(yyval.integer) = AMPLIFIER;;}
+     break;
+ 
+   case 40:
+ #line 219 "xyparser.Y"
+-    {yyval.integer = DETECTOR;;}
++    {(yyval.integer) = DETECTOR;;}
+     break;
+ 
+   case 41:
+ #line 220 "xyparser.Y"
+-    {yyval.integer = WCS;;}
++    {(yyval.integer) = WCS;;}
+     break;
+ 
+   case 42:
+ #line 221 "xyparser.Y"
+-    {yyval.integer = WCSA;;}
++    {(yyval.integer) = WCSA;;}
+     break;
+ 
+   case 43:
+ #line 222 "xyparser.Y"
+-    {yyval.integer = WCSB;;}
++    {(yyval.integer) = WCSB;;}
+     break;
+ 
+   case 44:
+ #line 223 "xyparser.Y"
+-    {yyval.integer = WCSC;;}
++    {(yyval.integer) = WCSC;;}
+     break;
+ 
+   case 45:
+ #line 224 "xyparser.Y"
+-    {yyval.integer = WCSD;;}
++    {(yyval.integer) = WCSD;;}
+     break;
+ 
+   case 46:
+ #line 225 "xyparser.Y"
+-    {yyval.integer = WCSE;;}
++    {(yyval.integer) = WCSE;;}
+     break;
+ 
+   case 47:
+ #line 226 "xyparser.Y"
+-    {yyval.integer = WCSF;;}
++    {(yyval.integer) = WCSF;;}
+     break;
+ 
+   case 48:
+ #line 227 "xyparser.Y"
+-    {yyval.integer = WCSG;;}
++    {(yyval.integer) = WCSG;;}
+     break;
+ 
+   case 49:
+ #line 228 "xyparser.Y"
+-    {yyval.integer = WCSH;;}
++    {(yyval.integer) = WCSH;;}
+     break;
+ 
+   case 50:
+ #line 229 "xyparser.Y"
+-    {yyval.integer = WCSI;;}
++    {(yyval.integer) = WCSI;;}
+     break;
+ 
+   case 51:
+ #line 230 "xyparser.Y"
+-    {yyval.integer = WCSJ;;}
++    {(yyval.integer) = WCSJ;;}
+     break;
+ 
+   case 52:
+ #line 231 "xyparser.Y"
+-    {yyval.integer = WCSK;;}
++    {(yyval.integer) = WCSK;;}
+     break;
+ 
+   case 53:
+ #line 232 "xyparser.Y"
+-    {yyval.integer = WCSL;;}
++    {(yyval.integer) = WCSL;;}
+     break;
+ 
+   case 54:
+ #line 233 "xyparser.Y"
+-    {yyval.integer = WCSM;;}
++    {(yyval.integer) = WCSM;;}
+     break;
+ 
+   case 55:
+ #line 234 "xyparser.Y"
+-    {yyval.integer = WCSN;;}
++    {(yyval.integer) = WCSN;;}
+     break;
+ 
+   case 56:
+ #line 235 "xyparser.Y"
+-    {yyval.integer = WCSO;;}
++    {(yyval.integer) = WCSO;;}
+     break;
+ 
+   case 57:
+ #line 236 "xyparser.Y"
+-    {yyval.integer = WCSP;;}
++    {(yyval.integer) = WCSP;;}
+     break;
+ 
+   case 58:
+ #line 237 "xyparser.Y"
+-    {yyval.integer = WCSQ;;}
++    {(yyval.integer) = WCSQ;;}
+     break;
+ 
+   case 59:
+ #line 238 "xyparser.Y"
+-    {yyval.integer = WCSR;;}
++    {(yyval.integer) = WCSR;;}
+     break;
+ 
+   case 60:
+ #line 239 "xyparser.Y"
+-    {yyval.integer = WCSS;;}
++    {(yyval.integer) = WCSS;;}
+     break;
+ 
+   case 61:
+ #line 240 "xyparser.Y"
+-    {yyval.integer = WCST;;}
++    {(yyval.integer) = WCST;;}
+     break;
+ 
+   case 62:
+ #line 241 "xyparser.Y"
+-    {yyval.integer = WCSU;;}
++    {(yyval.integer) = WCSU;;}
+     break;
+ 
+   case 63:
+ #line 242 "xyparser.Y"
+-    {yyval.integer = WCSV;;}
++    {(yyval.integer) = WCSV;;}
+     break;
+ 
+   case 64:
+ #line 243 "xyparser.Y"
+-    {yyval.integer = WCSW;;}
++    {(yyval.integer) = WCSW;;}
+     break;
+ 
+   case 65:
+ #line 244 "xyparser.Y"
+-    {yyval.integer = WCSX;;}
++    {(yyval.integer) = WCSX;;}
+     break;
+ 
+   case 66:
+ #line 245 "xyparser.Y"
+-    {yyval.integer = WCSY;;}
++    {(yyval.integer) = WCSY;;}
+     break;
+ 
+   case 67:
+ #line 246 "xyparser.Y"
+-    {yyval.integer = WCSZ;;}
++    {(yyval.integer) = WCSZ;;}
+     break;
+ 
+   case 68:
+ #line 249 "xyparser.Y"
+-    {yyval.integer = FK4;;}
++    {(yyval.integer) = FK4;;}
+     break;
+ 
+   case 69:
+ #line 250 "xyparser.Y"
+-    {yyval.integer = FK4;;}
++    {(yyval.integer) = FK4;;}
+     break;
+ 
+   case 70:
+ #line 251 "xyparser.Y"
+-    {yyval.integer = FK5;;}
++    {(yyval.integer) = FK5;;}
+     break;
+ 
+   case 71:
+ #line 252 "xyparser.Y"
+-    {yyval.integer = FK5;;}
++    {(yyval.integer) = FK5;;}
+     break;
+ 
+   case 72:
+ #line 253 "xyparser.Y"
+-    {yyval.integer = ICRS;;}
++    {(yyval.integer) = ICRS;;}
+     break;
+ 
+   case 73:
+ #line 254 "xyparser.Y"
+-    {yyval.integer = GALACTIC;;}
++    {(yyval.integer) = GALACTIC;;}
+     break;
+ 
+   case 74:
+ #line 255 "xyparser.Y"
+-    {yyval.integer = ECLIPTIC;;}
++    {(yyval.integer) = ECLIPTIC;;}
+     break;
+ 
+   case 75:
+ #line 258 "xyparser.Y"
+-    {FR->createBoxCirclePointCmd(Vector(yyvsp[0].vector),
++    {FR->createBoxCirclePointCmd(Vector((yyvsp[(1) - (1)].vector)),
+ 	    "green",1,"helvetica 10 normal","",
+ 	    Marker::SELECT | Marker::EDIT | Marker::MOVE | Marker::ROTATE | 
+ 	    Marker::DELETE | Marker::HIGHLITE | 
+@@ -1577,15 +1910,14 @@
+     break;
+ 
+ 
++/* Line 1267 of yacc.c.  */
++#line 1915 "xyparser.C"
++      default: break;
+     }
++  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ 
+-/* Line 1000 of yacc.c.  */
+-#line 1584 "xyparser.C"
+-
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
+-
+-
++  YYPOPSTACK (yylen);
++  yylen = 0;
+   YY_STACK_PRINT (yyss, yyssp);
+ 
+   *++yyvsp = yyval;
+@@ -1614,99 +1946,65 @@
+   if (!yyerrstatus)
+     {
+       ++yynerrs;
+-#if YYERROR_VERBOSE
+-      yyn = yypact[yystate];
+-
+-      if (YYPACT_NINF < yyn && yyn < YYLAST)
+-	{
+-	  YYSIZE_T yysize = 0;
+-	  int yytype = YYTRANSLATE (yychar);
+-	  const char* yyprefix;
+-	  char *yymsg;
+-	  int yyx;
+-
+-	  /* Start YYX at -YYN if negative to avoid negative indexes in
+-	     YYCHECK.  */
+-	  int yyxbegin = yyn < 0 ? -yyn : 0;
+-
+-	  /* Stay within bounds of both yycheck and yytname.  */
+-	  int yychecklim = YYLAST - yyn;
+-	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-	  int yycount = 0;
+-
+-	  yyprefix = ", expecting ";
+-	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++#if ! YYERROR_VERBOSE
++      yyerror (YY_("syntax error"));
++#else
++      {
++	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
++	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
++	  {
++	    YYSIZE_T yyalloc = 2 * yysize;
++	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
++	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
++	    if (yymsg != yymsgbuf)
++	      YYSTACK_FREE (yymsg);
++	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
++	    if (yymsg)
++	      yymsg_alloc = yyalloc;
++	    else
+ 	      {
+-		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+-		yycount += 1;
+-		if (yycount == 5)
+-		  {
+-		    yysize = 0;
+-		    break;
+-		  }
++		yymsg = yymsgbuf;
++		yymsg_alloc = sizeof yymsgbuf;
+ 	      }
+-	  yysize += (sizeof ("syntax error, unexpected ")
+-		     + yystrlen (yytname[yytype]));
+-	  yymsg = (char *) YYSTACK_ALLOC (yysize);
+-	  if (yymsg != 0)
+-	    {
+-	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+-	      yyp = yystpcpy (yyp, yytname[yytype]);
++	  }
+ 
+-	      if (yycount < 5)
+-		{
+-		  yyprefix = ", expecting ";
+-		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+-		      {
+-			yyp = yystpcpy (yyp, yyprefix);
+-			yyp = yystpcpy (yyp, yytname[yyx]);
+-			yyprefix = " or ";
+-		      }
+-		}
+-	      yyerror (yymsg);
+-	      YYSTACK_FREE (yymsg);
+-	    }
+-	  else
+-	    yyerror ("syntax error; also virtual memory exhausted");
+-	}
+-      else
+-#endif /* YYERROR_VERBOSE */
+-	yyerror ("syntax error");
++	if (0 < yysize && yysize <= yymsg_alloc)
++	  {
++	    (void) yysyntax_error (yymsg, yystate, yychar);
++	    yyerror (yymsg);
++	  }
++	else
++	  {
++	    yyerror (YY_("syntax error"));
++	    if (yysize != 0)
++	      goto yyexhaustedlab;
++	  }
++      }
++#endif
+     }
+ 
+ 
+ 
+   if (yyerrstatus == 3)
+     {
+-      /* If just tried and failed to reuse lookahead token after an
++      /* If just tried and failed to reuse look-ahead token after an
+ 	 error, discard it.  */
+ 
+       if (yychar <= YYEOF)
+-        {
+-          /* If at end of input, pop the error token,
+-	     then the rest of the stack, then return failure.  */
++	{
++	  /* Return failure if at end of input.  */
+ 	  if (yychar == YYEOF)
+-	     for (;;)
+-	       {
+-		 YYPOPSTACK;
+-		 if (yyssp == yyss)
+-		   YYABORT;
+-		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-		 yydestruct (yystos[*yyssp], yyvsp);
+-	       }
+-        }
++	    YYABORT;
++	}
+       else
+ 	{
+-	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+-	  yydestruct (yytoken, &yylval);
++	  yydestruct ("Error: discarding",
++		      yytoken, &yylval);
+ 	  yychar = YYEMPTY;
+-
+ 	}
+     }
+ 
+-  /* Else will try to reuse lookahead token after shifting the error
++  /* Else will try to reuse look-ahead token after shifting the error
+      token.  */
+   goto yyerrlab1;
+ 
+@@ -1716,15 +2014,17 @@
+ `---------------------------------------------------*/
+ yyerrorlab:
+ 
+-#ifdef __GNUC__
+-  /* Pacify GCC when the user code never invokes YYERROR and the label
+-     yyerrorlab therefore never appears in user code.  */
+-  if (0)
++  /* Pacify compilers like GCC when the user code never invokes
++     YYERROR and the label yyerrorlab therefore never appears in user
++     code.  */
++  if (/*CONSTCOND*/ 0)
+      goto yyerrorlab;
+-#endif
+ 
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYERROR.  */
++  YYPOPSTACK (yylen);
++  yylen = 0;
++  YY_STACK_PRINT (yyss, yyssp);
+   yystate = *yyssp;
+   goto yyerrlab1;
+ 
+@@ -1753,9 +2053,10 @@
+       if (yyssp == yyss)
+ 	YYABORT;
+ 
+-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-      yydestruct (yystos[yystate], yyvsp);
+-      YYPOPSTACK;
++
++      yydestruct ("Error: popping",
++		  yystos[yystate], yyvsp);
++      YYPOPSTACK (1);
+       yystate = *yyssp;
+       YY_STACK_PRINT (yyss, yyssp);
+     }
+@@ -1763,11 +2064,12 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  YYDPRINTF ((stderr, "Shifting error token, "));
+-
+   *++yyvsp = yylval;
+ 
+ 
++  /* Shift the error token.  */
++  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
++
+   yystate = yyn;
+   goto yynewstate;
+ 
+@@ -1787,21 +2089,39 @@
+   goto yyreturn;
+ 
+ #ifndef yyoverflow
+-/*----------------------------------------------.
+-| yyoverflowlab -- parser overflow comes here.  |
+-`----------------------------------------------*/
+-yyoverflowlab:
+-  yyerror ("parser stack overflow");
++/*-------------------------------------------------.
++| yyexhaustedlab -- memory exhaustion comes here.  |
++`-------------------------------------------------*/
++yyexhaustedlab:
++  yyerror (YY_("memory exhausted"));
+   yyresult = 2;
+   /* Fall through.  */
+ #endif
+ 
+ yyreturn:
++  if (yychar != YYEOF && yychar != YYEMPTY)
++     yydestruct ("Cleanup: discarding lookahead",
++		 yytoken, &yylval);
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYABORT or YYACCEPT.  */
++  YYPOPSTACK (yylen);
++  YY_STACK_PRINT (yyss, yyssp);
++  while (yyssp != yyss)
++    {
++      yydestruct ("Cleanup: popping",
++		  yystos[*yyssp], yyvsp);
++      YYPOPSTACK (1);
++    }
+ #ifndef yyoverflow
+   if (yyss != yyssa)
+     YYSTACK_FREE (yyss);
+ #endif
+-  return yyresult;
++#if YYERROR_VERBOSE
++  if (yymsg != yymsgbuf)
++    YYSTACK_FREE (yymsg);
++#endif
++  /* Make sure YYID is used.  */
++  return YYID (yyresult);
+ }
+ 
+ 
+--- saods9-4.0b7.orig/saotk/frame/tngparser.Y
++++ saods9-4.0b7/saotk/frame/tngparser.Y
+@@ -12,8 +12,8 @@
+ #define DISCARD_(x) {yyclearin; tngDiscard(x);}
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+--- saods9-4.0b7.orig/saotk/frame/ciaoparser.C
++++ saods9-4.0b7/saotk/frame/ciaoparser.C
+@@ -1,7 +1,9 @@
+-/* A Bison parser, made by GNU Bison 1.875c.  */
++/* A Bison parser, made by GNU Bison 2.3.  */
+ 
+-/* Skeleton parser for Yacc-like parsing with Bison,
+-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
++/* Skeleton implementation for Bison's Yacc-like parsers in C
++
++   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++   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
+@@ -15,16 +17,24 @@
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+-   Foundation, Inc., 59 Temple Place - Suite 330,
+-   Boston, MA 02111-1307, USA.  */
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++/* As a special exception, you may create a larger work that contains
++   part or all of the Bison parser skeleton and distribute that work
++   under terms of your choice, so long as that work isn't itself a
++   parser generator using the skeleton or a modified version thereof
++   as a parser skeleton.  Alternatively, if you modify or redistribute
++   the parser skeleton itself, you may (at your option) remove this
++   special exception, which will cause the skeleton and the resulting
++   Bison output files to be licensed under the GNU General Public
++   License without this special exception.
+ 
+-/* As a special exception, when this file is copied by Bison into a
+-   Bison output file, you may use that output file without restriction.
+-   This special exception was added by the Free Software Foundation
+-   in version 1.24 of Bison.  */
++   This special exception was added by the Free Software Foundation in
++   version 2.2 of Bison.  */
+ 
+-/* Written by Richard Stallman by simplifying the original so called
+-   ``semantic'' parser.  */
++/* C LALR(1) parser skeleton written by Richard Stallman, by
++   simplifying the original so-called "semantic" parser.  */
+ 
+ /* All symbols defined below should begin with yy or YY, to avoid
+    infringing on user name space.  This should be done even for local
+@@ -36,6 +46,9 @@
+ /* Identify Bison output.  */
+ #define YYBISON 1
+ 
++/* Bison version.  */
++#define YYBISON_VERSION "2.3"
++
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+ 
+@@ -45,8 +58,7 @@
+ /* Using locations.  */
+ #define YYLSP_NEEDED 0
+ 
+-/* If NAME_PREFIX is specified substitute the variables and functions
+-   names.  */
++/* Substitute the variable and function names.  */
+ #define yyparse ciaoparse
+ #define yylex   ciaolex
+ #define yyerror ciaoerror
+@@ -85,6 +97,7 @@
+      VERSION_ = 278
+    };
+ #endif
++/* Tokens.  */
+ #define INT 258
+ #define REAL 259
+ #define HOUR 260
+@@ -120,8 +133,8 @@
+ #define FITSPTR (FR->findFits(1))
+ 
+ #include <math.h>
+-#include <string.h>
+-#include <iostream.h>
++#include <string>
++#include <iostream>
+ 
+ #include "framebase.h"
+ #include "fitsimage.h"
+@@ -163,16 +176,23 @@
+ # define YYERROR_VERBOSE 0
+ #endif
+ 
+-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
++/* Enabling the token table.  */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
++#endif
++
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
+ #line 43 "ciaoparser.Y"
+-typedef union YYSTYPE {
++{
+   double real;
+   int integer;
+   char str[2048];
+   double vector[3];
+-} YYSTYPE;
+-/* Line 191 of yacc.c.  */
+-#line 176 "ciaoparser.C"
++}
++/* Line 193 of yacc.c.  */
++#line 195 "ciaoparser.C"
++	YYSTYPE;
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+@@ -183,56 +203,171 @@
+ /* Copy the second part of user declarations.  */
+ 
+ 
+-/* Line 214 of yacc.c.  */
+-#line 188 "ciaoparser.C"
++/* Line 216 of yacc.c.  */
++#line 208 "ciaoparser.C"
+ 
+-#if ! defined (yyoverflow) || YYERROR_VERBOSE
++#ifdef short
++# undef short
++#endif
++
++#ifdef YYTYPE_UINT8
++typedef YYTYPE_UINT8 yytype_uint8;
++#else
++typedef unsigned char yytype_uint8;
++#endif
+ 
+-# ifndef YYFREE
+-#  define YYFREE free
++#ifdef YYTYPE_INT8
++typedef YYTYPE_INT8 yytype_int8;
++#elif (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++typedef signed char yytype_int8;
++#else
++typedef short int yytype_int8;
++#endif
++
++#ifdef YYTYPE_UINT16
++typedef YYTYPE_UINT16 yytype_uint16;
++#else
++typedef unsigned short int yytype_uint16;
++#endif
++
++#ifdef YYTYPE_INT16
++typedef YYTYPE_INT16 yytype_int16;
++#else
++typedef short int yytype_int16;
++#endif
++
++#ifndef YYSIZE_T
++# ifdef __SIZE_TYPE__
++#  define YYSIZE_T __SIZE_TYPE__
++# elif defined size_t
++#  define YYSIZE_T size_t
++# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
++#  define YYSIZE_T size_t
++# else
++#  define YYSIZE_T unsigned int
+ # endif
+-# ifndef YYMALLOC
+-#  define YYMALLOC malloc
++#endif
++
++#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
++
++#ifndef YY_
++# if YYENABLE_NLS
++#  if ENABLE_NLS
++#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
++#   define YY_(msgid) dgettext ("bison-runtime", msgid)
++#  endif
++# endif
++# ifndef YY_
++#  define YY_(msgid) msgid
+ # endif
++#endif
++
++/* Suppress unused-variable warnings by "using" E.  */
++#if ! defined lint || defined __GNUC__
++# define YYUSE(e) ((void) (e))
++#else
++# define YYUSE(e) /* empty */
++#endif
++
++/* Identity function, used to suppress warnings about constant conditions.  */
++#ifndef lint
++# define YYID(n) (n)
++#else
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static int
++YYID (int i)
++#else
++static int
++YYID (i)
++    int i;
++#endif
++{
++  return i;
++}
++#endif
++
++#if ! defined yyoverflow || YYERROR_VERBOSE
+ 
+ /* The parser invokes alloca or malloc; define the necessary symbols.  */
+ 
+ # ifdef YYSTACK_USE_ALLOCA
+ #  if YYSTACK_USE_ALLOCA
+-#   define YYSTACK_ALLOC alloca
+-#  endif
+-# else
+-#  if defined (alloca) || defined (_ALLOCA_H)
+-#   define YYSTACK_ALLOC alloca
+-#  else
+ #   ifdef __GNUC__
+ #    define YYSTACK_ALLOC __builtin_alloca
++#   elif defined __BUILTIN_VA_ARG_INCR
++#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
++#   elif defined _AIX
++#    define YYSTACK_ALLOC __alloca
++#   elif defined _MSC_VER
++#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
++#    define alloca _alloca
++#   else
++#    define YYSTACK_ALLOC alloca
++#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#     ifndef _STDLIB_H
++#      define _STDLIB_H 1
++#     endif
++#    endif
+ #   endif
+ #  endif
+ # endif
+ 
+ # ifdef YYSTACK_ALLOC
+-   /* Pacify GCC's `empty if-body' warning. */
+-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+-# else
+-#  if defined (__STDC__) || defined (__cplusplus)
+-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   define YYSIZE_T size_t
++   /* Pacify GCC's `empty if-body' warning.  */
++#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++    /* The OS might guarantee only one guard page at the bottom of the stack,
++       and a page size can be as small as 4096 bytes.  So we cannot safely
++       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
++       to allow for a few compiler-allocated temporary stack slots.  */
++#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+ #  endif
++# else
+ #  define YYSTACK_ALLOC YYMALLOC
+ #  define YYSTACK_FREE YYFREE
++#  ifndef YYSTACK_ALLOC_MAXIMUM
++#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
++#  endif
++#  if (defined __cplusplus && ! defined _STDLIB_H \
++       && ! ((defined YYMALLOC || defined malloc) \
++	     && (defined YYFREE || defined free)))
++#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++#   ifndef _STDLIB_H
++#    define _STDLIB_H 1
++#   endif
++#  endif
++#  ifndef YYMALLOC
++#   define YYMALLOC malloc
++#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
++#  ifndef YYFREE
++#   define YYFREE free
++#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++void free (void *); /* INFRINGES ON USER NAME SPACE */
++#   endif
++#  endif
+ # endif
+-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
++#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+ 
+ 
+-#if (! defined (yyoverflow) \
+-     && (! defined (__cplusplus) \
+-	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
++#if (! defined yyoverflow \
++     && (! defined __cplusplus \
++	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ 
+ /* A type that is properly aligned for any stack member.  */
+ union yyalloc
+ {
+-  short yyss;
++  yytype_int16 yyss;
+   YYSTYPE yyvs;
+   };
+ 
+@@ -242,24 +377,24 @@
+ /* The size of an array large to enough to hold all stacks, each with
+    N elements.  */
+ # define YYSTACK_BYTES(N) \
+-     ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
++     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+ 
+ /* Copy COUNT objects from FROM to TO.  The source and destination do
+    not overlap.  */
+ # ifndef YYCOPY
+-#  if defined (__GNUC__) && 1 < __GNUC__
++#  if defined __GNUC__ && 1 < __GNUC__
+ #   define YYCOPY(To, From, Count) \
+       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+ #  else
+ #   define YYCOPY(To, From, Count)		\
+       do					\
+ 	{					\
+-	  register YYSIZE_T yyi;		\
++	  YYSIZE_T yyi;				\
+ 	  for (yyi = 0; yyi < (Count); yyi++)	\
+ 	    (To)[yyi] = (From)[yyi];		\
+ 	}					\
+-      while (0)
++      while (YYID (0))
+ #  endif
+ # endif
+ 
+@@ -277,39 +412,33 @@
+ 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ 	yyptr += yynewbytes / sizeof (*yyptr);				\
+       }									\
+-    while (0)
++    while (YYID (0))
+ 
+ #endif
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-   typedef signed char yysigned_char;
+-#else
+-   typedef short yysigned_char;
+-#endif
+-
+-/* YYFINAL -- State number of the termination state. */
++/* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  9
+ /* YYLAST -- Last index in YYTABLE.  */
+ #define YYLAST   135
+ 
+-/* YYNTOKENS -- Number of terminals. */
++/* YYNTOKENS -- Number of terminals.  */
+ #define YYNTOKENS  31
+-/* YYNNTS -- Number of nonterminals. */
++/* YYNNTS -- Number of nonterminals.  */
+ #define YYNNTS  22
+-/* YYNRULES -- Number of rules. */
++/* YYNRULES -- Number of rules.  */
+ #define YYNRULES  50
+-/* YYNRULES -- Number of states. */
++/* YYNRULES -- Number of states.  */
+ #define YYNSTATES  122
+ 
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   278
+ 
+-#define YYTRANSLATE(YYX) 						\
++#define YYTRANSLATE(YYX)						\
+   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ 
+ /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+-static const unsigned char yytranslate[] =
++static const yytype_uint8 yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       24,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+@@ -344,7 +473,7 @@
+ #if YYDEBUG
+ /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+    YYRHS.  */
+-static const unsigned char yyprhs[] =
++static const yytype_uint8 yyprhs[] =
+ {
+        0,     0,     3,     7,    10,    11,    14,    16,    20,    22,
+       24,    26,    28,    30,    32,    34,    35,    37,    38,    40,
+@@ -354,8 +483,8 @@
+      171
+ };
+ 
+-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+-static const yysigned_char yyrhs[] =
++/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
++static const yytype_int8 yyrhs[] =
+ {
+       32,     0,    -1,    32,    33,    34,    -1,    33,    34,    -1,
+       -1,    15,    36,    -1,    23,    -1,    40,    48,    49,    -1,
+@@ -378,7 +507,7 @@
+ };
+ 
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+-static const unsigned char yyrline[] =
++static const yytype_uint8 yyrline[] =
+ {
+        0,    86,    86,    87,    90,    91,    92,    93,    96,    97,
+       98,   101,   102,   105,   106,   109,   110,   113,   114,   117,
+@@ -389,9 +518,9 @@
+ };
+ #endif
+ 
+-#if YYDEBUG || YYERROR_VERBOSE
+-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
++/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
++   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+ static const char *const yytname[] =
+ {
+   "$end", "error", "$undefined", "INT", "REAL", "HOUR", "MINUTE",
+@@ -408,7 +537,7 @@
+ # ifdef YYPRINT
+ /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+    token YYLEX-NUM.  */
+-static const unsigned short yytoknum[] =
++static const yytype_uint16 yytoknum[] =
+ {
+        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+@@ -418,7 +547,7 @@
+ # endif
+ 
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+-static const unsigned char yyr1[] =
++static const yytype_uint8 yyr1[] =
+ {
+        0,    31,    32,    32,    33,    33,    33,    33,    34,    34,
+       34,    35,    35,    36,    36,    37,    37,    38,    38,    39,
+@@ -429,7 +558,7 @@
+ };
+ 
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+-static const unsigned char yyr2[] =
++static const yytype_uint8 yyr2[] =
+ {
+        0,     2,     3,     2,     0,     2,     1,     3,     1,     1,
+        1,     1,     1,     1,     1,     0,     1,     0,     1,     0,
+@@ -442,7 +571,7 @@
+ /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+-static const unsigned char yydefact[] =
++static const yytype_uint8 yydefact[] =
+ {
+       21,     0,     6,    21,     0,    36,    14,    13,     5,     1,
+        0,    10,     8,     9,     3,    37,    38,     0,     2,    17,
+@@ -459,8 +588,8 @@
+       19,    42
+ };
+ 
+-/* YYDEFGOTO[NTERM-NUM]. */
+-static const yysigned_char yydefgoto[] =
++/* YYDEFGOTO[NTERM-NUM].  */
++static const yytype_int8 yydefgoto[] =
+ {
+       -1,     3,     4,    14,    41,     8,    54,    29,    62,     5,
+      105,    75,    79,    42,    63,    87,    86,    17,    27,    35,
+@@ -470,7 +599,7 @@
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+    STATE-NUM.  */
+ #define YYPACT_NINF -89
+-static const yysigned_char yypact[] =
++static const yytype_int8 yypact[] =
+ {
+       81,   -11,   -89,    61,     3,   -19,   -89,   -89,   -89,   -89,
+        3,   -89,   -89,   -89,   -89,   -89,   -89,    95,   -89,   -15,
+@@ -488,7 +617,7 @@
+ };
+ 
+ /* YYPGOTO[NTERM-NUM].  */
+-static const yysigned_char yypgoto[] =
++static const yytype_int8 yypgoto[] =
+ {
+      -89,   -89,    72,    87,   -41,   -89,   -42,    67,   -38,   -89,
+      -88,   -37,   -29,    22,    89,   -89,   -89,   -89,   -89,   -89,
+@@ -500,7 +629,7 @@
+    number is the opposite.  If zero, do what YYDEFACT says.
+    If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -20
+-static const yysigned_char yytable[] =
++static const yytype_int8 yytable[] =
+ {
+       55,    56,    57,    58,    59,    60,     6,     7,    66,   107,
+       15,    16,    28,    70,    11,    74,    78,    74,    78,    74,
+@@ -518,7 +647,7 @@
+       38,     0,     0,    40,    76,    77
+ };
+ 
+-static const yysigned_char yycheck[] =
++static const yytype_int8 yycheck[] =
+ {
+       42,    43,    44,    45,    46,    47,    17,    18,    50,    97,
+       29,    30,    27,    54,    11,    56,    57,    58,    59,    60,
+@@ -538,7 +667,7 @@
+ 
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+    symbol of state STATE-NUM.  */
+-static const unsigned char yystos[] =
++static const yytype_uint8 yystos[] =
+ {
+        0,    15,    23,    32,    33,    40,    17,    18,    36,     0,
+       33,    11,    24,    25,    34,    29,    30,    48,    34,    12,
+@@ -555,22 +684,6 @@
+       41,    39
+ };
+ 
+-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+-# define YYSIZE_T __SIZE_TYPE__
+-#endif
+-#if ! defined (YYSIZE_T) && defined (size_t)
+-# define YYSIZE_T size_t
+-#endif
+-#if ! defined (YYSIZE_T)
+-# if defined (__STDC__) || defined (__cplusplus)
+-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+-#  define YYSIZE_T size_t
+-# endif
+-#endif
+-#if ! defined (YYSIZE_T)
+-# define YYSIZE_T unsigned int
+-#endif
+-
+ #define yyerrok		(yyerrstatus = 0)
+ #define yyclearin	(yychar = YYEMPTY)
+ #define YYEMPTY		(-2)
+@@ -596,30 +709,63 @@
+       yychar = (Token);						\
+       yylval = (Value);						\
+       yytoken = YYTRANSLATE (yychar);				\
+-      YYPOPSTACK;						\
++      YYPOPSTACK (1);						\
+       goto yybackup;						\
+     }								\
+   else								\
+-    { 								\
+-      yyerror ("syntax error: cannot back up");\
++    {								\
++      yyerror (YY_("syntax error: cannot back up")); \
+       YYERROR;							\
+     }								\
+-while (0)
++while (YYID (0))
++
+ 
+ #define YYTERROR	1
+ #define YYERRCODE	256
+ 
+-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+-   are run).  */
+ 
++/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
++   If N is 0, then set CURRENT to the empty location which ends
++   the previous symbol: RHS[0] (always defined).  */
++
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N)		\
+-   ((Current).first_line   = (Rhs)[1].first_line,	\
+-    (Current).first_column = (Rhs)[1].first_column,	\
+-    (Current).last_line    = (Rhs)[N].last_line,	\
+-    (Current).last_column  = (Rhs)[N].last_column)
++# define YYLLOC_DEFAULT(Current, Rhs, N)				\
++    do									\
++      if (YYID (N))                                                    \
++	{								\
++	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
++	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
++	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
++	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
++	}								\
++      else								\
++	{								\
++	  (Current).first_line   = (Current).last_line   =		\
++	    YYRHSLOC (Rhs, 0).last_line;				\
++	  (Current).first_column = (Current).last_column =		\
++	    YYRHSLOC (Rhs, 0).last_column;				\
++	}								\
++    while (YYID (0))
++#endif
++
++
++/* YY_LOCATION_PRINT -- Print the location on the stream.
++   This macro was not mandated originally: define only if we know
++   we won't break user code: when these are the locations we know.  */
++
++#ifndef YY_LOCATION_PRINT
++# if YYLTYPE_IS_TRIVIAL
++#  define YY_LOCATION_PRINT(File, Loc)			\
++     fprintf (File, "%d.%d-%d.%d",			\
++	      (Loc).first_line, (Loc).first_column,	\
++	      (Loc).last_line,  (Loc).last_column)
++# else
++#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# endif
+ #endif
+ 
++
+ /* YYLEX -- calling `yylex' with the right arguments.  */
+ 
+ #ifdef YYLEX_PARAM
+@@ -640,42 +786,96 @@
+ do {						\
+   if (yydebug)					\
+     YYFPRINTF Args;				\
+-} while (0)
++} while (YYID (0))
+ 
+-# define YYDSYMPRINT(Args)			\
+-do {						\
+-  if (yydebug)					\
+-    yysymprint Args;				\
+-} while (0)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
++do {									  \
++  if (yydebug)								  \
++    {									  \
++      YYFPRINTF (stderr, "%s ", Title);					  \
++      yy_symbol_print (stderr,						  \
++		  Type, Value); \
++      YYFPRINTF (stderr, "\n");						  \
++    }									  \
++} while (YYID (0))
+ 
+-# define YYDSYMPRINTF(Title, Token, Value, Location)		\
+-do {								\
+-  if (yydebug)							\
+-    {								\
+-      YYFPRINTF (stderr, "%s ", Title);				\
+-      yysymprint (stderr, 					\
+-                  Token, Value);	\
+-      YYFPRINTF (stderr, "\n");					\
+-    }								\
+-} while (0)
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_value_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (!yyvaluep)
++    return;
++# ifdef YYPRINT
++  if (yytype < YYNTOKENS)
++    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++# else
++  YYUSE (yyoutput);
++# endif
++  switch (yytype)
++    {
++      default:
++	break;
++    }
++}
++
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT.  |
++`--------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_print (yyoutput, yytype, yyvaluep)
++    FILE *yyoutput;
++    int yytype;
++    YYSTYPE const * const yyvaluep;
++#endif
++{
++  if (yytype < YYNTOKENS)
++    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
++  else
++    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++
++  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
++  YYFPRINTF (yyoutput, ")");
++}
+ 
+ /*------------------------------------------------------------------.
+ | yy_stack_print -- Print the state stack from its BOTTOM up to its |
+ | TOP (included).                                                   |
+ `------------------------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_stack_print (short *bottom, short *top)
++yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+ #else
+ static void
+ yy_stack_print (bottom, top)
+-    short *bottom;
+-    short *top;
++    yytype_int16 *bottom;
++    yytype_int16 *top;
+ #endif
+ {
+   YYFPRINTF (stderr, "Stack now");
+-  for (/* Nothing. */; bottom <= top; ++bottom)
++  for (; bottom <= top; ++bottom)
+     YYFPRINTF (stderr, " %d", *bottom);
+   YYFPRINTF (stderr, "\n");
+ }
+@@ -684,45 +884,52 @@
+ do {								\
+   if (yydebug)							\
+     yy_stack_print ((Bottom), (Top));				\
+-} while (0)
++} while (YYID (0))
+ 
+ 
+ /*------------------------------------------------.
+ | Report that the YYRULE is going to be reduced.  |
+ `------------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yy_reduce_print (int yyrule)
++yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+ #else
+ static void
+-yy_reduce_print (yyrule)
++yy_reduce_print (yyvsp, yyrule)
++    YYSTYPE *yyvsp;
+     int yyrule;
+ #endif
+ {
++  int yynrhs = yyr2[yyrule];
+   int yyi;
+-  unsigned int yylno = yyrline[yyrule];
+-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+-             yyrule - 1, yylno);
+-  /* Print the symbols being reduced, and their result.  */
+-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
++  unsigned long int yylno = yyrline[yyrule];
++  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
++	     yyrule - 1, yylno);
++  /* The symbols being reduced.  */
++  for (yyi = 0; yyi < yynrhs; yyi++)
++    {
++      fprintf (stderr, "   $%d = ", yyi + 1);
++      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
++		       &(yyvsp[(yyi + 1) - (yynrhs)])
++		       		       );
++      fprintf (stderr, "\n");
++    }
+ }
+ 
+ # define YY_REDUCE_PRINT(Rule)		\
+ do {					\
+   if (yydebug)				\
+-    yy_reduce_print (Rule);		\
+-} while (0)
++    yy_reduce_print (yyvsp, Rule); \
++} while (YYID (0))
+ 
+ /* Nonzero means print parse trace.  It is left uninitialized so that
+    multiple parsers can coexist.  */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
+-# define YYDSYMPRINT(Args)
+-# define YYDSYMPRINTF(Title, Token, Value, Location)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+ # define YY_STACK_PRINT(Bottom, Top)
+ # define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
+@@ -737,13 +944,9 @@
+    if the built-in stack extension method is used).
+ 
+    Do not make this value too large; the results are undefined if
+-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
++   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+    evaluated with infinite-precision integer arithmetic.  */
+ 
+-#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
+-# undef YYMAXDEPTH
+-#endif
+-
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
+@@ -753,45 +956,47 @@
+ #if YYERROR_VERBOSE
+ 
+ # ifndef yystrlen
+-#  if defined (__GLIBC__) && defined (_STRING_H)
++#  if defined __GLIBC__ && defined _STRING_H
+ #   define yystrlen strlen
+ #  else
+ /* Return the length of YYSTR.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static YYSIZE_T
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystrlen (const char *yystr)
+-#   else
++#else
++static YYSIZE_T
+ yystrlen (yystr)
+-     const char *yystr;
+-#   endif
++    const char *yystr;
++#endif
+ {
+-  register const char *yys = yystr;
+-
+-  while (*yys++ != '\0')
++  YYSIZE_T yylen;
++  for (yylen = 0; yystr[yylen]; yylen++)
+     continue;
+-
+-  return yys - yystr - 1;
++  return yylen;
+ }
+ #  endif
+ # endif
+ 
+ # ifndef yystpcpy
+-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
++#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+ #   define yystpcpy stpcpy
+ #  else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+    YYDEST.  */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static char *
+-#   if defined (__STDC__) || defined (__cplusplus)
+ yystpcpy (char *yydest, const char *yysrc)
+-#   else
++#else
++static char *
+ yystpcpy (yydest, yysrc)
+-     char *yydest;
+-     const char *yysrc;
+-#   endif
++    char *yydest;
++    const char *yysrc;
++#endif
+ {
+-  register char *yyd = yydest;
+-  register const char *yys = yysrc;
++  char *yyd = yydest;
++  const char *yys = yysrc;
+ 
+   while ((*yyd++ = *yys++) != '\0')
+     continue;
+@@ -801,70 +1006,192 @@
+ #  endif
+ # endif
+ 
+-#endif /* !YYERROR_VERBOSE */
++# ifndef yytnamerr
++/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
++   quotes and backslashes, so that it's suitable for yyerror.  The
++   heuristic is that double-quoting is unnecessary unless the string
++   contains an apostrophe, a comma, or backslash (other than
++   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
++   null, do not copy; instead, return the length of what the result
++   would have been.  */
++static YYSIZE_T
++yytnamerr (char *yyres, const char *yystr)
++{
++  if (*yystr == '"')
++    {
++      YYSIZE_T yyn = 0;
++      char const *yyp = yystr;
+ 
+-
++      for (;;)
++	switch (*++yyp)
++	  {
++	  case '\'':
++	  case ',':
++	    goto do_not_strip_quotes;
++
++	  case '\\':
++	    if (*++yyp != '\\')
++	      goto do_not_strip_quotes;
++	    /* Fall through.  */
++	  default:
++	    if (yyres)
++	      yyres[yyn] = *yyp;
++	    yyn++;
++	    break;
++
++	  case '"':
++	    if (yyres)
++	      yyres[yyn] = '\0';
++	    return yyn;
++	  }
++    do_not_strip_quotes: ;
++    }
+ 
+-#if YYDEBUG
+-/*--------------------------------.
+-| Print this symbol on YYOUTPUT.  |
+-`--------------------------------*/
++  if (! yyres)
++    return yystrlen (yystr);
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
+-static void
+-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+-#else
+-static void
+-yysymprint (yyoutput, yytype, yyvaluep)
+-    FILE *yyoutput;
+-    int yytype;
+-    YYSTYPE *yyvaluep;
+-#endif
++  return yystpcpy (yyres, yystr) - yyres;
++}
++# endif
++
++/* Copy into YYRESULT an error message about the unexpected token
++   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
++   including the terminating null byte.  If YYRESULT is null, do not
++   copy anything; just return the number of bytes that would be
++   copied.  As a special case, return 0 if an ordinary "syntax error"
++   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
++   size calculation.  */
++static YYSIZE_T
++yysyntax_error (char *yyresult, int yystate, int yychar)
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  int yyn = yypact[yystate];
+ 
+-  if (yytype < YYNTOKENS)
++  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
++    return 0;
++  else
+     {
+-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+-# ifdef YYPRINT
+-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++      int yytype = YYTRANSLATE (yychar);
++      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
++      YYSIZE_T yysize = yysize0;
++      YYSIZE_T yysize1;
++      int yysize_overflow = 0;
++      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++      int yyx;
++
++# if 0
++      /* This is so xgettext sees the translatable formats that are
++	 constructed on the fly.  */
++      YY_("syntax error, unexpected %s");
++      YY_("syntax error, unexpected %s, expecting %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
++      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+ # endif
+-    }
+-  else
+-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++      char *yyfmt;
++      char const *yyf;
++      static char const yyunexpected[] = "syntax error, unexpected %s";
++      static char const yyexpecting[] = ", expecting %s";
++      static char const yyor[] = " or %s";
++      char yyformat[sizeof yyunexpected
++		    + sizeof yyexpecting - 1
++		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
++		       * (sizeof yyor - 1))];
++      char const *yyprefix = yyexpecting;
++
++      /* Start YYX at -YYN if negative to avoid negative indexes in
++	 YYCHECK.  */
++      int yyxbegin = yyn < 0 ? -yyn : 0;
++
++      /* Stay within bounds of both yycheck and yytname.  */
++      int yychecklim = YYLAST - yyn + 1;
++      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++      int yycount = 1;
++
++      yyarg[0] = yytname[yytype];
++      yyfmt = yystpcpy (yyformat, yyunexpected);
++
++      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++	  {
++	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++	      {
++		yycount = 1;
++		yysize = yysize0;
++		yyformat[sizeof yyunexpected - 1] = '\0';
++		break;
++	      }
++	    yyarg[yycount++] = yytname[yyx];
++	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++	    yysize_overflow |= (yysize1 < yysize);
++	    yysize = yysize1;
++	    yyfmt = yystpcpy (yyfmt, yyprefix);
++	    yyprefix = yyor;
++	  }
++
++      yyf = YY_(yyformat);
++      yysize1 = yysize + yystrlen (yyf);
++      yysize_overflow |= (yysize1 < yysize);
++      yysize = yysize1;
+ 
+-  switch (yytype)
+-    {
+-      default:
+-        break;
++      if (yysize_overflow)
++	return YYSIZE_MAXIMUM;
++
++      if (yyresult)
++	{
++	  /* Avoid sprintf, as that infringes on the user's name space.
++	     Don't have undefined behavior even if the translation
++	     produced a string with the wrong number of "%s"s.  */
++	  char *yyp = yyresult;
++	  int yyi = 0;
++	  while ((*yyp = *yyf) != '\0')
++	    {
++	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
++		{
++		  yyp += yytnamerr (yyp, yyarg[yyi++]);
++		  yyf += 2;
++		}
++	      else
++		{
++		  yyp++;
++		  yyf++;
++		}
++	    }
++	}
++      return yysize;
+     }
+-  YYFPRINTF (yyoutput, ")");
+ }
++#endif /* YYERROR_VERBOSE */
++
+ 
+-#endif /* ! YYDEBUG */
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+ `-----------------------------------------------*/
+ 
+-#if defined (__STDC__) || defined (__cplusplus)
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ static void
+-yydestruct (int yytype, YYSTYPE *yyvaluep)
++yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+ #else
+ static void
+-yydestruct (yytype, yyvaluep)
++yydestruct (yymsg, yytype, yyvaluep)
++    const char *yymsg;
+     int yytype;
+     YYSTYPE *yyvaluep;
+ #endif
+ {
+-  /* Pacify ``unused variable'' warnings.  */
+-  (void) yyvaluep;
++  YYUSE (yyvaluep);
++
++  if (!yymsg)
++    yymsg = "Deleting";
++  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ 
+   switch (yytype)
+     {
+ 
+       default:
+-        break;
++	break;
+     }
+ }
+ 
+@@ -872,13 +1199,13 @@
+ /* Prevent warnings from -Wmissing-prototypes.  */
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void *YYPARSE_PARAM);
+-# else
++#else
+ int yyparse ();
+-# endif
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if defined __STDC__ || defined __cplusplus
+ int yyparse (void);
+ #else
+ int yyparse ();
+@@ -887,10 +1214,10 @@
+ 
+ 
+ 
+-/* The lookahead symbol.  */
++/* The look-ahead symbol.  */
+ int yychar;
+ 
+-/* The semantic value of the lookahead symbol.  */
++/* The semantic value of the look-ahead symbol.  */
+ YYSTYPE yylval;
+ 
+ /* Number of syntax errors so far.  */
+@@ -903,14 +1230,18 @@
+ `----------*/
+ 
+ #ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
+-int yyparse (void *YYPARSE_PARAM)
+-# else
+-int yyparse (YYPARSE_PARAM)
+-  void *YYPARSE_PARAM;
+-# endif
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
++int
++yyparse (void *YYPARSE_PARAM)
++#else
++int
++yyparse (YYPARSE_PARAM)
++    void *YYPARSE_PARAM;
++#endif
+ #else /* ! YYPARSE_PARAM */
+-#if defined (__STDC__) || defined (__cplusplus)
++#if (defined __STDC__ || defined __C99__FUNC__ \
++     || defined __cplusplus || defined _MSC_VER)
+ int
+ yyparse (void)
+ #else
+@@ -921,13 +1252,19 @@
+ #endif
+ {
+   
+-  register int yystate;
+-  register int yyn;
++  int yystate;
++  int yyn;
+   int yyresult;
+   /* Number of tokens to shift before error messages enabled.  */
+   int yyerrstatus;
+-  /* Lookahead token as an internal (translated) token number.  */
++  /* Look-ahead token as an internal (translated) token number.  */
+   int yytoken = 0;
++#if YYERROR_VERBOSE
++  /* Buffer for error messages, and its allocated size.  */
++  char yymsgbuf[128];
++  char *yymsg = yymsgbuf;
++  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
++#endif
+ 
+   /* Three stacks and their tools:
+      `yyss': related to states,
+@@ -938,18 +1275,18 @@
+      to reallocate them elsewhere.  */
+ 
+   /* The state stack.  */
+-  short	yyssa[YYINITDEPTH];
+-  short *yyss = yyssa;
+-  register short *yyssp;
++  yytype_int16 yyssa[YYINITDEPTH];
++  yytype_int16 *yyss = yyssa;
++  yytype_int16 *yyssp;
+ 
+   /* The semantic value stack.  */
+   YYSTYPE yyvsa[YYINITDEPTH];
+   YYSTYPE *yyvs = yyvsa;
+-  register YYSTYPE *yyvsp;
++  YYSTYPE *yyvsp;
+ 
+ 
+ 
+-#define YYPOPSTACK   (yyvsp--, yyssp--)
++#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+ 
+   YYSIZE_T yystacksize = YYINITDEPTH;
+ 
+@@ -958,9 +1295,9 @@
+   YYSTYPE yyval;
+ 
+ 
+-  /* When reducing, the number of symbols on the RHS of the reduced
+-     rule.  */
+-  int yylen;
++  /* The number of symbols on the RHS of the reduced rule.
++     Keep to zero when no symbol should be popped.  */
++  int yylen = 0;
+ 
+   YYDPRINTF ((stderr, "Starting parse\n"));
+ 
+@@ -984,8 +1321,7 @@
+ `------------------------------------------------------------*/
+  yynewstate:
+   /* In all cases, when you get here, the value and location stacks
+-     have just been pushed. so pushing a state here evens the stacks.
+-     */
++     have just been pushed.  So pushing a state here evens the stacks.  */
+   yyssp++;
+ 
+  yysetstate:
+@@ -998,18 +1334,18 @@
+ 
+ #ifdef yyoverflow
+       {
+-	/* Give user a chance to reallocate the stack. Use copies of
++	/* Give user a chance to reallocate the stack.  Use copies of
+ 	   these so that the &'s don't force the real ones into
+ 	   memory.  */
+ 	YYSTYPE *yyvs1 = yyvs;
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 
+ 
+ 	/* Each stack pointer address is followed by the size of the
+ 	   data in use in that stack, in bytes.  This used to be a
+ 	   conditional around just the two extra args, but that might
+ 	   be undefined if yyoverflow is a macro.  */
+-	yyoverflow ("parser stack overflow",
++	yyoverflow (YY_("memory exhausted"),
+ 		    &yyss1, yysize * sizeof (*yyssp),
+ 		    &yyvs1, yysize * sizeof (*yyvsp),
+ 
+@@ -1020,21 +1356,21 @@
+       }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+-      goto yyoverflowlab;
++      goto yyexhaustedlab;
+ # else
+       /* Extend the stack our own way.  */
+       if (YYMAXDEPTH <= yystacksize)
+-	goto yyoverflowlab;
++	goto yyexhaustedlab;
+       yystacksize *= 2;
+       if (YYMAXDEPTH < yystacksize)
+ 	yystacksize = YYMAXDEPTH;
+ 
+       {
+-	short *yyss1 = yyss;
++	yytype_int16 *yyss1 = yyss;
+ 	union yyalloc *yyptr =
+ 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ 	if (! yyptr)
+-	  goto yyoverflowlab;
++	  goto yyexhaustedlab;
+ 	YYSTACK_RELOCATE (yyss);
+ 	YYSTACK_RELOCATE (yyvs);
+ 
+@@ -1065,19 +1401,17 @@
+ `-----------*/
+ yybackup:
+ 
+-/* Do appropriate processing given the current state.  */
+-/* Read a lookahead token if we need one and don't already have one.  */
+-/* yyresume: */
+-
+-  /* First try to decide what to do without reference to lookahead token.  */
++  /* Do appropriate processing given the current state.  Read a
++     look-ahead token if we need one and don't already have one.  */
+ 
++  /* First try to decide what to do without reference to look-ahead token.  */
+   yyn = yypact[yystate];
+   if (yyn == YYPACT_NINF)
+     goto yydefault;
+ 
+-  /* Not known => get a lookahead token if don't already have one.  */
++  /* Not known => get a look-ahead token if don't already have one.  */
+ 
+-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
++  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+   if (yychar == YYEMPTY)
+     {
+       YYDPRINTF ((stderr, "Reading a token: "));
+@@ -1092,7 +1426,7 @@
+   else
+     {
+       yytoken = YYTRANSLATE (yychar);
+-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
++      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+     }
+ 
+   /* If the proper action on seeing token YYTOKEN is to reduce or to
+@@ -1112,22 +1446,21 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  /* Shift the lookahead token.  */
+-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+-
+-  /* Discard the token being shifted unless it is eof.  */
+-  if (yychar != YYEOF)
+-    yychar = YYEMPTY;
+-
+-  *++yyvsp = yylval;
+-
+-
+   /* Count tokens shifted since error; after three, turn off error
+      status.  */
+   if (yyerrstatus)
+     yyerrstatus--;
+ 
++  /* Shift the look-ahead token.  */
++  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
++
++  /* Discard the shifted token unless it is eof.  */
++  if (yychar != YYEOF)
++    yychar = YYEMPTY;
++
+   yystate = yyn;
++  *++yyvsp = yylval;
++
+   goto yynewstate;
+ 
+ 
+@@ -1174,12 +1507,12 @@
+ 
+   case 11:
+ #line 101 "ciaoparser.Y"
+-    {yyval.real=yyvsp[0].real;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].real);;}
+     break;
+ 
+   case 12:
+ #line 102 "ciaoparser.Y"
+-    {yyval.real=yyvsp[0].integer;;}
++    {(yyval.real)=(yyvsp[(1) - (1)].integer);;}
+     break;
+ 
+   case 13:
+@@ -1204,67 +1537,67 @@
+ 
+   case 22:
+ #line 129 "ciaoparser.Y"
+-    {yyval.real = degToRad(yyvsp[0].real);;}
++    {(yyval.real) = degToRad((yyvsp[(1) - (1)].real));;}
+     break;
+ 
+   case 23:
+ #line 132 "ciaoparser.Y"
+-    {yyval.real = FITSPTR->mapLenToRef(yyvsp[0].real, PHYSICAL);;}
++    {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), PHYSICAL);;}
+     break;
+ 
+   case 24:
+ #line 133 "ciaoparser.Y"
+-    {yyval.real = FITSPTR->mapLenToRef(yyvsp[0].real, WCS, ARCMIN);;}
++    {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), WCS, ARCMIN);;}
+     break;
+ 
+   case 25:
+ #line 134 "ciaoparser.Y"
+-    {yyval.real = FITSPTR->mapLenToRef(yyvsp[0].real, WCS, ARCSEC);;}
++    {(yyval.real) = FITSPTR->mapLenToRef((yyvsp[(1) - (1)].real), WCS, ARCSEC);;}
+     break;
+ 
+   case 26:
+ #line 138 "ciaoparser.Y"
+     {
+-	  Vector r = FITSPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real), PHYSICAL);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), PHYSICAL);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 27:
+ #line 145 "ciaoparser.Y"
+     {
+-	  Vector r = FITSPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real), WCS, ARCMIN);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), WCS, ARCMIN);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 28:
+ #line 152 "ciaoparser.Y"
+     {
+-	  Vector r = FITSPTR->mapLenToRef(Vector(yyvsp[-2].real,yyvsp[0].real), WCS, ARCSEC);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapLenToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), WCS, ARCSEC);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 29:
+ #line 160 "ciaoparser.Y"
+-    {yyval.real = parseDMS(yyvsp[0].str);;}
++    {(yyval.real) = parseDMS((yyvsp[(1) - (1)].str));;}
+     break;
+ 
+   case 30:
+ #line 164 "ciaoparser.Y"
+     {
+-	  Vector r = FITSPTR->mapToRef(Vector(yyvsp[-2].real*360./24.,yyvsp[0].real),WCS,FK5);
++	  Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real)*360./24.,(yyvsp[(3) - (3)].real)),WCS,FK5);
+ 
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -1277,12 +1610,12 @@
+ #line 172 "ciaoparser.Y"
+     {
+ 	  Vector r = FITSPTR->mapToRef(
+-	    Vector(hmsToDegree(ciaosign2,yyvsp[-7].integer,yyvsp[-6].integer,yyvsp[-5].real), 
+-	    dmsToDegree(ciaosign,yyvsp[-2].integer,yyvsp[-1].real,yyvsp[0].real)),
++	    Vector(hmsToDegree(ciaosign2,(yyvsp[(1) - (8)].integer),(yyvsp[(2) - (8)].integer),(yyvsp[(3) - (8)].real)), 
++	    dmsToDegree(ciaosign,(yyvsp[(6) - (8)].integer),(yyvsp[(7) - (8)].real),(yyvsp[(8) - (8)].real))),
+ 	    WCS, FK5);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -1295,22 +1628,22 @@
+ #line 183 "ciaoparser.Y"
+     {
+ 	  Vector r = FITSPTR->mapToRef(
+-	    Vector(dmsToDegree(ciaosign2,yyvsp[-7].integer,yyvsp[-6].real,yyvsp[-5].real),
+-	    dmsToDegree(ciaosign,yyvsp[-2].integer,yyvsp[-1].real,yyvsp[0].real)),
++	    Vector(dmsToDegree(ciaosign2,(yyvsp[(1) - (8)].integer),(yyvsp[(2) - (8)].real),(yyvsp[(3) - (8)].real)),
++	    dmsToDegree(ciaosign,(yyvsp[(6) - (8)].integer),(yyvsp[(7) - (8)].real),(yyvsp[(8) - (8)].real))),
+ 	    WCS, FK5);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+   case 35:
+ #line 193 "ciaoparser.Y"
+     {
+-	  Vector r = FITSPTR->mapToRef(Vector(yyvsp[-2].real,yyvsp[0].real), PHYSICAL);
+-	  yyval.vector[0] = r[0];
+-	  yyval.vector[1] = r[1];
+-	  yyval.vector[2] = r[2];
++	  Vector r = FITSPTR->mapToRef(Vector((yyvsp[(1) - (3)].real),(yyvsp[(3) - (3)].real)), PHYSICAL);
++	  (yyval.vector)[0] = r[0];
++	  (yyval.vector)[1] = r[1];
++	  (yyval.vector)[2] = r[2];
+ 	;}
+     break;
+ 
+@@ -1326,52 +1659,52 @@
+ 
+   case 39:
+ #line 207 "ciaoparser.Y"
+-    {FR->createCircleCmd(Vector(yyvsp[-3].vector),
+-	    yyvsp[-1].real,
++    {FR->createCircleCmd(Vector((yyvsp[(3) - (6)].vector)),
++	    (yyvsp[(5) - (6)].real),
+ 	    color,1,font,text,props,NULL,taglist,cblist);;}
+     break;
+ 
+   case 40:
+ #line 212 "ciaoparser.Y"
+-    {FR->createEllipseCmd(Vector(yyvsp[-5].vector),
+-	    Vector(yyvsp[-3].vector),yyvsp[-1].real,
++    {FR->createEllipseCmd(Vector((yyvsp[(3) - (8)].vector)),
++	    Vector((yyvsp[(5) - (8)].vector)),(yyvsp[(7) - (8)].real),
+ 	    color,1,font,text,props,NULL,taglist,cblist);;}
+     break;
+ 
+   case 41:
+ #line 217 "ciaoparser.Y"
+-    {FR->createAnnulusCmd(Vector(yyvsp[-5].vector),
+-	    yyvsp[-3].real,yyvsp[-1].real,1,
++    {FR->createAnnulusCmd(Vector((yyvsp[(3) - (8)].vector)),
++	    (yyvsp[(5) - (8)].real),(yyvsp[(7) - (8)].real),1,
+ 	    color,1,font,text,props,NULL,taglist,cblist);;}
+     break;
+ 
+   case 42:
+ #line 222 "ciaoparser.Y"
+-    {FR->createCpandaCmd(Vector(yyvsp[-9].vector),
+-	    yyvsp[-3].real,yyvsp[-1].real,1,
+-	    yyvsp[-7].real,yyvsp[-5].real,1,
++    {FR->createCpandaCmd(Vector((yyvsp[(3) - (12)].vector)),
++	    (yyvsp[(9) - (12)].real),(yyvsp[(11) - (12)].real),1,
++	    (yyvsp[(5) - (12)].real),(yyvsp[(7) - (12)].real),1,
+ 	    color,1,font,text,props,NULL,taglist,cblist);;}
+     break;
+ 
+   case 43:
+ #line 228 "ciaoparser.Y"
+-    {FR->createBoxCmd(Vector(yyvsp[-3].vector),
+-	    Vector(yyvsp[-1].vector),
++    {FR->createBoxCmd(Vector((yyvsp[(3) - (6)].vector)),
++	    Vector((yyvsp[(5) - (6)].vector)),
+ 	    0,
+ 	    color,1,font,text,props,NULL,taglist,cblist);;}
+     break;
+ 
+   case 44:
+ #line 234 "ciaoparser.Y"
+-    {FR->createBoxCmd(Vector(yyvsp[-5].vector),
+-	     Vector(yyvsp[-3].vector),
+-	     yyvsp[-1].real,
++    {FR->createBoxCmd(Vector((yyvsp[(3) - (8)].vector)),
++	     Vector((yyvsp[(5) - (8)].vector)),
++	     (yyvsp[(7) - (8)].real),
+ 	     color,1,font,text,props,NULL,taglist,cblist);;}
+     break;
+ 
+   case 45:
+ #line 240 "ciaoparser.Y"
+-    {FR->createBoxCirclePointCmd(Vector(yyvsp[-1].vector),
++    {FR->createBoxCirclePointCmd(Vector((yyvsp[(3) - (4)].vector)),
+ 	    color,1,font,text,props,NULL,taglist,cblist);;}
+     break;
+ 
+@@ -1388,19 +1721,18 @@
+ 
+   case 50:
+ #line 252 "ciaoparser.Y"
+-    {polylist.append(new Vertex(yyvsp[0].vector));;}
++    {polylist.append(new Vertex((yyvsp[(1) - (1)].vector)));;}
+     break;
+ 
+ 
++/* Line 1267 of yacc.c.  */
++#line 1730 "ciaoparser.C"
++      default: break;
+     }
++  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ 
+-/* Line 1000 of yacc.c.  */
+-#line 1399 "ciaoparser.C"
+-
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
+-
+-
++  YYPOPSTACK (yylen);
++  yylen = 0;
+   YY_STACK_PRINT (yyss, yyssp);
+ 
+   *++yyvsp = yyval;
+@@ -1429,99 +1761,65 @@
+   if (!yyerrstatus)
+     {
+       ++yynerrs;
+-#if YYERROR_VERBOSE
+-      yyn = yypact[yystate];
+-
+-      if (YYPACT_NINF < yyn && yyn < YYLAST)
+-	{
+-	  YYSIZE_T yysize = 0;
+-	  int yytype = YYTRANSLATE (yychar);
+-	  const char* yyprefix;
+-	  char *yymsg;
+-	  int yyx;
+-
+-	  /* Start YYX at -YYN if negative to avoid negative indexes in
+-	     YYCHECK.  */
+-	  int yyxbegin = yyn < 0 ? -yyn : 0;
+-
+-	  /* Stay within bounds of both yycheck and yytname.  */
+-	  int yychecklim = YYLAST - yyn;
+-	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-	  int yycount = 0;
+-
+-	  yyprefix = ", expecting ";
+-	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++#if ! YYERROR_VERBOSE
++      yyerror (YY_("syntax error"));
++#else
++      {
++	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
++	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
++	  {
++	    YYSIZE_T yyalloc = 2 * yysize;
++	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
++	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
++	    if (yymsg != yymsgbuf)
++	      YYSTACK_FREE (yymsg);
++	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
++	    if (yymsg)
++	      yymsg_alloc = yyalloc;
++	    else
+ 	      {
+-		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+-		yycount += 1;
+-		if (yycount == 5)
+-		  {
+-		    yysize = 0;
+-		    break;
+-		  }
++		yymsg = yymsgbuf;
++		yymsg_alloc = sizeof yymsgbuf;
+ 	      }
+-	  yysize += (sizeof ("syntax error, unexpected ")
+-		     + yystrlen (yytname[yytype]));
+-	  yymsg = (char *) YYSTACK_ALLOC (yysize);
+-	  if (yymsg != 0)
+-	    {
+-	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+-	      yyp = yystpcpy (yyp, yytname[yytype]);
++	  }
+ 
+-	      if (yycount < 5)
+-		{
+-		  yyprefix = ", expecting ";
+-		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+-		      {
+-			yyp = yystpcpy (yyp, yyprefix);
+-			yyp = yystpcpy (yyp, yytname[yyx]);
+-			yyprefix = " or ";
+-		      }
+-		}
+-	      yyerror (yymsg);
+-	      YYSTACK_FREE (yymsg);
+-	    }
+-	  else
+-	    yyerror ("syntax error; also virtual memory exhausted");
+-	}
+-      else
+-#endif /* YYERROR_VERBOSE */
+-	yyerror ("syntax error");
++	if (0 < yysize && yysize <= yymsg_alloc)
++	  {
++	    (void) yysyntax_error (yymsg, yystate, yychar);
++	    yyerror (yymsg);
++	  }
++	else
++	  {
++	    yyerror (YY_("syntax error"));
++	    if (yysize != 0)
++	      goto yyexhaustedlab;
++	  }
++      }
++#endif
+     }
+ 
+ 
+ 
+   if (yyerrstatus == 3)
+     {
+-      /* If just tried and failed to reuse lookahead token after an
++      /* If just tried and failed to reuse look-ahead token after an
+ 	 error, discard it.  */
+ 
+       if (yychar <= YYEOF)
+-        {
+-          /* If at end of input, pop the error token,
+-	     then the rest of the stack, then return failure.  */
++	{
++	  /* Return failure if at end of input.  */
+ 	  if (yychar == YYEOF)
+-	     for (;;)
+-	       {
+-		 YYPOPSTACK;
+-		 if (yyssp == yyss)
+-		   YYABORT;
+-		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-		 yydestruct (yystos[*yyssp], yyvsp);
+-	       }
+-        }
++	    YYABORT;
++	}
+       else
+ 	{
+-	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+-	  yydestruct (yytoken, &yylval);
++	  yydestruct ("Error: discarding",
++		      yytoken, &yylval);
+ 	  yychar = YYEMPTY;
+-
+ 	}
+     }
+ 
+-  /* Else will try to reuse lookahead token after shifting the error
++  /* Else will try to reuse look-ahead token after shifting the error
+      token.  */
+   goto yyerrlab1;
+ 
+@@ -1531,15 +1829,17 @@
+ `---------------------------------------------------*/
+ yyerrorlab:
+ 
+-#ifdef __GNUC__
+-  /* Pacify GCC when the user code never invokes YYERROR and the label
+-     yyerrorlab therefore never appears in user code.  */
+-  if (0)
++  /* Pacify compilers like GCC when the user code never invokes
++     YYERROR and the label yyerrorlab therefore never appears in user
++     code.  */
++  if (/*CONSTCOND*/ 0)
+      goto yyerrorlab;
+-#endif
+ 
+-  yyvsp -= yylen;
+-  yyssp -= yylen;
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYERROR.  */
++  YYPOPSTACK (yylen);
++  yylen = 0;
++  YY_STACK_PRINT (yyss, yyssp);
+   yystate = *yyssp;
+   goto yyerrlab1;
+ 
+@@ -1568,9 +1868,10 @@
+       if (yyssp == yyss)
+ 	YYABORT;
+ 
+-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+-      yydestruct (yystos[yystate], yyvsp);
+-      YYPOPSTACK;
++
++      yydestruct ("Error: popping",
++		  yystos[yystate], yyvsp);
++      YYPOPSTACK (1);
+       yystate = *yyssp;
+       YY_STACK_PRINT (yyss, yyssp);
+     }
+@@ -1578,11 +1879,12 @@
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+-  YYDPRINTF ((stderr, "Shifting error token, "));
+-
+   *++yyvsp = yylval;
+ 
+ 
++  /* Shift the error token.  */
++  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
++
+   yystate = yyn;
+   goto yynewstate;
+ 
+@@ -1602,21 +1904,39 @@
+   goto yyreturn;
+ 
+ #ifndef yyoverflow
+-/*----------------------------------------------.
+-| yyoverflowlab -- parser overflow comes here.  |
+-`----------------------------------------------*/
+-yyoverflowlab:
+-  yyerror ("parser stack overflow");
++/*-------------------------------------------------.
++| yyexhaustedlab -- memory exhaustion comes here.  |
++`-------------------------------------------------*/
++yyexhaustedlab:
++  yyerror (YY_("memory exhausted"));
+   yyresult = 2;
+   /* Fall through.  */
+ #endif
+ 
+ yyreturn:
++  if (yychar != YYEOF && yychar != YYEMPTY)
++     yydestruct ("Cleanup: discarding lookahead",
++		 yytoken, &yylval);
++  /* Do not reclaim the symbols of the rule which action triggered
++     this YYABORT or YYACCEPT.  */
++  YYPOPSTACK (yylen);
++  YY_STACK_PRINT (yyss, yyssp);
++  while (yyssp != yyss)
++    {
++      yydestruct ("Cleanup: popping",
++		  yystos[*yyssp], yyvsp);
++      YYPOPSTACK (1);
++    }
+ #ifndef yyoverflow
+   if (yyss != yyssa)
+     YYSTACK_FREE (yyss);
+ #endif
+-  return yyresult;
++#if YYERROR_VERBOSE
++  if (yymsg != yymsgbuf)
++    YYSTACK_FREE (yymsg);
++#endif
++  /* Make sure YYID is used.  */
++  return YYID (yyresult);
+ }
+ 
+ 
+--- saods9-4.0b7.orig/saotk/vector/vector.h
++++ saods9-4.0b7/saotk/vector/vector.h
+@@ -13,6 +13,10 @@
+ 
+ #include "tk.h"
+ 
++class Vector;
++class Matrix;
++class BBox;
++
+ class Vector {
+   friend class Matrix;
+   friend class Translate;
+--- saods9-4.0b7.orig/saotk/colorbar/lut.C
++++ saods9-4.0b7/saotk/colorbar/lut.C
+@@ -1,4 +1,4 @@
+-// Copyright (C) 1999-200
++// Copyright (C) 1999-2005
+ // Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+ // For conditions of distribution and use, see copyright notice in "copyright"
+ 
+--- saods9-4.0b7.orig/ast-3.5/sphmap.c
++++ saods9-4.0b7/ast-3.5/sphmap.c
+@@ -92,6 +92,7 @@
+ #include <stddef.h>
+ #include <stdio.h>
+ #include <string.h>
++#include <math.h>
+ 
+ /* Module Variables. */
+ /* ================= */
+--- saods9-4.0b7.orig/ast-3.5/slalib.h
++++ saods9-4.0b7/ast-3.5/slalib.h
+@@ -0,0 +1,60 @@
++// This is a generated file; see ./debian/README.sla for information.
++void slaAddet ( double rm, double dm, double eq, double *rc, double *dc ) ;
++void slaAmpqk ( double ra, double da, double amprms[21],
++                double *rm, double *dm ) ;
++void slaCaldj ( int iy, int im, int id, double *djm, int *j ) ;
++void slaDaf2r ( int ideg, int iamin, double asec, double *rad, int *j ) ;
++void slaDav2m ( double axvec[3], double rmat[3][3] ) ;
++double slaDbear ( double a1, double b1, double a2, double b2  ) ;
++void slaDcc2s ( double v[3], double *a, double *b ) ;
++void slaDcs2c ( double a, double b, double v[3] ) ;
++void slaDd2tf ( int ndp, double days, char *sign, int ihmsf[4] ) ;
++void slaDimxv ( double dm[3][3], double va[3], double vb[3] ) ;
++void slaDjcal ( int ndp, double djm, int iymdf[ 4 ], int *j ) ;
++void slaDjcl ( double djm, int *iy, int *im, int *id, double *fd, int *j ) ;
++void slaDmat ( int n, double *a, double *y, double *d, int *jf, int *iw ) ;
++void slaDmxm ( double a[3][3], double b[3][3], double c[3][3] ) ;
++void slaDmxv ( double dm[3][3], double va[3], double vb[3] ) ;
++double slaDrange ( double angle ) ;
++double slaDranrm ( double angle ) ;
++double slaDsep ( double a1, double b1, double a2, double b2 ) ;
++void slaDtf2d ( int ihour, int imin, double sec, double *days, int *j ) ;
++void slaDtf2r ( int ihour, int imin, double sec, double *rad, int *j ) ;
++double slaDvdv( double va[3], double vb[3] ) ;
++void slaDvn ( double v[3], double uv[3], double *vm ) ;
++void slaDvxv ( double va[3], double vb[3], double vc[3] ) ;
++void slaEcmat ( double date, double rmat[3][3] ) ;
++double slaEpb ( double date ) ;
++double slaEpb2d ( double epb ) ;
++double slaEpj ( double date ) ;
++double slaEpj2d ( double epj ) ;
++double slaEqeqx ( double date ) ;
++void slaEqgal ( double dr, double dd, double *dl, double *db ) ;
++void slaEvp ( double date, double deqx, double dvb[3], double dpb[3], 
++              double dvh[3], double dph[3] ) ;
++void slaFk45z ( double r1950, double d1950, double bepoch,
++                double *r2000, double *d2000 ) ;
++void slaFk54z ( double r2000, double d2000, double bepoch,
++                double *r1950, double *d1950,
++                double *dr1950, double *dd1950 ) ;
++void slaFk5hz ( double r5, double d5, double jepoch,
++                double *rh, double *dh ) ;
++void slaGaleq ( double dl, double db, double *dr, double *dd ) ;
++void slaGalsup ( double dl, double db, double *dsl, double *dsb ) ;
++void slaGeoc ( double p, double h, double *r, double *z ) ;
++double slaGmst ( double ut1 ) ;
++void slaHfk5z ( double rh, double dh, double jepoch,
++                double *r5, double *d5,
++                double *dr5, double *dd5 ) ;
++void slaMappa ( double eq, double date, double amprms[21] ) ;
++void slaMapqkz ( double rm, double dm, double amprms[21],
++                 double *ra, double *da ) ;
++void slaPrebn ( double bep0, double bep1, double rmatp[3][3] ) ;
++void slaPrec ( double ep0, double ep1, double rmatp[3][3] ) ;
++float slaRverot ( float phi, float ra, float dec, float st ) ;
++float slaRvgalc ( float ra, float dec ) ;
++float slaRvlg ( float ra, float dec ) ;
++float slaRvlsrd ( float ra, float dec ) ;
++float slaRvlsrk ( float ra, float dec ) ;
++void slaSubet ( double rc, double dc, double eq, double *rm, double *dm ) ;
++void slaSupgal ( double dsl, double dsb, double *dl, double *db ) ;
+--- saods9-4.0b7.orig/ast-3.5/Makefile
++++ saods9-4.0b7/ast-3.5/Makefile
+@@ -42,6 +42,7 @@
+ 	skyaxis.c \
+ 	skyframe.c \
+ 	slamap.c \
++	sla.c \
+ 	specframe.c \
+ 	specmap.c \
+ 	sphmap.c \
+--- saods9-4.0b7.orig/ast-3.5/slamap.c
++++ saods9-4.0b7/ast-3.5/slamap.c
+@@ -153,6 +153,7 @@
+ #include <stddef.h>
+ #include <stdio.h>
+ #include <string.h>
++#include <math.h>
+ 
+ /* Module Variables. */
+ /* ================= */
+--- saods9-4.0b7.orig/ast-3.5/plot.c
++++ saods9-4.0b7/ast-3.5/plot.c
+@@ -12526,6 +12526,7 @@
+    return ret;
+ }
+ 
++#if 0
+ static void GFlush( AstPlot *this, const char *method, 
+                    const char *class ) {
+ /*
+@@ -12592,6 +12593,7 @@
+    }
+ 
+ }
++#endif
+ 
+ static void GLine( AstPlot *this, int n, const float *x, 
+                    const float *y, const char *method, 
+--- saods9-4.0b7.orig/ast-3.5/fitschan.c
++++ saods9-4.0b7/ast-3.5/fitschan.c
+@@ -801,6 +801,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <math.h>
+ 
+ /* Type Definitions */
+ /* ================ */
diff --git a/debian/saods9.desktop b/debian/saods9.desktop
new file mode 100644
index 0000000..8b70e2b
--- /dev/null
+++ b/debian/saods9.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Version=1.0
+Name=DS9 Astro-Image Viewer
+GenericName=Image Viewer
+GenericName[en_GB]=Image Viewer
+Comment=View and analyze astronomical data
+Comment[en_GB]=View and analyse astronomical data
+Type=Application
+Exec=ds9
+Icon=ds9
+Categories=Education;Science;Astronomy;
diff --git a/debian/saods9.doc-base.ds9doc b/debian/saods9.doc-base.ds9doc
new file mode 100644
index 0000000..dc24230
--- /dev/null
+++ b/debian/saods9.doc-base.ds9doc
@@ -0,0 +1,28 @@
+Document: saods9-documents
+Title: DS9: Astronomical Data Visualization Application
+Author: William Joye <wjoye at cfa.harvard.edu>
+Abstract: SAOImage DS9 is an astronomical imaging and data
+ visualization application. DS9 supports FITS images and binary
+ tables, multiple frame buffers, region manipulation, and many scale
+ algorithms and colormaps. It provides for easy communication with
+ external analysis tasks and is highly configurable and extensible.
+ DS9 is a stand-alone application. It requires no installation or
+ support files.  Versions of DS9 currently exist for Sun Solaris, Sun
+ Solaris64, Linux, Linux64, LinuxPPC, MacOSX, Darwin, and Windows
+ NT/2000/XP. All versions and platforms support a consistent set of
+ GUI and functional capabilities.  DS9 supports advanced features such
+ as multiple frame buffers, mosaic images, tiling, blinking, geometric
+ markers, colormap manipulation, scaling, arbitrary zoom, rotation,
+ pan, and a variety of coordinate systems. DS9 also supports FTP and
+ HTTP access.  The GUI for DS9 is user configurable. GUI elements such
+ as the coordinate display, panner, magnifier, horizontal and vertical
+ graphs, button bar, and colorbar can be configured via menus or the
+ command line.  DS9 is a Tk/Tcl application which utilizes the SAOTk
+ widget set.  It also incorporates the X Public Access (XPA) mechanism
+ to allow external processes to access and control its data, GUI
+ functions, and algorithms.
+Section: Apps/Science
+
+Format: HTML
+Index: /usr/share/doc/saods9/ds9doc/index.html
+Files: /usr/share/doc/saods9/html/*.html
diff --git a/debian/saods9.doc-base.ds9reference b/debian/saods9.doc-base.ds9reference
new file mode 100644
index 0000000..930462e
--- /dev/null
+++ b/debian/saods9.doc-base.ds9reference
@@ -0,0 +1,22 @@
+Document: saods9-reference-manual
+Title: DS9 Reference Manual
+Author: William Joye <wjoye at cfa.harvard.edu>
+Abstract: DS9 is the next version of the popular SAOtng display program.
+ It is a Tk/Tcl application which utilizes the SAOtk widget set. It
+ also incorporates the new X Public Access (XPA) mechanism to allow
+ external processes to access and control its data, GUI functions, and
+ algorithms. DS9  supports the direct display of FITS images and
+ binary tables, multiple frame buffers, region cursor manipulation,
+ many scale algorithms and colormaps, and easy communication with
+ external analysis tasks. It is highly configurable and extensible to
+ meet the evolving needs of the astronomical community.  DS9 supports
+ advanced features such as multiple frame buffers, mosaic images,
+ tiling, blinking, geometric markers, colormap manipulation, scaling,
+ arbitrary zoom, rotation, pan, and a variety of coordinate systems
+ (including Image, Physical, Detector, and WCS). DS9 also supports FTP
+ and HTTP access. The GUI for DS9 is user configurable.
+Section: Apps/Science
+
+Format: HTML
+Index: /usr/share/doc/saods9/ref/index.html
+Files: /usr/share/doc/saods9/ref/*.html
diff --git a/debian/saods9.doc-base.ds9release b/debian/saods9.doc-base.ds9release
new file mode 100644
index 0000000..202d7ee
--- /dev/null
+++ b/debian/saods9.doc-base.ds9release
@@ -0,0 +1,9 @@
+Document: saods9-release-notes
+Title: DS9 Release Notes
+Author: William Joye <wjoye at cfa.harvard.edu>
+Abstract: SAOImage DS9 Version 4.0 Release Notes
+Section: Apps/Science
+
+Format: HTML
+Index: /usr/share/doc/saods9/release/r4.0.html
+Files: /usr/share/doc/saods9/release/*.html
diff --git a/debian/saods9.doc-base.xpahelp b/debian/saods9.doc-base.xpahelp
new file mode 100644
index 0000000..82599bb
--- /dev/null
+++ b/debian/saods9.doc-base.xpahelp
@@ -0,0 +1,9 @@
+Document: saods9-xpa-help
+Title: XPA: Public Access to Data and Algorithms
+Author: Eric Mandel <eric at head.cfa.harvard.edu>
+Abstract: This document is the Table of Contents for XPA.
+Section: Apps/Science
+
+Format: HTML
+Index: /usr/share/doc/saods9/xpadoc/help.html
+Files: /usr/share/doc/saods9/xpadoc/*.html
diff --git a/debian/shlibs.local b/debian/shlibs.local
new file mode 100644
index 0000000..29c098f
--- /dev/null
+++ b/debian/shlibs.local
@@ -0,0 +1 @@
+/usr/lib/Tktable 2 tktable (>=2.9-1)
diff --git a/debian/sla_functions b/debian/sla_functions
new file mode 100644
index 0000000..43069d4
--- /dev/null
+++ b/debian/sla_functions
@@ -0,0 +1,50 @@
+slaAddet
+slaAmpqk
+slaCaldj
+slaDaf2r
+slaDav2m
+slaDbear
+slaDcc2s
+slaDcs2c
+slaDd2tf
+slaDimxv
+slaDjcal
+slaDjcl
+slaDmat
+slaDmxm
+slaDmxv
+slaDrange
+slaDranrm
+slaDsep
+slaDtf2d
+slaDtf2r
+slaDvdv
+slaDvn
+slaDvxv
+slaEcmat
+slaEpb
+slaEpb2d
+slaEpj
+slaEpj2d
+slaEqeqx
+slaEqgal
+slaEvp
+slaFk45z
+slaFk54z
+slaFk5hz
+slaGaleq
+slaGalsup
+slaGeoc
+slaGmst
+slaHfk5z
+slaMappa
+slaMapqkz
+slaPrebn
+slaPrec
+slaRverot
+slaRvgalc
+slaRvlg
+slaRvlsrd
+slaRvlsrk
+slaSubet
+slaSupgal
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 0000000..5ea7a98
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,2 @@
+version=2
+http://hea-www.harvard.edu/RD/ds9/ http://hea-www.harvard.edu/saord/download/ds9/source/ds9\.(.*)\.tar\.gz debian uupdate

-- 
image display tool for astronomy



More information about the debian-science-commits mailing list