[grass] 01/09: Imported Upstream version 7.0.5~rc2

Bas Couwenberg sebastic at debian.org
Mon Sep 19 09:34:14 UTC 2016


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository grass.

commit c835ff30d52ed003d5ae13310f4c0198bfabd8aa
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Mon Sep 19 09:30:18 2016 +0200

    Imported Upstream version 7.0.5~rc2
---
 ChangeLog_7.0.5RC1.gz                              |  Bin 834097 -> 0 bytes
 ChangeLog_7.0.5RC2.gz                              |  Bin 0 -> 835311 bytes
 db/db.connect/db.connect.html                      |   25 +-
 db/drivers/postgres/db.c                           |   17 +-
 demolocation/PERMANENT/.bash_history               |   44 -
 demolocation/PERMANENT/.bashrc                     |   26 -
 display/d.mon/main.c                               |    4 +-
 display/d.rast.arrow/d.rast.arrow.html             |   48 +-
 doc/howto_release.txt                              |   21 +-
 gui/scripts/d.wms.py                               |    3 +-
 gui/wxpython/animation/g.gui.animation.py          |    2 +-
 gui/wxpython/core/gconsole.py                      |    8 +-
 gui/wxpython/core/workspace.py                     |    1 +
 gui/wxpython/modules/extensions.py                 |    3 +-
 imagery/i.atcorr/sensors_csv/PRISM-B.csv           |    3 +-
 imagery/i.atcorr/sensors_csv/PRISM-F.csv           |    3 +-
 imagery/i.atcorr/sensors_csv/PRISM-N.csv           |    3 +-
 imagery/i.eb.eta/i.eb.eta.html                     |    2 +-
 imagery/i.eb.hsebal01/i.eb.hsebal01.html           |    2 +-
 imagery/i.eb.netrad/i.eb.netrad.html               |    2 +-
 imagery/i.eb.soilheatflux/i.eb.soilheatflux.html   |    2 +-
 imagery/i.evapo.mh/i.evapo.mh.html                 |    2 +-
 imagery/i.evapo.pm/i.evapo.pm.html                 |    2 +-
 imagery/i.evapo.pt/i.evapo.pt.html                 |    2 +-
 imagery/i.evapo.time/i.evapo.time.html             |    2 +-
 imagery/i.fft/i.fft.html                           |    2 +-
 include/VERSION                                    |    2 +-
 lib/db/sqlp/sql.html                               |    8 +-
 lib/python/pygrass/modules/grid/grid.py            |    2 +-
 lib/python/script/setup.py.tmp                     |  196 --
 lib/raster/get_row.c                               |    2 +-
 lib/raster/open.c                                  |    2 +-
 misc/m.nviz.script/m.nviz.script.html              |    2 +-
 mswindows/osgeo4w/setup.hint                       |    5 +-
 raster/r.in.gdal/r.in.gdal.html                    |  160 +-
 raster/r.mapcalc/mapcalc.output                    | 2506 --------------------
 raster/r.mapcalc/mapcalc.tab.c                     | 2043 ----------------
 raster/r.mapcalc/mapcalc.tab.h                     |  122 -
 raster/r.mapcalc/mapcalc.yy.c                      | 2241 -----------------
 raster/r.mapcalc/r3.mapcalc.html                   |    2 +-
 raster/r.out.gdal/main.c                           |    2 +-
 raster/r.timestamp/r.timestamp.html                |    2 +-
 raster/r.viewshed/r.viewshed.html                  |   15 +-
 raster/r.viewshed/r.viewshed.png                   |  Bin 96867 -> 245746 bytes
 raster/r.watershed/front/r.watershed.html          |    2 +-
 raster3d/r3.timestamp/r3.timestamp.html            |    2 +-
 scripts/g.extension/g.extension.py                 |    3 +-
 scripts/r.pack/r.pack.html                         |    2 +-
 .../t.rast.aggregate.ds/t.rast.aggregate.ds.html   |    4 +-
 temporal/t.rast.out.vtk/t.rast.out.vtk.html        |    4 +-
 temporal/t.vect.algebra/t.vect.algebra.py          |    4 +-
 vector/v.buffer/v.buffer.html                      |    4 +-
 vector/v.category/main.c                           |    2 +
 vector/v.net.flow/v.net.flow.html                  |    6 +-
 vector/v.net.visibility/v.net.visibility.html      |    4 +-
 vector/v.overlay/area_area.c                       |    2 +-
 vector/v.overlay/line_area.c                       |    2 +-
 vector/v.overlay/v.overlay.html                    |    2 +-
 vector/v.random/v.random.html                      |    4 +-
 vector/v.timestamp/v.timestamp.html                |    2 +-
 vector/v.what/what.c                               |    5 +-
 61 files changed, 247 insertions(+), 7348 deletions(-)

diff --git a/ChangeLog_7.0.5RC1.gz b/ChangeLog_7.0.5RC1.gz
deleted file mode 100644
index 959b5f5..0000000
Binary files a/ChangeLog_7.0.5RC1.gz and /dev/null differ
diff --git a/ChangeLog_7.0.5RC2.gz b/ChangeLog_7.0.5RC2.gz
new file mode 100644
index 0000000..069de1d
Binary files /dev/null and b/ChangeLog_7.0.5RC2.gz differ
diff --git a/db/db.connect/db.connect.html b/db/db.connect/db.connect.html
index 4683ccf..cca2add 100644
--- a/db/db.connect/db.connect.html
+++ b/db/db.connect/db.connect.html
@@ -4,7 +4,8 @@
 These parameters are then taken as default values by modules so that the
 user does not need to enter the parameters each time.
 <p>
-The default database backend in GRASS GIS 7 is SQLite.
+The default database backend in GRASS GIS 7
+is <a href="grass-sqlite.html">SQLite</a>.
 
 <h2>NOTES</h2>
 
@@ -14,8 +15,9 @@ the connection is not tested for validity.
 <p>The <b>-c</b> flag will silently check if the connection parameters have
 been set, and if not will set them to use GRASS's default values.
 (useful in scripts before you attempt to create a new database table)
-<p>To connect a vector map to a database table, use <em>v.db.connect</em>
-or <em>v.db.addtable</em>.
+<p>To connect a vector map to a database table,
+use <em><a href="v.db.connect.html">v.db.connect</a></em> or
+<em><a href="v.db.addtable.html">v.db.addtable</a></em>.
 
 
 <h2>EXAMPLES</h2>
@@ -30,7 +32,7 @@ db.connect -p
 db.tables -p
 </pre></div>
 <p>The SQLite database file is created automatically when used the first time.
-
+<p>See <a href="grass-sqlite.html">SQLite</a> database driver for details.
 
 <h3>ODBC</h3>
 
@@ -43,7 +45,7 @@ db.login user=myname [pass=secret]
 db.connect -p
 db.tables -p
 </pre></div>
-
+<p>See <a href="grass-pg.html">PostgreSQL</a> database driver for details.
 
 <h3>PostgreSQL</h3>
 
@@ -56,7 +58,7 @@ db.login user=myname [pass=secret]
 db.connect -p
 db.tables -p
 </pre></div>
-
+<p>See <a href="grass-pg.html">PostgreSQL</a> database driver for details.
 
 <h3>PostgreSQL with different port</h3>
 
@@ -69,7 +71,7 @@ db.login user=myname [pass=secret]
 db.connect -p
 db.tables -p
 </pre></div>
-
+<p>See <a href="grass-mysql.html">MySQL</a> database driver for details.
 
 <h3>MySQL (local connection)</h3>
 
@@ -81,7 +83,8 @@ db.login user=myname [pass=secret]
 db.connect -p
 db.tables -p
 </pre></div>
-
+<p>See <a href="grass-mysql.html">MySQL</a> database driver for details.
+  
 
 <h3>MySQL (external server)</h3>
 
@@ -94,6 +97,7 @@ db.login user=myname [pass=secret]
 db.connect -p
 db.tables -p
 </pre></div>
+<p>See <a href="grass-odbc.html">ODBC</a> database driver for details.
 
 <h3>DBF (local, not recommended)</h3>
 
@@ -104,7 +108,8 @@ created by the user):
 db.connect driver=dbf database='$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/'
 db.tables -p
 </pre></div>
-
+<p>See <a href="grass-dbf.html">DBF</a> database driver for details.
+  
 <h2>SEE ALSO</h2>
 
 <em>
@@ -126,4 +131,4 @@ Main author: Radim Blazek, ITC-Irst, Trento, Italy<br>
 GRASS 7 improvements: Martin Landa, Markus Metz
 
 <p>
-<i>Last changed: $Date: 2014-11-28 10:58:18 +0100 (Fri, 28 Nov 2014) $</i>
+<i>Last changed: $Date: 2016-09-11 13:25:46 +0200 (Sun, 11 Sep 2016) $</i>
diff --git a/db/drivers/postgres/db.c b/db/drivers/postgres/db.c
index 828ee16..923973e 100644
--- a/db/drivers/postgres/db.c
+++ b/db/drivers/postgres/db.c
@@ -54,19 +54,18 @@ int db__driver_open_database(dbHandle * handle)
 	return DB_FAILED;
     }
 
-    G_debug(3,
-	    "db_driver_open_database(): host = %s, port = %s, options = %s, tty = %s, "
-	    "dbname = %s, user = %s, password = %s, host = %s, port = %s "
-	    "schema = %s", pgconn.host, pgconn.port, pgconn.options,
-	    pgconn.tty, pgconn.dbname, pgconn.user, pgconn.password,
-            pgconn.host, pgconn.port,
-	    pgconn.schema);
-
     db_get_login2("pg", name, &user, &password, &host, &port);
 
     pg_conn = PQsetdbLogin(host, port, pgconn.options, pgconn.tty,
 			   pgconn.dbname, user, password);
-    
+
+    G_debug(3,
+	    "db_driver_open_database(): host = %s, port = %s, options = %s, tty = %s, "
+	    "dbname = %s, user = %s, password = %s "
+	    "schema = %s", host, port, pgconn.options,
+	    pgconn.tty, pgconn.dbname, user, password,
+	    pgconn.schema);
+
     if (PQstatus(pg_conn) == CONNECTION_BAD) {
 	db_d_append_error("%s\n%s",
 			  _("Connection failed."),
diff --git a/demolocation/PERMANENT/.bash_history b/demolocation/PERMANENT/.bash_history
deleted file mode 100644
index 9639bb5..0000000
--- a/demolocation/PERMANENT/.bash_history
+++ /dev/null
@@ -1,44 +0,0 @@
-v.unpack country_boundaries.pack 
-g.proj -w
-v.unpack country_boundaries.pack -v
-v.unpack country_boundaries.pack --v
-g.proj -w
-g.proj -p
-cd grass70/demolocation/PERMANENT/
-pwd
-meld PROJ_INFO ~/grassdata/ll/PERMANENT/PERMANENT/PROJ_INFO 
-cp ~/grassdata/ll/PERMANENT/PERMANENT/PROJ_INFO .
-svn diff
-cat PROJ_
-cat PROJ_INFO 
-cat PROJ_UNITS �
-cat PROJ_UNITS
-ccat ~/grassdata/ll/PERMANENT/PERMANENT/PROJ_UNITS 
-cat ~/grassdata/ll/PERMANENT/PERMANENT/PROJ_UNITS 
-svn ci -m"demolocation: update to current file structure as generated with 'grass70 -c EPSG:4326 ~/grassdata/ll/PERMANENT'" PROJ_INFO 
-v.unpack country_boundaries.pack --v
-l /home/neteler/grass70/demolocation/PERMANENT/
-cd grass70/demolocation/PERMANENT/
-mkdir sqlite
-cd
-v.unpack country_boundaries.pack --v
-v.unpack country_boundaries.pack --v --o
-v.info country_boundaries.pack
-v.info country_boundaries
-v.db.connect -p country_boundaries
-g.region -p
-g.gui
-v.info -c country_boundaries
-cd demolocation/PERMANENT/
-l
-g.list vect
-g.remove vect=country_boundaries
-sqlite3 sqlite/sqlite.db 
-rmdir dbf/
-rm -rf sqlite/
-cd
-v.unpack country_boundaries.pack
-r.fuzzy.system help
-R
-cd
-R
diff --git a/demolocation/PERMANENT/.bashrc b/demolocation/PERMANENT/.bashrc
deleted file mode 100644
index fe7b8d6..0000000
--- a/demolocation/PERMANENT/.bashrc
+++ /dev/null
@@ -1,26 +0,0 @@
-test -r ~/.alias && . ~/.alias
-PS1='GRASS 7.0.svn (demolocation):\w > '
-PROMPT_COMMAND="'/home/neteler/grass70/dist.x86_64-unknown-linux-gnu/etc/prompt.py'"
-# User specific aliases and functions
-alias cp='cp -i'
-alias mv='mv -i'
-alias rm='rm -i'
-alias df='df -h -x supermount'
-alias du='du -h'
-alias egrep='egrep --color'
-alias fgrep='fgrep --color'
-alias grep='grep --color'
-alias l='ls -lrt --color=tty'
-alias ls='ls -F --show-control-chars --color=auto'
-alias vi='vim'
-alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
-alias scpresume='rsync --partial --times --progress --rsh=ssh'
-alias scpresume_compress='rsync --partial --times --progress --compress --rsh=ssh'
-# http://vim.wikia.com/wiki/How_to_obscure_text_instantaneously
-alias rot13="tr 'A-Za-z' 'N-ZA-Mn-za-m'"
-export SVN_EDITOR=vim
-
-
-
-export PATH="/home/neteler/grass70/dist.x86_64-unknown-linux-gnu/bin:/home/neteler/grass70/dist.x86_64-unknown-linux-gnu/scripts:/home/neteler/.grass7/addons/bin:/home/neteler/.grass7/addons/scripts:/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/libexec/lightdm:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/usr/sbin:/home/neteler/bin:/home/neteler/.local/bin:/home/neteler/bin:/usr/sbin:/home/neteler/bin"
-export HOME="/home/neteler"
diff --git a/display/d.mon/main.c b/display/d.mon/main.c
index 020bc1b..c208566 100644
--- a/display/d.mon/main.c
+++ b/display/d.mon/main.c
@@ -64,7 +64,7 @@ int main(int argc, char *argv[])
     width_opt = G_define_option();
     width_opt->key = "width";
     width_opt->label = _("Width for display monitor if not set by GRASS_RENDER_WIDTH");
-    width_opt->description = _("Default value: 640");
+    width_opt->description = _("Default value: 720");
     width_opt->type = TYPE_INTEGER;
     width_opt->key_desc = "value";
     width_opt->guisection = _("Settings");
@@ -185,7 +185,7 @@ int main(int argc, char *argv[])
     if (start_opt->answer) {
         int width, height;
 
-        width = width_opt->answer ? atoi(width_opt->answer) : 640;
+        width = width_opt->answer ? atoi(width_opt->answer) : 720;
         height = height_opt->answer ? atoi(height_opt->answer) : 480;
         if (res_opt->answer) {
             int res;
diff --git a/display/d.rast.arrow/d.rast.arrow.html b/display/d.rast.arrow/d.rast.arrow.html
index 5123cc2..2768ebd 100644
--- a/display/d.rast.arrow/d.rast.arrow.html
+++ b/display/d.rast.arrow/d.rast.arrow.html
@@ -19,20 +19,20 @@ Cells containing null data will be marked with an "X".
 You can disable drawing of null data and unknown aspect values by
 setting its color to "<tt>none</tt>".
 
-<p>If you specify the <em>magnitude_map</em> option, arrow lengths 
-denoting magnitude will be extracted from the cell values of the specified 
+<p>When specifying the <em>magnitude_map</em> option, arrow lengths
+denoting magnitude will be extracted from the cell values of the specified
 map. In this case the tail of the arrow will be centered on the source cell.
 You may adjust the overall scale using the <em>scale</em> option.
 <em>d.rast.arrow</em> will ignore NULL and negative magnitudes, and will
 warn you if the debug level is set at 5 or higher. Be aware. If your application
-uses negative values for magnitude, you can use <em>r.mapcalc</em> to prepare
-the magnitude map to suit your needs (absolute value, inverted direction and 
-so on). 
+uses negative values for magnitude, you can use
+<em><a href="r.mapcalc.html">r.mapcalc</a></em> to prepare the magnitude map to
+suit your needs (absolute value, inverted direction and so on).
 
 <p><h2>NOTES</h2>
-By default, arrows are drawn at the size of a cell and cannot be seen if 
-the raster map is relatively close in scale. You can use the <em>skip</em> 
-option to draw arrows every n-th cell in both directions if you are working 
+By default, arrows are drawn at the size of a cell and cannot be seen if
+the raster map is relatively close in scale. You can use the <em>skip</em>
+option to draw arrows every n-th cell in both directions if you are working
 with relatively high resolutions. It may be useful to disable the grid in
 this case, which is accomplished by setting its color to "<tt>none</tt>".
 <p>For GRASS and Compass type aspect maps, the cell values of the aspect map
@@ -40,7 +40,7 @@ will determine the corresponding direction in 360 degrees. ANSWERS type
 aspect maps will be plotted in multiples of 15 degrees, and AGNPS type
 aspect maps will be displayed in D8 representation, i.e. the eight multiples 
 of 45 degrees.
-<p>GRASS aspect maps are measured using Cartesian conventions, i.e. in degrees 
+<p>GRASS aspect maps are measured using Cartesian conventions, i.e. in degrees
 counterclockwise from east. e.g.:
 
 <div class="code"><pre>
@@ -50,17 +50,20 @@ counterclockwise from east. e.g.:
 0,360 East
 </pre></div>
 
-They can be created from a raster elevation map with <em>r.slope.aspect</em>.
+They can be created from a raster elevation map with
+<em><a href="r.slope.aspect.html">r.slope.aspect</a></em>.
 <p>Compass type aspect maps are measured in degrees clockwise from north.
-<p>This module uses oceanographic conventions, i.e. arrows point downslope or 
+<p>This module uses oceanographic conventions, i.e. arrows point downslope or
 direction "to", as opposed to atmospheric conventions (direction "from").
 
 
 <h2>EXAMPLE</h2>
 
-Convert U,V velocity component maps into magnitide,direction maps for use 
+<!-- TODO: add NC example: where to get U and V maps from? -->
+
+Convert U,V velocity component maps into magnitude,direction maps for use
 with <em>d.rast.arrow</em>:
-  
+
 <div class="code"><pre>
 r.mapcalc "magnitude = sqrt(U_map^2 + V_map^2)"
 r.mapcalc "direction = atan(U_map, V_map)"
@@ -69,13 +72,16 @@ d.rast.arrow map=direction type=grass magnitude_map=magnitude skip=3 grid=none
 
 <h2>SEE ALSO</h2>
 
-<em><a href="d.frame.html">d.frame</a></em><br>
-<em><a href="d.rast.html">d.rast</a></em><br>
-<em><a href="d.rast.edit.html">d.rast.edit</a></em><br>
-<em><a href="d.rast.num.html">d.rast.num</a></em><br>
-<em><a href="g.region.html">g.region</a></em><br>
-<em><a href="r.slope.aspect.html">r.slope.aspect</a></em><br>
-<br>
+<em>
+<a href="d.frame.html">d.frame</a>,
+<a href="d.rast.html">d.rast</a>,
+<a href="d.rast.edit.html">d.rast.edit</a>,
+<a href="d.rast.num.html">d.rast.num</a>,
+<a href="g.region.html">g.region</a>,
+<a href="r.slope.aspect.html">r.slope.aspect</a>,
+<a href="r.watershed.html">r.watershed</a>
+</em>
+
 
 <h2>AUTHORS</h2>
 
@@ -88,4 +94,4 @@ Hamish Bowman<br>
 <em>Department of Marine Science, <br>
 University of Otago, New Zealand</em>
 
-<p><i>Last changed: $Date: 2014-11-25 15:36:43 +0100 (Tue, 25 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2016-09-11 21:39:11 +0200 (Sun, 11 Sep 2016) $</i>
diff --git a/doc/howto_release.txt b/doc/howto_release.txt
index 61bc63d..f5d53ca 100644
--- a/doc/howto_release.txt
+++ b/doc/howto_release.txt
@@ -1,6 +1,6 @@
 How to release GRASS GIS binaries and source code
 
-$Date: 2016-06-02 01:11:23 +0200 (Thu, 02 Jun 2016) $
+$Date: 2016-08-27 20:14:52 +0200 (Sat, 27 Aug 2016) $
 
 Note: This text contains *some* rules only applicable to the
       development coordinator (currently Markus Neteler, PSC Chair).
@@ -62,14 +62,12 @@ Contents
 2016
       rm -f include/VERSION~
 
-    - Update additionally the winGRASS version
-      grass-addons/tools/wingrass-packager/grass_packager_release.bat
-      grass-addons/tools/wingrass-packager/grass_addons.sh
-      grass-addons/tools/wingrass-packager/grass_copy_wwwroot.sh
-
     - Update OSGeo4W setup.hint file
       mswindows/osgeo4w/setup.hint
 
+      for RC candidates use 'test' keyword
+      for final version use 'curr' keyword
+      
      #version:
      MAJOR=`cat include/VERSION | head -1 | tail -1`
      MINOR=`cat include/VERSION | head -2 | tail -1`
@@ -77,7 +75,7 @@ Contents
      VERSION=${MAJOR}.${MINOR}.${RELEASE}
      echo $VERSION
 
-     svn ci -m"GRASS GIS $VERSION" include/VERSION
+     svn ci -m"GRASS GIS $VERSION" include/VERSION mswindows/osgeo4w/setup.hint
      svn up
 
  o Create Changelog file on release branch:
@@ -139,7 +137,12 @@ Contents
          INSTALL REQUIREMENTS.html SUBMITTING neteler@$SERVER1
      scp -p grass-$VERSION.* AUTHORS COPYING ChangeLog_$VERSION.gz \
          INSTALL REQUIREMENTS.html SUBMITTING neteler@$SERVER2
-    
+
+ o update winGRASS related files
+    - Update the winGRASS version
+      grass-addons/tools/wingrass-packager/grass_packager_release.bat
+      grass-addons/tools/wingrass-packager/grass_addons.sh
+      grass-addons/tools/wingrass-packager/grass_copy_wwwroot.sh
 
  o update web site to new version: CMS
     - News section
@@ -168,7 +171,7 @@ Contents
          scp -r * neteler at grass.osgeo.org:/osgeo/grass/grass-cms/grass$MAJOR$MINOR/manuals/
          scp -r * neteler at upload.osgeo.org:/osgeo/download/grass/grass$MAJOR$MINOR/manuals/
 
- o stable release: update cronjob 'cron_grass_HEAD_src_snapshot.sh' to next but one
+ o stable release: update cronjob 'cron_grass_HEAD_src_snapshot.sh' on grass.osgeo.org to next but one
                    release tag for the differences
 
  o Trac updates:
diff --git a/gui/scripts/d.wms.py b/gui/scripts/d.wms.py
index 994698d..500269a 100644
--- a/gui/scripts/d.wms.py
+++ b/gui/scripts/d.wms.py
@@ -157,6 +157,7 @@
 
 import os
 import sys
+import shutil
 
 from grass.script import core as grass
 
@@ -202,7 +203,7 @@ def main():
         wms = WMSGdalDrv()
     
     temp_map = wms.GetMap(options, flags) 
-    os.rename(temp_map, os.environ["GRASS_RENDER_FILE"])
+    shutil.move(temp_map, os.environ["GRASS_RENDER_FILE"])
 
     return 0
 
diff --git a/gui/wxpython/animation/g.gui.animation.py b/gui/wxpython/animation/g.gui.animation.py
index e7cf4fc..ae5de9d 100644
--- a/gui/wxpython/animation/g.gui.animation.py
+++ b/gui/wxpython/animation/g.gui.animation.py
@@ -105,7 +105,7 @@ def main():
         layer = AnimLayer()
         layer.mapType = 'vector'
         layer.name = vect
-        layer.cmd = ['d.vect', 'map={name=}'.format(name=vect.split(',')[0])]
+        layer.cmd = ['d.vect', 'map={name}'.format(name=vect.split(',')[0])]
         layerList.AddLayer(layer)
     if strds:
         layer = AnimLayer()
diff --git a/gui/wxpython/core/gconsole.py b/gui/wxpython/core/gconsole.py
index d777fba..c73a0b3 100644
--- a/gui/wxpython/core/gconsole.py
+++ b/gui/wxpython/core/gconsole.py
@@ -44,7 +44,7 @@ from gui_core.forms import GUI
 from core.debug import Debug
 from core.settings import UserSettings
 from core.giface import Notification
-
+from gui_core.widgets import FormNotebook
 
 wxCmdOutput, EVT_CMD_OUTPUT = NewEvent()
 wxCmdProgress, EVT_CMD_PROGRESS = NewEvent()
@@ -494,9 +494,11 @@ class GConsole(wx.EvtHandler):
                                                                       'opt': p.get('name', '')})
                             return
 
+                # no arguments given
                 if len(command) == 1 and hasParams and \
-                        command[0] != 'v.krige':
-                    # no arguments given
+                   not isinstance(self._guiparent, FormNotebook) and \
+                   command[0] != 'v.krige':
+                    # also parent must be checked, see #3135 for details
                     try:
                         GUI(parent=self._guiparent, giface=self._giface).ParseCommand(command)
                     except GException as e:
diff --git a/gui/wxpython/core/workspace.py b/gui/wxpython/core/workspace.py
index 7bcfe02..838cc81 100644
--- a/gui/wxpython/core/workspace.py
+++ b/gui/wxpython/core/workspace.py
@@ -72,6 +72,7 @@ class ProcessWorkspaceFile:
         """
         value = value.replace('<', '<')
         value = value.replace('>', '>')
+        value = value.replace('&', '&')
         
         return value
 
diff --git a/gui/wxpython/modules/extensions.py b/gui/wxpython/modules/extensions.py
index 14ab260..6039b45 100644
--- a/gui/wxpython/modules/extensions.py
+++ b/gui/wxpython/modules/extensions.py
@@ -267,7 +267,7 @@ class ExtensionTreeModelBuilder:
         for prefix in ('display', 'database',
                        'general', 'imagery',
                        'misc', 'postscript', 'paint',
-                       'raster', 'raster3D', 'sites', 'vector', 'wxGUI', 'other'):
+                       'raster', 'raster3D', 'sites', 'temporal', 'vector', 'wxGUI', 'other'):
             node = self.model.AppendNode(parent=self.model.root, label=prefix)
             self.mainNodes[prefix] = node
         
@@ -291,6 +291,7 @@ class ExtensionTreeModelBuilder:
                  'r'  : 'raster',
                  'r3' : 'raster3D',
                  's'  : 'sites',
+                 't'  : 'temporal',
                  'v'  : 'vector',
                  'wx' : 'wxGUI',
                  ''   : 'other' }
diff --git a/imagery/i.atcorr/sensors_csv/PRISM-B.csv b/imagery/i.atcorr/sensors_csv/PRISM-B.csv
index 72aef16..c73b4b9 100644
--- a/imagery/i.atcorr/sensors_csv/PRISM-B.csv
+++ b/imagery/i.atcorr/sensors_csv/PRISM-B.csv
@@ -1,5 +1,4 @@
-,"B-CCD4_reflection","B-CCD4_reflect","B-CCD5_transmit","B-CCD5_transmit"
-"WL(nm)","ODD(4927)","EVEN(4928)","ODD(31)","EVEN(32)"
+"WL(nm)","B-CCD4_reflection","B-CCD4_reflect","B-CCD5_transmit","B-CCD5_transmit"
 450,0.0119,0.0205,0.0290,0.0310
 460,0.0049,0.0242,0.0047,-0.0096
 470,0.0000,0.0072,0.0195,0.0131
diff --git a/imagery/i.atcorr/sensors_csv/PRISM-F.csv b/imagery/i.atcorr/sensors_csv/PRISM-F.csv
index 7561ef5..0674028 100644
--- a/imagery/i.atcorr/sensors_csv/PRISM-F.csv
+++ b/imagery/i.atcorr/sensors_csv/PRISM-F.csv
@@ -1,5 +1,4 @@
-,"B-CCD4_reflection","B-CCD4_reflect","B-CCD5_transmit","B-CCD5_transmit"
-"WL(nm)","ODD(4975)","EVEN(4976)","ODD(15)","EVEN(16)"
+"WL(nm)","B-CCD4_reflection","B-CCD4_reflect","B-CCD5_transmit","B-CCD5_transmit"
 450,0.0037,0.0000,0.0000,0.0000
 460,0.0060,0.0013,0.0053,0.0080
 470,0.0039,0.0061,0.0042,0.0049
diff --git a/imagery/i.atcorr/sensors_csv/PRISM-N.csv b/imagery/i.atcorr/sensors_csv/PRISM-N.csv
index 7561ef5..0674028 100644
--- a/imagery/i.atcorr/sensors_csv/PRISM-N.csv
+++ b/imagery/i.atcorr/sensors_csv/PRISM-N.csv
@@ -1,5 +1,4 @@
-,"B-CCD4_reflection","B-CCD4_reflect","B-CCD5_transmit","B-CCD5_transmit"
-"WL(nm)","ODD(4975)","EVEN(4976)","ODD(15)","EVEN(16)"
+"WL(nm)","B-CCD4_reflection","B-CCD4_reflect","B-CCD5_transmit","B-CCD5_transmit"
 450,0.0037,0.0000,0.0000,0.0000
 460,0.0060,0.0013,0.0053,0.0080
 470,0.0039,0.0061,0.0042,0.0049
diff --git a/imagery/i.eb.eta/i.eb.eta.html b/imagery/i.eb.eta/i.eb.eta.html
index b8b5d09..8a49f61 100644
--- a/imagery/i.eb.eta/i.eb.eta.html
+++ b/imagery/i.eb.eta/i.eb.eta.html
@@ -51,4 +51,4 @@ in: Irmak, A. (Ed.), Evapotranspiration - Remote Sensing and Modeling. InTech.
 
 Yann Chemin, Asian Institute of Technology, Thailand
 
-<p><i>Last changed: $Date: 2015-01-25 18:55:23 +0100 (Sun, 25 Jan 2015) $</i>
+<p><i>Last changed: $Date: 2015-01-25 18:56:33 +0100 (Sun, 25 Jan 2015) $</i>
diff --git a/imagery/i.eb.hsebal01/i.eb.hsebal01.html b/imagery/i.eb.hsebal01/i.eb.hsebal01.html
index 6015e3b..aa08f50 100644
--- a/imagery/i.eb.hsebal01/i.eb.hsebal01.html
+++ b/imagery/i.eb.hsebal01/i.eb.hsebal01.html
@@ -69,4 +69,4 @@ Philippines.
 <p>Contact: <a href="mailto:yann.chemin at gmail.com">Yann Chemin</a>
 
 
-<p><i>Last changed: $Date: 2015-01-25 18:55:23 +0100 (Sun, 25 Jan 2015) $</i>
+<p><i>Last changed: $Date: 2015-01-25 18:56:33 +0100 (Sun, 25 Jan 2015) $</i>
diff --git a/imagery/i.eb.netrad/i.eb.netrad.html b/imagery/i.eb.netrad/i.eb.netrad.html
index 63eb620..9d6a8ad 100644
--- a/imagery/i.eb.netrad/i.eb.netrad.html
+++ b/imagery/i.eb.netrad/i.eb.netrad.html
@@ -47,4 +47,4 @@ in: Irmak, A. (Ed.), Evapotranspiration - Remote Sensing and Modeling. InTech.
 
 Yann Chemin, International Rice Research Institute, The Philippines
 
-<p><i>Last changed: $Date: 2014-12-09 18:23:56 +0100 (Tue, 09 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-09 18:31:29 +0100 (Tue, 09 Dec 2014) $</i>
diff --git a/imagery/i.eb.soilheatflux/i.eb.soilheatflux.html b/imagery/i.eb.soilheatflux/i.eb.soilheatflux.html
index 0e2771b..1a1e33e 100644
--- a/imagery/i.eb.soilheatflux/i.eb.soilheatflux.html
+++ b/imagery/i.eb.soilheatflux/i.eb.soilheatflux.html
@@ -71,4 +71,4 @@ in: Irmak, A. (Ed.), Evapotranspiration - Remote Sensing and Modeling. InTech.
 
 Yann Chemin, Asian Institute of Technology, Thailand<br>
 
-<p><i>Last changed: $Date: 2015-02-27 12:03:54 +0100 (Fri, 27 Feb 2015) $</i>
+<p><i>Last changed: $Date: 2015-02-27 12:04:43 +0100 (Fri, 27 Feb 2015) $</i>
diff --git a/imagery/i.evapo.mh/i.evapo.mh.html b/imagery/i.evapo.mh/i.evapo.mh.html
index a04362d..b76929f 100644
--- a/imagery/i.evapo.mh/i.evapo.mh.html
+++ b/imagery/i.evapo.mh/i.evapo.mh.html
@@ -31,4 +31,4 @@ under inaccurate data conditions. Irrigation and Drainage Systems 16: 33-45.</li
 
 Yann Chemin, GRASS Development team, 2007-2016<br>
 
-<p><i>Last changed: $Date: 2016-01-27 23:51:14 +0100 (Wed, 27 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-27 23:53:28 +0100 (Wed, 27 Jan 2016) $</i>
diff --git a/imagery/i.evapo.pm/i.evapo.pm.html b/imagery/i.evapo.pm/i.evapo.pm.html
index b1317c8..66fcf19 100644
--- a/imagery/i.evapo.pm/i.evapo.pm.html
+++ b/imagery/i.evapo.pm/i.evapo.pm.html
@@ -83,4 +83,4 @@ applied science for the Southern Switzerland)
   bare soil and grass. Proc. Roy. Soc. London, A193, pp. 120-146. 
 
 <p>
-<i>Last changed: $Date: 2015-08-01 21:15:13 +0200 (Sat, 01 Aug 2015) $</i>
+<i>Last changed: $Date: 2015-08-01 21:15:31 +0200 (Sat, 01 Aug 2015) $</i>
diff --git a/imagery/i.evapo.pt/i.evapo.pt.html b/imagery/i.evapo.pt/i.evapo.pt.html
index 20afdd1..3ec47e2 100644
--- a/imagery/i.evapo.pt/i.evapo.pt.html
+++ b/imagery/i.evapo.pt/i.evapo.pt.html
@@ -37,4 +37,4 @@ Alpha values extracted from:
 
 Yann Chemin, GRASS Development team, 2007-08
 
-<p><i>Last changed: $Date: 2014-12-09 18:23:56 +0100 (Tue, 09 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-09 18:31:29 +0100 (Tue, 09 Dec 2014) $</i>
diff --git a/imagery/i.evapo.time/i.evapo.time.html b/imagery/i.evapo.time/i.evapo.time.html
index 81a7f8a..a922232 100644
--- a/imagery/i.evapo.time/i.evapo.time.html
+++ b/imagery/i.evapo.time/i.evapo.time.html
@@ -64,4 +64,4 @@ For multi-year calculations, just continue incrementing DOY values above
 <h2>AUTHOR</h2>
 Yann Chemin, International Rice Research Institute, The Philippines
 
-<p><i>Last changed: $Date: 2014-12-27 23:28:56 +0100 (Sat, 27 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-27 23:51:00 +0100 (Sat, 27 Dec 2014) $</i>
diff --git a/imagery/i.fft/i.fft.html b/imagery/i.fft/i.fft.html
index 00851ab..06bc20b 100644
--- a/imagery/i.fft/i.fft.html
+++ b/imagery/i.fft/i.fft.html
@@ -64,4 +64,4 @@ Central Washington University
 <br>
 Glynn Clements (FFTW support)
 
-<p><i>Last changed: $Date: 2016-03-08 09:06:33 +0100 (Tue, 08 Mar 2016) $</i>
+<p><i>Last changed: $Date: 2016-03-08 09:08:23 +0100 (Tue, 08 Mar 2016) $</i>
diff --git a/include/VERSION b/include/VERSION
index d2b36e3..d5410aa 100644
--- a/include/VERSION
+++ b/include/VERSION
@@ -1,4 +1,4 @@
 7
 0
-5RC1
+5RC2
 2016
diff --git a/lib/db/sqlp/sql.html b/lib/db/sqlp/sql.html
index a5522b0..754a39f 100644
--- a/lib/db/sqlp/sql.html
+++ b/lib/db/sqlp/sql.html
@@ -186,7 +186,7 @@ d.vect roads where="cat>exprtest"
 
 <h3>Example of changing a SQL type (type casting)</h3>
 
-<i>Note: not supported for DBF driver.</i>
+<i>Note: not supported for <a href="grass-dbf.html">DBF driver</a>.</i>
 <p>
 North Carolina data set: convert string column to double precision:
 <p>
@@ -203,7 +203,7 @@ v.db.update mygeodetic_pts col=zval \
 
 <h3>Example of concatenation of fields</h3>
 
-<i>Note: not supported for DBF driver.</i>
+<i>Note: not supported for <a href="grass-dbf.html">DBF driver</a>.</i>
 
 <div class="code"><pre>
 v.db.update vectormap column=column3 qcolumn="column1 || column2"
@@ -224,8 +224,10 @@ v.db.update vectormap column=species qcolumn="CASE WHEN col1 >= 1 THEN cat WH
 <h2>SEE ALSO</h2>
 
 <em>
+<a href="db.connect.html">db.connect</a>,
 <a href="db.select.html">db.select</a>,
 <a href="db.execute.html">db.execute</a>,
+<a href="v.db.connect.html">v.db.connect</a>,
 <a href="v.db.select.html">v.db.select</a>,
 <a href="v.db.update.html">v.db.update</a>
 </em>
@@ -235,4 +237,4 @@ v.db.update vectormap column=species qcolumn="CASE WHEN col1 >= 1 THEN cat WH
 <a href="database.html">Help pages for database modules</a>
 
 <p>
-<i>Last changed: $Date: 2016-06-26 16:45:35 +0200 (Sun, 26 Jun 2016) $</i>
+<i>Last changed: $Date: 2016-09-11 13:25:46 +0200 (Sun, 11 Sep 2016) $</i>
diff --git a/lib/python/pygrass/modules/grid/grid.py b/lib/python/pygrass/modules/grid/grid.py
index 6a25b05..00898be 100644
--- a/lib/python/pygrass/modules/grid/grid.py
+++ b/lib/python/pygrass/modules/grid/grid.py
@@ -173,7 +173,7 @@ def copy_groups(groups, gisrc_src, gisrc_dst, region=None):
     dst = read_gisrc(gisrc_dst)
     rm = True if src[2] != dst[2] else False
     all_rasts = [r[0]
-                 for r in findmaps('rast', location=dst[1], gisdbase=dst[2])]
+                 for r in findmaps('raster', location=dst[1], gisdbase=dst[2])]
     for grp in groups:
         # change gisdbase to src
         env['GISRC'] = gisrc_src
diff --git a/lib/python/script/setup.py.tmp b/lib/python/script/setup.py.tmp
deleted file mode 100644
index a9805fb..0000000
--- a/lib/python/script/setup.py.tmp
+++ /dev/null
@@ -1,196 +0,0 @@
-"""Setup and initialization functions
-
-Function can be used in Python scripts to setup a GRASS environment
-without starting an actual GRASS session.
-
-Usage::
-
-    import os
-    import sys
-    import subprocess
-
-    # define GRASS Database
-    # add your path to grassdata (GRASS GIS database) directory
-    gisdb = os.path.join(os.path.expanduser("~"), "grassdata")
-    # the following path is the default path on MS Windows
-    # gisdb = os.path.join(os.path.expanduser("~"), "Documents/grassdata")
-
-    # specify (existing) Location and Mapset
-    location = "nc_spm_08"
-    mapset = "user1"
-
-    # path to the GRASS GIS launch script
-    # we assume that the GRASS GIS start script is available and on PATH
-    # query GRASS itself for its GISBASE
-    # (with fixes for specific platforms)
-    # needs to be edited by the user
-    grass7bin = 'grass70'
-    if sys.platform.startswith('win'):
-        # MS Windows
-        grass7bin = r'C:\OSGeo4W\bin\grass70.bat'
-        # uncomment when using standalone WinGRASS installer
-        # grass7bin = r'C:\Program Files (x86)\GRASS GIS 7.0.0\grass70.bat'
-        # this can be avoided if GRASS executable is added to PATH
-    elif sys.platform == 'darwin':
-        # Mac OS X
-        # TODO: this have to be checked, maybe unix way is good enough
-        grass7bin = '/Applications/GRASS/GRASS-7.0.app/'
-
-    # query GRASS GIS itself for its GISBASE
-    startcmd = [grass7bin, '--config', 'path']
-    try:
-        p = subprocess.Popen(startcmd, shell=False,
-                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-        out, err = p.communicate()
-    except OSError as error:
-        sys.exit("ERROR: Cannot find GRASS GIS start script"
-                 " {cmd}: {error}".format(cmd=startcmd[0], error=error))
-    if p.returncode != 0:
-        sys.exit("ERROR: Issues running GRASS GIS start script"
-                 " {cmd}: {error}"
-                 .format(cmd=' '.join(startcmd), error=err))
-    gisbase = out.strip(os.linesep)
-
-    # set GISBASE environment variable
-    os.environ['GISBASE'] = gisbase
-
-    # define GRASS-Python environment
-    grass_pydir = os.path.join(gisbase, "etc", "python")
-    sys.path.append(grass_pydir)
-
-    # import (some) GRASS Python bindings
-    import grass.script as gscript
-
-    # launch session
-    rcfile = gscript.setup.init(gisbase, gisdb, location, mapset)
-
-    # example calls
-    gscript.message('Current GRASS GIS 7 environment:')
-    print gscript.gisenv()
-
-    gscript.message('Available raster maps:')
-    for rast in gscript.list_strings(type='raster'):
-        print rast
-
-    gscript.message('Available vector maps:')
-    for vect in gscript.list_strings(type='vector'):
-        print vect
-
-    # delete the rcfile
-    os.remove(rcfile)
-
-
-(C) 2010-2012 by the GRASS Development Team
-This program is free software under the GNU General Public
-License (>=v2). Read the file COPYING that comes with GRASS
-for details.
-
- at author Martin Landa <landa.martin gmail.com>
- at author Vaclav Petras <wenzeslaus gmail.com>
-"""
-
-# TODO: this should share code from lib/init/grass.py
-# perhaps grass.py can import without much trouble once GISBASE
-# is known, this would allow moving things from there, here
-# then this could even do locking
-
-import os
-import sys
-import tempfile as tmpfile
-
-
-def write_gisrc(dbase, location, mapset):
-    """Write the ``gisrc`` file and return its path."""
-    fd, gisrc = tmpfile.mkstemp()
-    os.write(fd, "GISDBASE: %s\n" % dbase)
-    os.write(fd, "LOCATION_NAME: %s\n" % location)
-    os.write(fd, "MAPSET: %s\n" % mapset)
-    os.close(fd)
-    return gisrc
-
-
-# TODO: there should be a function to do the clean up
-# (unset the GISRC and delete the file)
-def init(gisbase, dbase='', location='demolocation', mapset='PERMANENT'):
-    """Initialize system variables to run GRASS modules
-
-    This function is for running GRASS GIS without starting it
-    explicitly. No GRASS modules shall be called before call of this
-    function but any module or user script can be called afterwards
-    as if it would be called in an actual GRASS session. GRASS Python
-    libraries are usable as well in general but the ones using
-    C libraries through ``ctypes`` are not (which is caused by
-    library path not being updated for the current process
-    which is a common operating system limitation).
-
-    To create a (fake) GRASS session a ``gisrc`` file is created.
-    Caller is resposible for deleting the ``gisrc`` file.
-
-    Basic usage::
-
-        # ... setup GISBASE and PYTHON path before import
-        import grass.script as gscript
-        gisrc = gscript.setup.init("/usr/bin/grass7",
-                                   "/home/john/grassdata",
-                                   "nc_spm_08", "user1")
-        # ... use GRASS modules here
-        # remove the session's gisrc file to end the session
-        os.remove(gisrc)
-
-    :param gisbase: path to GRASS installation
-    :param dbase: path to GRASS database (default: '')
-    :param location: location name (default: 'demolocation')
-    :param mapset: mapset within given location (default: 'PERMANENT')
-    :returns: path to ``gisrc`` file (to be deleted later)
-    """
-    # TODO: why we don't set GISBASE?
-    mswin = sys.platform.startswith('win')
-    # define PATH
-    os.environ['PATH'] += os.pathsep + os.path.join(gisbase, 'bin')
-    os.environ['PATH'] += os.pathsep + os.path.join(gisbase, 'scripts')
-    if mswin:  # added for winGRASS
-        os.environ['PATH'] += os.pathsep + os.path.join(gisbase, 'extrabin')
-
-    # add addons to the PATH
-    # copied and simplified from lib/init/grass.py
-    if mswin:
-        config_dirname = "GRASS7"
-        config_dir = os.path.join(os.getenv('APPDATA'), config_dirname)
-    else:
-        config_dirname = ".grass7"
-        config_dir = os.path.join(os.getenv('HOME'), config_dirname)
-    addon_base = os.path.join(config_dir, 'addons')
-    os.environ['GRASS_ADDON_BASE'] = addon_base
-    if not mswin:
-        os.environ['PATH'] += os.pathsep + os.path.join(addon_base, 'scripts')
-
-    # define LD_LIBRARY_PATH
-    if 'LD_LIBRARY_PATH' not in os.environ:
-        os.environ['LD_LIBRARY_PATH'] = ''
-    os.environ['LD_LIBRARY_PATH'] += os.pathsep + os.path.join(gisbase, 'lib')
-
-    os.environ['GIS_LOCK'] = str(os.getpid())
-
-    # Set GRASS_PYTHON and PYTHONPATH to find GRASS Python modules
-    if not os.getenv('GRASS_PYTHON'):
-        if sys.platform == 'win32':
-            os.environ['GRASS_PYTHON'] = "python.exe"
-        else:
-            os.environ['GRASS_PYTHON'] = "python"
-    
-    path = os.getenv('PYTHONPATH')
-    etcpy = os.path.join(gisbase, 'etc', 'python')
-    if path:
-        path = etcpy + os.pathsep + path
-    else:
-        path = etcpy
-    os.environ['PYTHONPATH'] = path
-
-    # TODO: isn't this contra-productive? may fail soon since we cannot
-    # write to the installation (applies also to defaults for Location
-    # and mapset) I don't see what would be the use case here.
-    if not dbase:
-        dbase = gisbase
-
-    os.environ['GISRC'] = write_gisrc(dbase, location, mapset)
-    return os.environ['GISRC']
diff --git a/lib/raster/get_row.c b/lib/raster/get_row.c
index 4f83cb6..a79beba 100644
--- a/lib/raster/get_row.c
+++ b/lib/raster/get_row.c
@@ -426,7 +426,7 @@ static void gdal_values_double(int fd, const double *data,
    finally the values in work_buf are converted into 
    type Y and put into 'cell'.
    if type X == type Y the intermediate step of storing the values in 
-   work_buf might be ommited. check the appropriate function for XY to
+   work_buf might be omitted. check the appropriate function for XY to
    determine the procedure of conversion. 
  */
 static void transfer_to_cell_XX(int fd, void *cell)
diff --git a/lib/raster/open.c b/lib/raster/open.c
index e6f017b..a1c0d9b 100644
--- a/lib/raster/open.c
+++ b/lib/raster/open.c
@@ -344,7 +344,7 @@ int Rast__open_old(const char *name, const char *mapset)
 	    fcb->null_file_exists = 0;
 	    /* check for compressed null file */
 	    if (G_find_file2_misc("cell_misc", NULLC_FILE, r_name, r_mapset)) {
-		G_fatal_error(_("Unable to read compressed null file for <%s@%s>"), r_name, r_mapset);
+		G_fatal_error(_("Unable to read compressed null file for <%s@%s>. At least GRASS GIS 7.2 is needed"), r_name, r_mapset);
 		return -1;
 	    }
 	}
diff --git a/misc/m.nviz.script/m.nviz.script.html b/misc/m.nviz.script/m.nviz.script.html
index 66c172f..40c6668 100644
--- a/misc/m.nviz.script/m.nviz.script.html
+++ b/misc/m.nviz.script/m.nviz.script.html
@@ -132,4 +132,4 @@ and can then be edited there.
 <h2>AUTHOR</h2>
 
 <a href="mailto:bcovill at tekmap.ns.ca">Bob Covill</a>
-<p><i>Last changed: $Date: 2016-08-23 14:48:11 +0200 (Tue, 23. Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-23 14:48:11 +0200 (Tue, 23 Aug 2016) $</i>
diff --git a/mswindows/osgeo4w/setup.hint b/mswindows/osgeo4w/setup.hint
index 2573d3e..a0b009e 100644
--- a/mswindows/osgeo4w/setup.hint
+++ b/mswindows/osgeo4w/setup.hint
@@ -3,5 +3,6 @@ ldesc: "Geographic Resources Analysis Support System (GRASS GIS) - stable releas
 category: Desktop
 requires: liblas avce00 gpsbabel gs gdal-python matplotlib msvcrt iconv libtiff gdal proj freetype-mingw pdcurses zlib fftw libpng wxpython python-numpy python-pil pyopengl cairo psycopg2
 maintainer: MartinLanda
-curr: 7.0.5RC1-1
-prev: 7.0.4-1
+curr: 7.0.4-1
+prev: 7.0.3-1
+test: 7.0.5RC2-1
diff --git a/raster/r.in.gdal/r.in.gdal.html b/raster/r.in.gdal/r.in.gdal.html
index d3c41ba..968369c 100644
--- a/raster/r.in.gdal/r.in.gdal.html
+++ b/raster/r.in.gdal/r.in.gdal.html
@@ -1,6 +1,6 @@
 <h2>DESCRIPTION</h2>
 
-<em>r.in.gdal</em> allows a user to create a (binary) GRASS raster map layer,
+<em>r.in.gdal</em> allows a user to create a GRASS GIS raster map layer,
 or imagery group, from any GDAL supported raster map format, with an optional 
 title. The imported file may also be optionally used to create a new location.
 
@@ -17,64 +17,112 @@ PERMANENT mapset.
 
 <h3>GDAL supported raster formats</h3>
 
-Full details on GDAL supported formats are available at:
+Full details on all GDAL supported formats are available at:
 <p>
 <a href="http://www.gdal.org/formats_list.html">http://www.gdal.org/formats_list.html</a>
 <p>
-Selected formats of the more than 80 supported formats:
+Selected formats out of the more than 140 supported formats:
 
 <div class="code"><pre>
-
-Long Format Name                                        Code                    Creation        Georeferencing          Maximum File Size
-
-Arc/Info ASCII Grid                                     AAIGrid                 Yes             Yes                     No limits
-Arc/Info Binary Grid                                    AIG                     No              Yes                     --
-AIRSAR Polarimetric                                     AIRSAR                  No              No                      --
-Microsoft Windows Device Independent Bitmap (.bmp)      BMP                     Yes             Yes                     4GiB
-BSB Nautical Chart Format (.kap)                        BSB                     No              Yes                     --
-VTP Binary Terrain Format (.bt)                         BT                      Yes             Yes                     --
-CEOS (Spot for instance)                                CEOS                    No              No                      --
-First Generation USGS DOQ (.doq)                        DOQ1                    No              Yes                     --
-New Labelled USGS DOQ (.doq)                            DOQ2                    No              Yes                     --
-Data (.dt0, .dt1)                                       DTED                    No              Yes                     --
-ERMapper Compressed Wavelets (.ecw)                     ECW                     Yes             Yes			
-ESRI .hdr Labelled                                      EHdr                    No              Yes                     --
-ENVI .hdr Labelled Raster                               ENVI                    Yes             Yes                     No limits
-Envisat Image Product (.n1)                             Envisat                 No              No                      --
-EOSAT FAST Format                                       FAST                    No              Yes                     --
-FITS (.fits)                                            FITS                    Yes             No			
-Graphics Interchange Format (.gif)                      GIF                     Yes             No                      2GB
-Arc/Info Binary Grid (.adf)                             GIO                     Yes             Yes		     
-GRASS Rasters                                           GRASS                   No              Yes                     --
-TIFF / GeoTIFF (.tif)                                   GTiff                   Yes             Yes                     4GiB
-Hierarchical Data Format Release 4 (HDF4)               HDF4                    Yes             Yes                     2GiB
-Erdas Imagine (.img)                                    HFA                     Yes             Yes                     No limits
-Atlantis MFF2e                                          HKV                     Yes             Yes                     No limits
-Image Display and Analysis (WinDisp)                    IDA                     Yes             Yes                     2GB
-ILWIS Raster Map (.mpr,.mpl)                            ILWIS                   Yes             Yes                     --
-Japanese DEM (.mem)                                     JDEM                    No              Yes                     --
-JPEG JFIF (.jpg)                                        JPEG                    Yes             Yes                     4GiB (max dimentions 65500x65500)
-JPEG2000 (.jp2, .j2k)                                   JPEG2000                Yes             Yes                     2GiB
-JPEG2000 (.jp2, .j2k)                                   JP2KAK                  Yes             Yes                     No limits
-NOAA Polar Orbiter Level 1b Data Set (AVHRR)            L1B                     No              Yes                     --
-Erdas 7.x .LAN and .GIS                                 LAN                     No              Yes                     2GB
-In Memory Raster                                        MEM                     Yes             Yes                     2GiB
-Atlantis MFF                                            MFF                     Yes             Yes                     No limits
-Multi-resolution Seamless Image Database                MrSID                   No              Yes                     --
-NDF                                                     NLAPS Data Format       No              Yes                     No limits
-NITF                                                    NITF                    Yes             Yes		
-NetCDF                                                  netCDF                  Yes             Yes                     2GB
-OGDI Bridge                                             OGDI                    No              Yes                     --
-PCI .aux Labelled                                       PAux                    Yes             No                      No limits
-PCI Geomatics Database File                             PCIDSK                  Yes             Yes                     No limits
-Portable Network Graphics (.png)                        PNG                     Yes             No		
-PCRaster (.map)                                         PCRaster                Yes             No			
-Netpbm (.ppm,.pgm)                                      PNM                     Yes             No                      No limits
-RadarSat2 XML (product.xml)                             RS2                     No              Yes                     4GB
-USGS SDTS DEM (*CATD.DDF)                               SDTS                    No              Yes                     --
-SAR CEOS                                                SAR_CEOS                No              Yes                     --
-USGS ASCII DEM (.dem)                                   USGSDEM                 No              Yes                     --
-X11 Pixmap (.xpm)                                       XPM                     Yes             No			
+Long Format Name                              Code           Creation  Georeferencing Maximum file size
+---------------------------------------------+-------------+----------+--------------+-----------------
+ADRG/ARC Digitilized Raster Graphics          ADRG              Yes      Yes          --
+Arc/Info ASCII Grid                           AAIGrid           Yes      Yes          2GB
+Arc/Info Binary Grid (.adf)                   AIG               No       Yes          --
+Arc/Info Export E00 GRID                      E00GRID           No       Yes          --
+ArcSDE Raster                                 SDE               No       Yes          --
+ASCII Gridded XYZ                             XYZ               Yes      Yes          --
+BSB Nautical Chart Format (.kap)              BSB               No       Yes          --
+CEOS (Spot for instance)                      CEOS              No       No           --
+DB2                                           DB2               Yes      Yes          No limits
+DODS / OPeNDAP                                DODS              No       Yes          --
+EarthWatch/DigitalGlobe .TIL                  TIL               No       No           --
+ENVI .hdr Labelled Raster                     ENVI              Yes      Yes          No limits
+Envisat Image Product (.n1)                   ESAT              No       No           --
+EOSAT FAST Format                             FAST              No       Yes          --
+Epsilon - Wavelet compressed images           EPSILON           Yes      No           --
+Erdas 7.x .LAN and .GIS                       LAN               No       Yes          2GB
+ERDAS Compressed Wavelets (.ecw)              ECW               Yes      Yes           
+Erdas Imagine (.img)                          HFA               Yes      Yes          No limits
+Erdas Imagine Raw                             EIR               No       Yes          --
+ERMapper (.ers)                               ERS               Yes      Yes
+ESRI .hdr Labelled                            EHdr              Yes      Yes          No limits
+EUMETSAT Archive native (.nat)                MSGN              No       Yes
+FIT                                           FIT               Yes      No           --
+FITS (.fits)                                  FITS              Yes      No           --
+Fuji BAS Scanner Image                        FujiBAS           No       No           --
+GDAL Virtual (.vrt)                           VRT               Yes      Yes          --
+Generic Binary (.hdr Labelled)                GENBIN            No       No           --
+GeoPackage                                    GPKG              Yes      Yes          No limits
+Geospatial PDF                                PDF               Yes      Yes          --
+GMT Compatible netCDF                         GMT               Yes      Yes          2GB
+Golden Software Surfer 7 Binary Grid          GS7BG             Yes      Yes          4GiB
+Graphics Interchange Format (.gif)            GIF               Yes      No           2GB
+GRASS Raster Format                           GRASS             No       Yes          --
+GSat File Format                              GFF               No       No           --
+Hierarchical Data Format Release 4 (HDF4)     HDF4              Yes      Yes          2GiB
+Hierarchical Data Format Release 5 (HDF5)     HDF5              No       Yes          2GiB
+Idrisi Raster                                 RST               Yes      Yes          No limits
+ILWIS Raster Map (.mpr,.mpl)                  ILWIS             Yes      Yes          --
+Image Display and Analysis (WinDisp)          IDA               Yes      Yes          2GB
+In Memory Raster                              MEM               Yes      Yes
+Intergraph Raster                             INGR              Yes      Yes          2GiB
+IRIS                                          IRIS              No       Yes          --
+Japanese DEM (.mem)                           JDEM              No       Yes          --
+JAXA PALSAR Product Reader (Level 1.1/1.5)    JAXAPALSAR        No       No           --
+JPEG2000 (.jp2, .j2k)                         JP2OpenJPEG       Yes      Yes
+JPEG JFIF (.jpg)                              JPEG              Yes      Yes          4GiB
+KMLSUPEROVERLAY                               KMLSUPEROVERLAY   Yes      Yes
+MBTiles                                       MBTiles           Yes      Yes          --
+Meta Raster Format                            MRF               Yes      Yes          --
+Meteosat Second Generation                    MSG               No       Yes
+MG4 Encoded Lidar                             MG4Lidar          No       Yes          --
+Microsoft Windows Device Independent Bitmap   BMP               Yes      Yes          4GiB
+Military Elevation Data (.dt0, .dt1, .dt2)    DTED              Yes      Yes          --
+Multi-resolution Seamless Image Database      MrSID             No       Yes          --
+NASA Planetary Data System                    PDS               No       Yes          --
+NetCDF                                        netCDF            Yes      Yes          2GB
+Netpbm (.ppm,.pgm)                            PNM               Yes      No           No limits
+NITF                                          NITF              Yes      Yes          10GB
+NLAPS Data Format                             NDF               No       Yes          No limits
+NOAA NGS Geoid Height Grids                   NGSGEOID          No       Yes
+NOAA Polar Orbiter Level 1b Data Set (AVHRR)  L1B               No       Yes          --
+OGC Web Coverage Service                      WCS               No       Yes          --
+OGC Web Map Service, and TMS, WorldWind, On EaWMS               No       Yes          --
+OGC Web Map Tile Service                      WMTS              No       Yes          --
+OGDI Bridge                                   OGDI              No       Yes          --
+Oracle Spatial GeoRaster                      GEORASTER         Yes      Yes          No limits
+OziExplorer .MAP                              MAP               No       Yes          --
+OZI OZF2/OZFX3                                OZI               No       Yes          --
+PCI Geomatics Database File                   PCIDSK            Yes      Yes          No limits
+PCRaster                                      PCRaster          Yes      Yes           
+Planet Labs Mosaics API                       PLMosaic          No       Yes          --
+Portable Network Graphics (.png)              PNG               Yes      No           
+PostGIS Raster (previously WKTRaster)         PostGISRaster     No       Yes          --
+RadarSat2 XML (product.xml)                   RS2               No       Yes          4GB
+Rasdaman                                      RASDAMAN          No       No           No limits
+Rasterlite - Rasters in SQLite DB             Rasterlite        Yes      Yes          --
+Raster Product Format/RPF (CADRG, CIB)        RPFTOC            No       Yes          --
+R Object Data Store                           R                 Yes      No           --
+ROI_PAC Raster                                ROI_PAC           Yes      Yes          --
+R Raster (.grd)                               RRASTER           No       Yes          --
+SAGA GIS Binary format                        SAGA              Yes      Yes          --
+SAR CEOS                                      SAR_CEOS          No       Yes          --
+Sentinel 1 SAR SAFE (manifest.safe)           SAFE              No       Yes          No limits
+Sentinel 2                                    SENTINEL2         No       Yes          No limits
+SGI Image Format                              SGI               Yes      Yes          --
+SRTM HGT Format                               SRTMHGT           Yes      Yes          --
+TerraSAR-X Complex SAR Data Product           COSAR             No       No           --
+TerraSAR-X Product                            TSX               Yes      No           --
+TIFF / BigTIFF / GeoTIFF (.tif)               GTiff             Yes      Yes          4GiB/None for BigTIFF
+USGS ASCII DEM / CDED (.dem)                  USGSDEM           Yes      Yes          --
+USGS Astrogeology ISIS cube (Version 3)       ISIS3             No       Yes          --
+USGS SDTS DEM (*CATD.DDF)                     SDTS              No       Yes          --
+Vexcel MFF                                    MFF               Yes      Yes          No limits
+VICAR                                         VICAR             No       Yes          --
+VTP Binary Terrain Format (.bt)               BT                Yes      Yes          --
+WEBP                                          WEBP              Yes      No           --
+WMO GRIB1/GRIB2 (.grb)                        GRIB              No       Yes          2GB
 </pre></div>
 
 <h3>Location Creation</h3>
@@ -245,7 +293,7 @@ provides climate data for Europe ranging from 1950 - 2015 or later
 (<a href="http://eca.knmi.nl/download/ensembles/ensembles.php">Terms of use</a>).
 To import the different chunks of data provided by the project as netCDF files,
 the offset parameter can be used to properly assign numbers to the series
-of daily raster maps from 1st Jan 1950 (in case if importing the ECAD data
+of daily raster maps from 1st Jan 1950 (in case of importing the ECAD data
 split into multi-annual chunks). The ECAD data must be imported into a
 LatLong location.
 <p>
@@ -364,4 +412,4 @@ GDAL Pages: <a href="http://www.gdal.org">http://www.gdal.org/</a><br>
  (<a href="mailto:warmerdam AT pobox dot com">email</a>).
 
 <p>
-<i>Last changed: $Date: 2016-05-22 15:26:32 +0200 (Sun, 22 May 2016) $</i>
+<i>Last changed: $Date: 2016-09-15 15:32:42 +0200 (Thu, 15 Sep 2016) $</i>
diff --git a/raster/r.mapcalc/mapcalc.output b/raster/r.mapcalc/mapcalc.output
deleted file mode 100644
index c5eeec4..0000000
--- a/raster/r.mapcalc/mapcalc.output
+++ /dev/null
@@ -1,2506 +0,0 @@
-Grammar
-
-    0 $accept: program $end
-
-    1 program: defs
-
-    2 defs: def
-    3     | def ';'
-    4     | def ';' defs
-    5     | error ';' defs
-
-    6 def: STRING '=' exp
-    7    | NAME '=' exp
-    8    | atom_func
-
-    9 map: STRING
-   10    | NAME
-   11    | name '@' name
-
-   12 mapmod: '@'
-   13       | 'r'
-   14       | 'g'
-   15       | 'b'
-   16       | '#'
-   17       | 'y'
-   18       | 'i'
-
-   19 index: INTEGER
-   20      | '-' INTEGER
-
-   21 expr_list: exp
-   22          | exp ',' expr_list
-
-   23 atom_var: VARSTRING
-   24         | VARNAME
-
-   25 atom_map: map '[' index ']'
-   26         | map '[' index ',' index ']'
-   27         | map '[' index ',' index ',' index ']'
-   28         | map
-   29         | mapmod map '[' index ']'
-   30         | mapmod map '[' index ',' index ']'
-   31         | mapmod map '[' index ',' index ',' index ']'
-   32         | mapmod map
-
-   33 atom_func: name '(' ')'
-   34          | name '(' expr_list ')'
-
-   35 exp_atom: '(' exp ')'
-   36         | atom_var
-   37         | atom_map
-   38         | atom_func
-   39         | INTEGER
-   40         | FLOAT
-   41         | DOUBLE
-
-   42 exp_pre: exp_atom
-   43        | '-' exp_atom
-   44        | '~' exp_atom
-   45        | '!' exp_atom
-
-   46 exp_pow: exp_pre
-   47        | exp_pre '^' exp_pow
-
-   48 exp_mul: exp_pow
-   49        | exp_mul '*' exp_pow
-   50        | exp_mul '/' exp_pow
-   51        | exp_mul '%' exp_pow
-
-   52 exp_add: exp_mul
-   53        | exp_add '+' exp_mul
-   54        | exp_add '-' exp_mul
-
-   55 exp_sh: exp_add
-   56       | exp_sh LSH exp_add
-   57       | exp_sh RSH exp_add
-   58       | exp_sh RSHU exp_add
-
-   59 exp_cmp: exp_sh
-   60        | exp_cmp GT exp_sh
-   61        | exp_cmp GE exp_sh
-   62        | exp_cmp LT exp_sh
-   63        | exp_cmp LE exp_sh
-
-   64 exp_eq: exp_cmp
-   65       | exp_eq EQ exp_cmp
-   66       | exp_eq NE exp_cmp
-
-   67 exp_bitand: exp_eq
-   68           | exp_bitand BITAND exp_eq
-
-   69 exp_bitor: exp_bitand
-   70          | exp_bitor BITOR exp_bitand
-
-   71 exp_logand: exp_bitor
-   72           | exp_logand LOGAND exp_bitor
-   73           | exp_logand LOGAND2 exp_bitor
-
-   74 exp_logor: exp_logand
-   75          | exp_logor LOGOR exp_logand
-   76          | exp_logor LOGOR2 exp_logand
-
-   77 exp_cond: exp_logor
-   78         | exp_logor '?' exp_cond ':' exp_cond
-
-   79 exp_let: exp_cond
-   80        | name '=' exp_let
-
-   81 exp: exp_let
-
-   82 name: NAME
-   83     | VARNAME
-
-
-Terminals, with rules where they appear
-
-$end (0) 0
-'!' (33) 45
-'#' (35) 16
-'%' (37) 51
-'(' (40) 33 34 35
-')' (41) 33 34 35
-'*' (42) 49
-'+' (43) 53
-',' (44) 22 26 27 30 31
-'-' (45) 20 43 54
-'/' (47) 50
-':' (58) 78
-';' (59) 3 4 5
-'=' (61) 6 7 80
-'?' (63) 78
-'@' (64) 11 12
-'[' (91) 25 26 27 29 30 31
-']' (93) 25 26 27 29 30 31
-'^' (94) 47
-'b' (98) 15
-'g' (103) 14
-'i' (105) 18
-'r' (114) 13
-'y' (121) 17
-'~' (126) 44
-error (256) 5
-VARNAME (258) 24 83
-NAME (259) 7 10 82
-VARSTRING (260) 23
-STRING (261) 6 9
-INTEGER (262) 19 20 39
-FLOAT (263) 40
-DOUBLE (264) 41
-GT (265) 60
-GE (266) 61
-LT (267) 62
-LE (268) 63
-EQ (269) 65
-NE (270) 66
-LOGAND (271) 72
-LOGOR (272) 75
-LOGAND2 (273) 73
-LOGOR2 (274) 76
-BITAND (275) 68
-BITOR (276) 70
-LSH (277) 56
-RSH (278) 57
-RSHU (279) 58
-
-
-Nonterminals, with rules where they appear
-
-$accept (49)
-    on left: 0
-program (50)
-    on left: 1, on right: 0
-defs (51)
-    on left: 2 3 4 5, on right: 1 4 5
-def (52)
-    on left: 6 7 8, on right: 2 3 4
-map (53)
-    on left: 9 10 11, on right: 25 26 27 28 29 30 31 32
-mapmod (54)
-    on left: 12 13 14 15 16 17 18, on right: 29 30 31 32
-index (55)
-    on left: 19 20, on right: 25 26 27 29 30 31
-expr_list (56)
-    on left: 21 22, on right: 22 34
-atom_var (57)
-    on left: 23 24, on right: 36
-atom_map (58)
-    on left: 25 26 27 28 29 30 31 32, on right: 37
-atom_func (59)
-    on left: 33 34, on right: 8 38
-exp_atom (60)
-    on left: 35 36 37 38 39 40 41, on right: 42 43 44 45
-exp_pre (61)
-    on left: 42 43 44 45, on right: 46 47
-exp_pow (62)
-    on left: 46 47, on right: 47 48 49 50 51
-exp_mul (63)
-    on left: 48 49 50 51, on right: 49 50 51 52 53 54
-exp_add (64)
-    on left: 52 53 54, on right: 53 54 55 56 57 58
-exp_sh (65)
-    on left: 55 56 57 58, on right: 56 57 58 59 60 61 62 63
-exp_cmp (66)
-    on left: 59 60 61 62 63, on right: 60 61 62 63 64 65 66
-exp_eq (67)
-    on left: 64 65 66, on right: 65 66 67 68
-exp_bitand (68)
-    on left: 67 68, on right: 68 69 70
-exp_bitor (69)
-    on left: 69 70, on right: 70 71 72 73
-exp_logand (70)
-    on left: 71 72 73, on right: 72 73 74 75 76
-exp_logor (71)
-    on left: 74 75 76, on right: 75 76 77 78
-exp_cond (72)
-    on left: 77 78, on right: 78 79
-exp_let (73)
-    on left: 79 80, on right: 80 81
-exp (74)
-    on left: 81, on right: 6 7 21 22 35
-name (75)
-    on left: 82 83, on right: 11 33 34 80
-
-
-State 0
-
-    0 $accept: . program $end
-
-    error    shift, and go to state 1
-    VARNAME  shift, and go to state 2
-    NAME     shift, and go to state 3
-    STRING   shift, and go to state 4
-
-    program    go to state 5
-    defs       go to state 6
-    def        go to state 7
-    atom_func  go to state 8
-    name       go to state 9
-
-
-State 1
-
-    5 defs: error . ';' defs
-
-    ';'  shift, and go to state 10
-
-
-State 2
-
-   83 name: VARNAME .
-
-    $default  reduce using rule 83 (name)
-
-
-State 3
-
-    7 def: NAME . '=' exp
-   82 name: NAME .
-
-    '='  shift, and go to state 11
-
-    $default  reduce using rule 82 (name)
-
-
-State 4
-
-    6 def: STRING . '=' exp
-
-    '='  shift, and go to state 12
-
-
-State 5
-
-    0 $accept: program . $end
-
-    $end  shift, and go to state 13
-
-
-State 6
-
-    1 program: defs .
-
-    $default  reduce using rule 1 (program)
-
-
-State 7
-
-    2 defs: def .
-    3     | def . ';'
-    4     | def . ';' defs
-
-    ';'  shift, and go to state 14
-
-    $default  reduce using rule 2 (defs)
-
-
-State 8
-
-    8 def: atom_func .
-
-    $default  reduce using rule 8 (def)
-
-
-State 9
-
-   33 atom_func: name . '(' ')'
-   34          | name . '(' expr_list ')'
-
-    '('  shift, and go to state 15
-
-
-State 10
-
-    5 defs: error ';' . defs
-
-    error    shift, and go to state 1
-    VARNAME  shift, and go to state 2
-    NAME     shift, and go to state 3
-    STRING   shift, and go to state 4
-
-    defs       go to state 16
-    def        go to state 7
-    atom_func  go to state 8
-    name       go to state 9
-
-
-State 11
-
-    7 def: NAME '=' . exp
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 49
-    exp_logand  go to state 50
-    exp_logor   go to state 51
-    exp_cond    go to state 52
-    exp_let     go to state 53
-    exp         go to state 54
-    name        go to state 55
-
-
-State 12
-
-    6 def: STRING '=' . exp
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 49
-    exp_logand  go to state 50
-    exp_logor   go to state 51
-    exp_cond    go to state 52
-    exp_let     go to state 53
-    exp         go to state 56
-    name        go to state 55
-
-
-State 13
-
-    0 $accept: program $end .
-
-    $default  accept
-
-
-State 14
-
-    3 defs: def ';' .
-    4     | def ';' . defs
-
-    error    shift, and go to state 1
-    VARNAME  shift, and go to state 2
-    NAME     shift, and go to state 3
-    STRING   shift, and go to state 4
-
-    $end  reduce using rule 3 (defs)
-
-    defs       go to state 57
-    def        go to state 7
-    atom_func  go to state 8
-    name       go to state 9
-
-
-State 15
-
-   33 atom_func: name '(' . ')'
-   34          | name '(' . expr_list ')'
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    ')'        shift, and go to state 58
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    expr_list   go to state 59
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 49
-    exp_logand  go to state 50
-    exp_logor   go to state 51
-    exp_cond    go to state 52
-    exp_let     go to state 53
-    exp         go to state 60
-    name        go to state 55
-
-
-State 16
-
-    5 defs: error ';' defs .
-
-    $default  reduce using rule 5 (defs)
-
-
-State 17
-
-   24 atom_var: VARNAME .
-   83 name: VARNAME .
-
-    '='       reduce using rule 83 (name)
-    '@'       reduce using rule 83 (name)
-    '('       reduce using rule 83 (name)
-    $default  reduce using rule 24 (atom_var)
-
-
-State 18
-
-   10 map: NAME .
-   82 name: NAME .
-
-    '='       reduce using rule 82 (name)
-    '@'       reduce using rule 82 (name)
-    '('       reduce using rule 82 (name)
-    $default  reduce using rule 10 (map)
-
-
-State 19
-
-   23 atom_var: VARSTRING .
-
-    $default  reduce using rule 23 (atom_var)
-
-
-State 20
-
-    9 map: STRING .
-
-    $default  reduce using rule 9 (map)
-
-
-State 21
-
-   39 exp_atom: INTEGER .
-
-    $default  reduce using rule 39 (exp_atom)
-
-
-State 22
-
-   40 exp_atom: FLOAT .
-
-    $default  reduce using rule 40 (exp_atom)
-
-
-State 23
-
-   41 exp_atom: DOUBLE .
-
-    $default  reduce using rule 41 (exp_atom)
-
-
-State 24
-
-   12 mapmod: '@' .
-
-    $default  reduce using rule 12 (mapmod)
-
-
-State 25
-
-   13 mapmod: 'r' .
-
-    $default  reduce using rule 13 (mapmod)
-
-
-State 26
-
-   14 mapmod: 'g' .
-
-    $default  reduce using rule 14 (mapmod)
-
-
-State 27
-
-   15 mapmod: 'b' .
-
-    $default  reduce using rule 15 (mapmod)
-
-
-State 28
-
-   16 mapmod: '#' .
-
-    $default  reduce using rule 16 (mapmod)
-
-
-State 29
-
-   17 mapmod: 'y' .
-
-    $default  reduce using rule 17 (mapmod)
-
-
-State 30
-
-   18 mapmod: 'i' .
-
-    $default  reduce using rule 18 (mapmod)
-
-
-State 31
-
-   43 exp_pre: '-' . exp_atom
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '('        shift, and go to state 32
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 61
-    name       go to state 62
-
-
-State 32
-
-   35 exp_atom: '(' . exp ')'
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 49
-    exp_logand  go to state 50
-    exp_logor   go to state 51
-    exp_cond    go to state 52
-    exp_let     go to state 53
-    exp         go to state 63
-    name        go to state 55
-
-
-State 33
-
-   44 exp_pre: '~' . exp_atom
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '('        shift, and go to state 32
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 64
-    name       go to state 62
-
-
-State 34
-
-   45 exp_pre: '!' . exp_atom
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '('        shift, and go to state 32
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 65
-    name       go to state 62
-
-
-State 35
-
-   25 atom_map: map . '[' index ']'
-   26         | map . '[' index ',' index ']'
-   27         | map . '[' index ',' index ',' index ']'
-   28         | map .
-
-    '['  shift, and go to state 66
-
-    $default  reduce using rule 28 (atom_map)
-
-
-State 36
-
-   29 atom_map: mapmod . map '[' index ']'
-   30         | mapmod . map '[' index ',' index ']'
-   31         | mapmod . map '[' index ',' index ',' index ']'
-   32         | mapmod . map
-
-    VARNAME  shift, and go to state 2
-    NAME     shift, and go to state 18
-    STRING   shift, and go to state 20
-
-    map   go to state 67
-    name  go to state 68
-
-
-State 37
-
-   36 exp_atom: atom_var .
-
-    $default  reduce using rule 36 (exp_atom)
-
-
-State 38
-
-   37 exp_atom: atom_map .
-
-    $default  reduce using rule 37 (exp_atom)
-
-
-State 39
-
-   38 exp_atom: atom_func .
-
-    $default  reduce using rule 38 (exp_atom)
-
-
-State 40
-
-   42 exp_pre: exp_atom .
-
-    $default  reduce using rule 42 (exp_pre)
-
-
-State 41
-
-   46 exp_pow: exp_pre .
-   47        | exp_pre . '^' exp_pow
-
-    '^'  shift, and go to state 69
-
-    $default  reduce using rule 46 (exp_pow)
-
-
-State 42
-
-   48 exp_mul: exp_pow .
-
-    $default  reduce using rule 48 (exp_mul)
-
-
-State 43
-
-   49 exp_mul: exp_mul . '*' exp_pow
-   50        | exp_mul . '/' exp_pow
-   51        | exp_mul . '%' exp_pow
-   52 exp_add: exp_mul .
-
-    '*'  shift, and go to state 70
-    '/'  shift, and go to state 71
-    '%'  shift, and go to state 72
-
-    $default  reduce using rule 52 (exp_add)
-
-
-State 44
-
-   53 exp_add: exp_add . '+' exp_mul
-   54        | exp_add . '-' exp_mul
-   55 exp_sh: exp_add .
-
-    '-'  shift, and go to state 73
-    '+'  shift, and go to state 74
-
-    $default  reduce using rule 55 (exp_sh)
-
-
-State 45
-
-   56 exp_sh: exp_sh . LSH exp_add
-   57       | exp_sh . RSH exp_add
-   58       | exp_sh . RSHU exp_add
-   59 exp_cmp: exp_sh .
-
-    LSH   shift, and go to state 75
-    RSH   shift, and go to state 76
-    RSHU  shift, and go to state 77
-
-    $default  reduce using rule 59 (exp_cmp)
-
-
-State 46
-
-   60 exp_cmp: exp_cmp . GT exp_sh
-   61        | exp_cmp . GE exp_sh
-   62        | exp_cmp . LT exp_sh
-   63        | exp_cmp . LE exp_sh
-   64 exp_eq: exp_cmp .
-
-    GT  shift, and go to state 78
-    GE  shift, and go to state 79
-    LT  shift, and go to state 80
-    LE  shift, and go to state 81
-
-    $default  reduce using rule 64 (exp_eq)
-
-
-State 47
-
-   65 exp_eq: exp_eq . EQ exp_cmp
-   66       | exp_eq . NE exp_cmp
-   67 exp_bitand: exp_eq .
-
-    EQ  shift, and go to state 82
-    NE  shift, and go to state 83
-
-    $default  reduce using rule 67 (exp_bitand)
-
-
-State 48
-
-   68 exp_bitand: exp_bitand . BITAND exp_eq
-   69 exp_bitor: exp_bitand .
-
-    BITAND  shift, and go to state 84
-
-    $default  reduce using rule 69 (exp_bitor)
-
-
-State 49
-
-   70 exp_bitor: exp_bitor . BITOR exp_bitand
-   71 exp_logand: exp_bitor .
-
-    BITOR  shift, and go to state 85
-
-    $default  reduce using rule 71 (exp_logand)
-
-
-State 50
-
-   72 exp_logand: exp_logand . LOGAND exp_bitor
-   73           | exp_logand . LOGAND2 exp_bitor
-   74 exp_logor: exp_logand .
-
-    LOGAND   shift, and go to state 86
-    LOGAND2  shift, and go to state 87
-
-    $default  reduce using rule 74 (exp_logor)
-
-
-State 51
-
-   75 exp_logor: exp_logor . LOGOR exp_logand
-   76          | exp_logor . LOGOR2 exp_logand
-   77 exp_cond: exp_logor .
-   78         | exp_logor . '?' exp_cond ':' exp_cond
-
-    LOGOR   shift, and go to state 88
-    LOGOR2  shift, and go to state 89
-    '?'     shift, and go to state 90
-
-    $default  reduce using rule 77 (exp_cond)
-
-
-State 52
-
-   79 exp_let: exp_cond .
-
-    $default  reduce using rule 79 (exp_let)
-
-
-State 53
-
-   81 exp: exp_let .
-
-    $default  reduce using rule 81 (exp)
-
-
-State 54
-
-    7 def: NAME '=' exp .
-
-    $default  reduce using rule 7 (def)
-
-
-State 55
-
-   11 map: name . '@' name
-   33 atom_func: name . '(' ')'
-   34          | name . '(' expr_list ')'
-   80 exp_let: name . '=' exp_let
-
-    '='  shift, and go to state 91
-    '@'  shift, and go to state 92
-    '('  shift, and go to state 15
-
-
-State 56
-
-    6 def: STRING '=' exp .
-
-    $default  reduce using rule 6 (def)
-
-
-State 57
-
-    4 defs: def ';' defs .
-
-    $default  reduce using rule 4 (defs)
-
-
-State 58
-
-   33 atom_func: name '(' ')' .
-
-    $default  reduce using rule 33 (atom_func)
-
-
-State 59
-
-   34 atom_func: name '(' expr_list . ')'
-
-    ')'  shift, and go to state 93
-
-
-State 60
-
-   21 expr_list: exp .
-   22          | exp . ',' expr_list
-
-    ','  shift, and go to state 94
-
-    $default  reduce using rule 21 (expr_list)
-
-
-State 61
-
-   43 exp_pre: '-' exp_atom .
-
-    $default  reduce using rule 43 (exp_pre)
-
-
-State 62
-
-   11 map: name . '@' name
-   33 atom_func: name . '(' ')'
-   34          | name . '(' expr_list ')'
-
-    '@'  shift, and go to state 92
-    '('  shift, and go to state 15
-
-
-State 63
-
-   35 exp_atom: '(' exp . ')'
-
-    ')'  shift, and go to state 95
-
-
-State 64
-
-   44 exp_pre: '~' exp_atom .
-
-    $default  reduce using rule 44 (exp_pre)
-
-
-State 65
-
-   45 exp_pre: '!' exp_atom .
-
-    $default  reduce using rule 45 (exp_pre)
-
-
-State 66
-
-   25 atom_map: map '[' . index ']'
-   26         | map '[' . index ',' index ']'
-   27         | map '[' . index ',' index ',' index ']'
-
-    INTEGER  shift, and go to state 96
-    '-'      shift, and go to state 97
-
-    index  go to state 98
-
-
-State 67
-
-   29 atom_map: mapmod map . '[' index ']'
-   30         | mapmod map . '[' index ',' index ']'
-   31         | mapmod map . '[' index ',' index ',' index ']'
-   32         | mapmod map .
-
-    '['  shift, and go to state 99
-
-    $default  reduce using rule 32 (atom_map)
-
-
-State 68
-
-   11 map: name . '@' name
-
-    '@'  shift, and go to state 92
-
-
-State 69
-
-   47 exp_pow: exp_pre '^' . exp_pow
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 100
-    name       go to state 62
-
-
-State 70
-
-   49 exp_mul: exp_mul '*' . exp_pow
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 101
-    name       go to state 62
-
-
-State 71
-
-   50 exp_mul: exp_mul '/' . exp_pow
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 102
-    name       go to state 62
-
-
-State 72
-
-   51 exp_mul: exp_mul '%' . exp_pow
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 103
-    name       go to state 62
-
-
-State 73
-
-   54 exp_add: exp_add '-' . exp_mul
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 104
-    name       go to state 62
-
-
-State 74
-
-   53 exp_add: exp_add '+' . exp_mul
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 105
-    name       go to state 62
-
-
-State 75
-
-   56 exp_sh: exp_sh LSH . exp_add
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 43
-    exp_add    go to state 106
-    name       go to state 62
-
-
-State 76
-
-   57 exp_sh: exp_sh RSH . exp_add
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 43
-    exp_add    go to state 107
-    name       go to state 62
-
-
-State 77
-
-   58 exp_sh: exp_sh RSHU . exp_add
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 43
-    exp_add    go to state 108
-    name       go to state 62
-
-
-State 78
-
-   60 exp_cmp: exp_cmp GT . exp_sh
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 43
-    exp_add    go to state 44
-    exp_sh     go to state 109
-    name       go to state 62
-
-
-State 79
-
-   61 exp_cmp: exp_cmp GE . exp_sh
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 43
-    exp_add    go to state 44
-    exp_sh     go to state 110
-    name       go to state 62
-
-
-State 80
-
-   62 exp_cmp: exp_cmp LT . exp_sh
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 43
-    exp_add    go to state 44
-    exp_sh     go to state 111
-    name       go to state 62
-
-
-State 81
-
-   63 exp_cmp: exp_cmp LE . exp_sh
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 43
-    exp_add    go to state 44
-    exp_sh     go to state 112
-    name       go to state 62
-
-
-State 82
-
-   65 exp_eq: exp_eq EQ . exp_cmp
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 43
-    exp_add    go to state 44
-    exp_sh     go to state 45
-    exp_cmp    go to state 113
-    name       go to state 62
-
-
-State 83
-
-   66 exp_eq: exp_eq NE . exp_cmp
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 43
-    exp_add    go to state 44
-    exp_sh     go to state 45
-    exp_cmp    go to state 114
-    name       go to state 62
-
-
-State 84
-
-   68 exp_bitand: exp_bitand BITAND . exp_eq
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map        go to state 35
-    mapmod     go to state 36
-    atom_var   go to state 37
-    atom_map   go to state 38
-    atom_func  go to state 39
-    exp_atom   go to state 40
-    exp_pre    go to state 41
-    exp_pow    go to state 42
-    exp_mul    go to state 43
-    exp_add    go to state 44
-    exp_sh     go to state 45
-    exp_cmp    go to state 46
-    exp_eq     go to state 115
-    name       go to state 62
-
-
-State 85
-
-   70 exp_bitor: exp_bitor BITOR . exp_bitand
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 116
-    name        go to state 62
-
-
-State 86
-
-   72 exp_logand: exp_logand LOGAND . exp_bitor
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 117
-    name        go to state 62
-
-
-State 87
-
-   73 exp_logand: exp_logand LOGAND2 . exp_bitor
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 118
-    name        go to state 62
-
-
-State 88
-
-   75 exp_logor: exp_logor LOGOR . exp_logand
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 49
-    exp_logand  go to state 119
-    name        go to state 62
-
-
-State 89
-
-   76 exp_logor: exp_logor LOGOR2 . exp_logand
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 49
-    exp_logand  go to state 120
-    name        go to state 62
-
-
-State 90
-
-   78 exp_cond: exp_logor '?' . exp_cond ':' exp_cond
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 49
-    exp_logand  go to state 50
-    exp_logor   go to state 51
-    exp_cond    go to state 121
-    name        go to state 62
-
-
-State 91
-
-   80 exp_let: name '=' . exp_let
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 49
-    exp_logand  go to state 50
-    exp_logor   go to state 51
-    exp_cond    go to state 52
-    exp_let     go to state 122
-    name        go to state 55
-
-
-State 92
-
-   11 map: name '@' . name
-
-    VARNAME  shift, and go to state 2
-    NAME     shift, and go to state 123
-
-    name  go to state 124
-
-
-State 93
-
-   34 atom_func: name '(' expr_list ')' .
-
-    $default  reduce using rule 34 (atom_func)
-
-
-State 94
-
-   22 expr_list: exp ',' . expr_list
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    expr_list   go to state 125
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 49
-    exp_logand  go to state 50
-    exp_logor   go to state 51
-    exp_cond    go to state 52
-    exp_let     go to state 53
-    exp         go to state 60
-    name        go to state 55
-
-
-State 95
-
-   35 exp_atom: '(' exp ')' .
-
-    $default  reduce using rule 35 (exp_atom)
-
-
-State 96
-
-   19 index: INTEGER .
-
-    $default  reduce using rule 19 (index)
-
-
-State 97
-
-   20 index: '-' . INTEGER
-
-    INTEGER  shift, and go to state 126
-
-
-State 98
-
-   25 atom_map: map '[' index . ']'
-   26         | map '[' index . ',' index ']'
-   27         | map '[' index . ',' index ',' index ']'
-
-    ','  shift, and go to state 127
-    ']'  shift, and go to state 128
-
-
-State 99
-
-   29 atom_map: mapmod map '[' . index ']'
-   30         | mapmod map '[' . index ',' index ']'
-   31         | mapmod map '[' . index ',' index ',' index ']'
-
-    INTEGER  shift, and go to state 96
-    '-'      shift, and go to state 97
-
-    index  go to state 129
-
-
-State 100
-
-   47 exp_pow: exp_pre '^' exp_pow .
-
-    $default  reduce using rule 47 (exp_pow)
-
-
-State 101
-
-   49 exp_mul: exp_mul '*' exp_pow .
-
-    $default  reduce using rule 49 (exp_mul)
-
-
-State 102
-
-   50 exp_mul: exp_mul '/' exp_pow .
-
-    $default  reduce using rule 50 (exp_mul)
-
-
-State 103
-
-   51 exp_mul: exp_mul '%' exp_pow .
-
-    $default  reduce using rule 51 (exp_mul)
-
-
-State 104
-
-   49 exp_mul: exp_mul . '*' exp_pow
-   50        | exp_mul . '/' exp_pow
-   51        | exp_mul . '%' exp_pow
-   54 exp_add: exp_add '-' exp_mul .
-
-    '*'  shift, and go to state 70
-    '/'  shift, and go to state 71
-    '%'  shift, and go to state 72
-
-    $default  reduce using rule 54 (exp_add)
-
-
-State 105
-
-   49 exp_mul: exp_mul . '*' exp_pow
-   50        | exp_mul . '/' exp_pow
-   51        | exp_mul . '%' exp_pow
-   53 exp_add: exp_add '+' exp_mul .
-
-    '*'  shift, and go to state 70
-    '/'  shift, and go to state 71
-    '%'  shift, and go to state 72
-
-    $default  reduce using rule 53 (exp_add)
-
-
-State 106
-
-   53 exp_add: exp_add . '+' exp_mul
-   54        | exp_add . '-' exp_mul
-   56 exp_sh: exp_sh LSH exp_add .
-
-    '-'  shift, and go to state 73
-    '+'  shift, and go to state 74
-
-    $default  reduce using rule 56 (exp_sh)
-
-
-State 107
-
-   53 exp_add: exp_add . '+' exp_mul
-   54        | exp_add . '-' exp_mul
-   57 exp_sh: exp_sh RSH exp_add .
-
-    '-'  shift, and go to state 73
-    '+'  shift, and go to state 74
-
-    $default  reduce using rule 57 (exp_sh)
-
-
-State 108
-
-   53 exp_add: exp_add . '+' exp_mul
-   54        | exp_add . '-' exp_mul
-   58 exp_sh: exp_sh RSHU exp_add .
-
-    '-'  shift, and go to state 73
-    '+'  shift, and go to state 74
-
-    $default  reduce using rule 58 (exp_sh)
-
-
-State 109
-
-   56 exp_sh: exp_sh . LSH exp_add
-   57       | exp_sh . RSH exp_add
-   58       | exp_sh . RSHU exp_add
-   60 exp_cmp: exp_cmp GT exp_sh .
-
-    LSH   shift, and go to state 75
-    RSH   shift, and go to state 76
-    RSHU  shift, and go to state 77
-
-    $default  reduce using rule 60 (exp_cmp)
-
-
-State 110
-
-   56 exp_sh: exp_sh . LSH exp_add
-   57       | exp_sh . RSH exp_add
-   58       | exp_sh . RSHU exp_add
-   61 exp_cmp: exp_cmp GE exp_sh .
-
-    LSH   shift, and go to state 75
-    RSH   shift, and go to state 76
-    RSHU  shift, and go to state 77
-
-    $default  reduce using rule 61 (exp_cmp)
-
-
-State 111
-
-   56 exp_sh: exp_sh . LSH exp_add
-   57       | exp_sh . RSH exp_add
-   58       | exp_sh . RSHU exp_add
-   62 exp_cmp: exp_cmp LT exp_sh .
-
-    LSH   shift, and go to state 75
-    RSH   shift, and go to state 76
-    RSHU  shift, and go to state 77
-
-    $default  reduce using rule 62 (exp_cmp)
-
-
-State 112
-
-   56 exp_sh: exp_sh . LSH exp_add
-   57       | exp_sh . RSH exp_add
-   58       | exp_sh . RSHU exp_add
-   63 exp_cmp: exp_cmp LE exp_sh .
-
-    LSH   shift, and go to state 75
-    RSH   shift, and go to state 76
-    RSHU  shift, and go to state 77
-
-    $default  reduce using rule 63 (exp_cmp)
-
-
-State 113
-
-   60 exp_cmp: exp_cmp . GT exp_sh
-   61        | exp_cmp . GE exp_sh
-   62        | exp_cmp . LT exp_sh
-   63        | exp_cmp . LE exp_sh
-   65 exp_eq: exp_eq EQ exp_cmp .
-
-    GT  shift, and go to state 78
-    GE  shift, and go to state 79
-    LT  shift, and go to state 80
-    LE  shift, and go to state 81
-
-    $default  reduce using rule 65 (exp_eq)
-
-
-State 114
-
-   60 exp_cmp: exp_cmp . GT exp_sh
-   61        | exp_cmp . GE exp_sh
-   62        | exp_cmp . LT exp_sh
-   63        | exp_cmp . LE exp_sh
-   66 exp_eq: exp_eq NE exp_cmp .
-
-    GT  shift, and go to state 78
-    GE  shift, and go to state 79
-    LT  shift, and go to state 80
-    LE  shift, and go to state 81
-
-    $default  reduce using rule 66 (exp_eq)
-
-
-State 115
-
-   65 exp_eq: exp_eq . EQ exp_cmp
-   66       | exp_eq . NE exp_cmp
-   68 exp_bitand: exp_bitand BITAND exp_eq .
-
-    EQ  shift, and go to state 82
-    NE  shift, and go to state 83
-
-    $default  reduce using rule 68 (exp_bitand)
-
-
-State 116
-
-   68 exp_bitand: exp_bitand . BITAND exp_eq
-   70 exp_bitor: exp_bitor BITOR exp_bitand .
-
-    BITAND  shift, and go to state 84
-
-    $default  reduce using rule 70 (exp_bitor)
-
-
-State 117
-
-   70 exp_bitor: exp_bitor . BITOR exp_bitand
-   72 exp_logand: exp_logand LOGAND exp_bitor .
-
-    BITOR  shift, and go to state 85
-
-    $default  reduce using rule 72 (exp_logand)
-
-
-State 118
-
-   70 exp_bitor: exp_bitor . BITOR exp_bitand
-   73 exp_logand: exp_logand LOGAND2 exp_bitor .
-
-    BITOR  shift, and go to state 85
-
-    $default  reduce using rule 73 (exp_logand)
-
-
-State 119
-
-   72 exp_logand: exp_logand . LOGAND exp_bitor
-   73           | exp_logand . LOGAND2 exp_bitor
-   75 exp_logor: exp_logor LOGOR exp_logand .
-
-    LOGAND   shift, and go to state 86
-    LOGAND2  shift, and go to state 87
-
-    $default  reduce using rule 75 (exp_logor)
-
-
-State 120
-
-   72 exp_logand: exp_logand . LOGAND exp_bitor
-   73           | exp_logand . LOGAND2 exp_bitor
-   76 exp_logor: exp_logor LOGOR2 exp_logand .
-
-    LOGAND   shift, and go to state 86
-    LOGAND2  shift, and go to state 87
-
-    $default  reduce using rule 76 (exp_logor)
-
-
-State 121
-
-   78 exp_cond: exp_logor '?' exp_cond . ':' exp_cond
-
-    ':'  shift, and go to state 130
-
-
-State 122
-
-   80 exp_let: name '=' exp_let .
-
-    $default  reduce using rule 80 (exp_let)
-
-
-State 123
-
-   82 name: NAME .
-
-    $default  reduce using rule 82 (name)
-
-
-State 124
-
-   11 map: name '@' name .
-
-    $default  reduce using rule 11 (map)
-
-
-State 125
-
-   22 expr_list: exp ',' expr_list .
-
-    $default  reduce using rule 22 (expr_list)
-
-
-State 126
-
-   20 index: '-' INTEGER .
-
-    $default  reduce using rule 20 (index)
-
-
-State 127
-
-   26 atom_map: map '[' index ',' . index ']'
-   27         | map '[' index ',' . index ',' index ']'
-
-    INTEGER  shift, and go to state 96
-    '-'      shift, and go to state 97
-
-    index  go to state 131
-
-
-State 128
-
-   25 atom_map: map '[' index ']' .
-
-    $default  reduce using rule 25 (atom_map)
-
-
-State 129
-
-   29 atom_map: mapmod map '[' index . ']'
-   30         | mapmod map '[' index . ',' index ']'
-   31         | mapmod map '[' index . ',' index ',' index ']'
-
-    ','  shift, and go to state 132
-    ']'  shift, and go to state 133
-
-
-State 130
-
-   78 exp_cond: exp_logor '?' exp_cond ':' . exp_cond
-
-    VARNAME    shift, and go to state 17
-    NAME       shift, and go to state 18
-    VARSTRING  shift, and go to state 19
-    STRING     shift, and go to state 20
-    INTEGER    shift, and go to state 21
-    FLOAT      shift, and go to state 22
-    DOUBLE     shift, and go to state 23
-    '@'        shift, and go to state 24
-    'r'        shift, and go to state 25
-    'g'        shift, and go to state 26
-    'b'        shift, and go to state 27
-    '#'        shift, and go to state 28
-    'y'        shift, and go to state 29
-    'i'        shift, and go to state 30
-    '-'        shift, and go to state 31
-    '('        shift, and go to state 32
-    '~'        shift, and go to state 33
-    '!'        shift, and go to state 34
-
-    map         go to state 35
-    mapmod      go to state 36
-    atom_var    go to state 37
-    atom_map    go to state 38
-    atom_func   go to state 39
-    exp_atom    go to state 40
-    exp_pre     go to state 41
-    exp_pow     go to state 42
-    exp_mul     go to state 43
-    exp_add     go to state 44
-    exp_sh      go to state 45
-    exp_cmp     go to state 46
-    exp_eq      go to state 47
-    exp_bitand  go to state 48
-    exp_bitor   go to state 49
-    exp_logand  go to state 50
-    exp_logor   go to state 51
-    exp_cond    go to state 134
-    name        go to state 62
-
-
-State 131
-
-   26 atom_map: map '[' index ',' index . ']'
-   27         | map '[' index ',' index . ',' index ']'
-
-    ','  shift, and go to state 135
-    ']'  shift, and go to state 136
-
-
-State 132
-
-   30 atom_map: mapmod map '[' index ',' . index ']'
-   31         | mapmod map '[' index ',' . index ',' index ']'
-
-    INTEGER  shift, and go to state 96
-    '-'      shift, and go to state 97
-
-    index  go to state 137
-
-
-State 133
-
-   29 atom_map: mapmod map '[' index ']' .
-
-    $default  reduce using rule 29 (atom_map)
-
-
-State 134
-
-   78 exp_cond: exp_logor '?' exp_cond ':' exp_cond .
-
-    $default  reduce using rule 78 (exp_cond)
-
-
-State 135
-
-   27 atom_map: map '[' index ',' index ',' . index ']'
-
-    INTEGER  shift, and go to state 96
-    '-'      shift, and go to state 97
-
-    index  go to state 138
-
-
-State 136
-
-   26 atom_map: map '[' index ',' index ']' .
-
-    $default  reduce using rule 26 (atom_map)
-
-
-State 137
-
-   30 atom_map: mapmod map '[' index ',' index . ']'
-   31         | mapmod map '[' index ',' index . ',' index ']'
-
-    ','  shift, and go to state 139
-    ']'  shift, and go to state 140
-
-
-State 138
-
-   27 atom_map: map '[' index ',' index ',' index . ']'
-
-    ']'  shift, and go to state 141
-
-
-State 139
-
-   31 atom_map: mapmod map '[' index ',' index ',' . index ']'
-
-    INTEGER  shift, and go to state 96
-    '-'      shift, and go to state 97
-
-    index  go to state 142
-
-
-State 140
-
-   30 atom_map: mapmod map '[' index ',' index ']' .
-
-    $default  reduce using rule 30 (atom_map)
-
-
-State 141
-
-   27 atom_map: map '[' index ',' index ',' index ']' .
-
-    $default  reduce using rule 27 (atom_map)
-
-
-State 142
-
-   31 atom_map: mapmod map '[' index ',' index ',' index . ']'
-
-    ']'  shift, and go to state 143
-
-
-State 143
-
-   31 atom_map: mapmod map '[' index ',' index ',' index ']' .
-
-    $default  reduce using rule 31 (atom_map)
diff --git a/raster/r.mapcalc/mapcalc.tab.c b/raster/r.mapcalc/mapcalc.tab.c
deleted file mode 100644
index 7f6e96b..0000000
--- a/raster/r.mapcalc/mapcalc.tab.c
+++ /dev/null
@@ -1,2043 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
-
-/* Bison implementation for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* 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.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* 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
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "3.0.4"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Push parsers.  */
-#define YYPUSH 0
-
-/* Pull parsers.  */
-#define YYPULL 1
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 2 "mapcalc.y" /* yacc.c:339  */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-
-#include <unistd.h>
-
-#include "mapcalc.h"
-
-#define YYDEBUG 1
-#define YYERROR_VERBOSE 1
-
-static int syntax_error_occurred;
-
-
-#line 84 "mapcalc.tab.c" /* yacc.c:339  */
-
-# ifndef YY_NULLPTR
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
-#  else
-#   define YY_NULLPTR 0
-#  endif
-# endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* In a future release of Bison, this section will be replaced
-   by #include "mapcalc.tab.h".  */
-#ifndef YY_YY_MAPCALC_TAB_H_INCLUDED
-# define YY_YY_MAPCALC_TAB_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    VARNAME = 258,
-    NAME = 259,
-    VARSTRING = 260,
-    STRING = 261,
-    INTEGER = 262,
-    FLOAT = 263,
-    DOUBLE = 264,
-    GT = 265,
-    GE = 266,
-    LT = 267,
-    LE = 268,
-    EQ = 269,
-    NE = 270,
-    LOGAND = 271,
-    LOGOR = 272,
-    LOGAND2 = 273,
-    LOGOR2 = 274,
-    BITAND = 275,
-    BITOR = 276,
-    LSH = 277,
-    RSH = 278,
-    RSHU = 279
-  };
-#endif
-/* Tokens.  */
-#define VARNAME 258
-#define NAME 259
-#define VARSTRING 260
-#define STRING 261
-#define INTEGER 262
-#define FLOAT 263
-#define DOUBLE 264
-#define GT 265
-#define GE 266
-#define LT 267
-#define LE 268
-#define EQ 269
-#define NE 270
-#define LOGAND 271
-#define LOGOR 272
-#define LOGAND2 273
-#define LOGOR2 274
-#define BITAND 275
-#define BITOR 276
-#define LSH 277
-#define RSH 278
-#define RSHU 279
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
-union YYSTYPE
-{
-#line 20 "mapcalc.y" /* yacc.c:355  */
-
-	int ival;
-	double fval;
-	char *sval;
-	expression *exp;
-	expr_list *list;
-
-#line 180 "mapcalc.tab.c" /* yacc.c:355  */
-};
-
-typedef union YYSTYPE YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-#endif /* !YY_YY_MAPCALC_TAB_H_INCLUDED  */
-
-/* Copy the second part of user declarations.  */
-#line 71 "mapcalc.y" /* yacc.c:358  */
-
-
-static expr_list *result;
-
-extern int yylex(void);
-
-int yyparse(void);
-void yyerror(char *s);
-
-
-#line 207 "mapcalc.tab.c" /* yacc.c:358  */
-
-#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;
-#else
-typedef signed char 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
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if defined YYENABLE_NLS && 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
-
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-#  define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
-# 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
-
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
-    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define YY_INITIAL_VALUE(Value) Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   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 EXIT_SUCCESS
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
-#     ifndef EXIT_SUCCESS
-#      define EXIT_SUCCESS 0
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's 'empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (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 EXIT_SUCCESS \
-       && ! ((defined YYMALLOC || defined malloc) \
-             && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef EXIT_SUCCESS
-#    define EXIT_SUCCESS 0
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yytype_int16 yyss_alloc;
-  YYSTYPE yyvs_alloc;
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
-      + YYSTACK_GAP_MAXIMUM)
-
-# define YYCOPY_NEEDED 1
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
-    do                                                                  \
-      {                                                                 \
-        YYSIZE_T yynewbytes;                                            \
-        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
-        Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                 \
-    while (0)
-
-#endif
-
-#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from SRC to DST.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(Dst, Src, Count) \
-      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
-#  else
-#   define YYCOPY(Dst, Src, Count)              \
-      do                                        \
-        {                                       \
-          YYSIZE_T yyi;                         \
-          for (yyi = 0; yyi < (Count); yyi++)   \
-            (Dst)[yyi] = (Src)[yyi];            \
-        }                                       \
-      while (0)
-#  endif
-# endif
-#endif /* !YYCOPY_NEEDED */
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  13
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   177
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  49
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  27
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  84
-/* YYNSTATES -- Number of states.  */
-#define YYNSTATES  144
-
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
-   by yylex, with out-of-bounds checking.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   279
-
-#define YYTRANSLATE(YYX)                                                \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, without out-of-bounds checking.  */
-static const yytype_uint8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    41,     2,    31,     2,    45,     2,     2,
-      38,    39,    43,    46,    35,    34,     2,    44,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    48,    25,
-       2,    26,     2,    47,    27,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    36,     2,    37,    42,     2,     2,     2,    30,     2,
-       2,     2,     2,    29,     2,    33,     2,     2,     2,     2,
-       2,     2,     2,     2,    28,     2,     2,     2,     2,     2,
-       2,    32,     2,     2,     2,     2,    40,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24
-};
-
-#if YYDEBUG
-  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_uint8 yyrline[] =
-{
-       0,    84,    84,    87,    88,    89,    90,    93,    94,    95,
-      98,    99,   100,   103,   104,   105,   106,   107,   108,   109,
-     112,   113,   116,   117,   120,   121,   124,   125,   127,   129,
-     130,   132,   134,   136,   139,   140,   144,   145,   146,   147,
-     148,   149,   150,   153,   154,   155,   156,   159,   160,   163,
-     164,   165,   166,   169,   170,   171,   174,   175,   176,   177,
-     180,   181,   182,   183,   184,   186,   187,   188,   191,   192,
-     195,   196,   199,   200,   201,   204,   205,   206,   209,   210,
-     214,   215,   218,   221,   222
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || 0
-/* 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", "VARNAME", "NAME", "VARSTRING", "STRING",
-  "INTEGER", "FLOAT", "DOUBLE", "GT", "GE", "LT", "LE", "EQ", "NE",
-  "LOGAND", "LOGOR", "LOGAND2", "LOGOR2", "BITAND", "BITOR", "LSH", "RSH",
-  "RSHU", "';'", "'='", "'@'", "'r'", "'g'", "'b'", "'#'", "'y'", "'i'",
-  "'-'", "','", "'['", "']'", "'('", "')'", "'~'", "'!'", "'^'", "'*'",
-  "'/'", "'%'", "'+'", "'?'", "':'", "$accept", "program", "defs", "def",
-  "map", "mapmod", "index", "expr_list", "atom_var", "atom_map",
-  "atom_func", "exp_atom", "exp_pre", "exp_pow", "exp_mul", "exp_add",
-  "exp_sh", "exp_cmp", "exp_eq", "exp_bitand", "exp_bitor", "exp_logand",
-  "exp_logor", "exp_cond", "exp_let", "exp", "name", YY_NULLPTR
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[NUM] -- (External) token number corresponding to the
-   (internal) symbol number NUM (which must be that of a token).  */
-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,
-     275,   276,   277,   278,   279,    59,    61,    64,   114,   103,
-      98,    35,   121,   105,    45,    44,    91,    93,    40,    41,
-     126,    33,    94,    42,    47,    37,    43,    63,    58
-};
-# endif
-
-#define YYPACT_NINF -99
-
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-99)))
-
-#define YYTABLE_NINF -85
-
-#define yytable_value_is_error(Yytable_value) \
-  0
-
-  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-     STATE-NUM.  */
-static const yytype_int16 yypact[] =
-{
-     116,   -17,   -99,     9,    12,    26,   -99,    65,   -99,    73,
-     116,    55,    55,   -99,   106,    16,   -99,   -10,    13,   -99,
-     -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,
-     -99,    70,    55,    70,    70,    69,   132,   -99,   -99,   -99,
-     -99,    79,   -99,    22,   -16,   117,   113,    38,   134,   141,
-     129,   -14,   -99,   -99,   -99,    42,   -99,   -99,   -99,    98,
-     130,   -99,    43,   127,   -99,   -99,    -3,   131,   142,    55,
-      55,    55,    55,    55,    55,    55,    55,    55,    55,    55,
-      55,    55,    55,    55,    55,    55,    55,    55,    55,    55,
-      55,    55,    68,   -99,    55,   -99,   -99,   161,   111,    -3,
-     -99,   -99,   -99,   -99,    22,    22,   -16,   -16,   -16,   117,
-     117,   117,   117,   113,   113,    38,   134,   141,   141,   129,
-     129,   122,   -99,   -99,   -99,   -99,   -99,    -3,   -99,   114,
-      55,   115,    -3,   -99,   -99,    -3,   -99,   118,   135,    -3,
-     -99,   -99,   136,   -99
-};
-
-  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-     Performed when YYTABLE does not specify something else to do.  Zero
-     means the default is an error.  */
-static const yytype_uint8 yydefact[] =
-{
-       0,     0,    84,    83,     0,     0,     2,     3,     9,     0,
-       0,     0,     0,     1,     0,     0,     6,    25,    11,    24,
-      10,    40,    41,    42,    13,    14,    15,    16,    17,    18,
-      19,     0,     0,     0,     0,    29,     0,    37,    38,    39,
-      43,    47,    49,    53,    56,    60,    65,    68,    70,    72,
-      75,    78,    80,    82,     8,     0,     7,     5,    34,     0,
-      22,    44,     0,     0,    45,    46,     0,    33,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    35,     0,    36,    20,     0,     0,     0,
-      48,    50,    51,    52,    55,    54,    57,    58,    59,    61,
-      62,    63,    64,    66,    67,    69,    71,    73,    74,    76,
-      77,     0,    81,    83,    12,    23,    21,     0,    26,     0,
-       0,     0,     0,    30,    79,     0,    27,     0,     0,     0,
-      31,    28,     0,    32
-};
-
-  /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
-{
-     -99,   -99,    -1,   -99,   138,   -99,   -98,    77,   -99,   -99,
-     104,    82,   -99,    58,    83,    67,    53,    76,    91,    92,
-      74,    75,   -99,   -88,    85,    -5,     0
-};
-
-  /* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int8 yydefgoto[] =
-{
-      -1,     5,     6,     7,    35,    36,    98,    59,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    60,    62
-};
-
-  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-     positive, shift that token.  If negative, reduce the rule whose
-     number is the opposite.  If YYTABLE_NINF, syntax error.  */
-static const yytype_int16 yytable[] =
-{
-       9,   129,   121,    88,    96,    89,    54,    56,    10,    16,
-       9,    55,    55,    57,     9,    55,   -84,   -84,    73,    17,
-      18,    19,    20,    21,    22,    23,    13,    63,   -84,   131,
-      74,    97,    55,    90,   137,    11,    68,   138,    12,   -83,
-     -83,   142,   134,    24,    25,    26,    27,    28,    29,    30,
-      31,   -83,    82,    83,    32,    58,    33,    34,    17,    18,
-      19,    20,    21,    22,    23,    70,    71,    72,    91,    92,
-      92,     2,   123,    17,    18,    19,    20,    21,    22,    23,
-      15,    15,    24,    25,    26,    27,    28,    29,    30,    31,
-      14,    55,   124,    32,    55,    33,    34,    24,    25,    26,
-      27,    28,    29,    30,     8,    66,    -4,     1,    32,     2,
-       3,    15,     4,    61,     8,    64,    65,     1,     8,     2,
-       3,    69,     4,    78,    79,    80,    81,   100,   101,   102,
-     103,   109,   110,   111,   112,     2,    18,    93,    20,    75,
-      76,    77,   106,   107,   108,    86,   127,    87,   128,   132,
-     135,   133,   136,   139,    84,   140,   104,   105,   113,   114,
-     117,   118,    85,   119,   120,    94,    95,    99,   126,    92,
-     130,   125,   141,   143,    67,   115,   122,   116
-};
-
-static const yytype_uint8 yycheck[] =
-{
-       0,    99,    90,    17,     7,    19,    11,    12,    25,    10,
-      10,    11,    12,    14,    14,    15,    26,    27,    34,     3,
-       4,     5,     6,     7,     8,     9,     0,    32,    38,   127,
-      46,    34,    32,    47,   132,    26,    36,   135,    26,    26,
-      27,   139,   130,    27,    28,    29,    30,    31,    32,    33,
-      34,    38,    14,    15,    38,    39,    40,    41,     3,     4,
-       5,     6,     7,     8,     9,    43,    44,    45,    26,    27,
-      27,     3,     4,     3,     4,     5,     6,     7,     8,     9,
-      38,    38,    27,    28,    29,    30,    31,    32,    33,    34,
-      25,    91,    92,    38,    94,    40,    41,    27,    28,    29,
-      30,    31,    32,    33,     0,    36,     0,     1,    38,     3,
-       4,    38,     6,    31,    10,    33,    34,     1,    14,     3,
-       4,    42,     6,    10,    11,    12,    13,    69,    70,    71,
-      72,    78,    79,    80,    81,     3,     4,    39,     6,    22,
-      23,    24,    75,    76,    77,    16,    35,    18,    37,    35,
-      35,    37,    37,    35,    20,    37,    73,    74,    82,    83,
-      86,    87,    21,    88,    89,    35,    39,    36,     7,    27,
-      48,    94,    37,    37,    36,    84,    91,    85
-};
-
-  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-     symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
-{
-       0,     1,     3,     4,     6,    50,    51,    52,    59,    75,
-      25,    26,    26,     0,    25,    38,    51,     3,     4,     5,
-       6,     7,     8,     9,    27,    28,    29,    30,    31,    32,
-      33,    34,    38,    40,    41,    53,    54,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    74,    51,    39,    56,
-      74,    60,    75,    74,    60,    60,    36,    53,    75,    42,
-      43,    44,    45,    34,    46,    22,    23,    24,    10,    11,
-      12,    13,    14,    15,    20,    21,    16,    18,    17,    19,
-      47,    26,    27,    39,    35,    39,     7,    34,    55,    36,
-      62,    62,    62,    62,    63,    63,    64,    64,    64,    65,
-      65,    65,    65,    66,    66,    67,    68,    69,    69,    70,
-      70,    72,    73,     4,    75,    56,     7,    35,    37,    55,
-      48,    55,    35,    37,    72,    35,    37,    55,    55,    35,
-      37,    37,    55,    37
-};
-
-  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    49,    50,    51,    51,    51,    51,    52,    52,    52,
-      53,    53,    53,    54,    54,    54,    54,    54,    54,    54,
-      55,    55,    56,    56,    57,    57,    58,    58,    58,    58,
-      58,    58,    58,    58,    59,    59,    60,    60,    60,    60,
-      60,    60,    60,    61,    61,    61,    61,    62,    62,    63,
-      63,    63,    63,    64,    64,    64,    65,    65,    65,    65,
-      66,    66,    66,    66,    66,    67,    67,    67,    68,    68,
-      69,    69,    70,    70,    70,    71,    71,    71,    72,    72,
-      73,    73,    74,    75,    75
-};
-
-  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     1,     1,     2,     3,     3,     3,     3,     1,
-       1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       1,     2,     1,     3,     1,     1,     4,     6,     8,     1,
-       5,     7,     9,     2,     3,     4,     3,     1,     1,     1,
-       1,     1,     1,     1,     2,     2,     2,     1,     3,     1,
-       3,     3,     3,     1,     3,     3,     1,     3,     3,     3,
-       1,     3,     3,     3,     3,     1,     3,     3,     1,     3,
-       1,     3,     1,     3,     3,     1,     3,     3,     1,     5,
-       1,     3,     1,     1,     1
-};
-
-
-#define yyerrok         (yyerrstatus = 0)
-#define yyclearin       (yychar = YYEMPTY)
-#define YYEMPTY         (-2)
-#define YYEOF           0
-
-#define YYACCEPT        goto yyacceptlab
-#define YYABORT         goto yyabortlab
-#define YYERROR         goto yyerrorlab
-
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                  \
-do                                                              \
-  if (yychar == YYEMPTY)                                        \
-    {                                                           \
-      yychar = (Token);                                         \
-      yylval = (Value);                                         \
-      YYPOPSTACK (yylen);                                       \
-      yystate = *yyssp;                                         \
-      goto yybackup;                                            \
-    }                                                           \
-  else                                                          \
-    {                                                           \
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;                                                  \
-    }                                                           \
-while (0)
-
-/* Error token number */
-#define YYTERROR        1
-#define YYERRCODE       256
-
-
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                        \
-do {                                            \
-  if (yydebug)                                  \
-    YYFPRINTF Args;                             \
-} while (0)
-
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
-
-# 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 (0)
-
-
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
-
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-{
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
-  if (!yyvaluep)
-    return;
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# endif
-  YYUSE (yytype);
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-{
-  YYFPRINTF (yyoutput, "%s %s (",
-             yytype < YYNTOKENS ? "token" : "nterm", 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).                                                   |
-`------------------------------------------------------------------*/
-
-static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; yybottom <= yytop; yybottom++)
-    {
-      int yybot = *yybottom;
-      YYFPRINTF (stderr, " %d", yybot);
-    }
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)                            \
-do {                                                            \
-  if (yydebug)                                                  \
-    yy_stack_print ((Bottom), (Top));                           \
-} while (0)
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
-{
-  unsigned long int yylno = yyrline[yyrule];
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-             yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr,
-                       yystos[yyssp[yyi + 1 - yynrhs]],
-                       &(yyvsp[(yyi + 1) - (yynrhs)])
-                                              );
-      YYFPRINTF (stderr, "\n");
-    }
-}
-
-# define YY_REDUCE_PRINT(Rule)          \
-do {                                    \
-  if (yydebug)                          \
-    yy_reduce_print (yyssp, yyvsp, Rule); \
-} while (0)
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-static YYSIZE_T
-yystrlen (const char *yystr)
-{
-  YYSIZE_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  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.  */
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# 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 (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
-   about the unexpected token YYTOKEN for the state stack whose top is
-   YYSSP.
-
-   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
-   not large enough to hold the message.  In that case, also set
-   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
-   required number of bytes is too large to store.  */
-static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
-                yytype_int16 *yyssp, int yytoken)
-{
-  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
-  YYSIZE_T yysize = yysize0;
-  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-  /* Internationalized format string. */
-  const char *yyformat = YY_NULLPTR;
-  /* Arguments of yyformat. */
-  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
-  int yycount = 0;
-
-  /* There are many possibilities here to consider:
-     - If this state is a consistent state with a default action, then
-       the only way this function was invoked is if the default action
-       is an error action.  In that case, don't check for expected
-       tokens because there are none.
-     - The only way there can be no lookahead present (in yychar) is if
-       this state is a consistent state with a default action.  Thus,
-       detecting the absence of a lookahead is sufficient to determine
-       that there is no unexpected or expected token to report.  In that
-       case, just report a simple "syntax error".
-     - Don't assume there isn't a lookahead just because this state is a
-       consistent state with a default action.  There might have been a
-       previous inconsistent state, consistent state with a non-default
-       action, or user semantic action that manipulated yychar.
-     - Of course, the expected token list depends on states to have
-       correct lookahead information, and it depends on the parser not
-       to perform extra reductions after fetching a lookahead from the
-       scanner and before detecting a syntax error.  Thus, state merging
-       (from LALR or IELR) and default reductions corrupt the expected
-       token list.  However, the list is correct for canonical LR with
-       one exception: it will still contain any token that will not be
-       accepted due to an error action in a later state.
-  */
-  if (yytoken != YYEMPTY)
-    {
-      int yyn = yypact[*yyssp];
-      yyarg[yycount++] = yytname[yytoken];
-      if (!yypact_value_is_default (yyn))
-        {
-          /* Start YYX at -YYN if negative to avoid negative indexes in
-             YYCHECK.  In other words, skip the first -YYN actions for
-             this state because they are default actions.  */
-          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 yyx;
-
-          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
-                && !yytable_value_is_error (yytable[yyx + yyn]))
-              {
-                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-                  {
-                    yycount = 1;
-                    yysize = yysize0;
-                    break;
-                  }
-                yyarg[yycount++] = yytname[yyx];
-                {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (! (yysize <= yysize1
-                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-                    return 2;
-                  yysize = yysize1;
-                }
-              }
-        }
-    }
-
-  switch (yycount)
-    {
-# define YYCASE_(N, S)                      \
-      case N:                               \
-        yyformat = S;                       \
-      break
-      YYCASE_(0, YY_("syntax error"));
-      YYCASE_(1, YY_("syntax error, unexpected %s"));
-      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
-      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
-      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
-      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
-    }
-
-  {
-    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-      return 2;
-    yysize = yysize1;
-  }
-
-  if (*yymsg_alloc < yysize)
-    {
-      *yymsg_alloc = 2 * yysize;
-      if (! (yysize <= *yymsg_alloc
-             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
-        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
-      return 1;
-    }
-
-  /* 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 = *yymsg;
-    int yyi = 0;
-    while ((*yyp = *yyformat) != '\0')
-      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
-        {
-          yyp += yytnamerr (yyp, yyarg[yyi++]);
-          yyformat += 2;
-        }
-      else
-        {
-          yyp++;
-          yyformat++;
-        }
-  }
-  return 0;
-}
-#endif /* YYERROR_VERBOSE */
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-{
-  YYUSE (yyvaluep);
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yytype);
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-}
-
-
-
-
-/* The lookahead symbol.  */
-int yychar;
-
-/* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-int
-yyparse (void)
-{
-    int yystate;
-    /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus;
-
-    /* The stacks and their tools:
-       'yyss': related to states.
-       'yyvs': related to semantic values.
-
-       Refer to the stacks through separate pointers, to allow yyoverflow
-       to reallocate them elsewhere.  */
-
-    /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
-
-    /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
-
-    YYSIZE_T yystacksize;
-
-  int yyn;
-  int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  yyssp = yyss = yyssa;
-  yyvsp = yyvs = yyvsa;
-  yystacksize = YYINITDEPTH;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY; /* Cause a token to be read.  */
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- 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.  */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-        /* 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;
-        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 (YY_("memory exhausted"),
-                    &yyss1, yysize * sizeof (*yyssp),
-                    &yyvs1, yysize * sizeof (*yyvsp),
-                    &yystacksize);
-
-        yyss = yyss1;
-        yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-        goto yyexhaustedlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-        yystacksize = YYMAXDEPTH;
-
-      {
-        yytype_int16 *yyss1 = yyss;
-        union yyalloc *yyptr =
-          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-        if (! yyptr)
-          goto yyexhaustedlab;
-        YYSTACK_RELOCATE (yyss_alloc, yyss);
-        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-#  undef YYSTACK_RELOCATE
-        if (yyss1 != yyssa)
-          YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
-        YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  if (yystate == YYFINAL)
-    YYACCEPT;
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-  /* Do appropriate processing given the current state.  Read a
-     lookahead token if we need one and don't already have one.  */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-  yyn = yypact[yystate];
-  if (yypact_value_is_default (yyn))
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = yylex ();
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-    }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
-    {
-      if (yytable_value_is_error (yyn))
-        goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the lookahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
-  yystate = yyn;
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     '$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-        case 2:
-#line 84 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.list) = result = (yyvsp[0].list);		}
-#line 1390 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 3:
-#line 87 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.list) = list((yyvsp[0].exp),NULL);		}
-#line 1396 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 4:
-#line 88 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.list) = list((yyvsp[-1].exp),NULL);		}
-#line 1402 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 5:
-#line 89 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.list) = list((yyvsp[-2].exp),(yyvsp[0].list));		}
-#line 1408 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 6:
-#line 90 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.list) = (yyvsp[0].list);			}
-#line 1414 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 7:
-#line 93 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = binding((yyvsp[-2].sval),(yyvsp[0].exp)); define_variable((yyval.exp));	}
-#line 1420 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 8:
-#line 94 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = binding((yyvsp[-2].sval),(yyvsp[0].exp)); define_variable((yyval.exp));	}
-#line 1426 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 12:
-#line 100 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.sval) = composite((yyvsp[-2].sval),(yyvsp[0].sval));	}
-#line 1432 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 13:
-#line 103 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.ival) = '@';			}
-#line 1438 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 14:
-#line 104 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.ival) = 'r';			}
-#line 1444 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 15:
-#line 105 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.ival) = 'g';			}
-#line 1450 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 16:
-#line 106 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.ival) = 'b';			}
-#line 1456 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 17:
-#line 107 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.ival) = '#';			}
-#line 1462 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 18:
-#line 108 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.ival) = 'y';			}
-#line 1468 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 19:
-#line 109 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.ival) = 'i';			}
-#line 1474 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 21:
-#line 113 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.ival) = -(yyvsp[0].ival);			}
-#line 1480 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 22:
-#line 116 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.list) = singleton((yyvsp[0].exp));		}
-#line 1486 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 23:
-#line 117 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.list) = list((yyvsp[-2].exp), (yyvsp[0].list));		}
-#line 1492 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 24:
-#line 120 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = variable((yyvsp[0].sval));		}
-#line 1498 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 25:
-#line 121 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = variable((yyvsp[0].sval));		}
-#line 1504 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 26:
-#line 124 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = mapname((yyvsp[-3].sval),'M',(yyvsp[-1].ival),0,0);	}
-#line 1510 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 27:
-#line 126 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = mapname((yyvsp[-5].sval),'M',(yyvsp[-3].ival),(yyvsp[-1].ival),0);	}
-#line 1516 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 28:
-#line 128 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = mapname((yyvsp[-7].sval),'M',(yyvsp[-5].ival),(yyvsp[-3].ival),(yyvsp[-1].ival));}
-#line 1522 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 29:
-#line 129 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = mapname((yyvsp[0].sval),'M',0,0,0);	}
-#line 1528 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 30:
-#line 131 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = mapname((yyvsp[-3].sval),(yyvsp[-4].ival),(yyvsp[-1].ival),0,0);	}
-#line 1534 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 31:
-#line 133 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = mapname((yyvsp[-5].sval),(yyvsp[-6].ival),(yyvsp[-3].ival),(yyvsp[-1].ival),0);	}
-#line 1540 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 32:
-#line 135 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = mapname((yyvsp[-7].sval),(yyvsp[-8].ival),(yyvsp[-5].ival),(yyvsp[-3].ival),(yyvsp[-1].ival));	}
-#line 1546 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 33:
-#line 136 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = mapname((yyvsp[0].sval),(yyvsp[-1].ival),0,0,0);	}
-#line 1552 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 34:
-#line 139 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = function((yyvsp[-2].sval), NULL);	}
-#line 1558 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 35:
-#line 141 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = function((yyvsp[-3].sval), (yyvsp[-1].list));	}
-#line 1564 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 36:
-#line 144 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = (yyvsp[-1].exp);			}
-#line 1570 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 40:
-#line 148 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = constant_int((yyvsp[0].ival));	}
-#line 1576 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 41:
-#line 149 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = constant_float((yyvsp[0].fval));	}
-#line 1582 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 42:
-#line 150 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = constant_double((yyvsp[0].fval));	}
-#line 1588 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 44:
-#line 154 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("neg","-",1,singleton((yyvsp[0].exp)));	}
-#line 1594 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 45:
-#line 155 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("bitnot","~",1,singleton((yyvsp[0].exp)));	}
-#line 1600 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 46:
-#line 156 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("not","!",1,singleton((yyvsp[0].exp)));	}
-#line 1606 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 48:
-#line 160 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("pow","^",2,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1612 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 50:
-#line 164 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("mul","*",3,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1618 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 51:
-#line 165 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("div","/",3,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1624 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 52:
-#line 166 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("mod","%",3,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1630 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 54:
-#line 170 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("add","+",4,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1636 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 55:
-#line 171 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("sub","-",4,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1642 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 57:
-#line 175 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("shiftl","<<",5,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1648 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 58:
-#line 176 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("shiftr",">>",5,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1654 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 59:
-#line 177 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("shiftru",">>>",5,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1660 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 61:
-#line 181 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("gt",">", 6,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1666 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 62:
-#line 182 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("ge",">=",6,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1672 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 63:
-#line 183 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("lt","<", 6,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1678 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 64:
-#line 184 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("le","<=",6,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1684 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 66:
-#line 187 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("eq","==",7,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1690 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 67:
-#line 188 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("ne","!=",7,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1696 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 69:
-#line 192 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("bitand","&",8,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1702 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 71:
-#line 196 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("bitor", "|",9,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1708 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 73:
-#line 200 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("and","&&",10,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1714 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 74:
-#line 201 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("and2","&&&",10,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1720 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 76:
-#line 205 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("or", "||",11,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1726 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 77:
-#line 206 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("or2", "|||",11,pair((yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1732 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 79:
-#line 211 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = operator("if","?:",12,triple((yyvsp[-4].exp),(yyvsp[-2].exp),(yyvsp[0].exp)));	}
-#line 1738 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 81:
-#line 215 "mapcalc.y" /* yacc.c:1646  */
-    { (yyval.exp) = binding((yyvsp[-2].sval),(yyvsp[0].exp)); define_variable((yyval.exp));	}
-#line 1744 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-  case 82:
-#line 218 "mapcalc.y" /* yacc.c:1646  */
-    { if (syntax_error_occurred) {syntax_error_occurred = 0; YYERROR; } else (yyval.exp) = (yyvsp[0].exp);	}
-#line 1750 "mapcalc.tab.c" /* yacc.c:1646  */
-    break;
-
-
-#line 1754 "mapcalc.tab.c" /* yacc.c:1646  */
-      default: break;
-    }
-  /* User semantic actions sometimes alter yychar, and that requires
-     that yytoken be updated with the new translation.  We take the
-     approach of translating immediately before every use of yytoken.
-     One alternative is translating here after every semantic action,
-     but that translation would be missed if the semantic action invokes
-     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
-     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
-     incorrect destructor might then be invoked immediately.  In the
-     case of YYERROR or YYBACKUP, subsequent parser actions might lead
-     to an incorrect destructor call or verbose syntax error message
-     before the lookahead is translated.  */
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-
-  /* Now 'shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*--------------------------------------.
-| yyerrlab -- here on detecting error.  |
-`--------------------------------------*/
-yyerrlab:
-  /* Make sure we have latest lookahead translation.  See comments at
-     user semantic actions for why this is necessary.  */
-  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
-                                        yyssp, yytoken)
-      {
-        char const *yymsgp = YY_("syntax error");
-        int yysyntax_error_status;
-        yysyntax_error_status = YYSYNTAX_ERROR;
-        if (yysyntax_error_status == 0)
-          yymsgp = yymsg;
-        else if (yysyntax_error_status == 1)
-          {
-            if (yymsg != yymsgbuf)
-              YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
-            if (!yymsg)
-              {
-                yymsg = yymsgbuf;
-                yymsg_alloc = sizeof yymsgbuf;
-                yysyntax_error_status = 2;
-              }
-            else
-              {
-                yysyntax_error_status = YYSYNTAX_ERROR;
-                yymsgp = yymsg;
-              }
-          }
-        yyerror (yymsgp);
-        if (yysyntax_error_status == 2)
-          goto yyexhaustedlab;
-      }
-# undef YYSYNTAX_ERROR
-#endif
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-         error, discard it.  */
-
-      if (yychar <= YYEOF)
-        {
-          /* Return failure if at end of input.  */
-          if (yychar == YYEOF)
-            YYABORT;
-        }
-      else
-        {
-          yydestruct ("Error: discarding",
-                      yytoken, &yylval);
-          yychar = YYEMPTY;
-        }
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* 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;
-
-  /* Do not reclaim the symbols of the rule whose action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (!yypact_value_is_default (yyn))
-        {
-          yyn += YYTERROR;
-          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-            {
-              yyn = yytable[yyn];
-              if (0 < yyn)
-                break;
-            }
-        }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-        YYABORT;
-
-
-      yydestruct ("Error: popping",
-                  yystos[yystate], yyvsp);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  *++yyvsp = yylval;
-  YY_IGNORE_MAYBE_UNINITIALIZED_END
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#if !defined yyoverflow || YYERROR_VERBOSE
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEMPTY)
-    {
-      /* Make sure we have latest lookahead translation.  See comments at
-         user semantic actions for why this is necessary.  */
-      yytoken = YYTRANSLATE (yychar);
-      yydestruct ("Cleanup: discarding lookahead",
-                  yytoken, &yylval);
-    }
-  /* Do not reclaim the symbols of the rule whose 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
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  return yyresult;
-}
-#line 225 "mapcalc.y" /* yacc.c:1906  */
-
-
-void syntax_error(const char *fmt, ...)
-{
-	va_list va;
-
-	va_start(va, fmt);
-	vfprintf(stderr, fmt, va);
-	va_end(va);
-
-	fprintf(stderr, "\n");
-
-	syntax_error_occurred = 1;
-}
-
-void yyerror(char *s)
-{
-	fprintf(stderr, "%s\n", s);
-	syntax_error_occurred = 0;
-}
-
-static expr_list *parse(void)
-{
-#if 0
-	yydebug = 1;
-#endif
-	syntax_error_occurred = 0;
-
-	if (yyparse() != 0)
-	{
-		fprintf(stderr, "Parse error\n");
-		return NULL;
-	}
-
-	if (syntax_error_occurred)
-	{
-		fprintf(stderr, "Syntax error\n");
-		return NULL;
-	}
-
-	return result;
-}
-
-expr_list *parse_string(const char *s)
-{
-	initialize_scanner_string(s);
-	return parse();
-}
-
-expr_list *parse_stream(FILE *fp)
-{
-	expr_list *e;
-
-	initialize_scanner_stream(fp);
-	if (isatty(fileno(fp)))
-		fputs("Enter expressions, \"end\" when done.\n", stderr);
-	e = parse();
-	if (isatty(fileno(fp)))
-		fputs("\n", stderr);
-	return e;
-}
-
diff --git a/raster/r.mapcalc/mapcalc.tab.h b/raster/r.mapcalc/mapcalc.tab.h
deleted file mode 100644
index 82f0d0e..0000000
--- a/raster/r.mapcalc/mapcalc.tab.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
-
-/* Bison interface for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* 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.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-#ifndef YY_YY_MAPCALC_TAB_H_INCLUDED
-# define YY_YY_MAPCALC_TAB_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    VARNAME = 258,
-    NAME = 259,
-    VARSTRING = 260,
-    STRING = 261,
-    INTEGER = 262,
-    FLOAT = 263,
-    DOUBLE = 264,
-    GT = 265,
-    GE = 266,
-    LT = 267,
-    LE = 268,
-    EQ = 269,
-    NE = 270,
-    LOGAND = 271,
-    LOGOR = 272,
-    LOGAND2 = 273,
-    LOGOR2 = 274,
-    BITAND = 275,
-    BITOR = 276,
-    LSH = 277,
-    RSH = 278,
-    RSHU = 279
-  };
-#endif
-/* Tokens.  */
-#define VARNAME 258
-#define NAME 259
-#define VARSTRING 260
-#define STRING 261
-#define INTEGER 262
-#define FLOAT 263
-#define DOUBLE 264
-#define GT 265
-#define GE 266
-#define LT 267
-#define LE 268
-#define EQ 269
-#define NE 270
-#define LOGAND 271
-#define LOGOR 272
-#define LOGAND2 273
-#define LOGOR2 274
-#define BITAND 275
-#define BITOR 276
-#define LSH 277
-#define RSH 278
-#define RSHU 279
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
-union YYSTYPE
-{
-#line 20 "mapcalc.y" /* yacc.c:1909  */
-
-	int ival;
-	double fval;
-	char *sval;
-	expression *exp;
-	expr_list *list;
-
-#line 110 "mapcalc.tab.h" /* yacc.c:1909  */
-};
-
-typedef union YYSTYPE YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-#endif /* !YY_YY_MAPCALC_TAB_H_INCLUDED  */
diff --git a/raster/r.mapcalc/mapcalc.yy.c b/raster/r.mapcalc/mapcalc.yy.c
deleted file mode 100644
index 7e6729d..0000000
--- a/raster/r.mapcalc/mapcalc.yy.c
+++ /dev/null
@@ -1,2241 +0,0 @@
-
-#line 3 "<stdout>"
-
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 39
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-/* end standard C headers. */
-
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types. 
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t; 
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! C99 */
-
-#endif /* ! FLEXINT_H */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart(yyin  )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-extern yy_size_t yyleng;
-
-extern FILE *yyin, *yyout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-    #define YY_LESS_LINENO(n)
-    #define YY_LINENO_REWIND_TO(ptr)
-    
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		*yy_cp = (yy_hold_char); \
-		YY_RESTORE_YY_MORE_OFFSET \
-		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
-		} \
-	while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr)  )
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
-	{
-	FILE *yy_input_file;
-
-	char *yy_ch_buf;		/* input buffer */
-	char *yy_buf_pos;		/* current position in input buffer */
-
-	/* Size of input buffer in bytes, not including room for EOB
-	 * characters.
-	 */
-	yy_size_t yy_buf_size;
-
-	/* Number of characters read into yy_ch_buf, not including EOB
-	 * characters.
-	 */
-	yy_size_t yy_n_chars;
-
-	/* Whether we "own" the buffer - i.e., we know we created it,
-	 * and can realloc() it to grow it, and should free() it to
-	 * delete it.
-	 */
-	int yy_is_our_buffer;
-
-	/* Whether this is an "interactive" input source; if so, and
-	 * if we're using stdio for input, then we want to use getc()
-	 * instead of fread(), to make sure we stop fetching input after
-	 * each newline.
-	 */
-	int yy_is_interactive;
-
-	/* Whether we're considered to be at the beginning of a line.
-	 * If so, '^' rules will be active on the next match, otherwise
-	 * not.
-	 */
-	int yy_at_bol;
-
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
-	/* Whether to try to fill the input buffer when we reach the
-	 * end of it.
-	 */
-	int yy_fill_buffer;
-
-	int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-	/* When an EOF's been seen but there's still some text to process
-	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-	 * shouldn't try reading from the input source any more.  We might
-	 * still have a bunch of tokens to match, though, because of
-	 * possible backing-up.
-	 *
-	 * When we actually see the EOF, we change the status to "new"
-	 * (via yyrestart()), so that the user can continue scanning by
-	 * just pointing yyin at a new input file.
-	 */
-#define YY_BUFFER_EOF_PENDING 2
-
-	};
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* Stack of input buffers. */
-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
-                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
-                          : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* yy_hold_char holds the character lost when yytext is formed. */
-static char yy_hold_char;
-static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
-yy_size_t yyleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 0;		/* whether we need to initialize */
-static int yy_start = 0;	/* start state number */
-
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin.  A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void yyrestart (FILE *input_file  );
-void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
-void yy_delete_buffer (YY_BUFFER_STATE b  );
-void yy_flush_buffer (YY_BUFFER_STATE b  );
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
-void yypop_buffer_state (void );
-
-static void yyensure_buffer_stack (void );
-static void yy_load_buffer_state (void );
-static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
-
-#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
-
-YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
-YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
-
-void *yyalloc (yy_size_t  );
-void *yyrealloc (void *,yy_size_t  );
-void yyfree (void *  );
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){ \
-        yyensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer(yyin,YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-	}
-
-#define yy_set_bol(at_bol) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){\
-        yyensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer(yyin,YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-	}
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* Begin user sect3 */
-
-typedef unsigned char YY_CHAR;
-
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
-
-typedef int yy_state_type;
-
-extern int yylineno;
-
-int yylineno = 1;
-
-extern char *yytext;
-#define yytext_ptr yytext
-
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[]  );
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
-	(yytext_ptr) = yy_bp; \
-	yyleng = (size_t) (yy_cp - yy_bp); \
-	(yy_hold_char) = *yy_cp; \
-	*yy_cp = '\0'; \
-	(yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 62
-#define YY_END_OF_BUFFER 63
-/* This struct is not used in this scanner,
-   but its presence is necessary. */
-struct yy_trans_info
-	{
-	flex_int32_t yy_verify;
-	flex_int32_t yy_nxt;
-	};
-static yyconst flex_int16_t yy_accept[107] =
-    {   0,
-        0,    0,   63,   61,    1,   60,   24,   61,   46,   13,
-       23,   28,   61,   50,   51,   20,   18,   55,   19,   13,
-       21,   11,   11,   42,   59,   37,   54,   35,   41,   49,
-       13,   13,   13,   13,   13,   52,   13,   53,   22,   31,
-       25,    1,   56,   13,    1,   40,   16,   13,   27,   17,
-        6,    9,    5,   11,   13,   32,   38,   39,   36,   34,
-       45,   44,   48,   43,   47,    0,    2,   30,    1,   56,
-        0,   13,   13,   14,   26,   15,    9,    4,   10,    5,
-        7,    3,   12,   33,   29,    0,    0,   13,   13,   10,
-        6,    8,    5,    0,    0,    0,   57,   13,    6,    5,
-
-        0,    0,   58,    4,    3,    0
-    } ;
-
-static yyconst flex_int32_t yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    4,    5,    6,    7,    8,    9,   10,   11,
-       12,   13,   14,   15,   16,   17,   18,   19,   20,   20,
-       20,   20,   20,   20,   20,   20,   20,   21,   22,   23,
-       24,   25,   26,   27,   28,   29,   28,   28,   30,   31,
-       32,    7,   33,    7,    7,    7,    7,    7,    7,    7,
-        7,   34,    7,    7,    7,    7,    7,   35,   36,    7,
-       37,   38,   39,   40,    7,    7,   28,   29,   28,   41,
-
-       42,   31,   32,    7,   43,    7,    7,    7,    7,   44,
-        7,    7,    7,   34,    7,   45,    7,    7,    7,   46,
-       36,    7,    7,   47,    7,   48,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7
-    } ;
-
-static yyconst flex_int32_t yy_meta[49] =
-    {   0,
-        1,    1,    1,    1,    2,    1,    3,    1,    1,    4,
-        1,    1,    1,    1,    1,    1,    3,    1,    3,    3,
-        1,    1,    1,    1,    1,    1,    1,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    1,    3,    1,    1,
-        3,    3,    3,    3,    3,    3,    1,    1
-    } ;
-
-static yyconst flex_int16_t yy_base[110] =
-    {   0,
-        0,   47,  166,  167,  163,  167,  140,    0,  167,    0,
-      167,  154,    0,  167,  167,  167,  167,  167,  167,   32,
-      167,   36,   19,  167,  167,   34,  138,   35,  167,  167,
-      155,  154,  153,  147,  144,  167,   61,  167,  167,  101,
-      167,   64,  167,   24,  145,  167,  141,    0,  136,  123,
-       42,   61,   60,   41,   88,  167,  167,  167,  167,  106,
-      167,  167,  167,  167,  167,   83,  167,   63,   90,  167,
-       37,   64,   58,  167,  167,  167,   80,    0,  167,    0,
-       95,    0,    0,  167,  167,   54,   45,   95,   33,   84,
-       93,  101,  103,  123,   24,  125,  167,  133,  118,  120,
-
-      139,  141,  167,  167,  167,  167,  151,   58,  155
-    } ;
-
-static yyconst flex_int16_t yy_def[110] =
-    {   0,
-      106,    1,  106,  106,  106,  106,  106,  107,  106,  108,
-      106,  106,  109,  106,  106,  106,  106,  106,  106,  108,
-      106,  108,   22,  106,  106,  106,  106,  106,  106,  106,
-      108,  108,  108,  108,  108,  106,  108,  106,  106,  106,
-      106,  106,  106,  108,  106,  106,  107,  108,  106,  109,
-       20,  108,  108,   22,  108,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  108,  108,  106,  106,  106,  108,  108,  106,   53,
-      108,  108,   55,  106,  106,  106,  106,  108,  108,  106,
-      108,  106,  108,  106,  106,  106,  106,  108,  106,  106,
-
-      106,  106,  106,  106,  106,    0,  106,  106,  106
-    } ;
-
-static yyconst flex_int16_t yy_nxt[216] =
-    {   0,
-        4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
-       14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
-       24,   25,   26,   27,   28,   29,   30,   10,   31,   10,
-       10,   32,   33,   34,   10,   35,   36,   37,   38,   39,
-       10,   10,   33,   10,   10,   10,   40,   41,   42,   43,
-       51,   51,   53,   48,   54,   54,   56,   57,   59,   60,
-       48,   52,   66,   67,   48,   69,   70,   72,  101,   73,
-       55,   77,   78,   52,   79,   48,   79,   98,   80,   80,
-       86,   55,   87,   77,   66,   67,   48,   95,   44,   81,
-       82,   69,   70,   90,   94,   90,   96,   97,   91,   91,
-
-       89,   81,   99,   99,   88,   71,   83,   83,   92,   85,
-       92,   91,   91,   93,   93,   83,   83,   83,   83,  100,
-      100,   93,   93,   78,   96,   97,   96,   97,   83,   83,
-       84,   71,   76,   82,  102,  103,   99,   99,  100,  100,
-      102,  103,  102,  103,   75,   74,   45,   68,  104,   65,
-      105,   47,   64,   47,   47,   50,   50,   50,   63,   62,
-       61,   58,   49,   46,   45,  106,    3,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106
-    } ;
-
-static yyconst flex_int16_t yy_chk[216] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    2,
-       20,   20,   22,   23,   22,   22,   26,   26,   28,   28,
-      108,   20,   37,   37,   23,   42,   42,   44,   95,   44,
-       22,   51,   51,   20,   52,   54,   52,   89,   53,   53,
-       71,   22,   71,   51,   66,   66,   54,   87,    2,   53,
-       53,   69,   69,   77,   86,   77,   88,   88,   77,   77,
-
-       73,   53,   90,   90,   72,   42,   55,   55,   81,   68,
-       81,   91,   91,   81,   81,   55,   55,   55,   55,   92,
-       92,   93,   93,   91,   94,   94,   96,   96,   55,   55,
-       60,   69,   50,   93,   98,   98,   99,   99,  100,  100,
-      101,  101,  102,  102,   49,   47,   45,   40,   99,   35,
-      100,  107,   34,  107,  107,  109,  109,  109,   33,   32,
-       31,   27,   12,    7,    5,    3,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106
-    } ;
-
-static yy_state_type yy_last_accepting_state;
-static char *yy_last_accepting_cpos;
-
-extern int yy_flex_debug;
-int yy_flex_debug = 0;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
-#line 1 "mapcalc.l"
-#line 3 "mapcalc.l"
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <grass/config.h>
-
-#ifdef HAVE_READLINE_READLINE_H
-#include <readline/readline.h>
-#include <readline/history.h>
-#endif
-
-#include <grass/gis.h>
-
-#include "mapcalc.h"
-
-#include "mapcalc.tab.h"
-
-#ifndef YY_NULL
-#define YY_NULL 0
-#endif
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-static const char *input_string;
-static int input_length;
-static int input_offset;
-static FILE *input_stream;
-
-static int get_input_string(char *buf, int max_size)
-{
-	const char *next = input_string + input_offset;
-	int left = input_length - input_offset;
-	int result;
-
-	if (left <= 0)
-		return YY_NULL;
-
-	result = (left > max_size) ? max_size : left;
-	memcpy(buf, next, result);
-	input_offset += result;
-
-	return result;
-}
-
-static int get_input_stream(char *buf, int max_size)
-{
-	if (feof(input_stream))
-		return YY_NULL;
-
-#ifdef HAVE_READLINE_READLINE_H
-	if (isatty(fileno(input_stream)))
-	{
-		char *line_read;
-
-		line_read = readline("mapcalc> ");
-		if (!line_read)
-			return YY_NULL;
-		if (strlen(line_read) > max_size - 2)
-			G_fatal_error("input line too long");
-		strcpy(buf, line_read);
-		strcat(buf, "\n");
-		free(line_read);
-
-		if (!*buf)
-			return YY_NULL;
-		add_history(buf);
-	}
-	else
-	{
-		if (!fgets(buf, max_size, input_stream))
-			return YY_NULL;
-	}
-#else
-	if (isatty(fileno(input_stream)))
-		fputs("mapcalc> ", stderr);
-
-	if (!fgets(buf, max_size, input_stream))
-		return YY_NULL;
-#endif
-
-	return strlen(buf);
-}
-
-#define YY_INPUT(buf,result,max_size)				\
-{								\
-	result = input_string					\
-		? get_input_string(buf, max_size)		\
-		: get_input_stream(buf, max_size);		\
-}
-
-#line 626 "<stdout>"
-
-#define INITIAL 0
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-#include <unistd.h>
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-static int yy_init_globals (void );
-
-/* Accessor methods to globals.
-   These are made visible to non-reentrant scanners for convenience. */
-
-int yylex_destroy (void );
-
-int yyget_debug (void );
-
-void yyset_debug (int debug_flag  );
-
-YY_EXTRA_TYPE yyget_extra (void );
-
-void yyset_extra (YY_EXTRA_TYPE user_defined  );
-
-FILE *yyget_in (void );
-
-void yyset_in  (FILE * in_str  );
-
-FILE *yyget_out (void );
-
-void yyset_out  (FILE * out_str  );
-
-yy_size_t yyget_leng (void );
-
-char *yyget_text (void );
-
-int yyget_lineno (void );
-
-void yyset_lineno (int line_number  );
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int yywrap (void );
-#else
-extern int yywrap (void );
-#endif
-#endif
-
-    static void yyunput (int c,char *buf_ptr  );
-    
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-
-#ifdef __cplusplus
-static int yyinput (void );
-#else
-static int input (void );
-#endif
-
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
-		{ \
-		int c = '*'; \
-		size_t n; \
-		for ( n = 0; n < max_size && \
-			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
-			buf[n] = (char) c; \
-		if ( c == '\n' ) \
-			buf[n++] = (char) c; \
-		if ( c == EOF && ferror( yyin ) ) \
-			YY_FATAL_ERROR( "input in flex scanner failed" ); \
-		result = n; \
-		} \
-	else \
-		{ \
-		errno=0; \
-		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
-			{ \
-			if( errno != EINTR) \
-				{ \
-				YY_FATAL_ERROR( "input in flex scanner failed" ); \
-				break; \
-				} \
-			errno=0; \
-			clearerr(yyin); \
-			} \
-		}\
-\
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* end tables serialization structures and prototypes */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-
-extern int yylex (void);
-
-#define YY_DECL int yylex (void)
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
-	if ( yyleng > 0 ) \
-		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
-				(yytext[yyleng - 1] == '\n'); \
-	YY_USER_ACTION
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
-    
-	if ( !(yy_init) )
-		{
-		(yy_init) = 1;
-
-#ifdef YY_USER_INIT
-		YY_USER_INIT;
-#endif
-
-		if ( ! (yy_start) )
-			(yy_start) = 1;	/* first start state */
-
-		if ( ! yyin )
-			yyin = stdin;
-
-		if ( ! yyout )
-			yyout = stdout;
-
-		if ( ! YY_CURRENT_BUFFER ) {
-			yyensure_buffer_stack ();
-			YY_CURRENT_BUFFER_LVALUE =
-				yy_create_buffer(yyin,YY_BUF_SIZE );
-		}
-
-		yy_load_buffer_state( );
-		}
-
-	{
-#line 103 "mapcalc.l"
-
-
-#line 841 "<stdout>"
-
-	while ( 1 )		/* loops until end-of-file is reached */
-		{
-		yy_cp = (yy_c_buf_p);
-
-		/* Support of yytext. */
-		*yy_cp = (yy_hold_char);
-
-		/* yy_bp points to the position in yy_ch_buf of the start of
-		 * the current run.
-		 */
-		yy_bp = yy_cp;
-
-		yy_current_state = (yy_start);
-		yy_current_state += YY_AT_BOL();
-yy_match:
-		do
-			{
-			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
-			if ( yy_accept[yy_current_state] )
-				{
-				(yy_last_accepting_state) = yy_current_state;
-				(yy_last_accepting_cpos) = yy_cp;
-				}
-			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-				{
-				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 107 )
-					yy_c = yy_meta[(unsigned int) yy_c];
-				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-			++yy_cp;
-			}
-		while ( yy_base[yy_current_state] != 167 );
-
-yy_find_action:
-		yy_act = yy_accept[yy_current_state];
-		if ( yy_act == 0 )
-			{ /* have to back up */
-			yy_cp = (yy_last_accepting_cpos);
-			yy_current_state = (yy_last_accepting_state);
-			yy_act = yy_accept[yy_current_state];
-			}
-
-		YY_DO_BEFORE_ACTION;
-
-do_action:	/* This label is used only to access EOF actions. */
-
-		switch ( yy_act )
-	{ /* beginning of action switch */
-			case 0: /* must back up */
-			/* undo the effects of YY_DO_BEFORE_ACTION */
-			*yy_cp = (yy_hold_char);
-			yy_cp = (yy_last_accepting_cpos);
-			yy_current_state = (yy_last_accepting_state);
-			goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-#line 105 "mapcalc.l"
-;	/* ignore white space */
-	YY_BREAK
-case 2:
-/* rule 2 can match eol */
-YY_RULE_SETUP
-#line 107 "mapcalc.l"
-;	/* ignore backslash-newline */
-	YY_BREAK
-case 3:
-#line 110 "mapcalc.l"
-case 4:
-YY_RULE_SETUP
-#line 110 "mapcalc.l"
-{
-			yylval.fval = atof(yytext);
-			return FLOAT;
-		}
-	YY_BREAK
-case 5:
-#line 116 "mapcalc.l"
-case 6:
-YY_RULE_SETUP
-#line 116 "mapcalc.l"
-{
-			yylval.fval = atof(yytext);
-			return DOUBLE;
-		}
-	YY_BREAK
-case 7:
-#line 122 "mapcalc.l"
-case 8:
-#line 123 "mapcalc.l"
-case 9:
-#line 124 "mapcalc.l"
-case 10:
-YY_RULE_SETUP
-#line 124 "mapcalc.l"
-{
-			fprintf(stderr, "unterminated FP constant\n");
-			yyterminate();
-		}
-	YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 129 "mapcalc.l"
-{
-			yylval.ival = atoi(yytext);
-			return INTEGER;
-		}
-	YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 134 "mapcalc.l"
-{
-			yylval.ival = (int) strtoul(yytext, NULL, 16);
-			return INTEGER;
-		}
-	YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 139 "mapcalc.l"
-{
-			yylval.sval = strdup(yytext);
-			return is_var(yytext) ? VARNAME : NAME; 
-		}
-	YY_BREAK
-case 14:
-/* rule 14 can match eol */
-#line 145 "mapcalc.l"
-case 15:
-/* rule 15 can match eol */
-YY_RULE_SETUP
-#line 145 "mapcalc.l"
-{
-			yylval.sval = strdup(yytext + 1);
-			yylval.sval[yyleng - 2] = '\0';
-			return is_var(yytext) ? VARSTRING : STRING; 
-		}
-	YY_BREAK
-case 16:
-/* rule 16 can match eol */
-#line 152 "mapcalc.l"
-case 17:
-/* rule 17 can match eol */
-YY_RULE_SETUP
-#line 152 "mapcalc.l"
-{
-			fprintf(stderr, "unterminated string\n");
-			yyterminate();
-		}
-	YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 157 "mapcalc.l"
-{	return '+';	}
-	YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 158 "mapcalc.l"
-{	return '-';	}
-	YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 159 "mapcalc.l"
-{	return '*';	}
-	YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 160 "mapcalc.l"
-{	return '/';	}
-	YY_BREAK
-case 22:
-YY_RULE_SETUP
-#line 161 "mapcalc.l"
-{	return '^';	}
-	YY_BREAK
-case 23:
-YY_RULE_SETUP
-#line 162 "mapcalc.l"
-{	return '%';	}
-	YY_BREAK
-case 24:
-YY_RULE_SETUP
-#line 164 "mapcalc.l"
-{	return '!';	}
-	YY_BREAK
-case 25:
-YY_RULE_SETUP
-#line 165 "mapcalc.l"
-{	return '~';	}
-	YY_BREAK
-case 26:
-YY_RULE_SETUP
-#line 167 "mapcalc.l"
-{	return LOGAND2;	}
-	YY_BREAK
-case 27:
-YY_RULE_SETUP
-#line 168 "mapcalc.l"
-{	return LOGAND;	}
-	YY_BREAK
-case 28:
-YY_RULE_SETUP
-#line 169 "mapcalc.l"
-{	return BITAND;	}
-	YY_BREAK
-case 29:
-YY_RULE_SETUP
-#line 171 "mapcalc.l"
-{	return LOGOR2;	}
-	YY_BREAK
-case 30:
-YY_RULE_SETUP
-#line 172 "mapcalc.l"
-{	return LOGOR;	}
-	YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 173 "mapcalc.l"
-{	return BITOR;	}
-	YY_BREAK
-case 32:
-YY_RULE_SETUP
-#line 175 "mapcalc.l"
-{	return LSH;	}
-	YY_BREAK
-case 33:
-YY_RULE_SETUP
-#line 176 "mapcalc.l"
-{	return RSHU;	}
-	YY_BREAK
-case 34:
-YY_RULE_SETUP
-#line 177 "mapcalc.l"
-{	return RSH;	}
-	YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 179 "mapcalc.l"
-{	return GT;	}
-	YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 180 "mapcalc.l"
-{	return GE;	}
-	YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 181 "mapcalc.l"
-{	return LT;	}
-	YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 182 "mapcalc.l"
-{	return LE;	}
-	YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 184 "mapcalc.l"
-{	return EQ;	}
-	YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 185 "mapcalc.l"
-{	return NE;	}
-	YY_BREAK
-case 41:
-YY_RULE_SETUP
-#line 187 "mapcalc.l"
-{	return '?';	}
-	YY_BREAK
-case 42:
-YY_RULE_SETUP
-#line 188 "mapcalc.l"
-{	return ':';	}
-	YY_BREAK
-case 43:
-YY_RULE_SETUP
-#line 190 "mapcalc.l"
-{	return 'r';	}
-	YY_BREAK
-case 44:
-YY_RULE_SETUP
-#line 191 "mapcalc.l"
-{	return 'g';	}
-	YY_BREAK
-case 45:
-YY_RULE_SETUP
-#line 192 "mapcalc.l"
-{	return 'b';	}
-	YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 193 "mapcalc.l"
-{	return '#';	}
-	YY_BREAK
-case 47:
-YY_RULE_SETUP
-#line 194 "mapcalc.l"
-{	return 'y';	}
-	YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 195 "mapcalc.l"
-{	return 'i';	}
-	YY_BREAK
-case 49:
-YY_RULE_SETUP
-#line 197 "mapcalc.l"
-{	return '@';	}
-	YY_BREAK
-case 50:
-YY_RULE_SETUP
-#line 199 "mapcalc.l"
-{	return '(';	}
-	YY_BREAK
-case 51:
-YY_RULE_SETUP
-#line 200 "mapcalc.l"
-{	return ')';	}
-	YY_BREAK
-case 52:
-YY_RULE_SETUP
-#line 202 "mapcalc.l"
-{	return '[';	}
-	YY_BREAK
-case 53:
-YY_RULE_SETUP
-#line 203 "mapcalc.l"
-{	return ']';	}
-	YY_BREAK
-case 54:
-YY_RULE_SETUP
-#line 205 "mapcalc.l"
-{	return '=';	}
-	YY_BREAK
-case 55:
-YY_RULE_SETUP
-#line 207 "mapcalc.l"
-{	return ',';	}
-	YY_BREAK
-case 56:
-/* rule 56 can match eol */
-YY_RULE_SETUP
-#line 209 "mapcalc.l"
-{	yyterminate();	}
-	YY_BREAK
-case 57:
-/* rule 57 can match eol */
-YY_RULE_SETUP
-#line 210 "mapcalc.l"
-{	yyterminate();	}
-	YY_BREAK
-case 58:
-/* rule 58 can match eol */
-YY_RULE_SETUP
-#line 211 "mapcalc.l"
-{	yyterminate();	}
-	YY_BREAK
-case 59:
-#line 214 "mapcalc.l"
-case 60:
-/* rule 60 can match eol */
-YY_RULE_SETUP
-#line 214 "mapcalc.l"
-{	return ';';	}
-	YY_BREAK
-case 61:
-YY_RULE_SETUP
-#line 217 "mapcalc.l"
-{
-			fprintf(stderr, "syntax error: '%*s'\n", yyleng, yytext);
-			yyterminate();
-		}
-	YY_BREAK
-case 62:
-YY_RULE_SETUP
-#line 221 "mapcalc.l"
-ECHO;
-	YY_BREAK
-#line 1222 "<stdout>"
-case YY_STATE_EOF(INITIAL):
-	yyterminate();
-
-	case YY_END_OF_BUFFER:
-		{
-		/* Amount of text matched not including the EOB char. */
-		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
-		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-		*yy_cp = (yy_hold_char);
-		YY_RESTORE_YY_MORE_OFFSET
-
-		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-			{
-			/* We're scanning a new file or input source.  It's
-			 * possible that this happened because the user
-			 * just pointed yyin at a new source and called
-			 * yylex().  If so, then we have to assure
-			 * consistency between YY_CURRENT_BUFFER and our
-			 * globals.  Here is the right place to do so, because
-			 * this is the first action (other than possibly a
-			 * back-up) that will match for the new input source.
-			 */
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-			}
-
-		/* Note that here we test for yy_c_buf_p "<=" to the position
-		 * of the first EOB in the buffer, since yy_c_buf_p will
-		 * already have been incremented past the NUL character
-		 * (since all states make transitions on EOB to the
-		 * end-of-buffer state).  Contrast this with the test
-		 * in input().
-		 */
-		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			{ /* This was really a NUL. */
-			yy_state_type yy_next_state;
-
-			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
-			yy_current_state = yy_get_previous_state(  );
-
-			/* Okay, we're now positioned to make the NUL
-			 * transition.  We couldn't have
-			 * yy_get_previous_state() go ahead and do it
-			 * for us because it doesn't know how to deal
-			 * with the possibility of jamming (and we don't
-			 * want to build jamming into it because then it
-			 * will run more slowly).
-			 */
-
-			yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
-			if ( yy_next_state )
-				{
-				/* Consume the NUL. */
-				yy_cp = ++(yy_c_buf_p);
-				yy_current_state = yy_next_state;
-				goto yy_match;
-				}
-
-			else
-				{
-				yy_cp = (yy_c_buf_p);
-				goto yy_find_action;
-				}
-			}
-
-		else switch ( yy_get_next_buffer(  ) )
-			{
-			case EOB_ACT_END_OF_FILE:
-				{
-				(yy_did_buffer_switch_on_eof) = 0;
-
-				if ( yywrap( ) )
-					{
-					/* Note: because we've taken care in
-					 * yy_get_next_buffer() to have set up
-					 * yytext, we can now set up
-					 * yy_c_buf_p so that if some total
-					 * hoser (like flex itself) wants to
-					 * call the scanner after we return the
-					 * YY_NULL, it'll still work - another
-					 * YY_NULL will get returned.
-					 */
-					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
-					yy_act = YY_STATE_EOF(YY_START);
-					goto do_action;
-					}
-
-				else
-					{
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-					}
-				break;
-				}
-
-			case EOB_ACT_CONTINUE_SCAN:
-				(yy_c_buf_p) =
-					(yytext_ptr) + yy_amount_of_matched_text;
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_match;
-
-			case EOB_ACT_LAST_MATCH:
-				(yy_c_buf_p) =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_find_action;
-			}
-		break;
-		}
-
-	default:
-		YY_FATAL_ERROR(
-			"fatal flex scanner internal error--no action found" );
-	} /* end of action switch */
-		} /* end of scanning one token */
-	} /* end of user's declarations */
-} /* end of yylex */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *	EOB_ACT_LAST_MATCH -
- *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *	EOB_ACT_END_OF_FILE - end of file
- */
-static int yy_get_next_buffer (void)
-{
-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = (yytext_ptr);
-	register int number_to_move, i;
-	int ret_val;
-
-	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
-		YY_FATAL_ERROR(
-		"fatal flex scanner internal error--end of buffer missed" );
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-		{ /* Don't try to fill the buffer, so this is an EOF. */
-		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
-			{
-			/* We matched a single character, the EOB, so
-			 * treat this as a final EOF.
-			 */
-			return EOB_ACT_END_OF_FILE;
-			}
-
-		else
-			{
-			/* We matched some text prior to the EOB, first
-			 * process it.
-			 */
-			return EOB_ACT_LAST_MATCH;
-			}
-		}
-
-	/* Try to read more data. */
-
-	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
-	for ( i = 0; i < number_to_move; ++i )
-		*(dest++) = *(source++);
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-		/* don't do the read, it's not guaranteed to return an EOF,
-		 * just force an EOF
-		 */
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
-	else
-		{
-			yy_size_t num_to_read =
-			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
-		while ( num_to_read <= 0 )
-			{ /* Not enough room in the buffer - grow it. */
-
-			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
-
-			int yy_c_buf_p_offset =
-				(int) ((yy_c_buf_p) - b->yy_ch_buf);
-
-			if ( b->yy_is_our_buffer )
-				{
-				yy_size_t new_size = b->yy_buf_size * 2;
-
-				if ( new_size <= 0 )
-					b->yy_buf_size += b->yy_buf_size / 8;
-				else
-					b->yy_buf_size *= 2;
-
-				b->yy_ch_buf = (char *)
-					/* Include room in for 2 EOB chars. */
-					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
-				}
-			else
-				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
-
-			if ( ! b->yy_ch_buf )
-				YY_FATAL_ERROR(
-				"fatal error - scanner input buffer overflow" );
-
-			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-						number_to_move - 1;
-
-			}
-
-		if ( num_to_read > YY_READ_BUF_SIZE )
-			num_to_read = YY_READ_BUF_SIZE;
-
-		/* Read in more data. */
-		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), num_to_read );
-
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	if ( (yy_n_chars) == 0 )
-		{
-		if ( number_to_move == YY_MORE_ADJ )
-			{
-			ret_val = EOB_ACT_END_OF_FILE;
-			yyrestart(yyin  );
-			}
-
-		else
-			{
-			ret_val = EOB_ACT_LAST_MATCH;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-				YY_BUFFER_EOF_PENDING;
-			}
-		}
-
-	else
-		ret_val = EOB_ACT_CONTINUE_SCAN;
-
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
-		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-	}
-
-	(yy_n_chars) += number_to_move;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
-	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
-	return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-    static yy_state_type yy_get_previous_state (void)
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
-    
-	yy_current_state = (yy_start);
-	yy_current_state += YY_AT_BOL();
-
-	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
-		{
-		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-		if ( yy_accept[yy_current_state] )
-			{
-			(yy_last_accepting_state) = yy_current_state;
-			(yy_last_accepting_cpos) = yy_cp;
-			}
-		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-			{
-			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 107 )
-				yy_c = yy_meta[(unsigned int) yy_c];
-			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-		}
-
-	return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *	next_state = yy_try_NUL_trans( current_state );
- */
-    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
-{
-	register int yy_is_jam;
-    	register char *yy_cp = (yy_c_buf_p);
-
-	register YY_CHAR yy_c = 1;
-	if ( yy_accept[yy_current_state] )
-		{
-		(yy_last_accepting_state) = yy_current_state;
-		(yy_last_accepting_cpos) = yy_cp;
-		}
-	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-		{
-		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 107 )
-			yy_c = yy_meta[(unsigned int) yy_c];
-		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 106);
-
-		return yy_is_jam ? 0 : yy_current_state;
-}
-
-    static void yyunput (int c, register char * yy_bp )
-{
-	register char *yy_cp;
-    
-    yy_cp = (yy_c_buf_p);
-
-	/* undo effects of setting up yytext */
-	*yy_cp = (yy_hold_char);
-
-	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-		{ /* need to shift things up to make room */
-		/* +2 for EOB chars. */
-		register yy_size_t number_to_move = (yy_n_chars) + 2;
-		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-		register char *source =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
-		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			*--dest = *--source;
-
-		yy_cp += (int) (dest - source);
-		yy_bp += (int) (dest - source);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
-		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-			YY_FATAL_ERROR( "flex scanner push-back overflow" );
-		}
-
-	*--yy_cp = (char) c;
-
-	(yytext_ptr) = yy_bp;
-	(yy_hold_char) = *yy_cp;
-	(yy_c_buf_p) = yy_cp;
-}
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-    static int yyinput (void)
-#else
-    static int input  (void)
-#endif
-
-{
-	int c;
-    
-	*(yy_c_buf_p) = (yy_hold_char);
-
-	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
-		{
-		/* yy_c_buf_p now points to the character we want to return.
-		 * If this occurs *before* the EOB characters, then it's a
-		 * valid NUL; if not, then we've hit the end of the buffer.
-		 */
-		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			/* This was really a NUL. */
-			*(yy_c_buf_p) = '\0';
-
-		else
-			{ /* need more input */
-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
-			++(yy_c_buf_p);
-
-			switch ( yy_get_next_buffer(  ) )
-				{
-				case EOB_ACT_LAST_MATCH:
-					/* This happens because yy_g_n_b()
-					 * sees that we've accumulated a
-					 * token and flags that we need to
-					 * try matching the token before
-					 * proceeding.  But for input(),
-					 * there's no matching to consider.
-					 * So convert the EOB_ACT_LAST_MATCH
-					 * to EOB_ACT_END_OF_FILE.
-					 */
-
-					/* Reset buffer status. */
-					yyrestart(yyin );
-
-					/*FALLTHROUGH*/
-
-				case EOB_ACT_END_OF_FILE:
-					{
-					if ( yywrap( ) )
-						return EOF;
-
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-#ifdef __cplusplus
-					return yyinput();
-#else
-					return input();
-#endif
-					}
-
-				case EOB_ACT_CONTINUE_SCAN:
-					(yy_c_buf_p) = (yytext_ptr) + offset;
-					break;
-				}
-			}
-		}
-
-	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve yytext */
-	(yy_hold_char) = *++(yy_c_buf_p);
-
-	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
-
-	return c;
-}
-#endif	/* ifndef YY_NO_INPUT */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- * 
- * @note This function does not reset the start condition to @c INITIAL .
- */
-    void yyrestart  (FILE * input_file )
-{
-    
-	if ( ! YY_CURRENT_BUFFER ){
-        yyensure_buffer_stack ();
-		YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer(yyin,YY_BUF_SIZE );
-	}
-
-	yy_init_buffer(YY_CURRENT_BUFFER,input_file );
-	yy_load_buffer_state( );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- * 
- */
-    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
-{
-    
-	/* TODO. We should be able to replace this entire function body
-	 * with
-	 *		yypop_buffer_state();
-	 *		yypush_buffer_state(new_buffer);
-     */
-	yyensure_buffer_stack ();
-	if ( YY_CURRENT_BUFFER == new_buffer )
-		return;
-
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	yy_load_buffer_state( );
-
-	/* We don't actually know whether we did this switch during
-	 * EOF (yywrap()) processing, but the only time this flag
-	 * is looked at is after yywrap() is called, so it's safe
-	 * to go ahead and always set it.
-	 */
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-static void yy_load_buffer_state  (void)
-{
-    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-	(yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- * 
- * @return the allocated buffer state.
- */
-    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
-{
-	YY_BUFFER_STATE b;
-    
-	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_buf_size = size;
-
-	/* yy_ch_buf has to be 2 characters longer than the size given because
-	 * we need to put in 2 end-of-buffer characters.
-	 */
-	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
-	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
-	b->yy_is_our_buffer = 1;
-
-	yy_init_buffer(b,file );
-
-	return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
- * 
- */
-    void yy_delete_buffer (YY_BUFFER_STATE  b )
-{
-    
-	if ( ! b )
-		return;
-
-	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
-	if ( b->yy_is_our_buffer )
-		yyfree((void *) b->yy_ch_buf  );
-
-	yyfree((void *) b  );
-}
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
- */
-    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
-
-{
-	int oerrno = errno;
-    
-	yy_flush_buffer(b );
-
-	b->yy_input_file = file;
-	b->yy_fill_buffer = 1;
-
-    /* If b is the current buffer, then yy_init_buffer was _probably_
-     * called from yyrestart() or through yy_get_next_buffer.
-     * In that case, we don't want to reset the lineno or column.
-     */
-    if (b != YY_CURRENT_BUFFER){
-        b->yy_bs_lineno = 1;
-        b->yy_bs_column = 0;
-    }
-
-        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-    
-	errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- * 
- */
-    void yy_flush_buffer (YY_BUFFER_STATE  b )
-{
-    	if ( ! b )
-		return;
-
-	b->yy_n_chars = 0;
-
-	/* We always need two end-of-buffer characters.  The first causes
-	 * a transition to the end-of-buffer state.  The second causes
-	 * a jam in that state.
-	 */
-	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-	b->yy_buf_pos = &b->yy_ch_buf[0];
-
-	b->yy_at_bol = 1;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	if ( b == YY_CURRENT_BUFFER )
-		yy_load_buffer_state( );
-}
-
-/** Pushes the new state onto the stack. The new state becomes
- *  the current state. This function will allocate the stack
- *  if necessary.
- *  @param new_buffer The new state.
- *  
- */
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
-{
-    	if (new_buffer == NULL)
-		return;
-
-	yyensure_buffer_stack();
-
-	/* This block is copied from yy_switch_to_buffer. */
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	/* Only push if top exists. Otherwise, replace top. */
-	if (YY_CURRENT_BUFFER)
-		(yy_buffer_stack_top)++;
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-	/* copied from yy_switch_to_buffer. */
-	yy_load_buffer_state( );
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-/** Removes and deletes the top of the stack, if present.
- *  The next element becomes the new top.
- *  
- */
-void yypop_buffer_state (void)
-{
-    	if (!YY_CURRENT_BUFFER)
-		return;
-
-	yy_delete_buffer(YY_CURRENT_BUFFER );
-	YY_CURRENT_BUFFER_LVALUE = NULL;
-	if ((yy_buffer_stack_top) > 0)
-		--(yy_buffer_stack_top);
-
-	if (YY_CURRENT_BUFFER) {
-		yy_load_buffer_state( );
-		(yy_did_buffer_switch_on_eof) = 1;
-	}
-}
-
-/* Allocates the stack if it does not exist.
- *  Guarantees space for at least one push.
- */
-static void yyensure_buffer_stack (void)
-{
-	yy_size_t num_to_alloc;
-    
-	if (!(yy_buffer_stack)) {
-
-		/* First allocation is just for 2 elements, since we don't know if this
-		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
-		 * immediate realloc on the next call.
-         */
-		num_to_alloc = 1;
-		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
-								(num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-								  
-		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-				
-		(yy_buffer_stack_max) = num_to_alloc;
-		(yy_buffer_stack_top) = 0;
-		return;
-	}
-
-	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
-		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
-
-		num_to_alloc = (yy_buffer_stack_max) + grow_size;
-		(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
-								((yy_buffer_stack),
-								num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
-		/* zero only the new slots.*/
-		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-		(yy_buffer_stack_max) = num_to_alloc;
-	}
-}
-
-/** Setup the input buffer state to scan directly from a user-specified character buffer.
- * @param base the character buffer
- * @param size the size in bytes of the character buffer
- * 
- * @return the newly allocated buffer state object. 
- */
-YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
-{
-	YY_BUFFER_STATE b;
-    
-	if ( size < 2 ||
-	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
-	     base[size-1] != YY_END_OF_BUFFER_CHAR )
-		/* They forgot to leave room for the EOB's. */
-		return 0;
-
-	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
-
-	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
-	b->yy_buf_pos = b->yy_ch_buf = base;
-	b->yy_is_our_buffer = 0;
-	b->yy_input_file = 0;
-	b->yy_n_chars = b->yy_buf_size;
-	b->yy_is_interactive = 0;
-	b->yy_at_bol = 1;
-	b->yy_fill_buffer = 0;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	yy_switch_to_buffer(b  );
-
-	return b;
-}
-
-/** Setup the input buffer state to scan a string. The next call to yylex() will
- * scan from a @e copy of @a str.
- * @param yystr a NUL-terminated string to scan
- * 
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- *       yy_scan_bytes() instead.
- */
-YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
-{
-    
-	return yy_scan_bytes(yystr,strlen(yystr) );
-}
-
-/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
- * scan from a @e copy of @a bytes.
- * @param yybytes the byte buffer to scan
- * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
- * 
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
-{
-	YY_BUFFER_STATE b;
-	char *buf;
-	yy_size_t n;
-	yy_size_t i;
-    
-	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
-	buf = (char *) yyalloc(n  );
-	if ( ! buf )
-		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
-
-	for ( i = 0; i < _yybytes_len; ++i )
-		buf[i] = yybytes[i];
-
-	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
-
-	b = yy_scan_buffer(buf,n );
-	if ( ! b )
-		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
-
-	/* It's okay to grow etc. this buffer, and we should throw it
-	 * away when we're done.
-	 */
-	b->yy_is_our_buffer = 1;
-
-	return b;
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-static void yy_fatal_error (yyconst char* msg )
-{
-    	(void) fprintf( stderr, "%s\n", msg );
-	exit( YY_EXIT_FAILURE );
-}
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up yytext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		yytext[yyleng] = (yy_hold_char); \
-		(yy_c_buf_p) = yytext + yyless_macro_arg; \
-		(yy_hold_char) = *(yy_c_buf_p); \
-		*(yy_c_buf_p) = '\0'; \
-		yyleng = yyless_macro_arg; \
-		} \
-	while ( 0 )
-
-/* Accessor  methods (get/set functions) to struct members. */
-
-/** Get the current line number.
- * 
- */
-int yyget_lineno  (void)
-{
-        
-    return yylineno;
-}
-
-/** Get the input stream.
- * 
- */
-FILE *yyget_in  (void)
-{
-        return yyin;
-}
-
-/** Get the output stream.
- * 
- */
-FILE *yyget_out  (void)
-{
-        return yyout;
-}
-
-/** Get the length of the current token.
- * 
- */
-yy_size_t yyget_leng  (void)
-{
-        return yyleng;
-}
-
-/** Get the current token.
- * 
- */
-
-char *yyget_text  (void)
-{
-        return yytext;
-}
-
-/** Set the current line number.
- * @param line_number
- * 
- */
-void yyset_lineno (int  line_number )
-{
-    
-    yylineno = line_number;
-}
-
-/** Set the input stream. This does not discard the current
- * input buffer.
- * @param in_str A readable stream.
- * 
- * @see yy_switch_to_buffer
- */
-void yyset_in (FILE *  in_str )
-{
-        yyin = in_str ;
-}
-
-void yyset_out (FILE *  out_str )
-{
-        yyout = out_str ;
-}
-
-int yyget_debug  (void)
-{
-        return yy_flex_debug;
-}
-
-void yyset_debug (int  bdebug )
-{
-        yy_flex_debug = bdebug ;
-}
-
-static int yy_init_globals (void)
-{
-        /* Initialization is the same as for the non-reentrant scanner.
-     * This function is called from yylex_destroy(), so don't allocate here.
-     */
-
-    (yy_buffer_stack) = 0;
-    (yy_buffer_stack_top) = 0;
-    (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
-    (yy_init) = 0;
-    (yy_start) = 0;
-
-/* Defined in main.c */
-#ifdef YY_STDINIT
-    yyin = stdin;
-    yyout = stdout;
-#else
-    yyin = (FILE *) 0;
-    yyout = (FILE *) 0;
-#endif
-
-    /* For future reference: Set errno on error, since we are called by
-     * yylex_init()
-     */
-    return 0;
-}
-
-/* yylex_destroy is for both reentrant and non-reentrant scanners. */
-int yylex_destroy  (void)
-{
-    
-    /* Pop the buffer stack, destroying each element. */
-	while(YY_CURRENT_BUFFER){
-		yy_delete_buffer(YY_CURRENT_BUFFER  );
-		YY_CURRENT_BUFFER_LVALUE = NULL;
-		yypop_buffer_state();
-	}
-
-	/* Destroy the stack itself. */
-	yyfree((yy_buffer_stack) );
-	(yy_buffer_stack) = NULL;
-
-    /* Reset the globals. This is important in a non-reentrant scanner so the next time
-     * yylex() is called, initialization will occur. */
-    yy_init_globals( );
-
-    return 0;
-}
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
-	register int i;
-	for ( i = 0; i < n; ++i )
-		s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
-	register int n;
-	for ( n = 0; s[n]; ++n )
-		;
-
-	return n;
-}
-#endif
-
-void *yyalloc (yy_size_t  size )
-{
-	return (void *) malloc( size );
-}
-
-void *yyrealloc  (void * ptr, yy_size_t  size )
-{
-	/* The cast to (char *) in the following accommodates both
-	 * implementations that use char* generic pointers, and those
-	 * that use void* generic pointers.  It works with the latter
-	 * because both ANSI C and C++ allow castless assignment from
-	 * any pointer type to void*, and deal with argument conversions
-	 * as though doing an assignment.
-	 */
-	return (void *) realloc( (char *) ptr, size );
-}
-
-void yyfree (void * ptr )
-{
-	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
-}
-
-#define YYTABLES_NAME "yytables"
-
-#line 221 "mapcalc.l"
-
-
-
-int yywrap(void)
-{
-	return 1;
-}
-
-void initialize_scanner_string(const char *s)
-{
-	input_string = s;
-	input_length = strlen(s);
-	input_offset = 0;
-}
-
-void initialize_scanner_stream(FILE *fp)
-{
-	input_stream = fp;
-	setbuf(fp, NULL);
-}
-
-
diff --git a/raster/r.mapcalc/r3.mapcalc.html b/raster/r.mapcalc/r3.mapcalc.html
index 06e00a0..97fd611 100644
--- a/raster/r.mapcalc/r3.mapcalc.html
+++ b/raster/r.mapcalc/r3.mapcalc.html
@@ -619,4 +619,4 @@ Tomas Paudits & Jaro Hofierka, funded by GeoModel s.r.o., Slovakia
 <p>Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2016-04-18 00:00:57 +0200 (Mo, 18. Apr 2016) $</i>
+<i>Last changed: $Date: 2016-04-18 00:00:57 +0200 (Mon, 18 Apr 2016) $</i>
diff --git a/raster/r.out.gdal/main.c b/raster/r.out.gdal/main.c
index 439c018..473705d 100644
--- a/raster/r.out.gdal/main.c
+++ b/raster/r.out.gdal/main.c
@@ -254,7 +254,7 @@ int main(int argc, char *argv[])
     mapset = G_find_raster2(input->answer, "");
 
     if (mapset != NULL) {
-	/* Add input to "group". "Group" whith 1 raster (band) will exist only in memory. */
+	/* Add input to "group". "Group" with 1 raster (band) will exist only in memory. */
 	I_init_group_ref(&ref);
 	I_add_file_to_group_ref(input->answer, mapset, &ref);
     }
diff --git a/raster/r.timestamp/r.timestamp.html b/raster/r.timestamp/r.timestamp.html
index 40e7cb4..1337e27 100644
--- a/raster/r.timestamp/r.timestamp.html
+++ b/raster/r.timestamp/r.timestamp.html
@@ -141,4 +141,4 @@ Spaces in the timestamp value are required.
 
 Michael Shapiro, U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-08-22 15:25:10 +0200 (Mon, 22. Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-22 15:25:10 +0200 (Mon, 22 Aug 2016) $</i>
diff --git a/raster/r.viewshed/r.viewshed.html b/raster/r.viewshed/r.viewshed.html
index 2145b37..8b7eb23 100644
--- a/raster/r.viewshed/r.viewshed.html
+++ b/raster/r.viewshed/r.viewshed.html
@@ -184,14 +184,19 @@ r.viewshed input=elev_lid792_1m output=elev_lid792_1m_viewshed \
 </pre></div>
 
 <div align="center" style="margin: 10px">
-<img src="r.viewshed.png" border=0><br>
-<i>Viewshed</i>
+<a href="r.viewshed.png">
+<img src="r.viewshed.png" width="900" alt="r.viewshed example" border=0><br>
+</a>
+<i>Viewshed shown on shaded terrain (observer position in the north-east quadrant with white dot; 5m above ground)</i>
 </div>
 <!--
 # image generated using
 d.mon wx0
-d.rast elev_lid792_1m
-d.rast elev_lid792_1m_viewshed
+r.relief input=elev_lid792_1m output=elev_lid792_1m_shade
+d.mon wx0
+d.shade shade=elev_lid792_1m_shade color=elev_lid792_1m_viewshed
+d.legend elev_lid792_1m_viewshed
+d.barscale
 # save image to files
 # crop the background using Gimp or ImageMagic
 mogrify -trim *.png
@@ -237,4 +242,4 @@ and Combinatorics (ALENEX/ANALCO 2007)</em>.</li>
 <p>Markus Metz
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2016-09-13 22:01:38 +0200 (Tue, 13 Sep 2016) $</i>
diff --git a/raster/r.viewshed/r.viewshed.png b/raster/r.viewshed/r.viewshed.png
index 785036c..f38bb49 100644
Binary files a/raster/r.viewshed/r.viewshed.png and b/raster/r.viewshed/r.viewshed.png differ
diff --git a/raster/r.watershed/front/r.watershed.html b/raster/r.watershed/front/r.watershed.html
index 1ee84f2..e7a36fb 100644
--- a/raster/r.watershed/front/r.watershed.html
+++ b/raster/r.watershed/front/r.watershed.html
@@ -528,4 +528,4 @@ Faster sorting algorithm and MFD support:
 Markus Metz <markus.metz.giswork at gmail.com>
 
 <p>
-<i>Last changed: $Date: 2016-08-23 15:52:03 +0200 (Tue, 23. Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-23 15:52:03 +0200 (Tue, 23 Aug 2016) $</i>
diff --git a/raster3d/r3.timestamp/r3.timestamp.html b/raster3d/r3.timestamp/r3.timestamp.html
index 98306cf..986c110 100644
--- a/raster3d/r3.timestamp/r3.timestamp.html
+++ b/raster3d/r3.timestamp/r3.timestamp.html
@@ -70,4 +70,4 @@ Lockheed Martin Space Systems<br>
 based on r.timestamp by Michael Shapiro, <br>
 U.S. Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-08-22 15:25:10 +0200 (Mon, 22. Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-22 15:25:10 +0200 (Mon, 22 Aug 2016) $</i>
diff --git a/scripts/g.extension/g.extension.py b/scripts/g.extension/g.extension.py
index a58afdb..cdb0bc9 100644
--- a/scripts/g.extension/g.extension.py
+++ b/scripts/g.extension/g.extension.py
@@ -164,6 +164,7 @@ def expand_module_class_name(c):
              'r'   : 'raster',
              'r3'  : 'raster3d',
              's'   : 'sites',
+             't'   : 'temporal',
              'v'   : 'vector',
              'wx'  : 'gui/wxpython'
              }
@@ -348,7 +349,7 @@ def list_available_extensions_svn():
         grass.warning(_("Flag 'g' ignored, addons metadata file not available"))
 
     prefix = ['d', 'db', 'g', 'i', 'm', 'ps',
-              'p', 'r', 'r3', 's', 'v']
+              'p', 'r', 'r3', 's', 't', 'v']
     for d in prefix:
         modclass = expand_module_class_name(d)
         grass.verbose(_("Checking for '%s' modules...") % modclass)
diff --git a/scripts/r.pack/r.pack.html b/scripts/r.pack/r.pack.html
index 998fa32..424bc30 100644
--- a/scripts/r.pack/r.pack.html
+++ b/scripts/r.pack/r.pack.html
@@ -49,4 +49,4 @@ Original Bash script written by Hamish Bowman, Otago University, New Zealand
 Converted to Python and updated for GRASS 7 by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2016-04-14 09:01:56 +0200 (Do, 14. Apr 2016) $</i>
+<i>Last changed: $Date: 2016-04-14 09:01:56 +0200 (Thu, 14 Apr 2016) $</i>
diff --git a/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.html b/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.html
index 624c0a5..916be6c 100644
--- a/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.html
+++ b/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.html
@@ -9,7 +9,7 @@ space time raster dataset.
 
 <h2>NOTES</h2>
 The sampling method must be specified from the sampler dataset point of view.
-It defines the temporal relations hips between intervals of the sampling 
+It defines the temporal relationships between intervals of the sampling 
 dataset and the input space time raster dataset.
 
 <h2>EXAMPLES</h2>
@@ -362,5 +362,5 @@ name|mapset|start_time|end_time
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2016-01-15 00:20:43 +0100 (Fri, 15 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-09-07 23:19:02 +0200 (Wed, 07 Sep 2016) $</i>
 
diff --git a/temporal/t.rast.out.vtk/t.rast.out.vtk.html b/temporal/t.rast.out.vtk/t.rast.out.vtk.html
index f23134e..df7bbeb 100644
--- a/temporal/t.rast.out.vtk/t.rast.out.vtk.html
+++ b/temporal/t.rast.out.vtk/t.rast.out.vtk.html
@@ -10,7 +10,7 @@ ParaView. The VTK legacy files are created using <b>r.out.vtk</b>.
 In this simple example we create several raster maps with random values 
 and one elevation map. The random value raster maps are registered in a 
 space time raster dataset. All maps of this space time raster dataset 
-are exported using <b>t.rast.out.vtk</b> into the directoy 
+are exported using <b>t.rast.out.vtk</b> into the directory 
 <b>/tmp/test1</b>.
 
 
@@ -44,5 +44,5 @@ ls -1 /tmp/export
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2014-12-26 23:44:16 +0100 (Fri, 26 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2016-08-30 15:30:47 +0200 (Tue, 30 Aug 2016) $</i>
 
diff --git a/temporal/t.vect.algebra/t.vect.algebra.py b/temporal/t.vect.algebra/t.vect.algebra.py
index caa3d65..d096143 100644
--- a/temporal/t.vect.algebra/t.vect.algebra.py
+++ b/temporal/t.vect.algebra/t.vect.algebra.py
@@ -5,7 +5,7 @@
 # MODULE:       t.vect.algebra
 # AUTHOR(S):    Thomas Leppelt, Soeren Gebbert
 #
-# PURPOSE:      Provide temporal vector algebra to perform spatial an temporal operations
+# PURPOSE:      Provide temporal vector algebra to perform spatial and temporal operations
 #               for space time datasets by topological relationships to other space time
 #               datasets.
 # COPYRIGHT:    (C) 2014 by the GRASS Development Team
@@ -17,7 +17,7 @@
 #############################################################################
 
 #%module
-#% description: Apply temporal and spatial oeprations on space time vector datasets using temporal vector algebra.
+#% description: Apply temporal and spatial operations on space time vector datasets using temporal vector algebra.
 #% keyword: temporal
 #% keyword: algebra
 #% keyword: vector
diff --git a/vector/v.buffer/v.buffer.html b/vector/v.buffer/v.buffer.html
index d4f8f04..a680a80 100644
--- a/vector/v.buffer/v.buffer.html
+++ b/vector/v.buffer/v.buffer.html
@@ -133,7 +133,7 @@ v.buffer input=lakes output=lakes_buffer type=area distance=-50
 <img src="v_buffer_areas_int.png" border="1"><br>
 Internal buffer of 50m inside the "lakes" polygons (map subset, original areas
 shown in black) <br>
-Not all features are buffered, only the polygons that allow to create inside
+Not all features are buffered, only the polygons that allow creation inside
 a topological cleaned polygon.
 </center>
 
@@ -163,4 +163,4 @@ Rewritten by Rosen Matev (with support through the
 Rewritten by Markus Metz (2011, 2012)
 
 <p>
-<i>Last changed: $Date: 2016-08-02 15:50:46 +0200 (Tue, 02 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-30 15:30:47 +0200 (Tue, 30 Aug 2016) $</i>
diff --git a/vector/v.category/main.c b/vector/v.category/main.c
index 4b2ed39..a3a9b57 100644
--- a/vector/v.category/main.c
+++ b/vector/v.category/main.c
@@ -452,6 +452,8 @@ int main(int argc, char *argv[])
 			    Vect_field_cat_del(Cats, fields[0], Cats->cat[found]);
 			nmodified++;
 		    }
+		    else
+			i++;
 		}
 	    }
 	    Vect_write_line(&Out, type, Points, Cats);
diff --git a/vector/v.net.flow/v.net.flow.html b/vector/v.net.flow/v.net.flow.html
index 4d89208..e96e69a 100644
--- a/vector/v.net.flow/v.net.flow.html
+++ b/vector/v.net.flow/v.net.flow.html
@@ -5,10 +5,10 @@ between two sets of nodes.
 
 <h2>NOTES</h2>
 The two sets of nodes are called <em>sources</em> and <em>sink</em> 
-and <em>v.net.flow</em> finds the maximimum flow from the former to 
+and <em>v.net.flow</em> finds the maximum flow from the former to 
 the latter ones. Edge capacities can be specified by <b>arc_column</b> 
 for forward direction and <b>arc_backward_column</b> for backward direction. If 
-the latter parameter is ommited then the same capacity is used in 
+the latter parameter is omitted then the same capacity is used in 
 either direction. The sets are given by the respective <b>cats</b>, 
 <b>layer</b> and <b>where</b> parameters. Maximum flow corresponds 
 to the maximum amount of water possibly flowing through the network 
@@ -56,4 +56,4 @@ v.net.flow input=network output=flow cut=cut arc_column=ones \
 Daniel Bundala, Google Summer of Code 2009, Student<br>
 Wolf Bergenheim, Mentor
 
-<p><i>Last changed: $Date: 2014-12-24 15:44:33 +0100 (Wed, 24 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2016-08-30 15:30:47 +0200 (Tue, 30 Aug 2016) $</i>
diff --git a/vector/v.net.visibility/v.net.visibility.html b/vector/v.net.visibility/v.net.visibility.html
index f11b340..acee82c 100644
--- a/vector/v.net.visibility/v.net.visibility.html
+++ b/vector/v.net.visibility/v.net.visibility.html
@@ -21,7 +21,7 @@ or <em><a href="d.path.html">d.path</a></em>.
 If you compute a shortest path after computing the visibility graph
 you will notice that this path might go through a vertex of a line. If
 this is not what you wanted you might need to process the map
-in <em><a href="v.buffer.html">v.buffer</a></em>, initially whith a
+in <em><a href="v.buffer.html">v.buffer</a></em>, initially with a
 small value. Example:
 
 <div class="code"><pre>
@@ -145,4 +145,4 @@ Maximilian Maldacker<br>
 Mentor: Wolf Bergenheim
 
 <p>
-<i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<i>Last changed: $Date: 2016-08-30 15:30:47 +0200 (Tue, 30 Aug 2016) $</i>
diff --git a/vector/v.overlay/area_area.c b/vector/v.overlay/area_area.c
index e766126..23e281b 100644
--- a/vector/v.overlay/area_area.c
+++ b/vector/v.overlay/area_area.c
@@ -199,7 +199,7 @@ int area_area(struct Map_info *In, int *field, struct Map_info *Tmp,
 			if (Cats->field[i] == field[input]) {
 			    ATTR *at;
 
-			    Vect_cat_set(Centr[area].cat[input], ofield[input + 1],
+			    Vect_cat_set(Centr[area].cat[input], field[input],
 					 Cats->cat[i]);
 
 			    /* Mark as used */
diff --git a/vector/v.overlay/line_area.c b/vector/v.overlay/line_area.c
index 5384193..bf1780f 100644
--- a/vector/v.overlay/line_area.c
+++ b/vector/v.overlay/line_area.c
@@ -426,7 +426,7 @@ int line_area(struct Map_info *In, int *field, struct Map_info *Tmp,
 
 	    if (ofield[2] > 0 && field[1] > 0 && ofield[1] != ofield[2]) {
 		for (i = 0; i < ACats->n_cats; i++) {
-		    if (Cats->field[i] == field[1])
+		    if (ACats->field[i] == field[1])
 			Vect_cat_set(OCats, ofield[2], ACats->cat[i]);
 		}
 	    }
diff --git a/vector/v.overlay/v.overlay.html b/vector/v.overlay/v.overlay.html
index c608423..007249f 100644
--- a/vector/v.overlay/v.overlay.html
+++ b/vector/v.overlay/v.overlay.html
@@ -275,4 +275,4 @@ Radim Blazek, ITC-Irst, Trento, Italy<br>
 Markus Metz
 
 <p>
-<i>Last changed: $Date: 2016-08-26 11:28:51 +0200 (Fri, 26. Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-26 11:28:51 +0200 (Fri, 26 Aug 2016) $</i>
diff --git a/vector/v.random/v.random.html b/vector/v.random/v.random.html
index c386acd..24e7bda 100644
--- a/vector/v.random/v.random.html
+++ b/vector/v.random/v.random.html
@@ -158,7 +158,7 @@ Random points only sampled in forested areas (stratified random sampling)
 </center>
 
 
-<h3>Stratified random sampling: Random sampling from vector map with spatial contraints</h3>
+<h3>Stratified random sampling: Random sampling from vector map with spatial constraints</h3>
 
 Generating n points for each individual area: in this example two random
 points in each water body:
@@ -208,4 +208,4 @@ random sampling)
 Engineering</a>
 <a href="http://www.purdue.edu/">Purdue University</a>
 
-<p><i>Last changed: $Date: 2016-06-27 00:06:41 +0200 (Mon, 27 Jun 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-30 15:30:47 +0200 (Tue, 30 Aug 2016) $</i>
diff --git a/vector/v.timestamp/v.timestamp.html b/vector/v.timestamp/v.timestamp.html
index 3570cfb..6bebf08 100644
--- a/vector/v.timestamp/v.timestamp.html
+++ b/vector/v.timestamp/v.timestamp.html
@@ -62,4 +62,4 @@ Spaces in the timestamp value are required.
 
 Michael Shapiro, U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-08-22 15:25:10 +0200 (Mon, 22. Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-22 15:25:10 +0200 (Mon, 22 Aug 2016) $</i>
diff --git a/vector/v.what/what.c b/vector/v.what/what.c
index 17be0d3..be17db4 100644
--- a/vector/v.what/what.c
+++ b/vector/v.what/what.c
@@ -22,6 +22,7 @@ static void F_generate(const char *drvname, const char *dbname,
     int col, ncols, sqltype, more;
     char buf[5000];
     const char *colname;
+    char *formbuf;
     dbString sql, html, str;
     dbDriver *driver;
     dbHandle handle;
@@ -88,8 +89,10 @@ static void F_generate(const char *drvname, const char *dbname,
 
 	    G_debug(2, "%s: %s", colname, db_get_string(&str));
 	    if (json) {
+		formbuf = G_str_replace(db_get_string(&str), "\\", "\\\\");
 		sprintf(buf, "%s\"%s\": \"%s\"", col == 0 ? "" : ",\n",
-			colname, db_get_string(&str));
+			colname, formbuf);
+		G_free(formbuf);
 	    }
 	    else if (script)
 		sprintf(buf, "%s=%s\n", colname, db_get_string(&str));

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/grass.git



More information about the Pkg-grass-devel mailing list