[GRASS-SVN] r69679 - in grass-addons/grass7/vector: . v.in.survey v.in.survey/.git v.in.survey/.git/hooks v.in.survey/.git/info v.in.survey/.git/logs v.in.survey/.git/logs/refs v.in.survey/.git/logs/refs/heads v.in.survey/.git/objects v.in.survey/.git/objects/03 v.in.survey/.git/objects/0a v.in.survey/.git/objects/10 v.in.survey/.git/objects/12 v.in.survey/.git/objects/13 v.in.survey/.git/objects/14 v.in.survey/.git/objects/1c v.in.survey/.git/objects/1d v.in.survey/.git/objects/1e v.in.survey/.git/objects/1f v.in.survey/.git/objects/27 v.in.survey/.git/objects/2b v.in.survey/.git/objects/32 v.in.survey/.git/objects/38 v.in.survey/.git/objects/44 v.in.survey/.git/objects/45 v.in.survey/.git/objects/47 v.in.survey/.git/objects/4b v.in.survey/.git/objects/50 v.in.survey/.git/objects/52 v.in.survey/.git/objects/54 v.in.survey/.git/objects/56 v.in.survey/.git/objects/5e v.in.survey/.git/objects/61 v.in.survey/.git/objects/64 v.in.survey/.git/objects/68 v.in.survey/.git/objects/6a v.in.surve y/.git/objects/6d v.in.survey/.git/objects/76 v.in.survey/.git/objects/81 v.in.survey/.git/objects/89 v.in.survey/.git/objects/8b v.in.survey/.git/objects/90 v.in.survey/.git/objects/94 v.in.survey/.git/objects/95 v.in.survey/.git/objects/98 v.in.survey/.git/objects/9a v.in.survey/.git/objects/9b v.in.survey/.git/objects/9e v.in.survey/.git/objects/a9 v.in.survey/.git/objects/b0 v.in.survey/.git/objects/b2 v.in.survey/.git/objects/b6 v.in.survey/.git/objects/b8 v.in.survey/.git/objects/c0 v.in.survey/.git/objects/c5 v.in.survey/.git/objects/c8 v.in.survey/.git/objects/c9 v.in.survey/.git/objects/ca v.in.survey/.git/objects/cc v.in.survey/.git/objects/d1 v.in.survey/.git/objects/d8 v.in.survey/.git/objects/e3 v.in.survey/.git/objects/e6 v.in.survey/.git/objects/eb v.in.survey/.git/objects/f1 v.in.survey/.git/objects/f2 v.in.survey/.git/objects/f7 v.in.survey/.git/objects/f9 v.in.survey/.git/objects/fd v.in.survey/.git/objects/fe v.in.survey/.git/refs v.in.survey/.git/refs/heads

svn_grass at osgeo.org svn_grass at osgeo.org
Thu Oct 6 01:10:52 PDT 2016


Author: evas
Date: 2016-10-06 01:10:51 -0700 (Thu, 06 Oct 2016)
New Revision: 69679

Added:
   grass-addons/grass7/vector/v.in.survey/
   grass-addons/grass7/vector/v.in.survey/.git/
   grass-addons/grass7/vector/v.in.survey/.git/COMMIT_EDITMSG
   grass-addons/grass7/vector/v.in.survey/.git/HEAD
   grass-addons/grass7/vector/v.in.survey/.git/branches/
   grass-addons/grass7/vector/v.in.survey/.git/config
   grass-addons/grass7/vector/v.in.survey/.git/description
   grass-addons/grass7/vector/v.in.survey/.git/hooks/
   grass-addons/grass7/vector/v.in.survey/.git/hooks/applypatch-msg.sample
   grass-addons/grass7/vector/v.in.survey/.git/hooks/commit-msg.sample
   grass-addons/grass7/vector/v.in.survey/.git/hooks/post-update.sample
   grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-applypatch.sample
   grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-commit.sample
   grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-push.sample
   grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-rebase.sample
   grass-addons/grass7/vector/v.in.survey/.git/hooks/prepare-commit-msg.sample
   grass-addons/grass7/vector/v.in.survey/.git/hooks/update.sample
   grass-addons/grass7/vector/v.in.survey/.git/index
   grass-addons/grass7/vector/v.in.survey/.git/info/
   grass-addons/grass7/vector/v.in.survey/.git/info/exclude
   grass-addons/grass7/vector/v.in.survey/.git/logs/
   grass-addons/grass7/vector/v.in.survey/.git/logs/HEAD
   grass-addons/grass7/vector/v.in.survey/.git/logs/refs/
   grass-addons/grass7/vector/v.in.survey/.git/logs/refs/heads/
   grass-addons/grass7/vector/v.in.survey/.git/logs/refs/heads/master
   grass-addons/grass7/vector/v.in.survey/.git/objects/
   grass-addons/grass7/vector/v.in.survey/.git/objects/03/
   grass-addons/grass7/vector/v.in.survey/.git/objects/03/28fae983785eef93612c23f7b9efb4269378c4
   grass-addons/grass7/vector/v.in.survey/.git/objects/0a/
   grass-addons/grass7/vector/v.in.survey/.git/objects/0a/20261bf39392492e1c0e6be2444ca2702f9228
   grass-addons/grass7/vector/v.in.survey/.git/objects/10/
   grass-addons/grass7/vector/v.in.survey/.git/objects/10/0b0e0b91fce8b1fd37494573a4208abe359877
   grass-addons/grass7/vector/v.in.survey/.git/objects/12/
   grass-addons/grass7/vector/v.in.survey/.git/objects/12/987fe9d1f8e1c415b87ad55194c489f651d94f
   grass-addons/grass7/vector/v.in.survey/.git/objects/13/
   grass-addons/grass7/vector/v.in.survey/.git/objects/13/cf1869a8db284e373bc99b86d794cb1ecff6db
   grass-addons/grass7/vector/v.in.survey/.git/objects/14/
   grass-addons/grass7/vector/v.in.survey/.git/objects/14/0d32355a20862ecf5006f758cd97d6dfaa6681
   grass-addons/grass7/vector/v.in.survey/.git/objects/1c/
   grass-addons/grass7/vector/v.in.survey/.git/objects/1c/f2c35cf7858257f1ba0f33e349f89efc172a4e
   grass-addons/grass7/vector/v.in.survey/.git/objects/1d/
   grass-addons/grass7/vector/v.in.survey/.git/objects/1d/3f5c44bb7c53c45f0b69311cbfc5c872abc411
   grass-addons/grass7/vector/v.in.survey/.git/objects/1e/
   grass-addons/grass7/vector/v.in.survey/.git/objects/1e/094956288d0b9b35c7682cc34e86f44517f1cc
   grass-addons/grass7/vector/v.in.survey/.git/objects/1f/
   grass-addons/grass7/vector/v.in.survey/.git/objects/1f/c94a337a764cb2c5aba6e9bf404476bf1c38f8
   grass-addons/grass7/vector/v.in.survey/.git/objects/27/
   grass-addons/grass7/vector/v.in.survey/.git/objects/27/71f37ea094be36070f61196c5694c25b363aeb
   grass-addons/grass7/vector/v.in.survey/.git/objects/27/abd2678f662aa3cc76c844ddacd750b19ed86a
   grass-addons/grass7/vector/v.in.survey/.git/objects/2b/
   grass-addons/grass7/vector/v.in.survey/.git/objects/2b/cba6a995c70ae8e267f4f2aebcb6babd84e906
   grass-addons/grass7/vector/v.in.survey/.git/objects/32/
   grass-addons/grass7/vector/v.in.survey/.git/objects/32/fa2414088a109757202c2888a0a7b5380d682b
   grass-addons/grass7/vector/v.in.survey/.git/objects/38/
   grass-addons/grass7/vector/v.in.survey/.git/objects/38/a1aac24671d12daf6b10f59cfcbbb18a05c97b
   grass-addons/grass7/vector/v.in.survey/.git/objects/44/
   grass-addons/grass7/vector/v.in.survey/.git/objects/44/a823d4adb6ec9363ecd8535d703874766ab34d
   grass-addons/grass7/vector/v.in.survey/.git/objects/45/
   grass-addons/grass7/vector/v.in.survey/.git/objects/45/b68b812f9a07b730e8cfdef72ca804e031b601
   grass-addons/grass7/vector/v.in.survey/.git/objects/47/
   grass-addons/grass7/vector/v.in.survey/.git/objects/47/77b40edeac5a4da02f1ba442f8192ed0733fd0
   grass-addons/grass7/vector/v.in.survey/.git/objects/4b/
   grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c8ad006bead1c7840940e53da707c48dbda829
   grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c90dafb77214b42800624dbd3e94914615518f
   grass-addons/grass7/vector/v.in.survey/.git/objects/50/
   grass-addons/grass7/vector/v.in.survey/.git/objects/50/e24814464b538174b07b2c0b1c14835cc84542
   grass-addons/grass7/vector/v.in.survey/.git/objects/52/
   grass-addons/grass7/vector/v.in.survey/.git/objects/52/ad200e6377a7af0ec5a97ed83e72dc7a451207
   grass-addons/grass7/vector/v.in.survey/.git/objects/54/
   grass-addons/grass7/vector/v.in.survey/.git/objects/54/afda083a48e8ac3046af1b9e5b843f265b5b22
   grass-addons/grass7/vector/v.in.survey/.git/objects/56/
   grass-addons/grass7/vector/v.in.survey/.git/objects/56/cffcf896f336800b771623941a52e12c9d683d
   grass-addons/grass7/vector/v.in.survey/.git/objects/5e/
   grass-addons/grass7/vector/v.in.survey/.git/objects/5e/94212cde10625fed27404117d098b64bd7f312
   grass-addons/grass7/vector/v.in.survey/.git/objects/61/
   grass-addons/grass7/vector/v.in.survey/.git/objects/61/32e33f678d5f37a25e8535fb946fd4e7912763
   grass-addons/grass7/vector/v.in.survey/.git/objects/64/
   grass-addons/grass7/vector/v.in.survey/.git/objects/64/5df46b073f13bcfdcc80eb0bd16abcd9e9c071
   grass-addons/grass7/vector/v.in.survey/.git/objects/68/
   grass-addons/grass7/vector/v.in.survey/.git/objects/68/6f39815237bf23ba2bf93fc87e2c9a272c7e18
   grass-addons/grass7/vector/v.in.survey/.git/objects/6a/
   grass-addons/grass7/vector/v.in.survey/.git/objects/6a/793b2b7cf9f8c55b211c3f95eccd8d7816eb09
   grass-addons/grass7/vector/v.in.survey/.git/objects/6d/
   grass-addons/grass7/vector/v.in.survey/.git/objects/6d/09b36e2a98eab26e006bae916c71c290971d29
   grass-addons/grass7/vector/v.in.survey/.git/objects/76/
   grass-addons/grass7/vector/v.in.survey/.git/objects/76/79e538a9038c95c3af4911e7cd5cbd6c20d766
   grass-addons/grass7/vector/v.in.survey/.git/objects/81/
   grass-addons/grass7/vector/v.in.survey/.git/objects/81/0a8b4e6765eb13f3aead825c8488aab82033d9
   grass-addons/grass7/vector/v.in.survey/.git/objects/81/e7cfa645454bf4af46fc909a4e5b53ddfb9f21
   grass-addons/grass7/vector/v.in.survey/.git/objects/89/
   grass-addons/grass7/vector/v.in.survey/.git/objects/89/d550f0b780d02a3c9623d907738bf3fecb65b2
   grass-addons/grass7/vector/v.in.survey/.git/objects/8b/
   grass-addons/grass7/vector/v.in.survey/.git/objects/8b/0f3871ddde717951439240ee70514b2530e1d7
   grass-addons/grass7/vector/v.in.survey/.git/objects/8b/9b85886087307927dde24f4db139837580c596
   grass-addons/grass7/vector/v.in.survey/.git/objects/90/
   grass-addons/grass7/vector/v.in.survey/.git/objects/90/d7c3aea2324a6a16160aa6f79d132225994f29
   grass-addons/grass7/vector/v.in.survey/.git/objects/94/
   grass-addons/grass7/vector/v.in.survey/.git/objects/94/2d9c5414c63ff83b6139d4985d5e0352e245e6
   grass-addons/grass7/vector/v.in.survey/.git/objects/94/6f266a701e10a46e2828273b5c7ea27a2a6bc6
   grass-addons/grass7/vector/v.in.survey/.git/objects/94/79d9fc8a6f87e071d6810a30fa22618ee2ef8e
   grass-addons/grass7/vector/v.in.survey/.git/objects/95/
   grass-addons/grass7/vector/v.in.survey/.git/objects/95/0c044a9ab4eab5ae0a4988842b6e8ef42e05af
   grass-addons/grass7/vector/v.in.survey/.git/objects/98/
   grass-addons/grass7/vector/v.in.survey/.git/objects/98/d4874af604cfb48481607d7cc822e7f86d3eb1
   grass-addons/grass7/vector/v.in.survey/.git/objects/9a/
   grass-addons/grass7/vector/v.in.survey/.git/objects/9a/bbdab7fc3c6c0c7318646a33bfa2b9ed010092
   grass-addons/grass7/vector/v.in.survey/.git/objects/9b/
   grass-addons/grass7/vector/v.in.survey/.git/objects/9b/d6fb785cf42f4fa9503df685549bcfb62502d3
   grass-addons/grass7/vector/v.in.survey/.git/objects/9e/
   grass-addons/grass7/vector/v.in.survey/.git/objects/9e/b93615ad4238ddf41e79d948bab8ce6c04c8ec
   grass-addons/grass7/vector/v.in.survey/.git/objects/9e/c94a321cfffc2e94cf4ca8c1b5ee9661d7add6
   grass-addons/grass7/vector/v.in.survey/.git/objects/a9/
   grass-addons/grass7/vector/v.in.survey/.git/objects/a9/fef768f80c1340fec52ea6b251b285644805e2
   grass-addons/grass7/vector/v.in.survey/.git/objects/b0/
   grass-addons/grass7/vector/v.in.survey/.git/objects/b0/f02a774ffefed15ff60439ad3e2064df21d07d
   grass-addons/grass7/vector/v.in.survey/.git/objects/b2/
   grass-addons/grass7/vector/v.in.survey/.git/objects/b2/7f9e6669b4c206c62f67993b98fa40823215d6
   grass-addons/grass7/vector/v.in.survey/.git/objects/b6/
   grass-addons/grass7/vector/v.in.survey/.git/objects/b6/26a08c65d66e548c2ce42b05c9ab9663b54d3b
   grass-addons/grass7/vector/v.in.survey/.git/objects/b8/
   grass-addons/grass7/vector/v.in.survey/.git/objects/b8/1e3d2c4240b3e6d1b8a7b288cab69966673d98
   grass-addons/grass7/vector/v.in.survey/.git/objects/b8/4d653a23d831b724b1b61516da7ff323d9d940
   grass-addons/grass7/vector/v.in.survey/.git/objects/c0/
   grass-addons/grass7/vector/v.in.survey/.git/objects/c0/a61d094163d7589a536662f685f7cfd849342e
   grass-addons/grass7/vector/v.in.survey/.git/objects/c5/
   grass-addons/grass7/vector/v.in.survey/.git/objects/c5/35d0aedb835e67d376dd225113f892cc878b50
   grass-addons/grass7/vector/v.in.survey/.git/objects/c8/
   grass-addons/grass7/vector/v.in.survey/.git/objects/c8/88042305ea8569822d9f4290fc8251bbd65153
   grass-addons/grass7/vector/v.in.survey/.git/objects/c9/
   grass-addons/grass7/vector/v.in.survey/.git/objects/c9/8775a04dd598d4cf71f2c0f27611dd67e3796d
   grass-addons/grass7/vector/v.in.survey/.git/objects/ca/
   grass-addons/grass7/vector/v.in.survey/.git/objects/ca/e391ba56ddf8c453a66ee33a08e9e77a4e3535
   grass-addons/grass7/vector/v.in.survey/.git/objects/cc/
   grass-addons/grass7/vector/v.in.survey/.git/objects/cc/187a168e12c5f32d95bcd6e728eeeec8ab31e4
   grass-addons/grass7/vector/v.in.survey/.git/objects/d1/
   grass-addons/grass7/vector/v.in.survey/.git/objects/d1/641c1c9232a196e4c1d7bc59b710177220c0bd
   grass-addons/grass7/vector/v.in.survey/.git/objects/d1/efbf0b31256b58223225c6d4d269288dcdfec7
   grass-addons/grass7/vector/v.in.survey/.git/objects/d8/
   grass-addons/grass7/vector/v.in.survey/.git/objects/d8/30fc068890077db2155730c18a2f1b1b6f909c
   grass-addons/grass7/vector/v.in.survey/.git/objects/e3/
   grass-addons/grass7/vector/v.in.survey/.git/objects/e3/bb8c5317aa8c7afaae35f7e67cbc8e5446108f
   grass-addons/grass7/vector/v.in.survey/.git/objects/e6/
   grass-addons/grass7/vector/v.in.survey/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
   grass-addons/grass7/vector/v.in.survey/.git/objects/eb/
   grass-addons/grass7/vector/v.in.survey/.git/objects/eb/bad8aae651ceaafb56abbb12604f787fb59b82
   grass-addons/grass7/vector/v.in.survey/.git/objects/f1/
   grass-addons/grass7/vector/v.in.survey/.git/objects/f1/9898d403ef60db5a15faed5015198b45c48c61
   grass-addons/grass7/vector/v.in.survey/.git/objects/f2/
   grass-addons/grass7/vector/v.in.survey/.git/objects/f2/87b6df2a101d7b8f8d365550ce6cfa5b2d1253
   grass-addons/grass7/vector/v.in.survey/.git/objects/f7/
   grass-addons/grass7/vector/v.in.survey/.git/objects/f7/0f28e6d63fb05696616ad6ba48f6b823cac61c
   grass-addons/grass7/vector/v.in.survey/.git/objects/f9/
   grass-addons/grass7/vector/v.in.survey/.git/objects/f9/f9e416403d8e2273aac25a243413d45d6dda6b
   grass-addons/grass7/vector/v.in.survey/.git/objects/fd/
   grass-addons/grass7/vector/v.in.survey/.git/objects/fd/9e641f0fd181d86e38f7168184c2c7b3394ec0
   grass-addons/grass7/vector/v.in.survey/.git/objects/fe/
   grass-addons/grass7/vector/v.in.survey/.git/objects/fe/b9a2564a54affb7a9ad4201b08c5d37add9efb
   grass-addons/grass7/vector/v.in.survey/.git/objects/info/
   grass-addons/grass7/vector/v.in.survey/.git/objects/pack/
   grass-addons/grass7/vector/v.in.survey/.git/refs/
   grass-addons/grass7/vector/v.in.survey/.git/refs/heads/
   grass-addons/grass7/vector/v.in.survey/.git/refs/heads/master
   grass-addons/grass7/vector/v.in.survey/.git/refs/tags/
   grass-addons/grass7/vector/v.in.survey/.gitignore
   grass-addons/grass7/vector/v.in.survey/Makefile
   grass-addons/grass7/vector/v.in.survey/img_NC_dxf.png
   grass-addons/grass7/vector/v.in.survey/img_lyrs_broken.png
   grass-addons/grass7/vector/v.in.survey/img_soils_correct.png
   grass-addons/grass7/vector/v.in.survey/img_sorted_boundaries.png
   grass-addons/grass7/vector/v.in.survey/v.in.survey.html
   grass-addons/grass7/vector/v.in.survey/v.in.survey.py
Log:
v.in.survey: script for automatic import of coded surveying data

Added: grass-addons/grass7/vector/v.in.survey/.git/COMMIT_EDITMSG
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/COMMIT_EDITMSG	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/COMMIT_EDITMSG	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+dxf done

Added: grass-addons/grass7/vector/v.in.survey/.git/HEAD
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/HEAD	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/HEAD	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+ref: refs/heads/master

Added: grass-addons/grass7/vector/v.in.survey/.git/config
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/config	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/config	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,5 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true

Added: grass-addons/grass7/vector/v.in.survey/.git/description
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/description	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/description	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.

Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/applypatch-msg.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/applypatch-msg.sample	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/applypatch-msg.sample	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/applypatch-msg.sample
___________________________________________________________________
Added: svn:executable
   + *

Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/commit-msg.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/commit-msg.sample	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/commit-msg.sample	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/commit-msg.sample
___________________________________________________________________
Added: svn:executable
   + *

Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/post-update.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/post-update.sample	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/post-update.sample	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/post-update.sample
___________________________________________________________________
Added: svn:executable
   + *

Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-applypatch.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-applypatch.sample	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-applypatch.sample	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-applypatch.sample
___________________________________________________________________
Added: svn:executable
   + *

Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-commit.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-commit.sample	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-commit.sample	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ASCII filenames set this variable to true.
+allownonascii=$(git config --bool hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ASCII filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	cat <<\EOF
+Error: Attempt to add a non-ASCII file name.
+
+This can cause problems if you want to work with people on other platforms.
+
+To be portable it is advisable to rename the file.
+
+If you know what you are doing you can disable this check using:
+
+  git config hooks.allownonascii true
+EOF
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-commit.sample
___________________________________________________________________
Added: svn:executable
   + *

Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-push.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-push.sample	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-push.sample	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+# An example hook script to verify what is about to be pushed.  Called by "git
+# push" after it has checked the remote status, but before anything has been
+# pushed.  If this script exits with a non-zero status nothing will be pushed.
+#
+# This hook is called with the following parameters:
+#
+# $1 -- Name of the remote to which the push is being done
+# $2 -- URL to which the push is being done
+#
+# If pushing without using a named remote those arguments will be equal.
+#
+# Information about the commits which are being pushed is supplied as lines to
+# the standard input in the form:
+#
+#   <local ref> <local sha1> <remote ref> <remote sha1>
+#
+# This sample shows how to prevent push of commits where the log message starts
+# with "WIP" (work in progress).
+
+remote="$1"
+url="$2"
+
+z40=0000000000000000000000000000000000000000
+
+IFS=' '
+while read local_ref local_sha remote_ref remote_sha
+do
+	if [ "$local_sha" = $z40 ]
+	then
+		# Handle delete
+		:
+	else
+		if [ "$remote_sha" = $z40 ]
+		then
+			# New branch, examine all commits
+			range="$local_sha"
+		else
+			# Update to existing branch, examine new commits
+			range="$remote_sha..$local_sha"
+		fi
+
+		# Check for WIP commit
+		commit=`git rev-list -n 1 --grep '^WIP' "$range"`
+		if [ -n "$commit" ]
+		then
+			echo "Found WIP commit in $local_ref, not pushing"
+			exit 1
+		fi
+	fi
+done
+
+exit 0


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-push.sample
___________________________________________________________________
Added: svn:executable
   + *

Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-rebase.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-rebase.sample	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-rebase.sample	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/pre-rebase.sample
___________________________________________________________________
Added: svn:executable
   + *

Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/prepare-commit-msg.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/prepare-commit-msg.sample	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/prepare-commit-msg.sample	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/prepare-commit-msg.sample
___________________________________________________________________
Added: svn:executable
   + *

Added: grass-addons/grass7/vector/v.in.survey/.git/hooks/update.sample
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/hooks/update.sample	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/hooks/update.sample	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/hooks/update.sample
___________________________________________________________________
Added: svn:executable
   + *

Added: grass-addons/grass7/vector/v.in.survey/.git/index
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/index
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/info/exclude
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/info/exclude	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/info/exclude	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~

Added: grass-addons/grass7/vector/v.in.survey/.git/logs/HEAD
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/logs/HEAD	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/logs/HEAD	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,5 @@
+0000000000000000000000000000000000000000 9abbdab7fc3c6c0c7318646a33bfa2b9ed010092 Eva <eva.stopkova at gmail.com> 1448300065 +0100	commit (initial): v.in.ascii.multiple: initial commit
+9abbdab7fc3c6c0c7318646a33bfa2b9ed010092 946f266a701e10a46e2828273b5c7ea27a2a6bc6 Eva <eva.stopkova at gmail.com> 1448316749 +0100	commit: v.in.ascii.multiple: sorted functions, improved comments
+946f266a701e10a46e2828273b5c7ea27a2a6bc6 c535d0aedb835e67d376dd225113f892cc878b50 Eva <eva.stopkova at gmail.com> 1448370564 +0100	commit: v.in.ascii_multiple: fixed line issues
+c535d0aedb835e67d376dd225113f892cc878b50 50e24814464b538174b07b2c0b1c14835cc84542 Eva <eva.stopkova at gmail.com> 1448908842 +0100	commit: v.in.surveying: First version to publish
+50e24814464b538174b07b2c0b1c14835cc84542 27abd2678f662aa3cc76c844ddacd750b19ed86a Eva <eva.stopkova at gmail.com> 1452302398 +0100	commit: dxf done

Added: grass-addons/grass7/vector/v.in.survey/.git/logs/refs/heads/master
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/logs/refs/heads/master	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/logs/refs/heads/master	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,5 @@
+0000000000000000000000000000000000000000 9abbdab7fc3c6c0c7318646a33bfa2b9ed010092 Eva <eva.stopkova at gmail.com> 1448300065 +0100	commit (initial): v.in.ascii.multiple: initial commit
+9abbdab7fc3c6c0c7318646a33bfa2b9ed010092 946f266a701e10a46e2828273b5c7ea27a2a6bc6 Eva <eva.stopkova at gmail.com> 1448316749 +0100	commit: v.in.ascii.multiple: sorted functions, improved comments
+946f266a701e10a46e2828273b5c7ea27a2a6bc6 c535d0aedb835e67d376dd225113f892cc878b50 Eva <eva.stopkova at gmail.com> 1448370564 +0100	commit: v.in.ascii_multiple: fixed line issues
+c535d0aedb835e67d376dd225113f892cc878b50 50e24814464b538174b07b2c0b1c14835cc84542 Eva <eva.stopkova at gmail.com> 1448908842 +0100	commit: v.in.surveying: First version to publish
+50e24814464b538174b07b2c0b1c14835cc84542 27abd2678f662aa3cc76c844ddacd750b19ed86a Eva <eva.stopkova at gmail.com> 1452302398 +0100	commit: dxf done

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/03/28fae983785eef93612c23f7b9efb4269378c4
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/03/28fae983785eef93612c23f7b9efb4269378c4
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/0a/20261bf39392492e1c0e6be2444ca2702f9228
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/0a/20261bf39392492e1c0e6be2444ca2702f9228
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/10/0b0e0b91fce8b1fd37494573a4208abe359877
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/10/0b0e0b91fce8b1fd37494573a4208abe359877
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/12/987fe9d1f8e1c415b87ad55194c489f651d94f
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/12/987fe9d1f8e1c415b87ad55194c489f651d94f
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/13/cf1869a8db284e373bc99b86d794cb1ecff6db
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/13/cf1869a8db284e373bc99b86d794cb1ecff6db
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/14/0d32355a20862ecf5006f758cd97d6dfaa6681
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/14/0d32355a20862ecf5006f758cd97d6dfaa6681
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/1c/f2c35cf7858257f1ba0f33e349f89efc172a4e
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/1c/f2c35cf7858257f1ba0f33e349f89efc172a4e
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/1d/3f5c44bb7c53c45f0b69311cbfc5c872abc411
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/1d/3f5c44bb7c53c45f0b69311cbfc5c872abc411
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/1e/094956288d0b9b35c7682cc34e86f44517f1cc
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/1e/094956288d0b9b35c7682cc34e86f44517f1cc
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/1f/c94a337a764cb2c5aba6e9bf404476bf1c38f8
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/1f/c94a337a764cb2c5aba6e9bf404476bf1c38f8
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/27/71f37ea094be36070f61196c5694c25b363aeb
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/27/71f37ea094be36070f61196c5694c25b363aeb
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/27/abd2678f662aa3cc76c844ddacd750b19ed86a
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/27/abd2678f662aa3cc76c844ddacd750b19ed86a	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/27/abd2678f662aa3cc76c844ddacd750b19ed86a	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,3 @@
+x•ÎM
+Â0@a×9Åì…’I&™DÜxüªhšRcñøö
+n|ðRoí1@¡>ŒµHÞ1› )gã]¦T«J²*¶ˆ9[.š½Íb	k™Y9$²vÈ%ÇDLHN›”R"|ƽ¯pݜʦ÷è˳oárkáñšRog at 2JK¥½ƒ£D)Å^÷»Qþu"+ä>ñA@
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/2b/cba6a995c70ae8e267f4f2aebcb6babd84e906
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/2b/cba6a995c70ae8e267f4f2aebcb6babd84e906	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/2b/cba6a995c70ae8e267f4f2aebcb6babd84e906	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,2 @@
+x]Ͻ
+1†aꛂ,Ë¿±3ljN”HHì_ç(¸ô¾×>^ïã.™·ýÁAŽÇç‰ÄÐÕX	E­1lÿF 'ržFU†q¦«Ñ2Ñeî¨zÍ«±2I,[Ζ-Ƨ2’µc«ie¤Ñi”§Yî‰úËý·ã}mK+§‘ñ×h…X™0ؾ0¹@Ž
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/32/fa2414088a109757202c2888a0a7b5380d682b
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/32/fa2414088a109757202c2888a0a7b5380d682b
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/38/a1aac24671d12daf6b10f59cfcbbb18a05c97b
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/38/a1aac24671d12daf6b10f59cfcbbb18a05c97b
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/44/a823d4adb6ec9363ecd8535d703874766ab34d
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/44/a823d4adb6ec9363ecd8535d703874766ab34d
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/45/b68b812f9a07b730e8cfdef72ca804e031b601
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/45/b68b812f9a07b730e8cfdef72ca804e031b601
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/47/77b40edeac5a4da02f1ba442f8192ed0733fd0
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/47/77b40edeac5a4da02f1ba442f8192ed0733fd0
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c8ad006bead1c7840940e53da707c48dbda829
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c8ad006bead1c7840940e53da707c48dbda829
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c90dafb77214b42800624dbd3e94914615518f
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/4b/c90dafb77214b42800624dbd3e94914615518f
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/50/e24814464b538174b07b2c0b1c14835cc84542
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/50/e24814464b538174b07b2c0b1c14835cc84542	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/50/e24814464b538174b07b2c0b1c14835cc84542	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+x•ÎMjÃ0@á®uŠÙŒF?–\JÈ&½ÇH'¢±e$YÐÛ7WèöÁ/–mË”±½2ƒö„DQ™ÙaB•hÊÕ.q!ô$m\\UÞ;D«m’Ä)xmyvI»9%¥,¢^ý¢bôÎ+ýY*ÜÁšZ/ÇOt{l”_S,ÛпH‹D)Å»¾ï:ÿ׉1å}jgü›÷Ç'|çÚ:®-—zã¯Üžâã=OQ
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/52/ad200e6377a7af0ec5a97ed83e72dc7a451207
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/52/ad200e6377a7af0ec5a97ed83e72dc7a451207
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/54/afda083a48e8ac3046af1b9e5b843f265b5b22
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/54/afda083a48e8ac3046af1b9e5b843f265b5b22	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/54/afda083a48e8ac3046af1b9e5b843f265b5b22	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,3 @@
+x]“IN1DY#qYNœx8â_°CBâþÊÎgH/[z)W•Ý·ÏÛsÈ|xy5Öwº}÷¦‹Öœ­Ç emJkh{züÇŒdÌ¥˜Þ‹y0ÒT‰9u:©C–¦“™É˜q1&‘L¬“YM4´˜°ÔY,'NV³ñ„=Òqѱ¦A£GyöHÕO/Fv®ÁéGÍ~ÔóvïgJzä'¤ëÂT?zïG:b’I?uv?rï¾Òó<<4ê±ûñŽdzÑ©~|òÃÎÉðo®íý…íY¡xBÖ/:wZH’¹
+g?qúAX'÷}ì©£;ݳ¢£ç͸Ô,?ýtN¦/Ç,!öÜ—áBî÷S:°fÎô#4¶gL>˜‘ŒÖýùÌ;tæ“‘òSÌ$±Ìezî+¸Ñ¼Iûž
+M³$H"sÁÿ|Lõl3÷%ØfîÔô g…NîKÐAé\³£g¥~wöd2×7±ñÉ0
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/56/cffcf896f336800b771623941a52e12c9d683d
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/56/cffcf896f336800b771623941a52e12c9d683d
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/5e/94212cde10625fed27404117d098b64bd7f312
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/5e/94212cde10625fed27404117d098b64bd7f312
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/61/32e33f678d5f37a25e8535fb946fd4e7912763
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/61/32e33f678d5f37a25e8535fb946fd4e7912763
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/64/5df46b073f13bcfdcc80eb0bd16abcd9e9c071
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/64/5df46b073f13bcfdcc80eb0bd16abcd9e9c071	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/64/5df46b073f13bcfdcc80eb0bd16abcd9e9c071	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,6 @@
+x]ÐË
+1PÎ[XVü‹:
+DpCB¢ÿq›ûÓÌØýñìga>]®äÅ°¿nXš£IAC­Û¿ah»áaŒÊÑHo<sD,ÄÑhš(Ä
+kÌ.]ŒM3:ÒpdŽ®¦¦áZv#4ͲÇó.³OŽµa¤.]1
+»F—³¦qýn¾Ïïüš|_ã
+¶78–G€
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/68/6f39815237bf23ba2bf93fc87e2c9a272c7e18
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/68/6f39815237bf23ba2bf93fc87e2c9a272c7e18
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/6a/793b2b7cf9f8c55b211c3f95eccd8d7816eb09
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/6a/793b2b7cf9f8c55b211c3f95eccd8d7816eb09
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/6d/09b36e2a98eab26e006bae916c71c290971d29
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/6d/09b36e2a98eab26e006bae916c71c290971d29
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/76/79e538a9038c95c3af4911e7cd5cbd6c20d766
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/76/79e538a9038c95c3af4911e7cd5cbd6c20d766
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/81/0a8b4e6765eb13f3aead825c8488aab82033d9
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/81/0a8b4e6765eb13f3aead825c8488aab82033d9	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/81/0a8b4e6765eb13f3aead825c8488aab82033d9	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+xÏ;Ã@EÑÔ^E€F|ØŽkKÞÀ‘Ò§>z—™óºÏ7¾ }‰àbq°¥›àø2–'OJÄ*e•Ò†@â\;æ†6Ø€Ô¢€£:°xãBXïçš}–²;\ÿ¨”³6¸Ô)nxÂñ1¶
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/81/e7cfa645454bf4af46fc909a4e5b53ddfb9f21
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/81/e7cfa645454bf4af46fc909a4e5b53ddfb9f21
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/89/d550f0b780d02a3c9623d907738bf3fecb65b2
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/89/d550f0b780d02a3c9623d907738bf3fecb65b2
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/8b/0f3871ddde717951439240ee70514b2530e1d7
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/8b/0f3871ddde717951439240ee70514b2530e1d7	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/8b/0f3871ddde717951439240ee70514b2530e1d7	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,15 @@
+x}XËvGÍÚ_‘èE×£{º—&˜crlâ`–sl3`&Ÿa|~$]•¤iBvžÛz\=JUòÝvw÷똧é—<u›Oë»ý‡îE—ƾKC’†îãööp¹Nú!]îOrR87ùa ùádT¼(ޝLŠTCj÷ûÍú°ß<Ý?–úîò¾öóssԝ¤Ü°æ…°¡Ûm?4í‹s30uש¬Vö»¤îú]Ê«ÙrÁÈ(R-Ù¡Ñ]VEÜÒdå2ª5¹³Â2¥wË"RzOCR‘Á”VÐ
+h"VߥŸ×ß=Žz„9£D	!©7cp—ÒÚ9Ih… »ýãýg«qw²øàfÜTù”Nׇݳ9¥
+
+·ÐWͪê©AiŒŠÔªæ¦4DÏŽ²›‚žA®fS€ÃìÉ‚éì9Çì*Z›ì¬²,h–Œ6È¡ÆÈPöÞ¿’BàGû7)Ô.P]~YFNf #ðio÷/îGëU~°Â"Ü5Ý	"+®‰¶,ž %ƱGŌү£6o‰…Lr aÎGºT¯›JU/\“)!LèÜ»-°­ÎV¯±Q‚\O!'¯€×3¥®ƒîØ%B
+ 4opØðñá„ûàf›
+ç¢éŽ‰A@˜k¢vƒ8­IƒÚ¹£×Wž2äpôè8n¾¬O4cHBÝ=­¼®
+øC+¯5섹ŒT­œ³ÚYR^Å"#?y~ôh¯<2uRs/tìäQhKÅ+Î&g¨Eœœ¢ŽÖÉç
+]¿<U'§ƒ¸¦Ö,íLf½`Mž}ähòäCb”@r”àoöðE¤ö«˜­½GTj’ª"Á¬ÄU{ÍR{w„RÔäô¤5y2¤ëjr¤¡&Zž‡Ýv³hÍáêq€5A	f0Àj¼.¤5ŒyUšƒiƒÜ’£Ï+z¨†ÙŽ©aòÂN¨
+Ä1 †ã€T]:Ï#•ðŠ¡ìu™ûê™VvK´‚ÞsHêЇd õ-ùŒžÈ„)ÃaH!ÌÅŒª!Fz¸^¿«ã*¸™Y‰ ØÈ‘ÌéHsNá ps¨ƒLȹÐpñŒ£yGq3Q
+BÜÓ3	¹³\;}3‡W/5ƒ‚½´äò³yýæôõEZ?ïw·›î‚®x†é=8-À+^
+2–rlêAšBy’rû¤N”×
+ÉQ#©¹zoг35HçA¦fR§Ò9Ñ~¡æÿû¶äÏ“ž?ÕkßþO¯å—æÜS‰4`h±DÉÒbVsàêÒÐeÐÔ#h글 Y›MÔ¢>4P­ÚïÜÝ\’ºçëçCw%ÁûÝþi³o¿©Ãî¿ÖWWò5Ñú÷òì²},SwvùšŒA7Ùõšpé^]·O‰w>KãÐýýøéÃnk’©»|ÜïšÀÈ{_¢§y­ä ȶÈ[P“`@Ç ¤Íöyû°~ÞÞ>5•(4ž_5ñÚ}9Ü~Þ¬ïûmÃ
+=R7»ogï›ò=±›ç1àxn8·†ÀNÀu“;"Oãм*@
+ÍÚ‹nÕÆ›lÒš¹Zo¶›´D€,7(?-‚&‚~"D¨ŸG“‘¹É«á‘#^ïLDÈ•”QCÅ}ÍÐÚfjê}l–ñ–¡«8RÓí;¦‡Þ¦»ÙHÑMlÐElˆj;ð—‡;R–9¤Qõ&oºÀ2B£(ø—kŒGÐh2N°D÷„e·-<¼¨yTšîpSK8ò©ˆÚá«Ä„À›6"CPIo† K„EB×|Ñ@@S’²5kòSÙ¬k2éM°Ð³Ì)#ëPp¦ÕÇl RZqA:èêoFQÆÑ‚€
+=LE‘Pz4=L¦-#Á“ª…Ê#_´ž˜Óæaˆ‡ £ÔÐÂDЄ¨ÌÒž±”š„º	‰A´@˜ò@ë‚!°Kë‚!‰ÖCÐ:´_´¢¾BØ°C—›É ,tYÜ(.!'ìÐ3É´Àö	Í„êXÜz÷Óza* <z8o&#ô*ý‹-–€·	“Gµ·Öj¼K˜„"!U°JÛ„É(¹€LN#o ¦&¹b$F]é_A±jBj5T Vi0«’˜JãE­  .&¡H	ÍZ‹¹–â×8l¤Y96{4kù/Jbt€Ð<:’ Ç®þ}zéêo„LE£¯lZ@‚ö‚…M‹#q@‡ÖÓ8@Þ®.šׇ‘ë÷¿ýù¶òÏI‘Èùò•ÖàÀ€Ì?F,FAæ”L‡Û~Û½Ïéç×~<Ö"ClÚ£‰ÿIÆK‚ûá^`Äüð#Fk±f8L!’ùº{Þ;ýÃæË¡y)}wsþöìúÜ?K™ÞbV?úgÄûÓZ-®.Nß4)z$~»ÝnÚ„Ÿôp´Ú,Uâ“2¦ò/Ö©[y
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/8b/9b85886087307927dde24f4db139837580c596
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/8b/9b85886087307927dde24f4db139837580c596
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/90/d7c3aea2324a6a16160aa6f79d132225994f29
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/90/d7c3aea2324a6a16160aa6f79d132225994f29	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/90/d7c3aea2324a6a16160aa6f79d132225994f29	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,2 @@
+xeÏ;Â0`朢°¬ØŽã˜‰•×*F$$î?§]ZöOÿc~æ‰ÝÏóõ~9¦Óäéö ËŠó÷…™ÁR# É( ¨”ac$Œ9¯FÃHÛš¦ebÇÚ¬›RvF‡éa¸EΟ©a¸æÅ
+³Ûcà†ªkŽz7Rw]mî¿z—q	ce»™Âˆ.ßYÆæJ~0~C
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/94/2d9c5414c63ff83b6139d4985d5e0352e245e6
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/94/2d9c5414c63ff83b6139d4985d5e0352e245e6	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/94/2d9c5414c63ff83b6139d4985d5e0352e245e6	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,4 @@
+xUQÑn›@ì3_±Šò`«	ÆVFErm”9qbl©oÕr,pÊqGÉßLš<vvnvv6*»ûå¿XÛ0Þ¢—c´ög¶vŸÊ u¹t±fœÿ)ax%ÈŸYxY)mj¨—öÉ´*ao¢2.,¨ %f”gÒ5˜
+Ø$D˜&4”6F•h8C!΀Œ)r™ƒýßkƒÄ’jëÆz
+¯Ÿ^va<ìã~»¿Øí?O—n_Æaë]<Rº¡Ð”ý¸ú¿›[˜R\}XÖŸaà'ú™‘4Zñ´~g¿#Ýés|Â×StŸÂçã覷³>í¿a‹U½©ûYY#™áJÚ¨ðÍ&ÔgŠR™‚4”*mÕ€š€ñ>¸DÙ,mƏ`ÃFãtPB9—²ËQe§»Ê„ÜÜŸ”Æ".«*ƃá8MmÔ‚ç…gÇNä·å?ùê†ž:=펊½Úd#¨$YßÀƒ;:~eÓáÁk¬@™Sº‚ë­=ÿ
+Þ|yë}¿õ–0¿[-îWóoðÕ[xLâFÞ€ÅÑÓ¦pÝ©ÿx¸Ý§
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/94/6f266a701e10a46e2828273b5c7ea27a2a6bc6
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/94/6f266a701e10a46e2828273b5c7ea27a2a6bc6	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/94/6f266a701e10a46e2828273b5c7ea27a2a6bc6	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,2 @@
+x•AnÄ sæs߁aÁ¬¢h/yÈ€‡Å0ïû„\[ª®îPrN#ßz%)„$¼“1ÐêeÜ”ÕNß­B½ˆ=©»[­e'V::8ô~CocPÁ¬’«Ñ•òïh³Ò-¯þS*|
+„È[/çoøüΘvJþ©õª¤™B¸½06Ó¹®Ó96x:8¶Ï×ÞÓ¹ÓZ©6ˆ×z*G{‡”ÏZÆÌ^¢y§±?œU
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/94/79d9fc8a6f87e071d6810a30fa22618ee2ef8e
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/94/79d9fc8a6f87e071d6810a30fa22618ee2ef8e
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/95/0c044a9ab4eab5ae0a4988842b6e8ef42e05af
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/95/0c044a9ab4eab5ae0a4988842b6e8ef42e05af
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/98/d4874af604cfb48481607d7cc822e7f86d3eb1
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/98/d4874af604cfb48481607d7cc822e7f86d3eb1
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/9a/bbdab7fc3c6c0c7318646a33bfa2b9ed010092
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/9a/bbdab7fc3c6c0c7318646a33bfa2b9ed010092
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/9b/d6fb785cf42f4fa9503df685549bcfb62502d3
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/9b/d6fb785cf42f4fa9503df685549bcfb62502d3
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/9e/b93615ad4238ddf41e79d948bab8ce6c04c8ec
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/9e/b93615ad4238ddf41e79d948bab8ce6c04c8ec
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/9e/c94a321cfffc2e94cf4ca8c1b5ee9661d7add6
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/9e/c94a321cfffc2e94cf4ca8c1b5ee9661d7add6
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/a9/fef768f80c1340fec52ea6b251b285644805e2
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/a9/fef768f80c1340fec52ea6b251b285644805e2
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/b0/f02a774ffefed15ff60439ad3e2064df21d07d
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/b0/f02a774ffefed15ff60439ad3e2064df21d07d
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/b2/7f9e6669b4c206c62f67993b98fa40823215d6
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/b2/7f9e6669b4c206c62f67993b98fa40823215d6
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/b6/26a08c65d66e548c2ce42b05c9ab9663b54d3b
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/b6/26a08c65d66e548c2ce42b05c9ab9663b54d3b
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/b8/1e3d2c4240b3e6d1b8a7b288cab69966673d98
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/b8/1e3d2c4240b3e6d1b8a7b288cab69966673d98
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/b8/4d653a23d831b724b1b61516da7ff323d9d940
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/b8/4d653a23d831b724b1b61516da7ff323d9d940
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/c0/a61d094163d7589a536662f685f7cfd849342e
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/c0/a61d094163d7589a536662f685f7cfd849342e
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/c5/35d0aedb835e67d376dd225113f892cc878b50
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/c5/35d0aedb835e67d376dd225113f892cc878b50	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/c5/35d0aedb835e67d376dd225113f892cc878b50	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,3 @@
+x•ŽKJÀ0@]ç³J¾“("n<‡LƉ›¦4iñøö
+òv<î­Õ	Ö»‡yˆ€¸œg"QâH…H\(Q0ræ$Á{4:µÓ!Û„'Å"RÔFŒ&bÓMt9p²‘,afTtÎï~ÀûEð"-cöý§_ôöÕ¨®÷ö
+Æûä¢èáQ­Õmï»)ÿíÔµÔm¡Áµ~´su_åJý•OXë&PÇ8e¨?(–NU
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/c8/88042305ea8569822d9f4290fc8251bbd65153
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/c8/88042305ea8569822d9f4290fc8251bbd65153
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/c9/8775a04dd598d4cf71f2c0f27611dd67e3796d
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/c9/8775a04dd598d4cf71f2c0f27611dd67e3796d
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/ca/e391ba56ddf8c453a66ee33a08e9e77a4e3535
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/ca/e391ba56ddf8c453a66ee33a08e9e77a4e3535
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/cc/187a168e12c5f32d95bcd6e728eeeec8ab31e4
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/cc/187a168e12c5f32d95bcd6e728eeeec8ab31e4
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/d1/641c1c9232a196e4c1d7bc59b710177220c0bd
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/d1/641c1c9232a196e4c1d7bc59b710177220c0bd
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/d1/efbf0b31256b58223225c6d4d269288dcdfec7
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/d1/efbf0b31256b58223225c6d4d269288dcdfec7
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/d8/30fc068890077db2155730c18a2f1b1b6f909c
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/d8/30fc068890077db2155730c18a2f1b1b6f909c
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/e3/bb8c5317aa8c7afaae35f7e67cbc8e5446108f
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/e3/bb8c5317aa8c7afaae35f7e67cbc8e5446108f
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/eb/bad8aae651ceaafb56abbb12604f787fb59b82
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/eb/bad8aae651ceaafb56abbb12604f787fb59b82
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/f1/9898d403ef60db5a15faed5015198b45c48c61
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/f1/9898d403ef60db5a15faed5015198b45c48c61
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/f2/87b6df2a101d7b8f8d365550ce6cfa5b2d1253
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/f2/87b6df2a101d7b8f8d365550ce6cfa5b2d1253
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/f7/0f28e6d63fb05696616ad6ba48f6b823cac61c
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/f7/0f28e6d63fb05696616ad6ba48f6b823cac61c
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/f9/f9e416403d8e2273aac25a243413d45d6dda6b
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/f9/f9e416403d8e2273aac25a243413d45d6dda6b
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/fd/9e641f0fd181d86e38f7168184c2c7b3394ec0
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/.git/objects/fd/9e641f0fd181d86e38f7168184c2c7b3394ec0
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/.git/objects/fe/b9a2564a54affb7a9ad4201b08c5d37add9efb
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/objects/fe/b9a2564a54affb7a9ad4201b08c5d37add9efb	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/objects/fe/b9a2564a54affb7a9ad4201b08c5d37add9efb	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,23 @@
+xÍY{oÛÈï¿Ò§˜“P‚uŠíŠB¨äò:9ÛçGÂg”´’y¦H†»²¥ ¾¿™Ý¥H‹JìôŠÖbiwÞïY“lL{õ×ÿìýðr©‹—ã8}©Ò{Ê×æ6KÛ{í½?õ‡	Ò¯§ï®>½¶îq:ˆô$ŽÃÅ21qž(¹suùËéy÷¢7l½¿èÂdù]vµ÷Z¯øìêüìôÔÞ*2Š<%ºW“”DkUhGZM鏥6”¥ŠŒZ™YÌüèíéÙ?Ϗ?þr9Ü{AÝ·=::8|êdn}<sqAïÔ½J²|¡RC—*Z0ãVëò6Ö”Ù¼ˆ„³B)ÒÙÌ<D…¢e:U…¥qrEUªŠ(¡³å8‰'Œý)ž¨T+êÞC¼8Ké¨7 sM‡eÉŽO>â 24ÉJÓCln­PLcý¦ÊDq¢,ÓŸúÓnï½XdÓ%éØèIç’ÉšZï²õ¬ÈM¦~AwjýS=tÞaÊ›³x‘g…©Ÿ½¹x{|\?òÆ©J§,&e"}OÏ.ÃáñÉÙÕ¥CRœæK¡ZÓá$Z(Êfö–ÄÞ&£±"+…š2~¡>/ãBM‡´Vz7¿‹÷g%7­ò¨ˆy|2_Æa(F;f1.[D,M]ô=7a“3³Ò¼ÍÜK”$}6ÊxZ|‡˜ú#«Vµäüa$«d(é„IâEl”h¥úACšfˆxX13Ûat‘«IŒ¤˜ÜÂb ".*ð}Òq:¯ ?ßšú.ÎYL³Î‚Qs+ÞƱ'§àcjHö»ÿ€/ëq³\Œ‘؈œ[$+>%qŠÄDì03B¦¢\=
+¬nž7ò%›ªS¬jr&w8Ý“,Y.R	«†6ìÂdžª…x³‘§wà[aMgqs¼ÂXtñÛ'ÒfJTS at 4¨ÙäêZEð!+çDÔFø—k[ŸÖ
+gØ
+féSÊ©xÝÃ^°Û*ÒÆ)ÿÝ>=Üéo“ÒÇÖø´äæirìQŒQÅâ”ûMÍ4L¹n™¸@ÇqTÐ#˜÷?§¨}·ÿ©nG߯›çÿ_QN%ê>â¸bù¾Ûs’_ãÝžó<×a:žÑAŸ¾TíO¦™‘°ØíPÄ÷ÿJ[°Vó¬X¯²Ë4þ¼TT’¾‘Öñ<E Ò©hrKEö@Q:¥‡"6F¥|žªëp«y<K")YèöCúÂv©å‰Þ^½ócÛ"âÂíS¥†½ÝHv$¨EnÖ2"¤ZÅf@'™dk§˜Ø0¨Èx€ñ©™™lMÔwоW+t/C‘o·°SE
+sñÔƉ
+0ñ¿VõwL5E·‡Ç{bG]¡µ2¯J{aË6fH£)¥U×´;M“µ<ÙY” ÇÍeö³É²(x.ÔœûÄVý{:÷x+Žç¨BŠÆEvkrgíêÞ³4´Óéµn»YùÉ5NwŽ1ìÖÃðøgÇDw‰üAÄ´ý=F|­væ> ß›.në`þØ–³èùÚþƯ£9fÇk®L¸Ðó“,²'Å>`¨œ"y­@Ú=)væö2Rƒù€:yœ«ýøš:ÿê´Ñ½i~”¯»%voØnų
+5.Zù:,!	 ±
+½cušÀûMà:&ªœšÀÀ­&`”‰F„ßS`Ê,¤CE¯¶XJ`*WÝ	°>É€_Jcëd¹6HTÚ•ë^[¶«˜ƒ¯ˆÒ9=š€d¶“c“
+Æu|ÃÇ-8ú|ää²78ðBMÕ‘=s‚ùá¿O~¦ïS9ª3Ó’v]¡
+^p@rˆ†µRÖ_Hw‚…W$öG»jŽ
+¯àÓó±KùúüÌèueÅüÜ"Ô'Y—Gà>ŒÊ_ú4LÄߦj…ißoN,,T`P¶n å-›Þ@èuùZpoh¿‚
+äf°ýç=ðU
+btˆ=öðÞ"BèÌ–©¬b>é²rœí6ŸøÝ^»ÝÚ³Ã7vRÙeµ×pîä:Ü´[¥©ª·å!Cð‚V½äï‚ÉKJ…$/-|ŽUWÏíȪÝÕªzå†`wµ®^ùÒÝ}©Þ•# \bö¯HÁÃÂMÕ’QÜ:}#ç™±Ýò^ÅõgÁÍ@çIlºAŸÃÐGuÔŸ=-C¸
+[ց!C¥º áQÁ…·kx»•å*
+Å}ÂUƧ@P= 1 Ažb‹I¶DŸM³ôÇq¥wvÓäjeWΠ¶ìQZn+[ l@æ*¶aÈX|%sœ¿çç.ÎJ[ÚøtÀ
+3GÄF|å9or«&wòN]1û.r^¬ý¶ø )ìϐŇLeÝ)IzŠŠ"Z3T‹ÓF±ŁUÓ­–J´‚Ð ð–eÂkœ]•XFßÐóÝ„6L’L«nIÊÇǦ/Ô"»WdgI¦èú0Értb_¯Ä’+¶°Aëý€ªõ{ʁž²jp7ßõÀmã,ä?(jØ
+Ѻ.Bq at 3äõæΠӻ>¼¦«Þe‡.´	öía‚Is
+S]\…²L7R9€8ÌÇAȯ}òœÁAžJe‡H\‘Üœ¹	KÑU/ÇZv}~å`ƒbÅ\çÙÒps~Có’%ŠãÀ¬L"B†2;í¤I÷±ÜÔ\ku›6é…í“ÏúæVÙæàóí¾8“îa¹A.×QÚ6°=›/@€SÉ¿Ðû	x|È‘ã>K at YmÃñäÎÖG*ËE]oN½ÇƒEŸ~’]½2•óé%¾ÆøÄa +ðÛ‘‹)ÈÆ8!€!žDQŒ(’æ`ì¹òÈXS¡E°ÃCØ¡…•ß¹$sØq¡œüE[tä=ú‘¨Àõ7~G2”ÌzCâF§'¬ïa²J}^âpôˆà6z-…Ç¿kØÈtó2ƒU,ïs„­o,°+e,Š÷._º—«‘ÿâØ/6×y¯ui+Í“‡}lGöº¤ã2„oxÔ7ªË¼$Ið阫øFýMØ$Át<:ꉫA9–	†r<îêüãýùåñ3­üØCÐûà&S`nD‹Ø„è>²oùÇ¢Øb¸‰{)õô	pR15âê«)Í|+³ÞÆÚ}Û}lªø±O¼…b@Ü®ñÃÿU˜}ï(."Ê0áÄÈ°“óC„³?$€pœ†ò—&¨`·°b™†ì\Ý
+6‰
+x…ÿF\j¸D8¶Â—ç}5#]•ñuTb}Z0Ha¶]óï5^‘ø÷CK.‹%Þ„YÂZÅúY*V«Õ(,þrdŠ,žê-iK1]'häÔDt>°-¹´Œk>|e#TµÆCŽ3ë4‰²n‡+Âß;ˆIo5ž„_ûw–5
+k(‡å–çë' ðe¥umª_0IßýÍ“beãeͯ[žæ·ûˆO$Égc¿ì=¶\ZC5¸Ð6js±‹+µÉ@_œ*µ‰š›Ï¦ýÄbQ›än×JTŠ.Ó+ûŠÁLãç¼jº}+·AdO<‡?ž¢çÛցdã/µŠËµß+U¶Z[ðªµÁÚñÉ“q½0ÄpKeÈ–àyDÕ—î`›pyµ‹¶/8ߐF·¯U["m{ˆç^8¥¢¯`<é «¹be
+Æ#Ó®jõÿ^«ž‘ôî1à ÕnáTÔ0”g¨0ä}8ù9Çm¸¨©\]ʍ7­
+¬Ç-»:·ùçß$Ss€
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.survey/.git/refs/heads/master
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.git/refs/heads/master	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.git/refs/heads/master	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1 @@
+27abd2678f662aa3cc76c844ddacd750b19ed86a

Added: grass-addons/grass7/vector/v.in.survey/.gitignore
===================================================================
--- grass-addons/grass7/vector/v.in.survey/.gitignore	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/.gitignore	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,10 @@
+# ignore txt and dat
+*.txt
+*.dat
+
+# ignore everything with ~
+*.*~
+*~
+
+# ignore directories
+test/

Added: grass-addons/grass7/vector/v.in.survey/Makefile
===================================================================
--- grass-addons/grass7/vector/v.in.survey/Makefile	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/Makefile	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,7 @@
+MODULE_TOPDIR = ../..
+
+PGM = v.in.survey
+
+include $(MODULE_TOPDIR)/include/Make/Script.make
+
+default: script

Added: grass-addons/grass7/vector/v.in.survey/img_NC_dxf.png
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/img_NC_dxf.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/img_lyrs_broken.png
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/img_lyrs_broken.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/img_soils_correct.png
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/img_soils_correct.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/img_sorted_boundaries.png
===================================================================
(Binary files differ)


Property changes on: grass-addons/grass7/vector/v.in.survey/img_sorted_boundaries.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: grass-addons/grass7/vector/v.in.survey/v.in.survey.html
===================================================================
--- grass-addons/grass7/vector/v.in.survey/v.in.survey.html	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/v.in.survey.html	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,288 @@
+<h2>DESCRIPTION</h2>
+
+<em>v.in.survey</em> imports points from ASCII file into specific vector layers by point names. The script 
+joins several modules to perform following steps: 
+<ul>
+	<li>The data is sorted according to point names to keep points from separated layers together.</li>
+	<li>The script <b>scans input file and creates separate files for each layer</b>. Layers are distinguished by 
+	point names that provide information on layer name, vector type and point identifier. More detailed information about 
+	how to draft point names in your dataset (during data acquisition or in post-processing) is provided in <b>Notes</b> 
+	section.<br> </li>
+	<li>Line and polygon data are <b>converted to standard format</b> (input data should respect topological rules to get 
+	geometrically correct layers).<br> </li>
+	<li>Then, <b>new vector layer</b> is created using <i>v.in.ascii</i>. Points are stored in point layer; lines and polygons in 
+	line layer at this moment. Lines that store polygon data are converted to new polygon layer using <i>v.centroid</i>.<br>  
+	<li><b>Attribute table is maintained</b> for line and polygon layers (points are imported in point format with the attributes 
+	as well).
+	<ul>
+		<li>in case of line layers, categories are added at first using <i>v.category</i>,</li>
+		<li>attribute table is created using <i>v.db.addtable</i>,</li>
+		<li>column that stores layer name is updated using <i>v.db.update</i>.<br> </li>
+	</ul></li>
+	<li>There is an option to <b>merge the features</b> by <i>v.patch</i> using various patterns to detect desired layers. 
+	For more details, see <b>Notes</b>.<br> </li>
+	<li>Finally, <i>v.clean</i> is performed to <b>clean the topology</b> if any layers have been merged. </li>
+	<li>If desired, <b>conversion to DXF</b> file is performed as well.</li>
+</ul>	
+
+<h2>NOTES</h2>
+<h3>Input data</h3>
+Several recommendations how to format the data:
+<ul>
+	<li>only input data in <b>point format</b> is accepted. The file should contain just point identifier (see next item) and
+	coordinates in two- or three-dimensional space.
+		<div class="code"><pre>
+		Point_name		easting	northing	[elevation]
+		name.code.number	x	y		[z]
+		</pre></div>
+	It does not depend on the coordinate order in the input file. The user can set up number of column for each coordinate 
+	(as in <i>v.in.ascii</i>).<br> </li>
+	<li>Point name provides information that is substantial for new layer creation - name and desired type of vector. Required
+	 <b>format of the point name</b> looks like this:
+	 <div class="code">
+		<pre>
+			layer_name.code.number
+		</pre>
+	</div>
+	Items are separated by dots. To get correct results, please remove or replace all redundant dots in the input data.
+	 <table>
+	 	<tr>
+	 		<td>
+	 			<div class="code"><pre>
+					name
+				</pre></div>
+	 		</td>
+	 		<td>
+	 			any short, descriptive name as you wish your layer to be named. Please do not use spaces or dots.
+	 		</td>
+	 	</tr>
+	 	<tr>
+	 		<td>
+	 			<div class="code"><pre>
+					code
+				</pre></div>
+	 		</td>
+	 		<td>
+	 			information about vector type of the new layer (point, line, polygon). You may define your own codes that 
+	 			refer directly to the geometry (e.g. <i>point</i>, <i>line</i>, <i>poly</i> etc. including various 
+	 			abbreviations). Or you may specify that e.g. <i>tree</i>, <i>bush</i> etc. are codes for point features, 
+	 			<i>river</i>, <i>profile</i> etc. refer to line segments and <i>lake</i> and 
+	 			<i>house</i> represent new polygon layers.
+	 		</td>
+	 	</tr>
+	 	<tr>
+	 		<td>
+	 			<div class="code"><pre>
+					number
+				</pre></div>
+	 		</td>
+	 		<td>
+	 			simple identifier of the point in the layer (preferably plain numbering)
+	 		</td>
+	 	</tr>
+	 </table></li>
+	<li>if using a <b>header or columns' names</b>, refer this in <i>skip</i> parameter<br> </li>
+	<li>if necessary to <b>merge</b> any layers, please give them a name with specific prefix, which should be used as 
+	merging rule as well. Merging rule that is based on suffix or another part of the layer name is not recognized.<br> </li>
+	<li>if the module <b>crashes suddenly</b> during large dataset processing, 
+	it might be caused by incomplete data writing to the layer input file. Please divide input data into several smaller 
+	files (probably depends on your computer performance).</li>
+</ul>
+
+<h3>Conversion to DXF</h3>
+If you wish to convert the data to DXF, please use <i>-x</i> flag. Then, it is necessary to set up:
+<ul>
+<li>the <b>name of DXF file</b>. The file will be written into the output directory.</li>
+<li><b>drawing units</b>. Default value: <i>metric</i>. Another option: <i>imperial</i>.</li>
+<li><b>height of the text</b>. Default value: 0.0 (the height will be derived as a fraction (0.003) of longer side of a rectangular 
+mapset region)</li>
+</ul>
+Output drawing consists of geometry layers (point, line and polygon) supplemented with text. The text layers contain elevation of the vertices 
+and labels of the points and of the objects as <i>Fig. 4</i> shows.
+
+<h2>EXAMPLES</h2>
+This example is based on the sample dataset of North Carolina 
+(<a href="https://grass.osgeo.org/sampledata/north_carolina/nc_spm_08_grass7.zip">nc_spm_08_grass7</a>). 
+Point vector layer <i>hospitals</i>, line vector layer <i>railroads</i> and polygon vector layer <i>soil_general</i> have 
+been exported to the text files, vertices have been renamed and the files have been merged. This final input was used as 
+test data for the script.
+
+<div class="code"><pre>
+v.in.survey input=test_data.dat separator=tab skip=1 easting=2 northing=3 pt_rules=pt ln_rules=ln poly_rules=poly outdir=NC_test
+</pre></div>
+
+As might be seen in <i>Fig. 1</i>, points and lines fit original dataset well, but areas are broken. 
+This is caused by input data - it was created exporting lines from areas and then exporting points from lines. Boundary of each 
+area was split into lines according to topological rule that vertices of the line are given by its intersection with at least 
+two other lines. Thus, each new area was generated as the space surrounded by a line and connection between its vertices.
+
+<p>
+<table>
+	<tr>
+		<td>
+			<i>Fig. 1</i>: Imported features with broken areas
+		</td>
+		<td>
+			<i>Fig. 2</i>: Lines with the directions
+		</td>
+		<td>
+			<i>Fig. 3</i>: Imported features with correct areas
+		</td>
+	</tr>
+	<tr>
+		<td>
+			<img src="img_lyrs_broken.png" alt="Broken areas" style="float: left; width: 100%; margin-right: 1%; margin-bottom: 0.5em;">
+		</td>
+		<td>
+			<img src="img_sorted_boundaries.png" alt="Criteria for the reconstruction of the boundaries" style="float: left; width: 100%; margin-right: 1%; margin-bottom: 0.5em;">
+		</td>
+		<td>
+			<img src="img_soils_correct.png" alt="Correct areas" style="float: left; width: 100%; margin-right: 1%; margin-bottom: 0.5em;">
+		</td>
+	</tr>
+</table>
+
+<p>To fix broken areas, original lines have been merged using <i>v.edit</i> according to their categories. Then points have been 
+exported again and they were copied to enclose each area - respecting lines and the directions as might be seen in 
+<i>Fig. 2</i>. In <i>Fig. 3</i>, there is shown that areas fit well too after editing input file. 
+
+<p> If it is necessary also to merge some of the layers, then merging rules can be set up:
+<div class="code"><pre>
+	v.in.survey input=test_data_small_corrected_soils.dat separator=tab easting=2 northing=3 pt_rules=pt ln_rules=ln poly_rules=poly \ 
+	outdir=NC_test_small_merge merge_lyrs=road,soil
+</pre></div>
+
+<p>
+<table>
+	<tr>
+		<td>
+			<i>Fig. 1</i>: DXF drawing together with the labels<br>(north arrow and scale have been added later)
+		</td>
+	</tr>
+	<tr>
+		<td>
+			<img src="img_NC_dxf.png" alt="DXF" style="float: left; width: 55%; margin-right: 1%; margin-bottom: 0.5em;">
+		</td>
+	</tr>
+</table>
+
+<p>
+The colours in DXF drawing have been set up automatically. In this case, labels of roads and elevation labels of soil types 
+have been switched of because of too large amount of the data. Examples of more detailed exports can be seen in 
+<i>(Stopkova, 2016)</i>.
+
+<h2>WARNINGS</h2>
+<i>WARNING: There are no layers to merge into <item>.</i><br>
+Any imported layer does not match given <i>item</i> referring how to merge layers in script settings.
+
+<h2>ERROR MESSAGES</h2>
+<h3>Input data:</h3>
+<i>ERROR: Too many columns. Use input data in format 'name east north [elev]', please.</i><br>
+Current version supports only import of 2D or 3D geometry and point name. Edit input file and run script again.
+
+<p><i>ERROR: Please rename point in line i according to the script request in format 
+'lyr_name.vect_type_code.number'.</i><br>
+Point name is expected to provide information in particular format. Edit point name in <i>i</i><sup>th</sup> line of the 
+input file and run script again.
+
+<p><i>ERROR: Please do not use SQL forbidden characters in your input data. Remove all 'char' from the file.</i><br>
+Any special characters are not allowed in the data. Please use just <i>dots</i> to separate parts of point names. If 
+necessary, make the names more clear using <i>underscores</i>.
+
+<p><i>ERROR: Not enough points to make line layer <layer>.</i><br>
+<i>ERROR: Not enough points to make polygon layer <layer>.</i><br>
+These errors may refer to:
+<ul>
+	<li>a typographical mistake in particular point's name. Edit point's name in the input file and run script again.
+	<li>mixed layers. See <i>(Stopkova, 2016)</i> for more details. Edit point's name in the input file and run script again.
+	<li>broken geometry (just one point referring to a line or less than three points referring to a polygon). Please remove 
+	these points or edit their vector type (middle part of point name) to refer to a point.
+</ul>
+
+<h3>Script settings:</h3>
+<i>ERROR: Wrong separator type.</i><br>
+The separator does not fit the data file. Please set up another type: <i>pipe</i>, <i>comma</i>, <i>space</i>, <i>tab</i>, 
+<i>newline</i>. Default: <i>pipe</i>
+
+<p><i>ERROR: Vector layer <i>layer</i> is not point, neither line, nor boundary. Please check your input data and rules that 
+you have typed in.</i><br>
+Vector type information (middle part of the point name) does not match to any of geometry codes that you have 
+entered. Please compare input settings with point names in the data file, complete input settings (or edit input data) 
+and run the script again.</p>
+
+<p><i>ERROR: Please redefine merging option <char>. Different vector types match this rule.</i><br>
+Merging different vector types is not allowed. This might be matter of comparing layer names with too free rules:
+
+<p>
+<table>
+	<caption>Tab. 1: Example of too free rules for merging layers</caption>
+	<tr>
+		<td><b>river</b></td>
+		<td></td>
+		<td>river -> <b>river_stream</b></td>
+	</tr>
+	<tr>
+		<td>river_stream_Danube</td>
+		<td></td>
+		<td>river_area_Danube</td>
+	</tr>
+	<tr>
+		<td>river_stream_Vah</td>
+		<td></td>
+		<td>river_stream_Vah</td>
+	</tr>
+	<tr>
+		<td>river_stream_Hron</td>
+		<td></td>
+		<td>river_stream_Hron</td>
+	</tr>
+</table>
+
+<p>
+In the left column, there are summarized line objects that should be merged to one single layers called 
+<i>river</i>. This merge is possible, as all the features are represented by line. In the right column, there 
+are summarized rivers as well. But they cannot be merged, because the Danube river is represented by polygon and the rest of the 
+features are lines. It would be better to use merging criteria <i>river_stream</i> 
+to separate just line object to be merged.
+
+<h3>Files:</h3>
+<i>ERROR: File <i>filename</i> does not exist.</i><br>
+Missing input file.
+
+<h3>Output layers:</h3>
+<i>ERROR: Vector layer <layer> exists. Please remove the layer or rename the input points.</i><br>
+There is a layer with identical name in the mapset. Overwrite it, rename it or rename the layer in the input file 
+(edit points names). However, this error usually happens if points that belong to several layers are mixed in the file as well. How to prevent this, 
+examples in <i>(Stopkova, 2016)</i> can demonstrate.
+
+<p><b>Empty layer</b> (not reported in command output): if the layer exists but is empty, please check the input points. This might happened 
+because of wrong point order (especially if the point order has been edited).
+
+<h3>DXF conversion:</h3>
+<i>ERROR: Please set up the drawing units to 'metric' or to 'imperial'.</i><br>
+Anything else cannot be accepted (in accordance to DXF settings). Default value: <i>metric</i>.
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="v.in.ascii.html">v.in.ascii</a><br>
+<a href="v.centroids.html">v.centroids</a><br>
+<a href="g.remove.html">g.remove</a><br>
+<a href="v.db.addtable">v.db.addtable</a><br>
+<a href="v.db.update">v.db.update</a><br>
+<a href="v.patch">v.patch</a><br>
+<a href="v.clean">v.clean</a><br>
+<a href="v.out.dxf">v.out.dxf</a>
+</em>
+<br><br>
+Stopkova, E. (in print). Open-source tool for automatic import of coded surveying data to multiple vector layers in GIS 
+environment. In <i>Geoinformatics FCE CTU</i>. Vol. 15, No. 2 (2016). Prague: Czech Technical University, Faculty of Civil 
+Engineering. ISSN 1802-2669. pp. tba. doi: tba.
+
+<h2>AUTHOR</h2>
+
+Eva Stopkova<br>
+functions for DXF conversion are taken from (or based on) the module <i>v.out.dxf</i> (Charles Ehlschlaeger and Radim Blazek)
+
+<p>
+<i>Last changed: $Date$</i>


Property changes on: grass-addons/grass7/vector/v.in.survey/v.in.survey.html
___________________________________________________________________
Added: svn:mime-type
   + text/html
Added: svn:keywords
   + Author Date Id
Added: svn:eol-style
   + native

Added: grass-addons/grass7/vector/v.in.survey/v.in.survey.py
===================================================================
--- grass-addons/grass7/vector/v.in.survey/v.in.survey.py	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.survey/v.in.survey.py	2016-10-06 08:10:51 UTC (rev 69679)
@@ -0,0 +1,1688 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+##############################################################################
+#
+# MODULE:    v.in.survey
+#
+# AUTHOR(S):     Eva Stopková
+#        functions for DXF conversion are taken from (or based on)
+#        the module v.out.dxf (Charles Ehlschlaeger and Radim Blazek)
+#
+# PURPOSE:       Create multiple vector layers based on one textfile
+# COPYRIGHT:     (C) 2015 by the GRASS Development Team
+#
+#        This program is free software under the GNU General Public
+#        License (version 2). Read the file COPYING that comes with
+#        GRASS for details.
+#
+##############################################################################
+
+#%module
+#% description: Creates multiple vector layers from just one textfile
+#% keywords: vector
+#% keywords: import
+#% keywords: ASCII
+#% keywords: multiple
+#%end
+
+#% option G_OPT_F_INPUT
+#% key: input
+#% description: Name of input file to be imported
+#% required: yes
+#%end
+
+#% option G_OPT_F_SEP
+#% key: separator
+#% guisection: Input format
+#%end
+
+#% option
+#% key: pt_rules
+#% guisection: Vector type codes
+#% multiple: yes
+#% description: Point(s): hosp.pt.01..., forest.tree.01 -> 'pt,tree'
+#%end
+
+#% option
+#% key: ln_rules
+#% guisection: Vector type codes
+#% multiple: yes
+#% description: Line(s): road.ln.01..., Danube.river.01 -> 'ln,river'
+#%end
+
+#% option
+#% key: poly_rules
+#% guisection: Vector type codes
+#% multiple: yes
+#% description: Polygon(s): hosp.area.01,..., forest.area.01 -> 'area'
+#%end
+
+#% option
+#% key: skip
+#% type: integer
+#% required: NO
+#% multiple: NO
+#% answer: 0
+#% description: Number of lines to skip at top of input file (points mode)
+#% guisection: Points
+#%end
+
+#% option
+#% key: columns
+#% type: string
+#% required: NO
+#% multiple: NO
+#% guisection: Points
+#% label: Column definition in SQL style (points mode))
+#% description: E.g.: 'x double precision, y double precision, cat int, name varchar(10)'
+#%end
+
+#% option
+#% key: easting
+#% type: integer
+#% required: NO
+#% multiple: NO
+#% answer: 2
+#% guisection: Points
+#% label: Number of column used as easting coordinate (points mode)
+#% description: First column is 1
+#%end
+
+#% option
+#% key: northing
+#% type: integer
+#% required: NO
+#% multiple: NO
+#% answer: 3
+#% guisection: Points
+#% label: Number of column used as northing coordinate (points mode)
+#% description: First column is 1
+#%end
+
+#% option
+#% key: elevation
+#% type: integer
+#% required: NO
+#% multiple: NO
+#% answer: 0
+#% guisection: Points
+#% label: Number of column used as elevation (points mode)
+#% description: First column is 1. If 0, z coordinate is not used
+#%end
+
+#% option G_OPT_M_DIR
+#% key: outdir
+#% guisection: Output settings
+#% description: Name of directory to store separated files for each layer
+#% required: no
+#%end
+
+#% option
+#% key: merge_lyrs
+#% guisection: Output settings
+#% multiple: yes
+#% description: Pattern(s) for layers to be merged
+#%end
+
+#% flag
+#% key: z
+#% description: Create 3D vector map
+#%end
+
+#% flag
+#% key: e
+#% description: Create a new empty vector map and exit. Nothing is read from input.
+#%end
+
+#% flag
+#% key: n
+#% description: Do not expect a header when reading in standard format
+#% guisection: Input format
+#%end
+
+#% flag
+#% key: t
+#% description: Do not create table in points mode
+#% guisection: Points
+#%end
+
+#% flag
+#% key: r
+#% description: Only import points falling within current region (points mode)
+#% guisection: Points
+#% end
+
+#% flag
+#% key: x
+#% description: Convert to DXF
+#% guisection: DXF conversion
+#%end
+
+#% option
+#% key: dxf_file
+#% description: Name of the DXF file
+#% guisection: DXF conversion
+#%end
+
+#% option
+#% key: draw_unit
+#% description: Drawing units
+#% answer: metric
+#% options: metric, imperial
+#% guisection: DXF conversion
+#%end
+
+#% option
+#% key: textsize
+#% description: Text height of the labels in DXF file
+#% answer: 0.
+#% guisection: DXF conversion
+#%end
+
+import sys
+import os
+import string
+import math
+import fileinput
+
+import grass.script as grass
+from grass.pygrass.messages import get_msgr
+import grass.script.vector as gvect
+
+
+class test:
+    def __init__(self, test_file):
+        self.test_file = test_file
+
+    def files(self):  # test if file exists
+        if not os.path.isfile(self.test_file):
+            special = self.test_file.split('/')  # which file is being checked:
+            # list of layers that have been done in previous session
+            if special[len(special) - 1] == "_layers_done.txt":
+                grass.fatal(_("File <" + self.test_file
+                              + "> should contain list of existing layers."
+                              + " The file does not exist, thus it is not"
+                              + " possible to process script with -x flag."))
+            else:    # any other file (input file)
+                grass.fatal("File <" + self.test_file + "> does not exist.")
+        return 0
+
+    # test if file is blank
+    def blank(self, want_blank):
+        for line in self.test_file:
+            # the file is blank and it should not be:
+            if not line.strip() and want_blank is False:
+                msgr.fatal(_("File <" + self.lyr_name + "." + extension
+                             + "> is empty."))
+        return 0
+
+    def overwrite_file(self):
+        # the file is not blank and it should be
+        if os.path.isfile(self.test_file):
+            if overwrite_all is True:
+                # remove potentially broken input file
+                os.remove(self.test_file)
+                msgr.message(_("Existing file <" + self.test_file
+                               + "> has been removed..."))
+            else:
+                msgr.fatal(_("File <" + self.test_file
+                             + "> exists. To overwrite it,"
+                             + " please use --o flag..."))
+        return 0
+# ****** #
+
+
+class glob:  # *** Global variables *** #
+    separator = ''    # separator of the rows in the input data
+    py_separator = ''
+    outdir = ''
+    infile = ''
+
+    def __init__(self, infile, outdir, separator):
+        test(infile).files()    # test file existence
+
+        glob.infile = infile         # input file (name-east-north-[elev])
+        glob.separator = separator
+        glob.py_separator = self.g2py(separator)  # separator of the input data
+        # directory to store separated files for each layer
+        glob.outdir = self.test_dir(outdir)
+
+    # separators from GRASS to Python
+    # e.g. "pipe" -> "|"
+    def g2py(self, separator):
+        if separator == "pipe":
+            py_separator = "|"
+        elif separator == "comma":
+            py_separator = ","
+        elif separator == "space":
+            py_separator = " "
+        elif separator == "tab":
+            py_separator = "\t"
+        elif separator == "newline":
+            py_separator = "\n"
+        else:
+            msgr.fatal(_("Please setup correct separator..."))
+
+        return py_separator
+
+    # test if output directory exists
+    def test_dir(self, outdir):
+        if outdir == '':
+            outdir = 'output'
+            msgr.message(_("Output files will be stored "
+                           + "in the <output> directory."))
+
+        if not os.path.isdir(outdir):  # output directory does not exist
+            os.makedirs(outdir)   # create new directory
+
+        else:  # output directory exists
+            msgr.warning(_("Output directory exists. It may contain layers"
+                           + " that might be overwritten."))
+
+        return outdir
+# ****** #
+
+
+class Flag:
+    signs = ''
+
+    def __init__(self, sign):
+        self.sign = sign
+        Flag.signs = self.add_flag()
+
+    def add_flag(self):  # test flags
+        if flags[self.sign]:
+            if Flag.signs == '':
+                Flag.signs = self.sign
+            else:
+                Flag.signs += self.sign
+        return Flag.signs
+# ****** #
+
+
+class inputs(glob, test):
+    data = []      # input data
+    n = 0
+    dim = 0
+
+    def __init__(self, skip_input):
+    # no. of lines to be skipped in the input file
+        self.skip_input = int(skip_input)
+        inputs.data, inputs.n, inputs.dim = self.raw_data()  # extract xyz
+
+    # find out data dimension
+    def dimension(self, row, n_lines, skip_lines, find_dim):
+        # remove blank elements
+        filtered = [y for y in row if y != '\n'
+                    and y != '' and y != ' ' and y != '\t']
+        n = len(row)  # number of non-blank elements
+
+        if find_dim is True:
+            if n == 3:    # name easting northing
+                inputs.dim = 2  # 2D
+            elif n == 4:  # name easting northing elevation
+                inputs.dim = 3  # 3D
+            else:
+                msgr.fatal(_("Too many columns. Use input data in format"
+                             + " \'name east north [elev]\', please."))
+
+            find_dim = False
+
+        else:
+            if n - 1 != inputs.dim:
+                msgr.fatal(_("Number of columns do not match. Please check"
+                             + " rows " + str(n_lines + skip_lines - 1)
+                             + " and " + str(n_lines + skip_lines)
+                             + " in your data."))
+
+        return inputs.dim, find_dim
+
+    # test not allowed characters
+    def characters(self, string, char):
+        # list of forbidden characters
+        avoid = ['-', '*', '/', '+', '\\', '|', '<', '>', '=', '~', '°', '!',
+                 '`', ';', ':', '@', '£', '$', '%', '&', '(', ')', '#', '^',
+                 '\'', '\"', '?', '§', '[', ']']
+        # number of forbidden characters
+        n_avoid = len(avoid)
+
+        for i in range(0, n_avoid):
+            if string.find(avoid[i]) > -1:
+                if char == '-':        # test just '-' in names
+                    msgr.fatal(_("Please do not use SQL forbidden characters"
+                                 + " in your input data... remove all \'"
+                                 + avoid[i] + "\' from point names."))
+                    break        # everything else has been tested
+                else:            # general test:
+                    if i == 0:    # do not test '-'
+                        continue
+                    msgr.fatal(_("Please do not use SQL forbidden characters"
+                                 + " in your input data... remove all \'"
+                                 + avoid[i] + "\' from the file."))
+        return 0
+
+    # extract raw data
+    def raw_data(self):
+        open_input = open(glob.infile, 'r')    # open input file for reading
+        data = []
+        find_dim = True        # unknown dimension of the data
+
+        skip_lines = self.skip_input + skip.layers
+        n_lines = 0            # number of non-blank lines
+
+        for line in open_input:        # for each line in the file
+            if n_lines < skip_lines:    # skip lines
+                n_lines += 1
+                continue
+
+            if line.strip():    # use strip to check the content
+                # test the data for SQL non-compliant content:
+                # everything except '-' <=> allowed in numeric types
+                self.characters(line, 'general')
+                n_lines += 1
+
+            row = line.strip('\n').split(glob.py_separator)
+            if len(row) == 1:
+                msgr.fatal(_("Wrong separator type."))
+
+            # test if the layer name does not start with a digit
+            if line[0].isdigit():
+                msgr.fatal(_("Illegal vector map name <" + row[0]
+                             + ">. Must start with a letter."))
+
+            # test point names:
+            # - for '-' as SQL non-compliant content
+            self.characters(row[0], '-')
+
+            # - for length
+            if len(row[0].split('.')) != 3:
+                msgr.fatal(_("Please rename point " + row[0]
+                             + " according to the script request in format"
+                             + " \'lyr_name.vect_type_code.number\'."))
+
+            # make data array from the first unskipped non-blank line:
+            # 2D or 3D
+            inputs.dim, find_dim = self.dimension(
+                row, n_lines, skip_lines, find_dim)
+
+            # join everthing to data
+            data.append(row)
+        open_input.close()        # close input file
+
+        if n_lines == skip_lines:
+            msgr.warning(_("All the data is imported. Just patching"
+                           + " and cleaning will be done if necessary."))
+            inputs.skip = True
+
+            return None, None, inputs.skip
+        if n_lines < 1:
+            msgr.fatal(_("Empty input file."))
+
+        # remove empty lines from the data
+        data = [x for x in data if x != '\n']
+        inputs.n = len(data)        # number of elements
+
+        # sort data by name
+        inputs.data = sorted(data, key=lambda data: data[0])
+
+        return inputs.data, inputs.n, inputs.dim
+
+
+class vect_rules:
+    pt = ''
+    ln = ''
+    poly = ''
+    east = 2
+    north = 3
+    elev = 0
+
+    def __init__(self, pt, ln, poly, east, north, elev):
+        vect_rules.pt = pt.split(',')      # list of codes for point layer
+        vect_rules.ln = ln.split(',')      # list of codes for line layer
+        vect_rules.poly = poly.split(',')  # list of codes for boundary
+
+        if (vect_rules.pt[0] == '' and vect_rules.ln[0] == ''
+                and vect_rules.poly[0] == ''):
+            msgr.fatal(_("Any rule for vector geometry missing..."))
+
+        vect_rules.east = east      # column with easting
+        vect_rules.north = north    # column with northing
+        vect_rules.elev = elev      # column with elevation
+
+
+class files(glob):
+    base = ''
+
+    def __init__(self, base):
+        files.base = base
+
+    # create path to file
+    def path2(self, extension):
+        filename = glob.outdir + '/' + files.base + '.' + extension
+        return filename
+
+    # open output file
+    def open_output(self, skip_blank_test, dxf):
+        out_file = glob.outdir + '/' + files.base
+        if dxf is False:
+            out_file += '.txt'
+
+        test(out_file).overwrite_file()
+        open_output = open(out_file, 'a+')
+
+        if skip_blank_test is False:
+            test(out_file).blank(True)    # test if the file is blank
+
+        return open_output
+# ****** #
+
+
+class skip(glob, test, files):
+    layers = 0
+    existing = False
+    lyr_names = ''    # names of the layers to be analyzed for merging
+    vectors = ''      # geometry types of the layers for merging
+
+    def __init__(self, existing):
+        self.existing = existing
+
+        if self.existing is True:
+            # test if file exists
+            test.files(glob.outdir + "/_layers_done.txt", "_layers_done.txt")
+            # open list of existing layers
+            done_lyrs = files.open_output(
+                glob.outdir, "_layers_done", True, False)
+            skip.layers, skip.lyr_names, skip.vectors = self.lines(done_lyrs)
+
+    # count points in existing layers to skip lines
+    def lines(self):
+        i = 0                # index
+        for line in glob.infile:        # for each line in the file
+            if line.strip():    # use strip to check the content
+                # test layer names for SQL non-compliant content:
+                # everything except '-' <=> allowed in numeric types)
+                test.characters(line, 'general')
+
+                # test layer names for '-' as SQL non-compliant content
+                test.characters(line, '-')
+
+                row = line.strip('\n').split(glob.py_separator)
+                skip.layers += int(row[0])
+                if i == 0:
+                    skip.lyr_names = row[1]
+                    skip.vectors = row[2]
+                else:
+                    skip.lyr_names += ',' + row[1]
+                    skip.vectors += ',' + row[2]
+                i += 1
+        return skip.layers, skip.lyr_names, skip.vectors
+# ****** #
+
+
+class layer_init:
+    def __init__(self, i):
+        self.i = i
+        self.name, self.code = self.define_name()  # setup name of the layer
+
+    # setup name of the layer
+    def define_name(self):
+        # extract point name
+        point_name = inputs.data[self.i][0].split(".")  # split the data by dot
+        unit_name = point_name[0]  # core name of the layer
+        self.code = point_name[1]  # vector type (point, line, boundary)
+        self.name = unit_name + "_" + self.code  # whole layer name
+
+        return self.name, self.code
+# ****** #
+
+
+class layer(glob, Flag, vect_rules, layer_init):
+    unit = ''    # pure name of the layer
+    code = ''    # code for geometry type according to the rules(P - L - B)
+    name = ''    # name of the layer (unit_code)
+    vector = ''  # geometry type of the layer (P - L - B)
+    n_pts = 0    # number of lines / polygons
+    close = 0    # index of closing point
+
+    def __init__(self, i):
+        self.i = i
+
+        layer.name, layer.code = self.define_name()
+        # open output file (test blank, no dxf)
+        self.out = files(layer.name).open_output(False, False)
+
+        # initial values for the new layer
+        layer.n_pts = 0    # number of lines / polygons
+        layer.close = i    # index of the closing point
+        layer.vector = self.code2vector()    # geometry type
+        layer.unit = self.setup_unit(1)
+
+        self.vformat = self.grass_format()
+        if self.vformat == 'standard':
+            # open backup file (test blank, no dxf)
+            self.out_bckp = files(
+                layer.name + '_bckp').open_output(False, False)
+
+        self.test_existence(layer.name, False)    # test layer existence
+        self.filename = files(layer.name).path2('txt')
+
+    # compare code with rules to sort the layers
+    def compare(self, rules, sign):
+        n_rules = len(rules)        # number of rules for each vector type
+        for i in range(0, n_rules):
+            if layer.code == rules[i]:  # if code is the same as any rule:
+                layer.vector = sign     # define vector type
+        return layer.vector
+
+    # sort layers according to codes (by user)
+    # to points, lines and boundaries
+    def code2vector(self):
+        layer.vector = ''
+        layer.vector = self.compare(vect_rules.pt, 'P')  # test points
+        if layer.vector != '':
+            return layer.vector
+
+        if (layer.vector == ''):  # if type undefined:
+            layer.vector = self.compare(vect_rules.ln, 'L')  # test lines
+            if layer.vector != '':
+                return layer.vector
+
+        if (layer.vector == ''):  # if type still undefined:
+            # test boundaries
+            layer.vector = self.compare(vect_rules.poly, 'B')
+            if layer.vector != '':
+                return layer.vector
+
+        if (layer.vector == ''):  # if type remains undefined:
+            msgr.fatal(_("Vector layer <" + layer.name + "> is not point,"
+                         + " neither line, nor boundary. Please check"  # etc
+                         + "your input data and rules that you have"    # etc
+                         + "typed in."))
+            return 0
+
+    # format, number of vertices and index of closing point (for polygons)
+    def grass_format(self):
+        if layer.vector == 'P':
+            self.vformat = 'point'
+        else:
+            self.vformat = 'standard'
+
+        return self.vformat
+
+    def not_point(self):
+        if self.vformat != 'P':
+            layer.n_pts += 1  # number of points in the layer
+
+        return layer.n_pts
+
+    # test existence of the layer
+    def test_existence(self, layer_name, final):
+        # final: True - merging / cleaning (skip existing);
+        #        False - any other (fatal error)
+
+        # initial value: do not skip existing layer and make fatal error
+        skip = False
+        mapset = grass.gisenv()['MAPSET']
+
+    # make fatal error if there are any existing layers during data import
+        if (overwrite_all is False and self.final is False
+                and grass.find_file(layer_name, element='vector',  # etc
+                                    mapset=mapset)['file']):
+            msgr.fatal(_("Vector layer <" + layer_name + "> exists. Please"
+                         + " remove the layer or rename the input points."))
+
+        # skip existing layers during final steps (merge and clean)
+        if (final is True and grass.find_file(layer_name, element='vector', mapset=mapset)['file']):
+            # change value: skip existing layer and do not make fatal error
+            skip = True
+
+        return skip
+
+    # make new layer from subdataset written to separate file
+    def make_new(self):
+        # set up suffix for temporary line layers
+        # to be transformed into polygon or to be added an attribute table
+        suffix = ''
+        separator = glob.separator
+        if layer.vector != 'P':
+            suffix = '_' + layer.code + '_tmp'
+            separator = 'space'
+        layer_name = layer.unit + suffix
+        self.test_existence(layer_name, False)    # test layer existence
+
+        in_ascii = grass.run_command('v.in.ascii', input=self.filename,
+                                     output=layer_name, format=self.vformat,
+                                     separator=separator, x=vect_rules.east,
+                                     y=vect_rules.north, z=vect_rules.elev,
+                                     flags=Flag.signs, overwrite=overwrite_all)
+
+        # make polygon from boundaries
+        if layer.vector == 'B':
+            self.test_existence(layer.name, False)    # test layer existence
+            # add centroids and create polygon layer
+            grass.run_command('v.centroids',
+                              input=layer_name, output=layer.name)
+            # remove temporary line layer
+            grass.run_command('g.remove', type='vector',
+                              name=layer_name, flags='f')
+
+        if self.vformat == 'standard':
+            self.set_attribute_table()
+
+        # make a note that layer has been done"""
+        # done_lyrs.write(str(self.n_elems) + glob.py_separator + layer.name +
+        # glob.py_separator + self.vector + '\n')
+
+        return 0
+
+    # unit name according to temporary layer name (base + vector type code)
+    def setup_unit(self, remove_suffix):
+        if layer.vector != 'P':
+            base = layer.name.split('_')        # split point name by '_'
+            layer.unit = base[0]            # unit name: base
+
+            # all parts of the base without vector code
+            for i in range(1, len(base) - remove_suffix):
+                layer.unit += "_" + base[i]
+        else:
+            layer.unit = layer.name
+
+        return layer.unit
+
+    def check_number_pts(self):
+        if layer.vector == 'L' and layer.n_pts < 2:
+            can_be_broken = done_lyrs.readlines()[-1]
+            msgr.fatal(_("Not enough points to make line layer <"
+                         + layer.name + ">."))
+        if layer.vector == 'B' and layer.n_pts < 3:
+            msgr.fatal(_("Not enough points to make polygon layer <"
+                         + layer.name + ">."))
+        return 0
+
+    # add two specific lines at the beginning of the file in standard format
+    def standard_poly(self):
+        if layer.vector == 'B':  # for boundaries
+            layer.n_pts += 1  # no. of vertices (including the closing point)
+        return layer.n_pts
+
+    def standard_header(self):
+        # *** function based on answer 3: http://stackoverflow.com/  ...
+        # questions/5287762/how-to-insert-a-new-line-before-the-first-line- ...
+        # in-a-file-using-python
+        for num, line in enumerate(fileinput.FileInput(self.filename,  # etc
+                                                       inplace=2)):
+            if num == 0:
+                print "VERTI:"
+                print layer.vector + ' ' + str(layer.n_pts)
+                print line.strip('\n')
+            else:
+                print line.strip('\n')
+        # ***
+        return 0
+
+    # modify file to respect standard format for lines and boundaries:
+    def complete_input(self):
+        # add two specific lines at the beginning of the file
+        layer.n_pts = self.standard_poly()
+        self.standard_header()
+
+    # add closing point (the 1st one of the subsample)
+        if (layer.vector == 'B'):    # just for boundaries
+            with open(self.filename, 'a') as self.out:
+                self.write2('standard', self.out, layer.close)
+        return 0
+
+    def complete(self):
+    # modify file to respect standard format for lines and boundaries:
+        self.out.close()        # close layer input file
+        if self.vformat == 'standard':
+            self.out_bckp.close()    # close backup file
+            self.check_number_pts()
+            self.complete_input()
+
+        return 0
+
+    def write(self, i):
+        # write the point to the layer file
+        if (self.vformat == 'point'):
+            self.write2('point', self.out, i)
+
+        if (self.vformat == 'standard'):
+            self.write2('standard', self.out, i)    # nameless points
+            self.write2('point', self.out_bckp, i)  # backup of point names
+
+        layer.n_pts = self.not_point()  # setup for non-point layers
+        return layer.n_pts
+
+    # add atrribute table with the name of the layer
+    def set_attribute_table(self):
+        if self.vector == 'L':
+            line_layer = layer.name + '_tmp'  # suffix '_tmp' to the line
+            self.test_existence(line_layer, False)  # test layer existence
+            # add categories to line layer
+            grass.run_command('v.category', input=line_layer,
+                              option='add', type='line', output=layer.name)
+            # remove the layer without cats
+            grass.run_command('g.remove',
+                              type='vector', name=line_layer, flags='f')
+
+        # add table with the name column
+        grass.run_command('v.db.addtable',
+                          map=layer.name, columns='lyr_name varchar(15)')
+        # update the name column with the 1st 15 characters of the layer's name
+        grass.run_command('v.db.update', map=layer.name,
+                          column='lyr_name', value=layer.name[:15])
+        return 0
+
+    # write coordinates to file
+    def write2(self, vformat, outfile, index):
+        if vformat == 'point':
+            separator = glob.py_separator
+        else:
+            separator = ' '
+
+        if inputs.dim == 2:
+            endline = '\n'
+        if inputs.dim == 3:
+            endline = separator
+
+        # create input file for subsample of the 1st layer
+        if vformat == 'point':
+            # point name (standard format is nameless)
+            outfile.write(inputs.data[index][0] + separator)
+
+        outfile.write(inputs.data[index][1] + separator)  # easting
+        outfile.write(inputs.data[index][2] + endline)    # northing
+
+        if inputs.dim == 3:
+            outfile.write(inputs.data[index][3] + "\n")   # elevation
+
+        return 0
+# ****** #
+
+
+class Merge_init(glob, layer):  # Functionality for merging layers
+    item = ''
+    n_items = 0
+    len_item = []  # array of length of layers' names
+
+    def __init__(self, pattern):
+        self.pattern = pattern    # list of merged layers
+        merge_list = self.count_layers()
+        Merge_init.item, Merge_init.n_items, Merge_init.len_item = merge_list
+
+    # options -> properties of merged layers (count and names)
+    def count_layers(self):
+        # split pattern to the names of merged layers
+        item = self.pattern.strip(' ').split(',')
+        n_items = len(item)  # count merged layers
+
+        len_item = [0 for i in range(0, n_items)]  # initialize
+        for i in range(0, n_items):
+            len_item[i] = len(item[i])  # array of length of layers' names
+
+        return item, n_items, len_item
+# ****** #
+
+
+class Merge(Merge_init, layer):
+    name = []     # export to DXF after merging
+    vector = []   # export to DXF after merging
+    n_pts = []
+    filename = []
+    init_add = True
+    init_done = True
+    wait4 = False
+
+    def __init__(self, export2dxf):
+        self.export2dxf = export2dxf
+
+        if sum(Merge_init.len_item) > 0:
+            if Merge.init_add is True:
+                # export to DXF after merging
+                Merge.name = ['' for i in range(0, Merge_init.n_items)]
+                # export to DXF after merging
+                Merge.vector = ['' for i in range(0, Merge_init.n_items)]
+            (Merge.name, Merge.vector, Merge.init_add,
+             Merge.wait4) = self.add_layers()
+
+            # export to DXF if the layer is not to be merged
+            # layer containing several objects
+            if dxf.export2 is True and Merge.wait4 is True:
+                # create merged file of the layer to be merged...
+                # and convert it at last
+                if Merge.init_done is True:
+                    # number of points in merged layers
+                    Merge.n_pts = [[] for i in range(0, Merge_init.n_items)]
+                    for i in range(0, Merge_init.n_items):
+                        # set up path to final merged file
+                        Merge.filename.append(files(Merge_init.item[i]  # etc
+                                              + '_bckp').path2('txt'))
+
+                        test(Merge.filename[i]).overwrite_file()
+                Merge.n_pts, Merge.init_done = self.outfiles()
+
+    # add layer to the merge list according to pattern
+    def add_layers(self):
+        for i in range(0, Merge_init.n_items):
+            # compare name of each layer with the items of the pattern:
+            if layer.name[:Merge_init.len_item[i]] == Merge_init.item[i]:
+                # test: layer to be merged and merged layer not to be identical
+                if Merge_init.len_item[i] == len(layer.name):
+                    msgr.fatal(_("Please change merging rule or layer <"
+                                 + Merge_init.item[i] + ">. Their names"
+                                 + " should not be identical."))
+
+                if Merge.name[i] == '':  # initial value:
+                    # name of the first layer according to the pattern
+                    Merge.name[i] = layer.name
+                    # vector type of the first layer according to the pattern
+                    Merge.vector[i] = layer.vector
+                    Merge.init_add = False
+                else:  # next values:
+                    # add all suitable layers delimited by comma
+                    Merge.name[i] += ',' + layer.name
+                    # add vector types of the layers
+                    Merge.vector[i] += ',' + layer.vector
+
+                    # test if all layers have the same vector type
+                    control_items = Merge.vector[i].split(',')    # create list
+                    n_ctrl = len(control_items)        # length of the list
+
+                    # compare two last values
+                    if control_items[n_ctrl - 1] != control_items[n_ctrl - 2]:
+                        msgr.fatal(_("Please redefine merging option <"
+                                     + Merge.item[i] + ">. Different vector"
+                                     + " types match this rule."))
+                if dxf.export2 is True:  # the layers should be exported 2 CAD:
+                    Merge.wait4 = True   # do not export layers before merging
+                    return (Merge.name, Merge.vector,
+                            Merge.init_add, Merge.wait4)
+
+        return Merge.name, Merge.vector, Merge.init_add, Merge.wait4
+
+    # merge files to convert several objects as one layer
+    def outfiles(self):
+        # compare current layer with the list of merged ones & derive settings.
+        for i in range(0, Merge_init.n_items):    # for each merged layer:
+            n_item = len(Merge_init.item[i])
+            # if current layer is to be merged:
+            if Merge.wait4 is True and layer.name[:n_item] == Merge_init.item[i]:
+                merge_file = Merge.filename[i]
+                # set up name of current file to be merged
+                add_file_name = files(layer.name + '_bckp').path2('txt')
+                if layer.vector == 'B':
+                    subtract = -1
+                else:
+                    subtract = 0
+                # add merged items to list of point number in the layer
+                Merge.n_pts[i].append(layer.n_pts + subtract)
+                Merge.init_done = False
+
+                # test if file to be added is not blank
+                with open(add_file_name, 'r') as add_file:
+                    test(add_file).blank(False)
+
+                # test if final file that shall contain coordinates...
+                # ... of all parts of the layer is blank
+                with open(merge_file, 'a+') as merged_file:
+                    test(merged_file).blank(False)
+
+                # add content of the current file to the final file
+                with open(merge_file, 'a') as merged_file:
+                    with open(add_file_name, 'r') as add_file:
+                        for line in add_file:
+                            merged_file.write(line)
+
+        return Merge.n_pts, Merge.init_done
+
+    # merge layers according to pattern items
+    def layers(self):
+        if sum(Merge_init.len_item) > 0:
+            for i in range(0, Merge_init.n_items):
+                if Merge.name[i] == '':
+                    msgr.warning(_("There are no layers to merge into <"  # etc
+                                   + Merge_init.item[i] + ">."))
+                    continue
+
+                # merge layers to temporary layer
+                grass.run_command('v.patch',
+                                  input=Merge.name[i],
+                                  output=Merge_init.item[i]+"_tmp",
+                                  flags='e', overwrite=True)
+                # remove original dataset
+                grass.run_command('g.remove',
+                                  type='vector', name=Merge.name[i], flags='f')
+        return 0
+
+    # clean topology
+    def clean_topology(self):
+        if sum(Merge_init.len_item) > 0:
+            for i in range(0, Merge.n_items):
+                if Merge.name[i] != '':        # just for merged layers
+
+                    # find out code to recognize a type of the vector layer:
+                    # split the name of the 1st layer to be merged...
+                    element = Merge.name[i].split(',')[0]
+                    part = element.split('_')  # ... by '_'
+                    n_part = len(part)         # count parts
+                    # code: the last part of the layer's name
+                    code = part[n_part - 1]
+
+                    # test vector type
+                    if code == 'line':
+                        methods = "snap,break,rmdupl"       # topology clean
+                        lyr_name = Merge.item[i] + '_line'  # final layer name
+                    elif code != 'pt':  # polygons
+                        methods = "break,rmdupl,rmsa"       # topology clean
+                        lyr_name = Merge.item[i]            # final layer name
+                        # test if these layers have been merged already
+                        current_layer.test_existence(lyr_name, False)
+
+                    # each non-point layer that has not been cleaned yet:
+                    if code != 'pt':
+                        temp = Merge.item[i] + "_tmp"  # temporary layer
+                        # topology clean according to vector type
+                        grass.run_command('v.clean', input=temp,
+                                          output=lyr_name, tool=methods)
+                        # remove temporary layer
+                        grass.run_command('g.remove',
+                                          type='vector', name=temp, flags='f')
+        return 0
+# ****** #
+
+
+class dxf(glob, files):
+    # based on v.out.dxf by Chuck Ehlschlaeger, Radim Blazek and Martin Landa
+    export2 = False
+    File = ''    # dxf file
+    out = ''
+    units = 'metric'
+    textsize = ''
+
+    def __init__(self, export2, File, unit, textsize):
+        dxf.export2 = export2
+        dxf.File = File
+        dxf.unit = unit
+        dxf.textsize = textsize
+
+        # open dxf file
+        if dxf.export2 is True:
+            if dxf.File == '':
+                msgr.fatal(_("Please set up a name of the DXF file"
+                             + " or remove -x flag."))
+
+        # open dxf file and test if it is empty (should be)
+            dxf.out = files(dxf.File).open_output(False, True)
+
+            # setup height of the text if invalid value
+            if dxf.textsize < 0.:
+                msgr.fatal(_("Text height must be positive."))
+
+            if dxf.textsize == 0.:
+                # find extends and save textsize
+                dxf.textsize = self.do_limits(True)
+            else:
+                # find extends and do not save textsize (given by the user)
+                self.do_limits(False)
+
+            self.make_tables()        # start section of the tables
+
+    # estimate text size according to the map extents
+    # original: make_layername (v.out.dxf: main)
+    def do_limits(self, calculate_textsize):
+        region = grass.region()
+        self.north = region['n']
+        self.south = region['s']
+        self.east = region['e']
+        self.west = region['w']
+
+        self.header()
+        self.draw_units()
+        self.limits()
+        self.endsec()
+
+        if calculate_textsize is True:
+            if ((self.east - self.west) >= (self.north - self.south)):
+                dxf.textsize = (self.east - self.west) * text_ratio
+            else:
+                dxf.textsize = (self.north - self.south) * text_ratio
+
+                return dxf.textsize
+        else:
+            return 0
+
+    # set up drawing units
+    def draw_units(self):
+        if dxf.units == 'imperial':
+            code = 0
+        elif dxf.units == 'metric':
+            code = 1
+        else:
+            msgr.fatal(_("Please set up the drawing units"
+                         + " to 'metric' or to 'imperial'."))
+
+        dxf.out.write('  9\n$MEASUREMENT\n 70\n%6d\n' % code)
+
+        return 0
+
+    # define tables
+    # functions from v.out.dxf
+    def make_tables(self):
+        self.tables()
+        self.linetype_table(1)
+        self.solidline()
+        self.endtable()
+        self.layer_table(7)
+        self.layer0()
+
+        return 0
+
+    # write the header
+    # original: dxf_header (v.out.dxf: write_dxf)
+    def header(self):
+        dxf.out.write('  0\nSECTION\n  2\nHEADER\n')
+
+        return 0
+
+    # write tables
+    # original: dxf_tables (v.out.dxf: write_dxf)
+    def tables(self):
+        dxf.out.write('  0\nSECTION\n  2\nTABLES\n')
+
+        return 0
+
+    # write entities
+    # original: dxf_entities (v.out.dxf: write_dxf)
+    def entities(self):
+        dxf.out.write('  0\nSECTION\n  2\nENTITIES\n')
+
+        return 0
+
+    # end section
+    # original: dxf_endsec (v.out.dxf: write_dxf)
+    def endsec(self):
+        dxf.out.write('  0\nENDSEC\n')
+
+        return 0
+
+    # finalize dxf file
+    # original: dxf_eof (v.out.dxf: write_dxf)
+    def eof(self):
+        dxf.out.write('  0\nEOF\n')
+        dxf.out.close()
+
+        return 0
+
+    # header stuff
+    # original: dxf_limits (v.out.dxf: write_dxf)
+    def limits(self):
+        dxf.out.write(
+            '  9\n$LIMMIN\n 10\n' + str(self.west) + '\n 20\n'  # etc
+            + str(self.south) + '\n')
+        dxf.out.write(
+            '  9\n$LIMMAX\n 10\n' + str(self.east) + '\n 20\n'  # etc
+            + str(self.north) + '\n')
+
+        return 0
+
+    # tables stuff
+    # original: dxf_linetype_table (v.out.dxf: write_dxf)
+    def linetype_table(self, numlines):
+        dxf.out.write('  0\nTABLE\n  2\nLTYPE\n 70\n%6d\n' % numlines)
+
+        return 0
+
+    # original: dxf_layer_table (v.out.dxf: write_dxf)
+    def layer_table(self, numlayers):
+        dxf.out.write('  0\nTABLE\n  2\nLAYER\n 70\n%6d\n' % numlayers)
+
+        return 0
+
+    # end table
+    # original: dxf_endtable (v.out.dxf: write_dxf)
+    def endtable(self):
+        dxf.out.write('  0\nENDTAB\n')
+
+        return 0
+
+    # write line
+    # original: dxf_solidline (v.out.dxf: write_dxf)
+    def solidline(self):
+        dxf.out.write('  0\nLTYPE\n  2\nCONTINUOUS\n 70\n')
+        dxf.out.write('    64\n  3\nSolid line\n 72\n    65\n')
+        dxf.out.write(' 73\n     0\n 40\n0.0\n')
+
+        return 0
+
+    # todo: naco?
+    # original: dxf_layer0 (v.out.dxf: write_dxf)
+    def layer0(self):
+        dxf.out.write('  0\nLAYER\n  2\n0\n 70\n     0\n')
+        dxf.out.write(' 62\n     7\n  6\nCONTINUOUS\n')
+
+        return 0
+
+    # create list of the layers and of their properties...
+    # ... and write them to dxf file
+    # functions from v.out.dxf
+
+    # end section of tables
+    def end_tables(self):
+        dxfs.endtable()
+        dxfs.endsec()
+
+        return 0
+
+    # finalize dxf file
+    def end_dxf(self):
+        dxfs.endsec()  # end section
+        dxfs.eof()     # puts final stuff in dxf_fp, closes file
+
+        return 0
+
+    # setup elevation according to 2D/3D geometry
+    def setup_elev(self, point):
+        if inputs.dim == 3:  # 3D objects:
+            if point[3] == '':   # empty elevation:
+                elev = str(0.0)  # setup 0.
+            else:
+                elev = point[3]  # setup value
+        else:  # 2D objects:
+            elev = str(0.0)      # setup 0.
+
+        return elev
+# ****** #
+
+
+class dxf_layer_merged(Merge):
+    name = ''
+    vector = ''
+    n_pts = ''
+
+    def __init__(self, i):
+        self.i = i
+
+        dxf_layer_merged.name = Merge_init.item[i]
+        dxf_layer_merged.vector = Merge.vector[i]
+        dxf_layer_merged.n_pts = Merge.n_pts[i]
+        Merge.wait4 = False
+
+
+class dxf_layer(layer, Merge, dxf):  # *** make separate dxf layers *** #
+    color = 1    # layer color (1-255). 0 not recognized by AutoCAD Civil 2015.
+    n = 0        # number of the layers
+    name = []    # list of layers for drawing entities
+    vector = []  # list of geometry types
+    n_pts = []   # list of point numbers
+
+    def __init__(self, set_layer):
+        self.set_layer = set_layer
+
+        # export to DXF if the layer is not to be merged
+        # layer containing single object:
+        if dxf.export2 is True and Merge.wait4 is False:
+            self.dxf_properties()
+
+        Merge.wait4 = False
+
+    # DXF properties
+    def dxf_properties(self):
+        # add layer name to the list for drawing entities
+        dxf_layer.name.append(self.set_layer.name)
+        # add geometry type to the list for drawing entities
+        dxf_layer.vector.append(self.set_layer.vector)
+        # add no. of pts to the list
+        dxf_layer.n_pts.append(self.set_layer.n_pts)
+
+        dxf_layer.n += 1     # increase number of the layers to be drawn
+        Merge.wait4 = False  # merging indicator to the default (no merge)
+
+        self.layername()    # add layer name to the layer section
+        dxf_layer.color = self.setup_color()
+
+        return dxf_layer.color, dxf_layer.n, dxf_layer.name,  # etc
+        dxf_layer.vector, dxf_layer.n_pts, Merge.wait4
+
+    # define layers and their properties
+    # original: make_layername (v.out.dxf: main)
+    def layername(self):
+        self.layercontent('', 'CONTINUOUS', 0)            # geometry object
+        self.layercontent('_elev_pts', 'CONTINUOUS', 0)   # elevation (vertex)
+        self.layercontent('_label_pts', 'CONTINUOUS', 0)  # label (vertex)
+        if layer.vector != 'P':
+            self.layercontent('_label', 'CONTINUOUS', 0)  # label layer
+
+        return 0
+
+    # write layer
+    # original: dxf_layer (v.out.dxf: write_dxf)
+    def layercontent(self, suffix, linetype, is_frozen):
+        if is_frozen:
+            frozen = 1
+        else:
+            frozen = 64
+        dxf.out.write(
+            '  0\nLAYER\n  2\n' + dxf_layer.name[dxf_layer.n-1]  # etc
+            + suffix + '\n 70\n')
+        dxf.out.write(
+            '%6d\n 62\n%6d\n  6\n%s\n' % (frozen, self.color, linetype))
+
+        return 0
+
+    # extra color for each group of layers to export2dxf (geometry + labels)
+    def setup_color(self):
+        self.color += 1        # calculate new color indicator
+        if self.color == 256:  # if maximum value of 255 has been exceeded:
+            self.color = 1     # set up minimum again
+
+        return self.color
+# ****** #
+
+
+class finalize_dxf(
+        inputs, layer, Merge_init, Merge, dxf,
+        dxf_layer_merged, dxf_layer):
+
+    def __init__(self):
+        dxfs.end_tables()    # close the section of the tables
+
+        msgr.message(_("Converting layers to DXF..."))
+        self.entities2()
+        dxfs.end_dxf()        # finalize and close dxf file
+
+    # add point to the entity in the dxf file
+    # based on add_plines (v.out.dxf: main)
+    def point2dxf(self, vector, point, seq_type):
+        # create layer name according to entity type (geometry or text)
+        if seq_type == 'geometry':
+            appendix = ''
+        else:  # elevation or point label, or layer label
+            appendix = '_' + seq_type
+
+        self.layer2write = self.dxf_layer_name + appendix  # layer name
+
+        # write geometry
+        if seq_type == 'geometry':
+            if vector == 'P':
+                self.point2write(point)  # write point
+            else:
+                self.vertex(point)  # write vertex
+
+        # write label to point or to the layer
+        elif seq_type == 'label':
+            self.text2write(True, self.dxf_layer_name)  # write label
+
+        # write elevation to the point
+        else:
+            if seq_type == 'elev_pts':
+                default_justification = False  # change justification mode
+                text = self.setup_elev(point)  # text elevation (2D point: 0.0)
+            if seq_type == 'label_pts':
+                default_justification = True  # keep default justification mode
+                text = str(point[0])          # use point name as text
+
+            # write point labels (name and elev)
+            self.text2write(default_justification, text)
+
+        return 0
+
+    # label centroid
+    def label_centroid(self, n):
+        self.centroid.append(self.dxf_layer_name)    # add layer name
+        self.centroid.append(self.sum_east / n)      # easting
+        self.centroid.append(self.sum_north / n)     # northing
+        self.centroid.append(self.sum_elev / n)      # elevation
+
+        self.point2dxf('P', self.centroid, 'label')  # label layer
+
+        return 0
+
+    # initial values for the label of the layer
+    def init_label(self):
+        # compute centroid for line/polygon elements
+        self.sum_east = 0.
+        self.sum_north = 0.
+        self.sum_elev = 0.
+        self.centroid = []
+        return self.sum_east, self.sum_north, self.sum_elev, self.centroid
+
+    # write sequence to dxf
+    def write_sequence(self, parts, seq_type):
+        self.seq_type = seq_type
+
+        with open(self.filename, 'r+') as coord_file:  # open backup file:
+            test(self.filename).files()           # test if the file exists
+            test(self.filename).blank(False)  # test if the file is not blank
+
+            # initial values for the label of the layer
+            if self.seq_type == 'label' and self.vector != 'P':
+                (self.sum_east, self.sum_north, self.sum_elev,
+                 self.centroid) = self.init_label()
+
+            closing_pt = True  # current point should close the polygon shape
+
+            # converting a layer with more than one object:
+            if parts is not None:
+                close_merged = 0  # point index for splitting line detection
+                index_merged = 0  # index of the object in the layer
+                # no. of points in labeled objects => closing point detection
+                done = parts[0]
+                sum_layer = sum(parts)
+
+            for line in iter(coord_file.readline, ''):
+                # extract point name and coordinates
+                self.point = line.strip('\n').split(glob.py_separator)
+
+                if self.seq_type != 'label':
+                    # write point to particular entity
+                    self.point2dxf(self.vector, self.point, self.seq_type)
+
+                # write label of the layer
+                if self.seq_type == 'label' and self.vector != 'P':
+                    # sum of coordinates
+                    self.sum_east += float(self.point[1])
+                    self.sum_north += float(self.point[2])
+                    if inputs.dim == 3:
+                        self.sum_elev += float(self.point[3])
+
+                    # write label extra for each object in the layer
+                    if parts is not None:
+                        if close_merged == done - 1:  # closing point reached:
+                            # no. of points in the object
+                            n = parts[index_merged]
+                            # compute and label centroid of the object
+                            self.label_centroid(n)
+
+                            # start writing centroid of the next object
+                            # initial values for the label of the layer
+                            if self.seq_type == 'label' and self.vector != 'P':
+                                (self.sum_east, self.sum_north, self.sum_elev,
+                                 self.centroid) = self.init_label()
+
+                            index_merged += 1    # index of the next object
+
+                            # add number of currently labeled object to the sum
+                            # to not exceed array size:
+                            if index_merged < len(parts):
+                                done += parts[index_merged]
+
+                        # check the next point (closing or not)
+                        close_merged += 1
+                    # end: if merged_elements is not None
+                # end: if seq_type == 'label_pts' and code != 'P'
+
+                # write geometry of the layer
+                if self.seq_type == 'geometry':
+                    if self.vector == 'B':  # for polygon layer:
+                        # if closing point (CP) missing in current session:
+                        if(closing_pt):
+                            # save coordinates of (CP)
+                            point0 = self.point
+                            # => not necessary to save CP in the session now
+                            closing_pt = False
+
+                    # separated objects (lines or polygons)
+                    if parts is not None and self.vector != 'P':
+                        if close_merged == done - 1:  # closing point reached:
+                            # close the object:
+                            if self.vector == 'B':  # copy closing point (B)
+                                # closing point
+                                self.point2dxf(
+                                    self.vector, point0, self.seq_type)
+                            self.poly_end()  # end line/polygon object
+
+                            # start new line/polygon object
+                            # not after the last object:
+                            if close_merged < sum_layer - 1:
+                                self.polyline()
+                            if self.vector == 'B':
+                                closing_pt = True
+
+                            index_merged += 1    # index of the next object
+                            # add number of currently labeled object to the sum
+                            if index_merged < len(parts):
+                                # to not exceed array size
+                                done += parts[index_merged]
+
+                        # check the next point (closing or not)
+                        close_merged += 1
+                    # end: if merged_elements is not None ...
+                    # and (code == 'B' or code == 'L')
+                # end: if seq_type == 'label_pts' and code != 'P'
+            # end: line in iter(coord_file.readline, '')
+
+            # single object in the layer:
+            if parts is None:
+                # close geometry
+                if self.seq_type == 'geometry':
+                    if self.vector == 'B':
+                        # write closing point
+                        self.point2dxf(self.vector, point0, self.seq_type)
+                    if self.vector != 'P':
+                        self.poly_end()    # end polygon
+
+                # label the layer
+                if self.seq_type == 'label' and self.vector != 'P':
+                    self.label_centroid(self.dxf_layer_n_pts)
+
+        return 0
+
+    # write geometry entities to dxf file
+    def entities2(self):
+        dxfs.entities()        # start section of entities
+
+        j = 0  # index of merging pattern item (= merged layer name)
+        for i in range(0, dxf_layer.n):
+            self.dxf_layer_name = dxf_layer.name[i]
+            self.vector = dxf_layer.vector[i]
+            self.dxf_layer_n_pts = dxf_layer.n_pts[i]
+
+            # set up input file appendix (depends on geometry type)
+            if self.vector == 'P':
+                base = self.dxf_layer_name
+            else:
+                base = self.dxf_layer_name + "_bckp"
+            self.filename = files(base).path2('txt')  # path to input file
+
+            # write geometry
+            if self.vector != 'P':
+                self.polyline()    # start polyline entity
+
+            # if current layer has been merged:
+            if Merge_init.item[j] == self.dxf_layer_name:
+                parts = Merge.n_pts[j]  # find number of points in each object
+                j += 1         # index of the next merged layer
+            else:
+                parts = None  # not merged layers: there are no parts
+
+            # write geometry and label of the layer
+            self.write_sequence(parts, 'geometry')
+            self.write_sequence(parts, 'label')
+
+            # write labels of the vertices
+            self.write_sequence(None, 'label_pts')
+
+            # write elevations of the vertices
+            self.write_sequence(None, 'elev_pts')
+
+        return 0
+
+    # entities: point
+    # original: dxf_point (v.out.dxf: write_dxf)
+    def point2write(self, point):
+        self.east = point[1]
+        self.north = point[2]
+        self.elev = self.setup_elev(point)
+
+        dxf.out.write('0\nPOINT\n')
+        dxf.out.write('8\n' + self.dxf_layer_name + '\n')
+        dxf.out.write(
+            '10\n' + self.east + '\n20\n' + self.north + '\n30\n'  # etc
+            + self.elev + '\n')
+
+        return 0
+
+    # entities: polyline
+    # original: dxf_polyline (v.out.dxf: write_dxf)
+    def polyline(self):
+        dxf.out.write('0\nPOLYLINE\n')
+        dxf.out.write('8\n' + self.dxf_layer_name + '\n')
+        dxf.out.write('66\n1\n')
+        # fprintf(dxf_fp,"10\n0.0\n 20\n0.0\n 30\n0.0\n"); *//* ?
+
+        if inputs.dim == 3:
+            dxf.out.write('70\n8\n')
+
+        return 0
+
+    # entities: vertex
+    # original: dxf_vertex (v.out.dxf: write_dxf)
+    def vertex(self, point):
+        self.east = point[1]
+        self.north = point[2]
+        self.elev = self.setup_elev(point)
+
+        dxf.out.write('0\nVERTEX\n')
+        dxf.out.write('8\n' + self.dxf_layer_name + '\n')
+        dxf.out.write(
+            '10\n' + self.east + '\n20\n' + self.north + '\n 30\n'  # etc
+            + self.elev + '\n')
+
+        return 0
+
+    # entities: text
+    # original: dxf_text (v.out.dxf: write_dxf)
+    def text2write(self, default, text):
+        self.east = self.point[1]
+        self.north = self.point[2]
+        self.elev = self.setup_elev(self.point)
+
+        # start text entity
+        dxf.out.write('  0\nTEXT\n  8\n' + self.layer2write + '\n')
+        # reference point
+        dxf.out.write(
+            ' 10\n%s\n20\n%s\n30\n%s\n' % (self.east, self.north, self.elev))
+        # text properties
+        dxf.out.write(
+            ' 40\n' + str(dxf.textsize) + '\n  1\n' + text + '\n')
+
+        # do not use default justification (hz: left, v: baseline):
+        if default is False:
+            # justify to hz: rigth, v: top
+            dxf.out.write((
+                ' 72\n     2\n 73\n     3\n 11\n%s\n 21\n'   # etc
+                + '%s\n 31\n%s\n') % (self.east, self.north, self.elev))
+
+        return 0
+
+    # entities: end polyline
+    # original: dxf_poly_end (v.out.dxf: write_dxf)
+    def poly_end(self):
+        dxf.out.write('  0\nSEQEND\n  8\n' + self.dxf_layer_name + '\n')
+
+        return 0
+# ****** #
+
+
+def main():
+    global msgr
+    msgr = get_msgr()    # setup messenger as global variable
+
+    global overwrite_all
+    overwrite_all = grass.overwrite()
+
+    global current_layer
+    global dxfs
+    global text_ratio    # size of text compared to screen = 1
+    global centered
+    text_ratio = .003
+    centered = 4
+
+    # define options
+    opt = glob(options['input'], options['outdir'], options['separator'])
+    # open list of existing layers
+    done_lyrs = files("_layers_done").open_output(True, False)
+
+    # define rules for vector type
+    rules = vect_rules(options['pt_rules'], options['ln_rules'],
+                       options['poly_rules'], options['easting'],
+                       options['northing'], options['elevation'])
+
+    # flags for v.in.ascii
+    Flag('n')
+    Flag('t')
+    Flag('r')
+    Flag('z')
+    Flag('e')
+
+    # export to dxf
+    dxfs = dxf(flags['x'], options['dxf_file'],
+               options['draw_unit'], options['textsize'])
+
+    # *** read input coordinates
+    inp = inputs(options['skip'])
+
+    # continue importing layers to GIS
+    current_name = layer_init(0)
+    current_layer = layer(0)         # initial layer settings
+
+# test options for merging layers
+    merge_init = Merge_init(options['merge_lyrs'])  # manage items to merge
+
+# continue importing layers to GIS
+    for i in range(0, inp.n):    # step: number of columns (3 or 4)
+        new_name = layer_init(i)
+
+    # compare current lyr name with i-th name
+        if current_name.name != new_name.name:   # not equal =>
+            current_layer.complete()    # finalize current layer's output file
+            current_layer.make_new()    # import current layer
+            merge = Merge(dxf.export2)  # add current layer to the merging list
+            dxf_lyr = dxf_layer(current_layer)
+
+            # make a note that layer has been done
+            done_lyrs.write(str(current_layer.n_pts) + glob.py_separator  # etc
+                            + current_layer.name + glob.py_separator  # etc
+                            + current_layer.vector + '\n')
+
+            current_name = layer_init(i)
+            current_layer = layer(i)     # setup new layer as current
+        # end initializing a new layer
+
+        current_layer.write(i)  # write the point to the file of current layer
+    # end for i in range(0, n, dim+1)
+
+    # *** process the last layer import
+    current_layer.complete()     # finalize current layer's output file
+    current_layer.make_new()     # import current layer
+    merge = Merge(dxf.export2)   # add current layer to the merging list
+    dxf_lyr = dxf_layer(current_layer)
+
+    # make a note that layer has been done
+    done_lyrs.write(str(current_layer.n_pts) + glob.py_separator  # etc
+                    + current_layer.name + glob.py_separator      # etc
+                    + current_layer.vector + '\n')
+    done_lyrs.close()
+
+    # finalize merging and clean topology
+    if merge.n_items > 0:
+        merge.layers()           # merge the layers
+        merge.clean_topology()   # clean topology
+
+    # finalize DXF export
+    if dxf.export2 is True:
+        if merge.n_items > 0:
+            # add merged layers
+            for i in range(0, merge.n_items):
+                dxf_pars = dxf_layer_merged(i)
+        # add merged layers to the table of layers
+                dxf_lyr = dxf_layer(dxf_pars)
+        fin_dxf = finalize_dxf()  # create entities in DXF file
+
+    return 0
+
+if __name__ == "__main__":
+    options, flags = grass.parser()
+    main()



More information about the grass-commit mailing list