gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gawk-diffs] [SCM] gawk branch, feature/fix-comments, updated. gawk-4.1.


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, feature/fix-comments, updated. gawk-4.1.0-3535-gccf5a6d
Date: Sat, 24 Nov 2018 13:51:41 -0500 (EST)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, feature/fix-comments has been updated
       via  ccf5a6d8f08e024c93922440b16c90f0339fbe33 (commit)
      from  d5724bb61af6f7c3d3b491612cbd0bcc05f5d056 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=ccf5a6d8f08e024c93922440b16c90f0339fbe33

commit ccf5a6d8f08e024c93922440b16c90f0339fbe33
Author: Arnold D. Robbins <address@hidden>
Date:   Sat Nov 24 20:51:12 2018 +0200

    Get comments at outermost level working.

diff --git a/ChangeLog b/ChangeLog
index 8687af8..9ee360c 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2018-11-24         Arnold D. Robbins     <address@hidden>
 
+       * awkgram.y (interblock_comment, pending_comment): New variables.
+       (Grammar, mk_program, add_rule): Adjust to use them. Changes
+       handle comments at the outermost level, between blocks and functions.
+
+2018-11-24         Arnold D. Robbins     <address@hidden>
+
        * main.c (arg_assign): Allow assigning strongly typed regexp
        constants to variables on the command line and with -v.
        Thanks to Peng Yu <address@hidden> for the report.
diff --git a/awkgram.c b/awkgram.c
index 71b563a..e063d03 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -65,7 +65,7 @@
 
 
 /* First part of user prologue.  */
-#line 47 "awkgram.y" /* yacc.c:338  */
+#line 26 "awkgram.y" /* yacc.c:338  */
 
 #ifdef GAWKDEBUG
 #define YYDEBUG 12
@@ -103,6 +103,8 @@ static char *tokexpand(void);
 static NODE *set_profile_text(NODE *n, const char *str, size_t len);
 static INSTRUCTION *trailing_comment;
 static INSTRUCTION *outer_comment;
+static INSTRUCTION *interblock_comment;
+static INSTRUCTION *pending_comment;
 
 #define instruction(t) bcalloc(t, 1, 0)
 
@@ -209,7 +211,7 @@ extern double fmod(double x, double y);
 
 #define YYSTYPE INSTRUCTION *
 
-#line 213 "awkgram.c" /* yacc.c:338  */
+#line 215 "awkgram.c" /* yacc.c:338  */
 # ifndef YY_NULLPTR
 #  if defined __cplusplus
 #   if 201103L <= __cplusplus
@@ -659,27 +661,27 @@ static const yytype_uint8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   232,   232,   233,   238,   249,   253,   265,   270,   284,
-     291,   301,   314,   324,   326,   331,   341,   343,   349,   353,
-     358,   388,   401,   414,   421,   431,   449,   451,   453,   459,
-     467,   468,   472,   472,   506,   505,   539,   554,   556,   561,
-     562,   580,   585,   586,   590,   601,   606,   613,   721,   772,
-     822,   948,   969,   990,  1000,  1010,  1020,  1031,  1044,  1062,
-    1061,  1075,  1093,  1093,  1191,  1191,  1224,  1254,  1262,  1263,
-    1269,  1270,  1277,  1282,  1295,  1310,  1312,  1320,  1327,  1329,
-    1337,  1346,  1348,  1357,  1358,  1366,  1371,  1371,  1384,  1390,
-    1402,  1406,  1428,  1429,  1435,  1436,  1445,  1446,  1451,  1456,
-    1473,  1475,  1477,  1484,  1485,  1491,  1492,  1497,  1499,  1506,
-    1508,  1516,  1521,  1532,  1533,  1538,  1540,  1547,  1549,  1557,
-    1562,  1572,  1573,  1578,  1585,  1589,  1591,  1593,  1606,  1623,
-    1633,  1640,  1642,  1647,  1649,  1651,  1659,  1661,  1666,  1668,
-    1673,  1675,  1677,  1734,  1736,  1738,  1740,  1742,  1744,  1746,
-    1748,  1762,  1767,  1772,  1797,  1803,  1805,  1807,  1809,  1811,
-    1813,  1818,  1822,  1854,  1862,  1868,  1874,  1887,  1888,  1889,
-    1894,  1899,  1903,  1907,  1922,  1943,  1948,  1985,  2014,  2015,
-    2021,  2022,  2027,  2029,  2036,  2053,  2070,  2072,  2079,  2084,
-    2092,  2102,  2114,  2123,  2127,  2132,  2136,  2140,  2144,  2149,
-    2150,  2154,  2158,  2162
+       0,   213,   213,   214,   219,   229,   233,   245,   254,   268,
+     275,   285,   298,   308,   310,   315,   325,   327,   333,   337,
+     342,   372,   385,   398,   405,   415,   433,   435,   437,   443,
+     451,   452,   456,   456,   490,   489,   523,   538,   540,   545,
+     546,   566,   571,   572,   576,   587,   592,   599,   707,   758,
+     808,   934,   955,   976,   986,   996,  1006,  1017,  1030,  1048,
+    1047,  1061,  1079,  1079,  1177,  1177,  1210,  1240,  1248,  1249,
+    1255,  1256,  1263,  1268,  1281,  1296,  1298,  1306,  1313,  1315,
+    1323,  1332,  1334,  1343,  1344,  1352,  1357,  1357,  1370,  1376,
+    1388,  1392,  1414,  1415,  1421,  1422,  1431,  1432,  1437,  1442,
+    1459,  1461,  1463,  1470,  1471,  1477,  1478,  1483,  1485,  1492,
+    1494,  1502,  1507,  1518,  1519,  1524,  1526,  1533,  1535,  1543,
+    1548,  1558,  1559,  1564,  1571,  1575,  1577,  1579,  1592,  1609,
+    1619,  1626,  1628,  1633,  1635,  1637,  1645,  1647,  1652,  1654,
+    1659,  1661,  1663,  1720,  1722,  1724,  1726,  1728,  1730,  1732,
+    1734,  1748,  1753,  1758,  1783,  1789,  1791,  1793,  1795,  1797,
+    1799,  1804,  1808,  1840,  1848,  1854,  1860,  1873,  1874,  1875,
+    1880,  1885,  1889,  1893,  1908,  1929,  1934,  1971,  2000,  2001,
+    2007,  2008,  2013,  2015,  2022,  2039,  2056,  2058,  2065,  2070,
+    2078,  2088,  2100,  2109,  2113,  2118,  2122,  2126,  2130,  2135,
+    2136,  2140,  2144,  2148
 };
 #endif
 
@@ -1877,45 +1879,44 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 232 "awkgram.y" /* yacc.c:1645  */
+#line 213 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 1883 "awkgram.c" /* yacc.c:1645  */
+#line 1885 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 3:
-#line 234 "awkgram.y" /* yacc.c:1645  */
+#line 215 "awkgram.y" /* yacc.c:1645  */
     {
                rule = 0;
                yyerrok;
          }
-#line 1892 "awkgram.c" /* yacc.c:1645  */
+#line 1894 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 4:
-#line 239 "awkgram.y" /* yacc.c:1645  */
+#line 220 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0]) != NULL) {
-                       if ((yyvsp[-1]) == NULL) {
+                       if ((yyvsp[-1]) == NULL)
                                outer_comment = (yyvsp[0]);
-                       } else {
-                               trailing_comment = (yyvsp[0]);
-                       }
+                       else
+                               interblock_comment = (yyvsp[0]);
                }
                (yyval) = (yyvsp[-1]);
          }
-#line 1907 "awkgram.c" /* yacc.c:1645  */
+#line 1908 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 5:
-#line 250 "awkgram.y" /* yacc.c:1645  */
+#line 230 "awkgram.y" /* yacc.c:1645  */
     {
                next_sourcefile();
          }
-#line 1915 "awkgram.c" /* yacc.c:1645  */
+#line 1916 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 6:
-#line 254 "awkgram.y" /* yacc.c:1645  */
+#line 234 "awkgram.y" /* yacc.c:1645  */
     {
                rule = 0;
                /*
@@ -1924,20 +1925,24 @@ yyreduce:
                 */
                /* yyerrok; */
          }
-#line 1928 "awkgram.c" /* yacc.c:1645  */
+#line 1929 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 7:
-#line 266 "awkgram.y" /* yacc.c:1645  */
+#line 246 "awkgram.y" /* yacc.c:1645  */
     {
                (void) append_rule((yyvsp[-1]), (yyvsp[0]));
+               if (pending_comment != NULL) {
+                       interblock_comment = pending_comment;
+                       pending_comment = NULL;
+               }
                first_rule = false;
          }
-#line 1937 "awkgram.c" /* yacc.c:1645  */
+#line 1942 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 8:
-#line 271 "awkgram.y" /* yacc.c:1645  */
+#line 255 "awkgram.y" /* yacc.c:1645  */
     {
                if (rule != Rule) {
                        msg(_("%s blocks must have an action part"), 
ruletab[rule]);
@@ -1951,22 +1956,22 @@ yyreduce:
                        (void) append_rule((yyvsp[-1]), NULL);
                }
          }
-#line 1955 "awkgram.c" /* yacc.c:1645  */
+#line 1960 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 9:
-#line 285 "awkgram.y" /* yacc.c:1645  */
+#line 269 "awkgram.y" /* yacc.c:1645  */
     {
                in_function = NULL;
                (void) mk_function((yyvsp[-1]), (yyvsp[0]));
                want_param_names = DONT_CHECK;
                yyerrok;
          }
-#line 1966 "awkgram.c" /* yacc.c:1645  */
+#line 1971 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 10:
-#line 292 "awkgram.y" /* yacc.c:1645  */
+#line 276 "awkgram.y" /* yacc.c:1645  */
     {
                want_source = false;
                at_seen = false;
@@ -1976,11 +1981,11 @@ yyreduce:
                }
                yyerrok;
          }
-#line 1980 "awkgram.c" /* yacc.c:1645  */
+#line 1985 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 11:
-#line 302 "awkgram.y" /* yacc.c:1645  */
+#line 286 "awkgram.y" /* yacc.c:1645  */
     {
                want_source = false;
                at_seen = false;
@@ -1990,11 +1995,11 @@ yyreduce:
                }
                yyerrok;
          }
-#line 1994 "awkgram.c" /* yacc.c:1645  */
+#line 1999 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 12:
-#line 315 "awkgram.y" /* yacc.c:1645  */
+#line 299 "awkgram.y" /* yacc.c:1645  */
     {
                void *srcfile = NULL;
 
@@ -2004,23 +2009,23 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = (INSTRUCTION *) srcfile;
          }
-#line 2008 "awkgram.c" /* yacc.c:1645  */
+#line 2013 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 13:
-#line 325 "awkgram.y" /* yacc.c:1645  */
+#line 309 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2014 "awkgram.c" /* yacc.c:1645  */
+#line 2019 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 14:
-#line 327 "awkgram.y" /* yacc.c:1645  */
+#line 311 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2020 "awkgram.c" /* yacc.c:1645  */
+#line 2025 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 15:
-#line 332 "awkgram.y" /* yacc.c:1645  */
+#line 316 "awkgram.y" /* yacc.c:1645  */
     {
                void *srcfile;
 
@@ -2030,40 +2035,40 @@ yyreduce:
                bcfree((yyvsp[0]));
                (yyval) = (INSTRUCTION *) srcfile;
          }
-#line 2034 "awkgram.c" /* yacc.c:1645  */
+#line 2039 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 16:
-#line 342 "awkgram.y" /* yacc.c:1645  */
+#line 326 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2040 "awkgram.c" /* yacc.c:1645  */
+#line 2045 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 17:
-#line 344 "awkgram.y" /* yacc.c:1645  */
+#line 328 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2046 "awkgram.c" /* yacc.c:1645  */
+#line 2051 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 18:
-#line 349 "awkgram.y" /* yacc.c:1645  */
+#line 333 "awkgram.y" /* yacc.c:1645  */
     {
                rule = Rule;
                (yyval) = NULL;
          }
-#line 2055 "awkgram.c" /* yacc.c:1645  */
+#line 2060 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 19:
-#line 354 "awkgram.y" /* yacc.c:1645  */
+#line 338 "awkgram.y" /* yacc.c:1645  */
     {
                rule = Rule;
          }
-#line 2063 "awkgram.c" /* yacc.c:1645  */
+#line 2068 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 20:
-#line 359 "awkgram.y" /* yacc.c:1645  */
+#line 343 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *tp;
 
@@ -2093,11 +2098,11 @@ yyreduce:
                        (yyval) = list_append(list_merge((yyvsp[-3]), 
(yyvsp[0])), tp);
                rule = Rule;
          }
-#line 2097 "awkgram.c" /* yacc.c:1645  */
+#line 2102 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 21:
-#line 389 "awkgram.y" /* yacc.c:1645  */
+#line 373 "awkgram.y" /* yacc.c:1645  */
     {
                static int begin_seen = 0;
 
@@ -2110,11 +2115,11 @@ yyreduce:
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2114 "awkgram.c" /* yacc.c:1645  */
+#line 2119 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 22:
-#line 402 "awkgram.y" /* yacc.c:1645  */
+#line 386 "awkgram.y" /* yacc.c:1645  */
     {
                static int end_seen = 0;
 
@@ -2127,89 +2132,89 @@ yyreduce:
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2131 "awkgram.c" /* yacc.c:1645  */
+#line 2136 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 23:
-#line 415 "awkgram.y" /* yacc.c:1645  */
+#line 399 "awkgram.y" /* yacc.c:1645  */
     {
                func_first = false;
                (yyvsp[0])->in_rule = rule = BEGINFILE;
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2142 "awkgram.c" /* yacc.c:1645  */
+#line 2147 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 24:
-#line 422 "awkgram.y" /* yacc.c:1645  */
+#line 406 "awkgram.y" /* yacc.c:1645  */
     {
                func_first = false;
                (yyvsp[0])->in_rule = rule = ENDFILE;
                (yyvsp[0])->source_file = source;
                (yyval) = (yyvsp[0]);
          }
-#line 2153 "awkgram.c" /* yacc.c:1645  */
+#line 2158 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 25:
-#line 432 "awkgram.y" /* yacc.c:1645  */
+#line 416 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *ip = make_braced_statements((yyvsp[-4]), 
(yyvsp[-3]), (yyvsp[-2]));
 
                if ((yyvsp[-2]) != NULL && (yyvsp[0]) != NULL) {
                        merge_comments((yyvsp[-2]), (yyvsp[0]));
-                       trailing_comment = (yyvsp[-2]);
+                       pending_comment = (yyvsp[-2]);
                } else if ((yyvsp[-2]) != NULL) {
-                       trailing_comment = (yyvsp[-2]);
+                       pending_comment = (yyvsp[-2]);
                } else if ((yyvsp[0]) != NULL) {
-                       trailing_comment = (yyvsp[0]);
+                       pending_comment = (yyvsp[0]);
                }
 
                (yyval) = ip;
          }
-#line 2172 "awkgram.c" /* yacc.c:1645  */
+#line 2177 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 26:
-#line 450 "awkgram.y" /* yacc.c:1645  */
+#line 434 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 2178 "awkgram.c" /* yacc.c:1645  */
+#line 2183 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 27:
-#line 452 "awkgram.y" /* yacc.c:1645  */
+#line 436 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 2184 "awkgram.c" /* yacc.c:1645  */
+#line 2189 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 28:
-#line 454 "awkgram.y" /* yacc.c:1645  */
+#line 438 "awkgram.y" /* yacc.c:1645  */
     {
                yyerror(_("`%s' is a built-in function, it cannot be 
redefined"),
                                        tokstart);
                YYABORT;
          }
-#line 2194 "awkgram.c" /* yacc.c:1645  */
+#line 2199 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 29:
-#line 460 "awkgram.y" /* yacc.c:1645  */
+#line 444 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = (yyvsp[0]);
                at_seen = false;
          }
-#line 2203 "awkgram.c" /* yacc.c:1645  */
+#line 2208 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 32:
-#line 472 "awkgram.y" /* yacc.c:1645  */
+#line 456 "awkgram.y" /* yacc.c:1645  */
     { want_param_names = FUNC_HEADER; }
-#line 2209 "awkgram.c" /* yacc.c:1645  */
+#line 2214 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 33:
-#line 473 "awkgram.y" /* yacc.c:1645  */
+#line 457 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *func_comment = NULL;
                // Merge any comments found in the parameter list with those
@@ -2235,17 +2240,17 @@ yyreduce:
                (yyval) = (yyvsp[-6]);
                want_param_names = FUNC_BODY;
          }
-#line 2239 "awkgram.c" /* yacc.c:1645  */
+#line 2244 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 34:
-#line 506 "awkgram.y" /* yacc.c:1645  */
+#line 490 "awkgram.y" /* yacc.c:1645  */
     { want_regexp = true; }
-#line 2245 "awkgram.c" /* yacc.c:1645  */
+#line 2250 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 35:
-#line 508 "awkgram.y" /* yacc.c:1645  */
+#line 492 "awkgram.y" /* yacc.c:1645  */
     {
                  NODE *n, *exp;
                  char *re;
@@ -2274,11 +2279,11 @@ yyreduce:
                  (yyval)->opcode = Op_match_rec;
                  (yyval)->memory = n;
                }
-#line 2278 "awkgram.c" /* yacc.c:1645  */
+#line 2283 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 36:
-#line 540 "awkgram.y" /* yacc.c:1645  */
+#line 524 "awkgram.y" /* yacc.c:1645  */
     {
                  char *re;
                  size_t len;
@@ -2291,23 +2296,23 @@ yyreduce:
                  (yyval)->opcode = Op_push_re;
                  (yyval)->memory = make_typed_regex(re, len);
                }
-#line 2295 "awkgram.c" /* yacc.c:1645  */
+#line 2300 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 37:
-#line 555 "awkgram.y" /* yacc.c:1645  */
+#line 539 "awkgram.y" /* yacc.c:1645  */
     { bcfree((yyvsp[0])); }
-#line 2301 "awkgram.c" /* yacc.c:1645  */
+#line 2306 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 39:
-#line 561 "awkgram.y" /* yacc.c:1645  */
+#line 545 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 2307 "awkgram.c" /* yacc.c:1645  */
+#line 2312 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 40:
-#line 563 "awkgram.y" /* yacc.c:1645  */
+#line 547 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0]) == NULL) {
                        (yyval) = (yyvsp[-1]);
@@ -2319,35 +2324,37 @@ yyreduce:
                                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
                        }
                }
+
                if (trailing_comment != NULL) {
                        (yyval) = list_append((yyval), trailing_comment);
                        trailing_comment = NULL;
                }
+
                yyerrok;
          }
-#line 2329 "awkgram.c" /* yacc.c:1645  */
+#line 2336 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 41:
-#line 581 "awkgram.y" /* yacc.c:1645  */
+#line 567 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = NULL; }
-#line 2335 "awkgram.c" /* yacc.c:1645  */
+#line 2342 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 42:
-#line 585 "awkgram.y" /* yacc.c:1645  */
+#line 571 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 2341 "awkgram.c" /* yacc.c:1645  */
+#line 2348 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 43:
-#line 586 "awkgram.y" /* yacc.c:1645  */
+#line 572 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 2347 "awkgram.c" /* yacc.c:1645  */
+#line 2354 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 44:
-#line 591 "awkgram.y" /* yacc.c:1645  */
+#line 577 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0]) != NULL) {
                        INSTRUCTION *ip;
@@ -2358,31 +2365,31 @@ yyreduce:
                } else
                        (yyval) = NULL;
          }
-#line 2362 "awkgram.c" /* yacc.c:1645  */
+#line 2369 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 45:
-#line 602 "awkgram.y" /* yacc.c:1645  */
+#line 588 "awkgram.y" /* yacc.c:1645  */
     {
                trailing_comment = (yyvsp[0]);  // NULL or comment
                (yyval) = make_braced_statements((yyvsp[-2]), (yyvsp[-1]), 
(yyvsp[0]));
          }
-#line 2371 "awkgram.c" /* yacc.c:1645  */
+#line 2378 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 46:
-#line 607 "awkgram.y" /* yacc.c:1645  */
+#line 593 "awkgram.y" /* yacc.c:1645  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2382 "awkgram.c" /* yacc.c:1645  */
+#line 2389 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 47:
-#line 614 "awkgram.y" /* yacc.c:1645  */
+#line 600 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@ -2490,11 +2497,11 @@ yyreduce:
                break_allowed--;
                fix_break_continue(ip, tbreak, NULL);
          }
-#line 2494 "awkgram.c" /* yacc.c:1645  */
+#line 2501 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 48:
-#line 722 "awkgram.y" /* yacc.c:1645  */
+#line 708 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 *    -----------------
@@ -2545,11 +2552,11 @@ yyreduce:
                continue_allowed--;
                fix_break_continue(ip, tbreak, tcont);
          }
-#line 2549 "awkgram.c" /* yacc.c:1645  */
+#line 2556 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 49:
-#line 773 "awkgram.y" /* yacc.c:1645  */
+#line 759 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 *    -----------------
@@ -2599,11 +2606,11 @@ yyreduce:
                /* else
                        $1 and $4 are NULLs */
          }
-#line 2603 "awkgram.c" /* yacc.c:1645  */
+#line 2610 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 50:
-#line 823 "awkgram.y" /* yacc.c:1645  */
+#line 809 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *ip;
                char *var_name = (yyvsp[-5])->lextok;
@@ -2729,11 +2736,11 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2733 "awkgram.c" /* yacc.c:1645  */
+#line 2740 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 51:
-#line 949 "awkgram.y" /* yacc.c:1645  */
+#line 935 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-7]) != NULL) {
                        merge_comments((yyvsp[-7]), NULL);
@@ -2754,11 +2761,11 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2758 "awkgram.c" /* yacc.c:1645  */
+#line 2765 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 52:
-#line 970 "awkgram.y" /* yacc.c:1645  */
+#line 956 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-6]) != NULL) {
                        merge_comments((yyvsp[-6]), NULL);
@@ -2779,22 +2786,22 @@ regular_loop:
                break_allowed--;
                continue_allowed--;
          }
-#line 2783 "awkgram.c" /* yacc.c:1645  */
+#line 2790 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 53:
-#line 991 "awkgram.y" /* yacc.c:1645  */
+#line 977 "awkgram.y" /* yacc.c:1645  */
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[0]), 
instruction(Op_exec_count));
                else
                        (yyval) = (yyvsp[0]);
          }
-#line 2794 "awkgram.c" /* yacc.c:1645  */
+#line 2801 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 54:
-#line 1001 "awkgram.y" /* yacc.c:1645  */
+#line 987 "awkgram.y" /* yacc.c:1645  */
     {
                if (! break_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@ -2804,11 +2811,11 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2808 "awkgram.c" /* yacc.c:1645  */
+#line 2815 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 55:
-#line 1011 "awkgram.y" /* yacc.c:1645  */
+#line 997 "awkgram.y" /* yacc.c:1645  */
     {
                if (! continue_allowed)
                        error_ln((yyvsp[-1])->source_line,
@@ -2818,11 +2825,11 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2822 "awkgram.c" /* yacc.c:1645  */
+#line 2829 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 56:
-#line 1021 "awkgram.y" /* yacc.c:1645  */
+#line 1007 "awkgram.y" /* yacc.c:1645  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
@@ -2833,11 +2840,11 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2837 "awkgram.c" /* yacc.c:1645  */
+#line 2844 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 57:
-#line 1032 "awkgram.y" /* yacc.c:1645  */
+#line 1018 "awkgram.y" /* yacc.c:1645  */
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
@@ -2850,11 +2857,11 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2854 "awkgram.c" /* yacc.c:1645  */
+#line 2861 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 58:
-#line 1045 "awkgram.y" /* yacc.c:1645  */
+#line 1031 "awkgram.y" /* yacc.c:1645  */
     {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time.
@@ -2871,20 +2878,20 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2875 "awkgram.c" /* yacc.c:1645  */
+#line 2882 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 59:
-#line 1062 "awkgram.y" /* yacc.c:1645  */
+#line 1048 "awkgram.y" /* yacc.c:1645  */
     {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
          }
-#line 2884 "awkgram.c" /* yacc.c:1645  */
+#line 2891 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 60:
-#line 1065 "awkgram.y" /* yacc.c:1645  */
+#line 1051 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) == NULL) {
                        (yyval) = list_create((yyvsp[-3]));
@@ -2895,28 +2902,28 @@ regular_loop:
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyval), (yyvsp[0]));
          }
-#line 2899 "awkgram.c" /* yacc.c:1645  */
+#line 2906 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 61:
-#line 1076 "awkgram.y" /* yacc.c:1645  */
+#line 1062 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0]) != NULL)
                        (yyval) = list_append((yyvsp[-1]), (yyvsp[0]));
                else
                        (yyval) = (yyvsp[-1]);
          }
-#line 2910 "awkgram.c" /* yacc.c:1645  */
+#line 2917 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 62:
-#line 1093 "awkgram.y" /* yacc.c:1645  */
+#line 1079 "awkgram.y" /* yacc.c:1645  */
     { in_print = true; in_parens = 0; }
-#line 2916 "awkgram.c" /* yacc.c:1645  */
+#line 2923 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 63:
-#line 1094 "awkgram.y" /* yacc.c:1645  */
+#line 1080 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@ -3013,17 +3020,17 @@ regular_print:
                        }
                }
          }
-#line 3017 "awkgram.c" /* yacc.c:1645  */
+#line 3024 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 64:
-#line 1191 "awkgram.y" /* yacc.c:1645  */
+#line 1177 "awkgram.y" /* yacc.c:1645  */
     { sub_counter = 0; }
-#line 3023 "awkgram.c" /* yacc.c:1645  */
+#line 3030 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 65:
-#line 1192 "awkgram.y" /* yacc.c:1645  */
+#line 1178 "awkgram.y" /* yacc.c:1645  */
     {
                char *arr = (yyvsp[-2])->lextok;
 
@@ -3056,11 +3063,11 @@ regular_print:
                        (yyval) = list_append(list_append((yyvsp[0]), 
(yyvsp[-2])), (yyvsp[-3]));
                }
          }
-#line 3060 "awkgram.c" /* yacc.c:1645  */
+#line 3067 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 66:
-#line 1229 "awkgram.y" /* yacc.c:1645  */
+#line 1215 "awkgram.y" /* yacc.c:1645  */
     {
                static bool warned = false;
                char *arr = (yyvsp[-1])->lextok;
@@ -3086,54 +3093,54 @@ regular_print:
                                fatal(_("`delete' is not allowed with 
FUNCTAB"));
                }
          }
-#line 3090 "awkgram.c" /* yacc.c:1645  */
+#line 3097 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 67:
-#line 1255 "awkgram.y" /* yacc.c:1645  */
+#line 1241 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = optimize_assignment((yyvsp[0]));
          }
-#line 3098 "awkgram.c" /* yacc.c:1645  */
+#line 3105 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 68:
-#line 1262 "awkgram.y" /* yacc.c:1645  */
+#line 1248 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3104 "awkgram.c" /* yacc.c:1645  */
+#line 3111 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 69:
-#line 1264 "awkgram.y" /* yacc.c:1645  */
+#line 1250 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3110 "awkgram.c" /* yacc.c:1645  */
+#line 3117 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 70:
-#line 1269 "awkgram.y" /* yacc.c:1645  */
+#line 1255 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3116 "awkgram.c" /* yacc.c:1645  */
+#line 3123 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 71:
-#line 1271 "awkgram.y" /* yacc.c:1645  */
+#line 1257 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) == NULL)
                        (yyval) = list_create((yyvsp[0]));
                else
                        (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0]));
          }
-#line 3127 "awkgram.c" /* yacc.c:1645  */
+#line 3134 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 72:
-#line 1278 "awkgram.y" /* yacc.c:1645  */
+#line 1264 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3133 "awkgram.c" /* yacc.c:1645  */
+#line 3140 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 73:
-#line 1283 "awkgram.y" /* yacc.c:1645  */
+#line 1269 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3146,11 +3153,11 @@ regular_print:
                bcfree((yyvsp[-2]));
                (yyval) = (yyvsp[-4]);
          }
-#line 3150 "awkgram.c" /* yacc.c:1645  */
+#line 3157 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 74:
-#line 1296 "awkgram.y" /* yacc.c:1645  */
+#line 1282 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *casestmt = (yyvsp[0]);
                if ((yyvsp[0]) == NULL)
@@ -3162,17 +3169,17 @@ regular_print:
                (yyvsp[-3])->comment = (yyvsp[-1]);
                (yyval) = (yyvsp[-3]);
          }
-#line 3166 "awkgram.c" /* yacc.c:1645  */
+#line 3173 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 75:
-#line 1311 "awkgram.y" /* yacc.c:1645  */
+#line 1297 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = (yyvsp[0]); }
-#line 3172 "awkgram.c" /* yacc.c:1645  */
+#line 3179 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 76:
-#line 1313 "awkgram.y" /* yacc.c:1645  */
+#line 1299 "awkgram.y" /* yacc.c:1645  */
     {
                NODE *n = (yyvsp[0])->memory;
                (void) force_number(n);
@@ -3180,28 +3187,28 @@ regular_print:
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3184 "awkgram.c" /* yacc.c:1645  */
+#line 3191 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 77:
-#line 1321 "awkgram.y" /* yacc.c:1645  */
+#line 1307 "awkgram.y" /* yacc.c:1645  */
     {
                NODE *n = (yyvsp[0])->lasti->memory;
                bcfree((yyvsp[-1]));
                add_sign_to_num(n, '+');
                (yyval) = (yyvsp[0]);
          }
-#line 3195 "awkgram.c" /* yacc.c:1645  */
+#line 3202 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 78:
-#line 1328 "awkgram.y" /* yacc.c:1645  */
+#line 1314 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = (yyvsp[0]); }
-#line 3201 "awkgram.c" /* yacc.c:1645  */
+#line 3208 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 79:
-#line 1330 "awkgram.y" /* yacc.c:1645  */
+#line 1316 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0])->memory->type == Node_regex)
                        (yyvsp[0])->opcode = Op_push_re;
@@ -3209,57 +3216,57 @@ regular_print:
                        (yyvsp[0])->opcode = Op_push;
                (yyval) = (yyvsp[0]);
          }
-#line 3213 "awkgram.c" /* yacc.c:1645  */
+#line 3220 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 80:
-#line 1338 "awkgram.y" /* yacc.c:1645  */
+#line 1324 "awkgram.y" /* yacc.c:1645  */
     {
                assert(((yyvsp[0])->memory->flags & REGEX) == REGEX);
                (yyvsp[0])->opcode = Op_push_re;
                (yyval) = (yyvsp[0]);
          }
-#line 3223 "awkgram.c" /* yacc.c:1645  */
+#line 3230 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 81:
-#line 1347 "awkgram.y" /* yacc.c:1645  */
+#line 1333 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3229 "awkgram.c" /* yacc.c:1645  */
+#line 3236 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 82:
-#line 1349 "awkgram.y" /* yacc.c:1645  */
+#line 1335 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3235 "awkgram.c" /* yacc.c:1645  */
+#line 3242 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 84:
-#line 1359 "awkgram.y" /* yacc.c:1645  */
+#line 1345 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = (yyvsp[-1]);
          }
-#line 3243 "awkgram.c" /* yacc.c:1645  */
+#line 3250 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 85:
-#line 1366 "awkgram.y" /* yacc.c:1645  */
+#line 1352 "awkgram.y" /* yacc.c:1645  */
     {
                in_print = false;
                in_parens = 0;
                (yyval) = NULL;
          }
-#line 3253 "awkgram.c" /* yacc.c:1645  */
+#line 3260 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 86:
-#line 1371 "awkgram.y" /* yacc.c:1645  */
+#line 1357 "awkgram.y" /* yacc.c:1645  */
     { in_print = false; in_parens = 0; }
-#line 3259 "awkgram.c" /* yacc.c:1645  */
+#line 3266 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 87:
-#line 1372 "awkgram.y" /* yacc.c:1645  */
+#line 1358 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-2])->redir_type == redirect_twoway
                        && (yyvsp[0])->lasti->opcode == Op_K_getline_redir
@@ -3269,21 +3276,21 @@ regular_print:
                        lintwarn(_("concatenation as I/O `>' redirection target 
is ambiguous"));
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2]));
          }
-#line 3273 "awkgram.c" /* yacc.c:1645  */
+#line 3280 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 88:
-#line 1385 "awkgram.y" /* yacc.c:1645  */
+#line 1371 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) != NULL)
                        (yyvsp[-5])->comment = (yyvsp[-1]);
                (yyval) = mk_condition((yyvsp[-3]), (yyvsp[-5]), (yyvsp[0]), 
NULL, NULL);
          }
-#line 3283 "awkgram.c" /* yacc.c:1645  */
+#line 3290 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 89:
-#line 1392 "awkgram.y" /* yacc.c:1645  */
+#line 1378 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-4]) != NULL)
                        (yyvsp[-8])->comment = (yyvsp[-4]);
@@ -3291,19 +3298,19 @@ regular_print:
                        (yyvsp[-2])->comment = (yyvsp[-1]);
                (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), 
(yyvsp[-2]), (yyvsp[0]));
          }
-#line 3295 "awkgram.c" /* yacc.c:1645  */
+#line 3302 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 90:
-#line 1403 "awkgram.y" /* yacc.c:1645  */
+#line 1389 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = (yyvsp[0]);
          }
-#line 3303 "awkgram.c" /* yacc.c:1645  */
+#line 3310 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 91:
-#line 1407 "awkgram.y" /* yacc.c:1645  */
+#line 1393 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) != NULL && (yyvsp[0]) != NULL) {
                        if ((yyvsp[-1])->memory->comment_type == EOL_COMMENT) {
@@ -3321,59 +3328,59 @@ regular_print:
                } else
                        (yyval) = NULL;
          }
-#line 3325 "awkgram.c" /* yacc.c:1645  */
+#line 3332 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 92:
-#line 1428 "awkgram.y" /* yacc.c:1645  */
+#line 1414 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3331 "awkgram.c" /* yacc.c:1645  */
+#line 3338 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 93:
-#line 1430 "awkgram.y" /* yacc.c:1645  */
+#line 1416 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3337 "awkgram.c" /* yacc.c:1645  */
+#line 3344 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 94:
-#line 1435 "awkgram.y" /* yacc.c:1645  */
+#line 1421 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3343 "awkgram.c" /* yacc.c:1645  */
+#line 3350 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 95:
-#line 1437 "awkgram.y" /* yacc.c:1645  */
+#line 1423 "awkgram.y" /* yacc.c:1645  */
     {
                bcfree((yyvsp[-1]));
                (yyval) = (yyvsp[0]);
          }
-#line 3352 "awkgram.c" /* yacc.c:1645  */
+#line 3359 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 96:
-#line 1445 "awkgram.y" /* yacc.c:1645  */
+#line 1431 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3358 "awkgram.c" /* yacc.c:1645  */
+#line 3365 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 97:
-#line 1447 "awkgram.y" /* yacc.c:1645  */
+#line 1433 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3364 "awkgram.c" /* yacc.c:1645  */
+#line 3371 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 98:
-#line 1452 "awkgram.y" /* yacc.c:1645  */
+#line 1438 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->param_count = 0;
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3373 "awkgram.c" /* yacc.c:1645  */
+#line 3380 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 99:
-#line 1457 "awkgram.y" /* yacc.c:1645  */
+#line 1443 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-2]) != NULL && (yyvsp[0]) != NULL) {
                        (yyvsp[0])->param_count = 
(yyvsp[-2])->lasti->param_count + 1;
@@ -3390,76 +3397,76 @@ regular_print:
                } else
                        (yyval) = NULL;
          }
-#line 3394 "awkgram.c" /* yacc.c:1645  */
+#line 3401 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 100:
-#line 1474 "awkgram.y" /* yacc.c:1645  */
+#line 1460 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3400 "awkgram.c" /* yacc.c:1645  */
+#line 3407 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 101:
-#line 1476 "awkgram.y" /* yacc.c:1645  */
+#line 1462 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[-1]); }
-#line 3406 "awkgram.c" /* yacc.c:1645  */
+#line 3413 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 102:
-#line 1478 "awkgram.y" /* yacc.c:1645  */
+#line 1464 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[-2]); }
-#line 3412 "awkgram.c" /* yacc.c:1645  */
+#line 3419 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 103:
-#line 1484 "awkgram.y" /* yacc.c:1645  */
+#line 1470 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3418 "awkgram.c" /* yacc.c:1645  */
+#line 3425 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 104:
-#line 1486 "awkgram.y" /* yacc.c:1645  */
+#line 1472 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3424 "awkgram.c" /* yacc.c:1645  */
+#line 3431 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 105:
-#line 1491 "awkgram.y" /* yacc.c:1645  */
+#line 1477 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3430 "awkgram.c" /* yacc.c:1645  */
+#line 3437 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 106:
-#line 1493 "awkgram.y" /* yacc.c:1645  */
+#line 1479 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3436 "awkgram.c" /* yacc.c:1645  */
+#line 3443 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 107:
-#line 1498 "awkgram.y" /* yacc.c:1645  */
+#line 1484 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3442 "awkgram.c" /* yacc.c:1645  */
+#line 3449 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 108:
-#line 1500 "awkgram.y" /* yacc.c:1645  */
+#line 1486 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) != NULL)
                        (yyvsp[-2])->lasti->comment = (yyvsp[-1]);
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3453 "awkgram.c" /* yacc.c:1645  */
+#line 3460 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 109:
-#line 1507 "awkgram.y" /* yacc.c:1645  */
+#line 1493 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3459 "awkgram.c" /* yacc.c:1645  */
+#line 3466 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 110:
-#line 1509 "awkgram.y" /* yacc.c:1645  */
+#line 1495 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3467,66 +3474,66 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3471 "awkgram.c" /* yacc.c:1645  */
+#line 3478 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 111:
-#line 1517 "awkgram.y" /* yacc.c:1645  */
+#line 1503 "awkgram.y" /* yacc.c:1645  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3480 "awkgram.c" /* yacc.c:1645  */
+#line 3487 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 112:
-#line 1522 "awkgram.y" /* yacc.c:1645  */
+#line 1508 "awkgram.y" /* yacc.c:1645  */
     {
                /* Ditto */
                if ((yyvsp[-1]) != NULL)
                        (yyvsp[-2])->lasti->comment = (yyvsp[-1]);
                (yyval) = (yyvsp[-2]);
          }
-#line 3491 "awkgram.c" /* yacc.c:1645  */
+#line 3498 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 113:
-#line 1532 "awkgram.y" /* yacc.c:1645  */
+#line 1518 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3497 "awkgram.c" /* yacc.c:1645  */
+#line 3504 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 114:
-#line 1534 "awkgram.y" /* yacc.c:1645  */
+#line 1520 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3503 "awkgram.c" /* yacc.c:1645  */
+#line 3510 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 115:
-#line 1539 "awkgram.y" /* yacc.c:1645  */
+#line 1525 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = mk_expression_list(NULL, (yyvsp[0])); }
-#line 3509 "awkgram.c" /* yacc.c:1645  */
+#line 3516 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 116:
-#line 1541 "awkgram.y" /* yacc.c:1645  */
+#line 1527 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-1]) != NULL)
                        (yyvsp[-2])->lasti->comment = (yyvsp[-1]);
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
                yyerrok;
          }
-#line 3520 "awkgram.c" /* yacc.c:1645  */
+#line 3527 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 117:
-#line 1548 "awkgram.y" /* yacc.c:1645  */
+#line 1534 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 3526 "awkgram.c" /* yacc.c:1645  */
+#line 3533 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 118:
-#line 1550 "awkgram.y" /* yacc.c:1645  */
+#line 1536 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3534,74 +3541,74 @@ regular_print:
                 */
                (yyval) = (yyvsp[-1]);
          }
-#line 3538 "awkgram.c" /* yacc.c:1645  */
+#line 3545 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 119:
-#line 1558 "awkgram.y" /* yacc.c:1645  */
+#line 1544 "awkgram.y" /* yacc.c:1645  */
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0]));
          }
-#line 3547 "awkgram.c" /* yacc.c:1645  */
+#line 3554 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 120:
-#line 1563 "awkgram.y" /* yacc.c:1645  */
+#line 1549 "awkgram.y" /* yacc.c:1645  */
     {
                /* Ditto */
                if ((yyvsp[-1]) != NULL)
                        (yyvsp[-2])->comment = (yyvsp[-1]);
                (yyval) = (yyvsp[-2]);
          }
-#line 3558 "awkgram.c" /* yacc.c:1645  */
+#line 3565 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 121:
-#line 1572 "awkgram.y" /* yacc.c:1645  */
+#line 1558 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3564 "awkgram.c" /* yacc.c:1645  */
+#line 3571 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 122:
-#line 1573 "awkgram.y" /* yacc.c:1645  */
+#line 1559 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = list_create((yyvsp[0])); }
-#line 3570 "awkgram.c" /* yacc.c:1645  */
+#line 3577 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 123:
-#line 1579 "awkgram.y" /* yacc.c:1645  */
+#line 1565 "awkgram.y" /* yacc.c:1645  */
     {
                if (do_lint && (yyvsp[0])->lasti->opcode == Op_match_rec)
                        lintwarn_ln((yyvsp[-1])->source_line,
                                _("regular expression on right of assignment"));
                (yyval) = mk_assignment((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1]));
          }
-#line 3581 "awkgram.c" /* yacc.c:1645  */
+#line 3588 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 124:
-#line 1586 "awkgram.y" /* yacc.c:1645  */
+#line 1572 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = mk_assignment((yyvsp[-2]), list_create((yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3589 "awkgram.c" /* yacc.c:1645  */
+#line 3596 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 125:
-#line 1590 "awkgram.y" /* yacc.c:1645  */
+#line 1576 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3595 "awkgram.c" /* yacc.c:1645  */
+#line 3602 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 126:
-#line 1592 "awkgram.y" /* yacc.c:1645  */
+#line 1578 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3601 "awkgram.c" /* yacc.c:1645  */
+#line 3608 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 127:
-#line 1594 "awkgram.y" /* yacc.c:1645  */
+#line 1580 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3614,11 +3621,11 @@ regular_print:
                bcfree((yyvsp[0]));
                (yyval) = list_append((yyvsp[-2]), (yyvsp[-1]));
          }
-#line 3618 "awkgram.c" /* yacc.c:1645  */
+#line 3625 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 128:
-#line 1607 "awkgram.y" /* yacc.c:1645  */
+#line 1593 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[-2])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3635,11 +3642,11 @@ regular_print:
                        (yyval) = list_append(list_merge((yyvsp[-2]), 
(yyvsp[0])), (yyvsp[-1]));
                }
          }
-#line 3639 "awkgram.c" /* yacc.c:1645  */
+#line 3646 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 129:
-#line 1624 "awkgram.y" /* yacc.c:1645  */
+#line 1610 "awkgram.y" /* yacc.c:1645  */
     {
                if (do_lint_old)
                        warning_ln((yyvsp[-1])->source_line,
@@ -3649,91 +3656,91 @@ regular_print:
                (yyvsp[-1])->expr_count = 1;
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3653 "awkgram.c" /* yacc.c:1645  */
+#line 3660 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 130:
-#line 1634 "awkgram.y" /* yacc.c:1645  */
+#line 1620 "awkgram.y" /* yacc.c:1645  */
     {
                if (do_lint && (yyvsp[0])->lasti->opcode == Op_match_rec)
                        lintwarn_ln((yyvsp[-1])->source_line,
                                _("regular expression on right of comparison"));
                (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), 
(yyvsp[-1]));
          }
-#line 3664 "awkgram.c" /* yacc.c:1645  */
+#line 3671 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 131:
-#line 1641 "awkgram.y" /* yacc.c:1645  */
+#line 1627 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), 
(yyvsp[-1]), (yyvsp[0])); }
-#line 3670 "awkgram.c" /* yacc.c:1645  */
+#line 3677 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 132:
-#line 1643 "awkgram.y" /* yacc.c:1645  */
+#line 1629 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3676 "awkgram.c" /* yacc.c:1645  */
+#line 3683 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 133:
-#line 1648 "awkgram.y" /* yacc.c:1645  */
+#line 1634 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3682 "awkgram.c" /* yacc.c:1645  */
+#line 3689 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 134:
-#line 1650 "awkgram.y" /* yacc.c:1645  */
+#line 1636 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3688 "awkgram.c" /* yacc.c:1645  */
+#line 3695 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 135:
-#line 1652 "awkgram.y" /* yacc.c:1645  */
+#line 1638 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[0]);
          }
-#line 3697 "awkgram.c" /* yacc.c:1645  */
+#line 3704 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 136:
-#line 1660 "awkgram.y" /* yacc.c:1645  */
+#line 1646 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3703 "awkgram.c" /* yacc.c:1645  */
+#line 3710 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 137:
-#line 1662 "awkgram.y" /* yacc.c:1645  */
+#line 1648 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3709 "awkgram.c" /* yacc.c:1645  */
+#line 3716 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 138:
-#line 1667 "awkgram.y" /* yacc.c:1645  */
+#line 1653 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3715 "awkgram.c" /* yacc.c:1645  */
+#line 3722 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 139:
-#line 1669 "awkgram.y" /* yacc.c:1645  */
+#line 1655 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3721 "awkgram.c" /* yacc.c:1645  */
+#line 3728 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 140:
-#line 1674 "awkgram.y" /* yacc.c:1645  */
+#line 1660 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3727 "awkgram.c" /* yacc.c:1645  */
+#line 3734 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 141:
-#line 1676 "awkgram.y" /* yacc.c:1645  */
+#line 1662 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 3733 "awkgram.c" /* yacc.c:1645  */
+#line 3740 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 142:
-#line 1678 "awkgram.y" /* yacc.c:1645  */
+#line 1664 "awkgram.y" /* yacc.c:1645  */
     {
                int count = 2;
                bool is_simple_var = false;
@@ -3787,47 +3794,47 @@ regular_print:
                                max_args = count;
                }
          }
-#line 3791 "awkgram.c" /* yacc.c:1645  */
+#line 3798 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 144:
-#line 1737 "awkgram.y" /* yacc.c:1645  */
+#line 1723 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3797 "awkgram.c" /* yacc.c:1645  */
+#line 3804 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 145:
-#line 1739 "awkgram.y" /* yacc.c:1645  */
+#line 1725 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3803 "awkgram.c" /* yacc.c:1645  */
+#line 3810 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 146:
-#line 1741 "awkgram.y" /* yacc.c:1645  */
+#line 1727 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3809 "awkgram.c" /* yacc.c:1645  */
+#line 3816 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 147:
-#line 1743 "awkgram.y" /* yacc.c:1645  */
+#line 1729 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3815 "awkgram.c" /* yacc.c:1645  */
+#line 3822 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 148:
-#line 1745 "awkgram.y" /* yacc.c:1645  */
+#line 1731 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3821 "awkgram.c" /* yacc.c:1645  */
+#line 3828 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 149:
-#line 1747 "awkgram.y" /* yacc.c:1645  */
+#line 1733 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3827 "awkgram.c" /* yacc.c:1645  */
+#line 3834 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 150:
-#line 1749 "awkgram.y" /* yacc.c:1645  */
+#line 1735 "awkgram.y" /* yacc.c:1645  */
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline [var] < file'
@@ -3841,29 +3848,29 @@ regular_print:
                                _("non-redirected `getline' undefined inside 
END action"));
                (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), 
redirect_input);
          }
-#line 3845 "awkgram.c" /* yacc.c:1645  */
+#line 3852 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 151:
-#line 1763 "awkgram.y" /* yacc.c:1645  */
+#line 1749 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3854 "awkgram.c" /* yacc.c:1645  */
+#line 3861 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 152:
-#line 1768 "awkgram.y" /* yacc.c:1645  */
+#line 1754 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 3863 "awkgram.c" /* yacc.c:1645  */
+#line 3870 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 153:
-#line 1773 "awkgram.y" /* yacc.c:1645  */
+#line 1759 "awkgram.y" /* yacc.c:1645  */
     {
                if (do_lint_old) {
                    warning_ln((yyvsp[-1])->source_line,
@@ -3883,64 +3890,64 @@ regular_print:
                        (yyval) = list_append(list_merge(t, (yyvsp[0])), 
(yyvsp[-1]));
                }
          }
-#line 3887 "awkgram.c" /* yacc.c:1645  */
+#line 3894 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 154:
-#line 1798 "awkgram.y" /* yacc.c:1645  */
+#line 1784 "awkgram.y" /* yacc.c:1645  */
     {
                  (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), 
(yyvsp[-2])->redir_type);
                  bcfree((yyvsp[-2]));
                }
-#line 3896 "awkgram.c" /* yacc.c:1645  */
+#line 3903 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 155:
-#line 1804 "awkgram.y" /* yacc.c:1645  */
+#line 1790 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3902 "awkgram.c" /* yacc.c:1645  */
+#line 3909 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 156:
-#line 1806 "awkgram.y" /* yacc.c:1645  */
+#line 1792 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3908 "awkgram.c" /* yacc.c:1645  */
+#line 3915 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 157:
-#line 1808 "awkgram.y" /* yacc.c:1645  */
+#line 1794 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3914 "awkgram.c" /* yacc.c:1645  */
+#line 3921 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 158:
-#line 1810 "awkgram.y" /* yacc.c:1645  */
+#line 1796 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3920 "awkgram.c" /* yacc.c:1645  */
+#line 3927 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 159:
-#line 1812 "awkgram.y" /* yacc.c:1645  */
+#line 1798 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3926 "awkgram.c" /* yacc.c:1645  */
+#line 3933 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 160:
-#line 1814 "awkgram.y" /* yacc.c:1645  */
+#line 1800 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); }
-#line 3932 "awkgram.c" /* yacc.c:1645  */
+#line 3939 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 161:
-#line 1819 "awkgram.y" /* yacc.c:1645  */
+#line 1805 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 3940 "awkgram.c" /* yacc.c:1645  */
+#line 3947 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 162:
-#line 1823 "awkgram.y" /* yacc.c:1645  */
+#line 1809 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0])->opcode == Op_match_rec) {
                        (yyvsp[0])->opcode = Op_nomatch;
@@ -3972,11 +3979,11 @@ regular_print:
                        }
                }
           }
-#line 3976 "awkgram.c" /* yacc.c:1645  */
+#line 3983 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 163:
-#line 1855 "awkgram.y" /* yacc.c:1645  */
+#line 1841 "awkgram.y" /* yacc.c:1645  */
     {
                // Always include. Allows us to lint warn on
                // print "foo" > "bar" 1
@@ -3984,31 +3991,31 @@ regular_print:
                // print "foo" > ("bar" 1)
                (yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 1, 
sourceline));
          }
-#line 3988 "awkgram.c" /* yacc.c:1645  */
+#line 3995 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 164:
-#line 1863 "awkgram.y" /* yacc.c:1645  */
+#line 1849 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 3998 "awkgram.c" /* yacc.c:1645  */
+#line 4005 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 165:
-#line 1869 "awkgram.y" /* yacc.c:1645  */
+#line 1855 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = snode((yyvsp[-1]), (yyvsp[-3]));
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 4008 "awkgram.c" /* yacc.c:1645  */
+#line 4015 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 166:
-#line 1875 "awkgram.y" /* yacc.c:1645  */
+#line 1861 "awkgram.y" /* yacc.c:1645  */
     {
                static bool warned = false;
 
@@ -4021,45 +4028,45 @@ regular_print:
                if ((yyval) == NULL)
                        YYABORT;
          }
-#line 4025 "awkgram.c" /* yacc.c:1645  */
+#line 4032 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 169:
-#line 1890 "awkgram.y" /* yacc.c:1645  */
+#line 1876 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[-1])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 4034 "awkgram.c" /* yacc.c:1645  */
+#line 4041 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 170:
-#line 1895 "awkgram.y" /* yacc.c:1645  */
+#line 1881 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[-1])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1]));
          }
-#line 4043 "awkgram.c" /* yacc.c:1645  */
+#line 4050 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 171:
-#line 1900 "awkgram.y" /* yacc.c:1645  */
+#line 1886 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4051 "awkgram.c" /* yacc.c:1645  */
+#line 4058 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 172:
-#line 1904 "awkgram.y" /* yacc.c:1645  */
+#line 1890 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4059 "awkgram.c" /* yacc.c:1645  */
+#line 4066 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 173:
-#line 1908 "awkgram.y" /* yacc.c:1645  */
+#line 1894 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -4074,11 +4081,11 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 4078 "awkgram.c" /* yacc.c:1645  */
+#line 4085 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 174:
-#line 1923 "awkgram.y" /* yacc.c:1645  */
+#line 1909 "awkgram.y" /* yacc.c:1645  */
     {
                if ((yyvsp[0])->lasti->opcode == Op_push_i
                        && ((yyvsp[0])->lasti->memory->flags & STRING) == 0
@@ -4096,20 +4103,20 @@ regular_print:
                        (yyval) = list_append((yyvsp[0]), (yyvsp[-1]));
                }
          }
-#line 4100 "awkgram.c" /* yacc.c:1645  */
+#line 4107 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 175:
-#line 1944 "awkgram.y" /* yacc.c:1645  */
+#line 1930 "awkgram.y" /* yacc.c:1645  */
     {
                func_use((yyvsp[0])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[0]);
          }
-#line 4109 "awkgram.c" /* yacc.c:1645  */
+#line 4116 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 176:
-#line 1949 "awkgram.y" /* yacc.c:1645  */
+#line 1935 "awkgram.y" /* yacc.c:1645  */
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -4143,11 +4150,11 @@ regular_print:
                (yyval) = list_prepend((yyvsp[0]), t);
                at_seen = false;
          }
-#line 4147 "awkgram.c" /* yacc.c:1645  */
+#line 4154 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 177:
-#line 1986 "awkgram.y" /* yacc.c:1645  */
+#line 1972 "awkgram.y" /* yacc.c:1645  */
     {
                NODE *n;
 
@@ -4172,49 +4179,49 @@ regular_print:
                        (yyval) = list_append(t, (yyvsp[-3]));
                }
          }
-#line 4176 "awkgram.c" /* yacc.c:1645  */
+#line 4183 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 178:
-#line 2014 "awkgram.y" /* yacc.c:1645  */
+#line 2000 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 4182 "awkgram.c" /* yacc.c:1645  */
+#line 4189 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 179:
-#line 2016 "awkgram.y" /* yacc.c:1645  */
+#line 2002 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 4188 "awkgram.c" /* yacc.c:1645  */
+#line 4195 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 180:
-#line 2021 "awkgram.y" /* yacc.c:1645  */
+#line 2007 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 4194 "awkgram.c" /* yacc.c:1645  */
+#line 4201 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 181:
-#line 2023 "awkgram.y" /* yacc.c:1645  */
+#line 2009 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[-1]); }
-#line 4200 "awkgram.c" /* yacc.c:1645  */
+#line 4207 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 182:
-#line 2028 "awkgram.y" /* yacc.c:1645  */
+#line 2014 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = (yyvsp[0]); }
-#line 4206 "awkgram.c" /* yacc.c:1645  */
+#line 4213 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 183:
-#line 2030 "awkgram.y" /* yacc.c:1645  */
+#line 2016 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4214 "awkgram.c" /* yacc.c:1645  */
+#line 4221 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 184:
-#line 2037 "awkgram.y" /* yacc.c:1645  */
+#line 2023 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *ip = (yyvsp[0])->lasti;
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -4228,11 +4235,11 @@ regular_print:
                sub_counter++;  /* count # of dimensions */
                (yyval) = (yyvsp[0]);
          }
-#line 4232 "awkgram.c" /* yacc.c:1645  */
+#line 4239 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 185:
-#line 2054 "awkgram.y" /* yacc.c:1645  */
+#line 2040 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *t = (yyvsp[-1]);
                if ((yyvsp[-1]) == NULL) {
@@ -4246,31 +4253,31 @@ regular_print:
                        (yyvsp[0])->sub_count = count_expressions(&t, false);
                (yyval) = list_append(t, (yyvsp[0]));
          }
-#line 4250 "awkgram.c" /* yacc.c:1645  */
+#line 4257 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 186:
-#line 2071 "awkgram.y" /* yacc.c:1645  */
+#line 2057 "awkgram.y" /* yacc.c:1645  */
     {  (yyval) = (yyvsp[0]); }
-#line 4256 "awkgram.c" /* yacc.c:1645  */
+#line 4263 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 187:
-#line 2073 "awkgram.y" /* yacc.c:1645  */
+#line 2059 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_merge((yyvsp[-1]), (yyvsp[0]));
          }
-#line 4264 "awkgram.c" /* yacc.c:1645  */
+#line 4271 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 188:
-#line 2080 "awkgram.y" /* yacc.c:1645  */
+#line 2066 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[-1]); }
-#line 4270 "awkgram.c" /* yacc.c:1645  */
+#line 4277 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 189:
-#line 2085 "awkgram.y" /* yacc.c:1645  */
+#line 2071 "awkgram.y" /* yacc.c:1645  */
     {
                char *var_name = (yyvsp[0])->lextok;
 
@@ -4278,22 +4285,22 @@ regular_print:
                (yyvsp[0])->memory = variable((yyvsp[0])->source_line, 
var_name, Node_var_new);
                (yyval) = list_create((yyvsp[0]));
          }
-#line 4282 "awkgram.c" /* yacc.c:1645  */
+#line 4289 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 190:
-#line 2093 "awkgram.y" /* yacc.c:1645  */
+#line 2079 "awkgram.y" /* yacc.c:1645  */
     {
                char *arr = (yyvsp[-1])->lextok;
                (yyvsp[-1])->memory = variable((yyvsp[-1])->source_line, arr, 
Node_var_new);
                (yyvsp[-1])->opcode = Op_push_array;
                (yyval) = list_prepend((yyvsp[0]), (yyvsp[-1]));
          }
-#line 4293 "awkgram.c" /* yacc.c:1645  */
+#line 4300 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 191:
-#line 2103 "awkgram.y" /* yacc.c:1645  */
+#line 2089 "awkgram.y" /* yacc.c:1645  */
     {
                INSTRUCTION *ip = (yyvsp[0])->nexti;
                if (ip->opcode == Op_push
@@ -4305,85 +4312,85 @@ regular_print:
                } else
                        (yyval) = (yyvsp[0]);
          }
-#line 4309 "awkgram.c" /* yacc.c:1645  */
+#line 4316 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 192:
-#line 2115 "awkgram.y" /* yacc.c:1645  */
+#line 2101 "awkgram.y" /* yacc.c:1645  */
     {
                (yyval) = list_append((yyvsp[-1]), (yyvsp[-2]));
                if ((yyvsp[0]) != NULL)
                        mk_assignment((yyvsp[-1]), NULL, (yyvsp[0]));
          }
-#line 4319 "awkgram.c" /* yacc.c:1645  */
+#line 4326 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 193:
-#line 2124 "awkgram.y" /* yacc.c:1645  */
+#line 2110 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->opcode = Op_postincrement;
          }
-#line 4327 "awkgram.c" /* yacc.c:1645  */
+#line 4334 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 194:
-#line 2128 "awkgram.y" /* yacc.c:1645  */
+#line 2114 "awkgram.y" /* yacc.c:1645  */
     {
                (yyvsp[0])->opcode = Op_postdecrement;
          }
-#line 4335 "awkgram.c" /* yacc.c:1645  */
+#line 4342 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 195:
-#line 2132 "awkgram.y" /* yacc.c:1645  */
+#line 2118 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 4341 "awkgram.c" /* yacc.c:1645  */
+#line 4348 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 196:
-#line 2136 "awkgram.y" /* yacc.c:1645  */
+#line 2122 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); }
-#line 4347 "awkgram.c" /* yacc.c:1645  */
+#line 4354 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 197:
-#line 2140 "awkgram.y" /* yacc.c:1645  */
+#line 2126 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4353 "awkgram.c" /* yacc.c:1645  */
+#line 4360 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 198:
-#line 2144 "awkgram.y" /* yacc.c:1645  */
+#line 2130 "awkgram.y" /* yacc.c:1645  */
     { yyerrok; }
-#line 4359 "awkgram.c" /* yacc.c:1645  */
+#line 4366 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 199:
-#line 2149 "awkgram.y" /* yacc.c:1645  */
+#line 2135 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = NULL; }
-#line 4365 "awkgram.c" /* yacc.c:1645  */
+#line 4372 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 201:
-#line 2154 "awkgram.y" /* yacc.c:1645  */
+#line 2140 "awkgram.y" /* yacc.c:1645  */
     { yyerrok; }
-#line 4371 "awkgram.c" /* yacc.c:1645  */
+#line 4378 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 202:
-#line 2158 "awkgram.y" /* yacc.c:1645  */
+#line 2144 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4377 "awkgram.c" /* yacc.c:1645  */
+#line 4384 "awkgram.c" /* yacc.c:1645  */
     break;
 
   case 203:
-#line 2162 "awkgram.y" /* yacc.c:1645  */
+#line 2148 "awkgram.y" /* yacc.c:1645  */
     { (yyval) = (yyvsp[0]); yyerrok; }
-#line 4383 "awkgram.c" /* yacc.c:1645  */
+#line 4390 "awkgram.c" /* yacc.c:1645  */
     break;
 
 
-#line 4387 "awkgram.c" /* yacc.c:1645  */
+#line 4394 "awkgram.c" /* yacc.c:1645  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4610,7 +4617,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 2164 "awkgram.y" /* yacc.c:1903  */
+#line 2150 "awkgram.y" /* yacc.c:1903  */
 
 
 struct token {
@@ -5050,15 +5057,9 @@ mk_program()
                        else
                                cp = list_merge(begin_block, end_block);
 
-
-                       if (outer_comment != NULL) {
-                               (void) list_prepend(cp, outer_comment);
-                               outer_comment = NULL;
-                       }
-
-                       if (trailing_comment != NULL) {
-                               (void) list_append(cp, trailing_comment);
-                               trailing_comment = NULL;
+                       if (interblock_comment != NULL) {
+                               (void) list_append(cp, interblock_comment);
+                               interblock_comment = NULL;
                        }
 
                        (void) list_append(cp, ip_atexit);
@@ -5093,6 +5094,16 @@ mk_program()
        if (begin_block != NULL)
                cp = list_merge(begin_block, cp);
 
+       if (outer_comment != NULL) {
+               cp = list_merge(list_create(outer_comment), cp);
+               outer_comment = NULL;
+       }
+
+       if (interblock_comment != NULL) {
+               (void) list_append(cp, interblock_comment);
+               interblock_comment = NULL;
+       }
+
        (void) list_append(cp, ip_atexit);
        (void) list_append(cp, instruction(Op_stop));
 
@@ -8005,6 +8016,10 @@ append_rule(INSTRUCTION *pattern, INSTRUCTION *action)
                (rp + 2)->first_line = pattern->source_line;
                (rp + 2)->last_line = lastline;
                ip = list_prepend(action, rp);
+               if (interblock_comment != NULL) {
+                       ip = list_prepend(ip, interblock_comment);
+                       interblock_comment = NULL;
+               }
        } else {
                rp = bcalloc(Op_rule, 3, 0);
                rp->in_rule = Rule;
@@ -8030,14 +8045,20 @@ append_rule(INSTRUCTION *pattern, INSTRUCTION *action)
                                (rp + 2)->last_line = find_line(pattern, 
LAST_LINE);
                                action = 
list_create(instruction(Op_K_print_rec));
                                if (do_pretty_print)
-                                       (void) list_prepend(action, 
instruction(Op_exec_count));
+                                       action = list_prepend(action, 
instruction(Op_exec_count));
                        } else
                                (rp + 2)->last_line = lastline;
 
                        if (do_pretty_print) {
-                               (void) list_prepend(pattern, 
instruction(Op_exec_count));
-                               (void) list_prepend(action, 
instruction(Op_exec_count));
+                               pattern = list_prepend(pattern, 
instruction(Op_exec_count));
+                               action = list_prepend(action, 
instruction(Op_exec_count));
+                       }
+
+                       if (interblock_comment != NULL) {       // was after 
previous action
+                               pattern = list_prepend(pattern, 
interblock_comment);
+                               interblock_comment = NULL;
                        }
+
                        (rp + 1)->firsti = action->nexti;
                        (rp + 1)->lasti = tp;
                        ip = list_append(
diff --git a/awkgram.y b/awkgram.y
index 55b4eb8..4d3e44e 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -1,25 +1,4 @@
 /*
-TODO:
--- Handle comments outside blocks
--- Put together a big test file
-DONE:
--- Get comments from all instances of nls
--- After , in parameter list
--- After ? and :
--- switch statement
--- After , in a range expression in a pattern
--- After && and ||
--- case part of switch statement
--- for(;;) statement
--- for(iggy in foo) statement
--- Comments after commas in expressions lists in print/f and function calls
--- Handle EOL comments on a closing right brace
--- Get comments from all instances of opt_nls
--- Get comments from all instances of l_brace
--- Get comments from all instances of r_brace
--- Review statement lists and handling of statement_term
-*/
-/*
  * awkgram.y --- yacc/bison parser
  */
 
@@ -81,6 +60,8 @@ static char *tokexpand(void);
 static NODE *set_profile_text(NODE *n, const char *str, size_t len);
 static INSTRUCTION *trailing_comment;
 static INSTRUCTION *outer_comment;
+static INSTRUCTION *interblock_comment;
+static INSTRUCTION *pending_comment;
 
 #define instruction(t) bcalloc(t, 1, 0)
 
@@ -238,11 +219,10 @@ program
        | program nls
          {
                if ($2 != NULL) {
-                       if ($1 == NULL) {
+                       if ($1 == NULL)
                                outer_comment = $2;
-                       } else {
-                               trailing_comment = $2;
-                       }
+                       else
+                               interblock_comment = $2;
                }
                $$ = $1;
          }
@@ -265,6 +245,10 @@ rule
        : pattern action
          {
                (void) append_rule($1, $2);
+               if (pending_comment != NULL) {
+                       interblock_comment = pending_comment;
+                       pending_comment = NULL;
+               }
                first_rule = false;
          }
        | pattern statement_term
@@ -434,11 +418,11 @@ action
 
                if ($3 != NULL && $5 != NULL) {
                        merge_comments($3, $5);
-                       trailing_comment = $3;
+                       pending_comment = $3;
                } else if ($3 != NULL) {
-                       trailing_comment = $3;
+                       pending_comment = $3;
                } else if ($5 != NULL) {
-                       trailing_comment = $5;
+                       pending_comment = $5;
                }
 
                $$ = ip;
@@ -571,10 +555,12 @@ statements
                                $$ = list_merge($1, $2);
                        }
                }
+
                if (trailing_comment != NULL) {
                        $$ = list_append($$, trailing_comment);
                        trailing_comment = NULL;
                }
+
                yyerrok;
          }
        | statements error
@@ -2600,15 +2586,9 @@ mk_program()
                        else
                                cp = list_merge(begin_block, end_block);
 
-
-                       if (outer_comment != NULL) {
-                               (void) list_prepend(cp, outer_comment);
-                               outer_comment = NULL;
-                       }
-
-                       if (trailing_comment != NULL) {
-                               (void) list_append(cp, trailing_comment);
-                               trailing_comment = NULL;
+                       if (interblock_comment != NULL) {
+                               (void) list_append(cp, interblock_comment);
+                               interblock_comment = NULL;
                        }
 
                        (void) list_append(cp, ip_atexit);
@@ -2643,6 +2623,16 @@ mk_program()
        if (begin_block != NULL)
                cp = list_merge(begin_block, cp);
 
+       if (outer_comment != NULL) {
+               cp = list_merge(list_create(outer_comment), cp);
+               outer_comment = NULL;
+       }
+
+       if (interblock_comment != NULL) {
+               (void) list_append(cp, interblock_comment);
+               interblock_comment = NULL;
+       }
+
        (void) list_append(cp, ip_atexit);
        (void) list_append(cp, instruction(Op_stop));
 
@@ -5555,6 +5545,10 @@ append_rule(INSTRUCTION *pattern, INSTRUCTION *action)
                (rp + 2)->first_line = pattern->source_line;
                (rp + 2)->last_line = lastline;
                ip = list_prepend(action, rp);
+               if (interblock_comment != NULL) {
+                       ip = list_prepend(ip, interblock_comment);
+                       interblock_comment = NULL;
+               }
        } else {
                rp = bcalloc(Op_rule, 3, 0);
                rp->in_rule = Rule;
@@ -5580,14 +5574,20 @@ append_rule(INSTRUCTION *pattern, INSTRUCTION *action)
                                (rp + 2)->last_line = find_line(pattern, 
LAST_LINE);
                                action = 
list_create(instruction(Op_K_print_rec));
                                if (do_pretty_print)
-                                       (void) list_prepend(action, 
instruction(Op_exec_count));
+                                       action = list_prepend(action, 
instruction(Op_exec_count));
                        } else
                                (rp + 2)->last_line = lastline;
 
                        if (do_pretty_print) {
-                               (void) list_prepend(pattern, 
instruction(Op_exec_count));
-                               (void) list_prepend(action, 
instruction(Op_exec_count));
+                               pattern = list_prepend(pattern, 
instruction(Op_exec_count));
+                               action = list_prepend(action, 
instruction(Op_exec_count));
                        }
+
+                       if (interblock_comment != NULL) {       // was after 
previous action
+                               pattern = list_prepend(pattern, 
interblock_comment);
+                               interblock_comment = NULL;
+                       }
+
                        (rp + 1)->firsti = action->nexti;
                        (rp + 1)->lasti = tp;
                        ip = list_append(
diff --git a/test/ChangeLog b/test/ChangeLog
index 918d695..02b9fb5 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,5 +1,9 @@
 2018-11-24         Arnold D. Robbins     <address@hidden>
 
+       * profile5.ok: Updated after code change.
+
+2018-11-24         Arnold D. Robbins     <address@hidden>
+
        * spacere.awk: Move setting of LC_ALL=C out to ...
        * Makefile.am (spacere): ... here. Added test.
        Per request from Eli Zaretskii to help porting to MinGW.
diff --git a/test/profile5.ok b/test/profile5.ok
index c8abf1f..7ac2402 100644
--- a/test/profile5.ok
+++ b/test/profile5.ok
@@ -2,8 +2,8 @@ BEGIN {
        _addlib("_BASE")
 }
 
-#___________________________________________________________________________________
-BEGIN {
+##########################################################
+BEGIN {        
############################################################################
        BINMODE = "rw"
        SUBSEP = "\000"
        _NULARR[""]
@@ -15,33 +15,39 @@ BEGIN {
        _addlib("_sYS")
 }
 
+################################################################
+#_____________________________________________________________________________
 BEGIN {
        _addlib("_rEG")
 }
 
+################################################################
+#_____________________________________________________________________________
 BEGIN {
        _addlib("_INSTRUC")
 }
 
-#___________________________________________________________________________________
-BEGIN {
+######################################################
+BEGIN {        
#############################################################################
        _delay_perfmsdelay = 11500
 }
 
+#___________________________________________________________________________________
 BEGIN {
        _addlib("_ARR")
 }
 
-#___________________________________________________________________________________
+##########################################################
 BEGIN {
 }
 
-BEGIN {        
###########################################################################
+###########################################################################
+BEGIN {
        _addlib("_EXTFN")
 }
 
-#___________________________________________________________________________________
-BEGIN {
+########################################################
+BEGIN {        
#############################################################################
        delete _XCHR
        delete _ASC
        delete _CHR
@@ -66,7 +72,7 @@ BEGIN {
                _QSTR[_CHR[i]] = _QSTRQ[_CHR[i]]
        }
        _QSTR["\\"] = "\\\\"    #; _QSTR["\""]="\\\""
-       
#_____________________________________________________________________________
+#_____________________________________________________________________________
        _CHR["CR"] = "\r"
        _CHR["EOL"] = "\r\n"
        _CHR["EOF"] = "\032"
@@ -96,22 +102,24 @@ BEGIN {
        _gensubfn("\\^$.()|{,}[-]?+*", ".", "_rexpstr_i0")
 }
 
+#_____________________________________________________________________________
 BEGIN {
        _addlib("_SYSIO")
 }
 
-#___________________________________________________________________________________
-BEGIN {
+#########################################################
+BEGIN {        
#############################################################################
        _SYS_STDCON = "CON"
        _CON_WIDTH = match(_cmd("MODE " _SYS_STDCON " 2>NUL"), /Columns:[ 
\t]*([0-9]+)/, A) ? strtonum(A[1]) : 80
 }
 
+#___________________________________________________________________________________
 BEGIN {
        _addlib("_FILEIO")
 }
 
-#___________________________________________________________________________________
-BEGIN {
+#######################################################
+BEGIN {        
#############################################################################
        if (_SYS_STDOUT == "") {
                _SYS_STDOUT = "/dev/stdout"
        }
@@ -128,12 +136,13 @@ BEGIN {
        }
 }
 
+#___________________________________________________________________________________
 BEGIN {
        _addlib("_tOBJ")
 }
 
-#___________________________________________________________________________________
-BEGIN {
+#########################################################
+BEGIN {        
#############################################################################
        _tInBy = "\212._tInBy"
        _tgenuid_init()
        _UIDS[""]
@@ -160,12 +169,13 @@ BEGIN {
        delete _TMP1[""]
 }
 
+#___________________________________________________________________________________
 BEGIN {
        _addlib("_ERRLOG")
 }
 
-#___________________________________________________________________________________
-BEGIN {
+########################################################
+BEGIN {        
#############################################################################
        if (_gawk_scriptlevel < 1) {
                _ERRLOG_TF = 1
                _ERRLOG_VF = 1
@@ -177,32 +187,39 @@ BEGIN {
        }
 }
 
+#___________________________________________________________________________________
 BEGIN {
        _addlib("_SHORTCUT")
 }
 
-#___________________________________________________________________________________
+#####################################################
 BEGIN {
        _shortcut_init()
 }
 
-BEGIN {        #########################################################
+#########################################################
+BEGIN {
        _addlib("_eXTFN")
 }
 
-#___________________________________________________________________________________
+########################################################
 BEGIN {
        _extfn_init()
 }
 
-BEGIN {        ############################################################
+############################################################
+BEGIN {
        _addlib("_sHARE")
 }
 
+##############################################################
+#_____________________________________________________________________________
 BEGIN {
        _addlib("_FILEVER")
 }
 
+############################################################
+#_____________________________________________________________________________
 BEGIN {
        _addlib("_DS")  
###############################################################################
        _PRODUCT_NAME = "Deployment Solution Control"
@@ -211,14 +228,14 @@ BEGIN {
        _PRODUCT_FILENAME = "_main.ewk"
 }
 
-# problem configuring uid by array charset: i can' understand what format of 
the array: possibly - remove array support
-# after removal of array format detection: there is unfinished conflicts: it 
is possible to totally remove array uid-gen initialization
-
-#_____________________________________________________
+#____________________________________________________________________________
 BEGIN {
        _inituidefault()
 }
 
+# problem configuring uid by array charset: i can' understand what format of 
the array: possibly - remove array support
+# after removal of array format detection: there is unfinished conflicts: it 
is possible to totally remove array uid-gen initialization
+
 #_____________________________________________________
 BEGIN {
        _initfilever()
@@ -229,29 +246,33 @@ BEGIN {
        _initshare()
 }
 
-#_________________________________________________________________
+#___________________________________________________________________________________
+####################################################################################
+
+#_____________________________________________________________________________
 BEGIN {
        _inspass(_IMPORT, "_import_data")
 }
 
-#_______________________________________________
+#_________________________________________________________________
 BEGIN {
        _TEND[_ARRLEN] = 0
        _TYPEWORD = "_TYPE"
 }
 
-#_______________________________________________
+#_____________________________________________________________________________
 BEGIN {
        _ARRLEN = "\032LEN"
        _ARRPTR = "\032PTR"
        _ARRSTR = ""
 }
 
-#_____________________________________________________
+#_______________________________________________________________________
 BEGIN {
        _getperf_fn = "_nop"
 }
 
+#___________________________________________________________
 BEGIN {
        _datablock_length = 262144
 }
@@ -271,18 +292,8 @@ BEGIN {
        _initsys()
 }
 
-#_________________________________________________________________________________________
-##########################################################################################
-
-
-
-
-
-
-
-#BootDevice               BuildNumber  BuildType            Caption            
                          CodeSet  CountryCode  CreationClassName      
CSCreationClassName   CSDVersion      CSName  CurrentTimeZone  
DataExecutionPrevention_32BitApplications  DataExecutionPrevention_Available  
DataExecutionPrevention_Drivers  DataExecutionPrevention_SupportPolicy  Debug  
Description  Distributed  EncryptionLevel  ForegroundApplicationBoost  
FreePhysicalMemory  FreeSpaceInPagingFiles  FreeVirtualMemory  InstallDate      
          LargeSystemCache  LastBootUpTime             LocalDateTime            
  Locale  Manufacturer           MaxNumberOfProcesses  MaxProcessMemorySize  
MUILanguages  Name                                                              
                    NumberOfLicensedUsers  NumberOfProcesses  NumberOfUsers  
OperatingSystemSKU  Organization  OSArchitecture  OSLanguage  OSProductSuite  
OSType  OtherTypeDescription  PAEEnabled  PlusProductID  PlusVersionNumber  
Primary 
  ProductType  RegisteredUser  SerialNumber             ServicePackMajorVersion 
 ServicePackMinorVersion  SizeStoredInPagingFiles  Status  SuiteMask  
SystemDevice             SystemDirectory      SystemDrive  TotalSwapSpaceSize  
TotalVirtualMemorySize  TotalVisibleMemorySize  Version   WindowsDirectory
-#\Device\HarddiskVolume1  7601         Multiprocessor Free  Microsoft Windows 
Server 2008 R2 Enterprise  1252     1            Win32_OperatingSystem  
Win32_ComputerSystem  Service Pack 1  CPU     180              TRUE             
                          TRUE                               TRUE               
              3                                      FALSE               FALSE  
      256              0                           6925316             33518716 
               41134632           20110502192745.000000+180                    
20130426120425.497469+180  20130510134606.932000+180  0409    Microsoft 
Corporation  -1                    8589934464            {"en-US"}     
Microsoft Windows Server 2008 R2 Enterprise 
|C:\Windows|\Device\Harddisk0\Partition2  0                      116            
    2              10                                64-bit          1033       
 274             18                                                             
             TRUE    
  3            Windows User    55041-507-2389175-84833  1                       
 0                        33554432                 OK      274        
\Device\HarddiskVolume2  C:\Windows\system32  C:                               
50311020                16758448                6.1.7601  C:\Windows
-BEGIN {
+#_____________________________________________________
+BEGIN {        
############################################################################
        a = ENVIRON["EGAWK_CMDLINE"]
        gsub(/^[ \t]*/, "", a)
        a = _lib_CMDLN(a)
@@ -302,13 +313,12 @@ BEGIN {
 }
 
 #_____________________________________________________________________________
-END {
+END {  ########################################################################
        _EXIT()
 }
 
-#_______________________________________________________________________
-########################################################################
-END {
+#_____________________________________________________
+END {  
###############################################################################
        if (_gawk_scriptlevel < 1) {
                close(_errlog_file)
                p = _Zimport(_rdfile(_errlog_file), _N())
@@ -318,28 +328,8 @@ END {
        }
 }
 
-##########################################################################################
-# PUBLIC:
-#_____________________________________________________________________________
-# _rFBRO(ptr)                          - Return ptr of first-bro.              
                [TESTED]
-#                                              If !ptr then returns "".
-#_____________________________________________________________________________
-# _rLBRO(ptr)                          - Return ptr of last-bro.               
                [TESTED]
-#                                              If !ptr then returns "".
-#_____________________________________________________________________________
-# _rQBRO(ptr)                          - Returns brothers total quantity.      
                [TESTED]
-#                                              If !ptr then returns "".
-END {
-       if (_gawk_scriptlevel < 1) {
-               if (! _fileio_notdeltmpflag) {
-                       _FILEIO_TMPATHS[_FILEIO_TMPRD]
-                       _Foreach(_FILEIO_TMPATHS, "_uninit_del")
-               }
-       }
-}
-
-#___________________________________________________________________________________
-####################################################################################
+#_______________________________________________________________________
+########################################################################
 
 
 
@@ -356,301 +346,76 @@ END {
 
 
 
-#___________________________________________________________________________________
-# fn   _dirtree(array,pathmask)
-#
-#      Return in `array' file tree from pathmask:
-#              array["file.filerdne"]="size date time"
-#              array["subdir.filerd"]["file.filerdne"]="size date time"
-#              array["subdir.filerd"]["file.filerd"][...]
-#
-#              The array will be cleared before any action. Function return 
pathmask w/o ltabspc and rtabspc.
-#___________________________________________________________________________________
 
 
 
 
 
-# OK:          change internal function's names to: w\o "_"
-# OK:          FLENGTH: should cover r-spcs
-# OK:          optimize REXP
-# OK:          add new symbols to dir/file names ( ! and + )
-# OK:          create _getfilepath()
-# OK:          del - conflict with WROOTDIR (do not update it)
-# OK:          dir/del - support for filemask ( * and ? )
-# OK:          how to define code injections: header\ender; and HANDLERS
-# OK:          units in header\ender? conline division...
-# OK:          _FILEPATH problem: it will not been defined at the moment when 
subscript0 starts - at the start TMPRD="_tmp"
-# OK:          del:    if del("dir\\") - then all ok except it NOT deleted 
"dir\\"     - _del function removed(renamed to __del)
-# OK:          tmpdirs: it delete only autotmp dir and only from script0
-# OK:          MICROTEST:      global testing of filepath (UNC! CORRECT 
RESULTS! )
-#      question about cache: did new just now generated absolute filepath 
cached in FILECACHE? its seems like NO
-# check _untmp: CONFLICT: if file or dir from autotmp dir will be untmp then 
it anyway will be deleted; but file or dir from other point never be deleted 
anyway - so what is the point of untmp?????
-#ERRLOG:       _setmpath:      warning!!!!!
 
-#___________________________________________________________________________________
-####################################################################################
-# PUBLIC:
-#___________________________________________________________________________________
-#
-#      fn      _rdfile(_filepath)
-#
-#              Read and return data from file specified in _filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      Function read and return data from file. No any changes 
in data occured.
-#                      Function use _filerdne function internally. If some 
syntax error
-#                              found in _filepath then function return "".
-#                      If some error occured while reading data from file then 
fuction return ""
-#                              and error-text is in ERRNO(and no close-file 
action will be occured!).
-#                      If reading data completed successfully then function 
try to close
-#                              file and if while closing file some error 
occured then function
-#                              returns "" and error-text is in ERRNO.
-#                      Otherwise function returns readed data.
-#_____________________________________________________________________________
-#
-#      fn      _wrfile(_filepath,_data)
-#
-#              Write data into file specified in _filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      Function write _data to file. No any changes in data 
occured.
-#                      Function use _filerdne function internally. If some 
syntax error
-#                              found in _filepath then function return "".
-#                      If some error occured while writing data to file then 
fuction return ""
-#                              and error-text is in ERRNO(and no close-file 
action will be occured!).
-#                      If writing data completed successfully then function 
try to close
-#                              file and if while closing file some error 
occured then function
-#                              returns "" and error-text is in ERRNO.
-#                      Otherwise function returns _filepath(re-processed).
-#___________________________________________________________________________________
-#
-#      fn      _filepath(_filepath)
-#
-#              Return re-processed root-dir-name-ext of _filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#_____________________________________________________________________________
-#
-#      fn      _filerdne(_filepath)
-#
-#              Return re-processed root-dir-filename of _filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      Function return result only if in _filepath present 
file-name(name
-#                              and/or extension) - otherwise its return "".
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#_____________________________________________________________________________
-#
-#      fn      _filerdn(_filepath)
-#
-#              Return re-processed root-dir-name of _filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      Function return result only if in _filepath present 
name field -
-#                              - otherwise its return "".
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#_____________________________________________________________________________
-#
-#      fn      _filerd(_filepath)
-#
-#              Return re-processed root-dir of _filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#_____________________________________________________________________________
-#
-#      fn      _filer(_filepath)
-#
-#              Return re-processed root of _filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#_____________________________________________________________________________
-#
-#      fn      _filed(_filepath)
-#
-#              Return re-processed dir of _filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      There is only one case when dir string can be =="" - 
when in
-#                              _filepath specified unmounted drive(MS-format) 
and from-
-#                              current-location address used(like Z:file.ext). 
In this
-#                              case no rootdir-cache-record will be created.
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#_____________________________________________________________________________
-#      fn      _filene(_filepath)
-#
-#              Return re-processed name-ext of _filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      Function return result only if in _filepath present 
file-name(name
-#                              and/or extension) - otherwise its return "".
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#_____________________________________________________________________________
-#
-#      fn      _filen(_filepath)
-#
-#              Return re-processed name of _filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      Function return result only if in _filepath present 
name field -
-#                              - otherwise its return "".
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#_____________________________________________________________________________
-#
-#      fn      _file(_filepath)
-#
-#              Return re-processed ext of _filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      Function return result only if in _filepath present ext 
field -
-#                              - otherwise its return "".
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#___________________________________________________________________________________
-#
-#      fn      _dir(_ARR,_filepathmask)
-#
-#              Get file-/folder-list of root-folder of _filepathmask.
-#                      If _filepathmask=="" then no action occured and return 
"".
-#                      _filepathmask can contain symbols like `*' and `?' as 
like
-#                              its used in `dir'-shell command.
-#                      Function gets file-/folder-list of specified 
root-dir-_filepathmask
-#                              and return this list in array _ARR - where each 
element:
-#
-#                      index - is the _filepath of file-or-folder name-ext
-#                      value - contains 3 fields separated by " ":
-#                              1. =="D" if this is folder
-#                                 ==/[0-9]+/ if this is file - size of file in 
bytes
-#                              2. ==date-of-creation of file or folder
-#                              3. ==time-of-creation of file or folder
-#
-#                      Function returns quantity of items in ARR.
-#___________________________________________________________________________________
-#
-#      fn      _filexist(_filepath)
-#
-#              Test if file or path or drive specified in _filepath is exist.
-#                              If _filepath=="" then no action occured and 
return "".
-#                              If some syntax error found in _filepath then 
function return ""
-#                      (and NO _filepath-cache-record will be created!).
-#                              Function returns _filepath if _filepath is 
exist. Otherwise
-#                      function return 0.
-#_____________________________________________________________________________
-#
-#      fn      _filenotexist(_filepath)
-#
-#              Test if file or path or drive specified in _filepath is not 
exist.
-#                      If _filepath=="" then no action occured and return "".
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#                      Function returns 1 if _filepath is not exist. Otherwise 
function
-#                              return 0.
-#_____________________________________________________________________________
-#
-#      fn      _newdir(_filepath)
-#
-#              Create path specified in root-dir-_filepath.
-#                      If _filepath=="" then no action occured and return "".
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#                      Function returns root-dir of _filepath.
 #_______________________________________________________________________
+#      _N(arr\str\mpuptr,val) \ _n(arr\str\mpuptr,val)
+#              This functions create new object and return ptr.
+#              _n() - creates object from list of deleted objects or if it's 
empty create new one, while _N() always create new one
+#              It is strongly recommended to use _N() for the objects that 
have some data outside of standart object arrays. Or - make routines
+#              that will clear outsided object data in case if object deleting.
 #
-#      fn      _newdir(_filepath)
-#
-#              Create path specified in root-dir-_filepath. If this folder
-#              already exist then it will be completely cleared.
-#                      If _filepath=="" then no action occured and return "".
-#                      If some syntax error found in _filepath then function 
return ""
-#                              (and NO _filepath-cache-record will be 
created!).
-#                      Function returns root-dir of _filepath.
-#___________________________________________________________________________________
-#
-#      fn      _getmpfile(_filepath,_currfilepath)
-#
-#              Return ....
+#                      IN:             arr\str\mpu,val - (both missed) just 
create obj and return ptr
+#                                      arr,val         - create object and 
write arr[ptr]=val
+#                                      str,val         - create object and 
write _[ptr][str]=val
+#                                      mpuptr          - NOT ALLOWED (val 
missed) create object and run MPU-code specified by mpuptr with created object 
ptr as primary parameter
+#                      MOD:            -
+#                      OUT:            -
+#                      RETURN: ptr                     - pointer to newly 
created object
+#_________________________________________________________________
+#      _tdel(ptr)
+#              This function exclude object from it's current structure and 
delete it. ptr can be later used by function: _n() for creating new object
+#              Also same story will occured with all chields and subchields of 
object specified by ptr.
+#              ??? What happened with linked py _ptr[ptr] objects ???
 #
-#_____________________________________________________________________________
+#                      IN:             ptr                     - pointer to 
object that will deleted
+#                      MOD:            -
+#                      OUT:            -
+#                      RETURN: undefined
+#_________________________________________________________________
+#      _isptr(ptr)
+#              This function checks: is ptr is the object pointer that is 
currently exist?
+#              Unescaped remained data will be in data of src_dst_ptr.
 #
-#      fn      _getmpdir(_filepath,_currfilepath)
+#                      IN:             ptr                     - string that 
will be tested
+#                      MOD:            -
+#                      OUT:            -
+#                      RETURN: undefined               - if ptr is not pointer 
to exist object
+#                                      ptr                     - if ptr is the 
pointer to exist object
+#_________________________________________________________________
+
+
+
+#_________________________________________________________________
 #
-#              Return ...
+# TO DESIGN:
 #
+# create basic objectapi interface support
+# modify everywhere checking ptr not by `if ( ptr )...', but by `if ( ptr in _ 
)...'
+# _TMP0, _TMP1 name change to something like _DATA name ???
+# think about redesigning routines for not depending if ptr is exist in 
tsysarrs: reason: performance\light code
+END {  
###############################################################################
+       if (_gawk_scriptlevel < 1) {
+               if (! _fileio_notdeltmpflag) {
+                       _FILEIO_TMPATHS[_FILEIO_TMPRD]
+                       _Foreach(_FILEIO_TMPATHS, "_uninit_del")
+               }
+       }
+}
+
 #_____________________________________________________________________________
-#
-#      Temporary files folder.
-#
-#              Temporary files folder location is defined by _FILEIO_TMPRD.
-#              If it wasn't been initialized before program run or not been 
initialized
-#                      by ENVIRON["TMPDIR"] then it will defined as the:
-#                              `current rootdir(stored in 
_FILEIO_RD)\programname.TMP'
-#                      In this case if its already exist then it will 
completely cleared when _FILEIO
-#                      library initialization processed.
-#                      And at the program uninitialization processed it will 
completely
-#                      cleared if _FILEIO_TMPCLRFLAG is true.
-#___________________________________________________________________________________
-#
-#      var     _FILEIO_RD (ENVIRON["CD"])
-#
-#              This var can be set before running program. It can contain path 
which
-#              will be used as default current dir while program run.
-#              If this var is set before program runs - then it will be 
refreshed by the
-#                      _filerd it will be used as default current dir while 
program run.
-#              If this var is not set before program runs - then ENVIRON["CD"] 
can also
-#                      set up default current dir while program run. If it set 
before program
-#                      begin then it will be refreshed by the _filerd - and 
also writed into
-#                      _FILEIO_RD.
-#              If both _FILEIO_RD and ENVIRON["CD"] are not set before program 
begins
-#                      then real current root\dir will be writed into both 
_FILEIO_RD and
-#                      ENVIRON["CD"] and it will be used as default current 
dir while program run.
-#
-#___________________________________________________________________________________
-#
-#      var     _FILEIO_TMPRD (ENVIRON["TMPRD"])
-#
-#              This var can be set before running program. It can contain path 
which
-#              will be used as default temporary files root-folder while 
program run.
-#              If this var is set before program runs - then it will be 
refreshed by the
-#                      _filerd - and also writed into ENVIRON["TMPRD"].
-#              If this var is not set before program runs - then 
ENVIRON["TMPRD"] can also
-#                      set up default temporary files root-folder while 
program run. If it set
-#                      before program begin then it will be refreshed by the 
_filerd - and
-#                      also writed into _FILEIO_TMPRD.
-#              If both _FILEIO_TMPRD and ENVIRON["TMPRD"] are not set before 
program begins
-#                      then new folder into path specified by the 
_FILEIO_RD(after its handling)
-#                      will be writed into both _FILEIO_TMPRD and 
ENVIRON["TMPRD"] and it
-#                      will be used as default temporary files root-folder 
while program run.
-#___________________________________________________________________________________
-#
-#      var     _FILEPATH
-#
-#              This var contain filepath of working script. It should be 
setting up externally.
-#
-#      var     _gawk_scriptlevel
-#___________________________________________________________________________________
-####################################################################################
-END {
+END {  
###############################################################################
        if (_constatstrln > 0) {
                _constat()
        }
 }
 
 
#___________________________________________________________________________________
-####################################################################################
-
-
-
 
-
-
-
-# make sure that stdout contain only expected characters
-# make sure that stderr contain only expected characters
-# redesign & reformat keys and its outputs
-# try different key combinations
-# add lib-specified to all libs
-
-#_______________________________________________________________________
 function W(p, p0, p1)
 {
        #####################################################
@@ -686,7 +451,6 @@ function W(p, p0, p1)
        return (_[p][p0] = p1)
 }
 
-##########################################################
 function _ARR(c, t, P)
 {
        switch (c) {
@@ -710,7 +474,6 @@ function _ARR(c, t, P)
        }
 }
 
-##########################################################
 function _BASE(c, t, P, A)
 {
        switch (c) {
@@ -752,13 +515,12 @@ function _BASE(c, t, P, A)
        }
 }
 
-#____________________________________________________________________________
 function _DS(c, t, P, a, A)
 {
        ######################################################
        switch (c) {
+       #___________________________________________________________
        case "_lib_CMDLN":
-               #___________________________________________________________
                return t
                #_____________________________________________________
        case "_lib_APPLY":
@@ -778,13 +540,11 @@ function _DS(c, t, P, a, A)
        }
 }
 
-#______________________________________________________________________________________________
 function _END()
 {
        
#################################################################################
 }
 
-########################################################
 function _ERRLOG(c, t, P, a, b, A)
 {
        switch (c) {
@@ -849,13 +609,11 @@ function _ERRLOG(c, t, P, a, b, A)
        }
 }
 
-#______________________________________________________________________________________________
 function _EXIT()
 {
        
################################################################################
 }
 
-########################################################
 function _EXTFN(c, t, P)
 {
        switch (c) {
@@ -879,7 +637,6 @@ function _EXTFN(c, t, P)
        }
 }
 
-#######################################################
 function _FILEIO(c, t, P, A)
 {
        switch (c) {
@@ -921,15 +678,13 @@ function _FILEIO(c, t, P, A)
        }
 }
 
-############################################################
 function _FILEVER(c, t, P, a, A)
 {
-       
#_____________________________________________________________________________
+       #################################################
        switch (c) {
+       #___________________________________________________________
        case "_lib_CMDLN":
-               #################################################
                return t
-               #___________________________________________________________
                #_____________________________________________________
        case "_lib_APPLY":
                return 
@@ -959,14 +714,12 @@ function _INIT(f)
 {
 }
 
-#___________________________________________________________________________________
 function _INITBASE()
 {
        ################################################################
        _egawk_utilpath = ENVIRON["EGAWK_PATH"] "BIN\\UTIL\\"
 }
 
-######################################################
 function _INSTRUC(c, t, P)
 {
        switch (c) {
@@ -990,13 +743,6 @@ function _INSTRUC(c, t, P)
        }
 }
 
-#___________________________________________________________________________________
-
-
-####################################################################################
-
-
-#_____________________________________________________________________________
 function _N(F, v, p)
 {
        ###########################################################
@@ -1007,7 +753,6 @@ function _N(F, v, p)
        return _nN_i0(_tgenuid(), F, v)
 }
 
-#####################################################
 function _SHORTCUT(c, t, P)
 {
        switch (c) {
@@ -1031,7 +776,6 @@ function _SHORTCUT(c, t, P)
        }
 }
 
-#______________________________________________________________________________________________
 function _START(t, i, A)
 {
        
#########################################################################
@@ -1140,7 +884,6 @@ function _START(t, i, A)
        _wrfile("report.txt", _report(pp))
 }
 
-#########################################################
 function _SYSIO(c, t, P)
 {
        switch (c) {
@@ -1164,8 +907,6 @@ function _SYSIO(c, t, P)
        }
 }
 
-#_______________________________________________________________________
-########################################################################
 function _W(p, A, v)
 {
        if (isarray(v)) {
@@ -1184,7 +925,6 @@ function _W(p, A, v)
        return v
 }
 
-#_______________________________________________________________________
 function _Zexparr(S, s, t, i)
 {
        ##############################################
@@ -1203,7 +943,6 @@ function _Zexparr(S, s, t, i)
        return t
 }
 
-#_________________________________________________________________
 function _Zexparr_i0(S, t, i)
 {
        for (i in S) {
@@ -1212,7 +951,6 @@ function _Zexparr_i0(S, t, i)
        return t
 }
 
-#_________________________________________________________________
 function _Zexparr_i1(t)
 {
        gsub(/\x1B/, "\033;", t)
@@ -1221,14 +959,12 @@ function _Zexparr_i1(t)
        return t
 }
 
-#_________________________________________________________________
 function _Zexparr_i2(t)
 {
        gsub(/\x10/, "\0330", t)
        return t
 }
 
-#_________________________________________________________________
 function _Zexparr_i3(t)
 {
        gsub(/\x1B/, "\033;", t)
@@ -1236,7 +972,6 @@ function _Zexparr_i3(t)
        return t
 }
 
-#_______________________________________________________________________
 function _Zimparr(D, t, A, B)
 {
        ##############################################
@@ -1249,13 +984,11 @@ function _Zimparr(D, t, A, B)
        }
 }
 
-#_________________________________________________________________
 function _Zimparr_i0(A, B, i)
 {
        return (i in A ? (A[i] B[i] _Zimparr_i0(A, B, i + 1)) : "")
 }
 
-#_________________________________________________________________
 function _Zimparr_i1(D, A, B, i, t, a, n)
 {
        while (i in B) {
@@ -1279,7 +1012,6 @@ function _Zimparr_i1(D, A, B, i, t, a, n)
        }
 }
 
-#_________________________________________________________________
 function _Zimparr_i2(t)
 {
        gsub(/\x1B\x31/, "\021", t)
@@ -1287,7 +1019,6 @@ function _Zimparr_i2(t)
        return t
 }
 
-#_____________________________________________________________________________
 function _Zimport(t, p, A, c, i, n, B)
 {
        ##############################################
@@ -1360,7 +1091,6 @@ function _accmpu(A, a, n)
        }
 }
 
-#_______________________________________________________________________
 function _add(S, sf, D, df)
 {
        ################################################
@@ -1384,7 +1114,6 @@ function _add(S, sf, D, df)
        }
 }
 
-#_________________________________________________________________
 function _addarr(D, S)
 {
        #############################################
@@ -1393,7 +1122,6 @@ function _addarr(D, S)
        }
 }
 
-#_____________________________________________________
 function _addarr_i0(D, S, i)
 {
        for (i in S) {
@@ -1409,7 +1137,6 @@ function _addarr_i0(D, S, i)
        }
 }
 
-#_______________________________________________________________________
 function _addarrmask(D, S, M)
 {
        #############################################
@@ -1438,18 +1165,12 @@ function _addarrmask(D, S, M)
        }
 }
 
-#___________________________________________________________________________________
-####################################################################################
-
-
-#_______________________________________________________________________
 function _addf(A, f)
 {
        #####################################################
        A["B"][""] = A["F"][A["B"][f] = A["B"][""]] = f
 }
 
-#___________________________________________________________
 function _addfile(f, d, a, b)
 {
        ##################################
@@ -1475,66 +1196,37 @@ function _addfile(f, d, a, b)
        return d
 }
 
-#_____________________________________________________________________________
 function _addlib(f)
 {
        ###########################################################
        _addf(_LIBAPI, f)
 }
 
-#___________________________________________________________________________________
-####################################################################################
-
-
-#_______________________________________________________________________
 function _addlist(A, v)
 {
        ##################################################
        A[++A[0]] = v
 }
 
-############################################
 function _bearray(A)
 {
-       #_______________________________________________________________________
+       ####################################################
        if (isarray(A) || (A == 0 && A == "")) {
-               return 1        
####################################################
+               return 1
        }
 }
 
-#_________________________________________________________________
 function _bframe(A, t, p)
 {
        ###########################################
        return _bframe_i0(A, t, p, A[""])
 }
 
-#___________________________________________________________
 function _bframe_i0(A, t, p, f)
 {
        return (f ? (_bframe_i0(A, t, p, A[f]) (@f(t, p))) : "")
 }
 
-# add to _dumparr: checking that if element is undefined
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#_______________________________________________________________________
 function _cfguid(p, optr, pfx, sfx, hstrcnt, lstrchr)
 {
        #################### 0 #
@@ -1560,7 +1252,6 @@ function _cfguid(p, optr, pfx, sfx, hstrcnt, lstrchr)
        return p
 }
 
-#_____________________________________________________
 function _cfguidchr(p, h, l, H, L)
 {
        if (_isptr(l)) {
@@ -1579,7 +1270,6 @@ function _cfguidchr(p, h, l, H, L)
        return _cfguidl(p, L, L)
 }
 
-#_______________________________________________
 function _cfguidh(p, H, L, hi, h, li)
 {
        for (hi = 1; hi in H; hi++) {
@@ -1601,7 +1291,6 @@ function _cfguidl(p, H, L, hi, h, hl, li)
        return hl
 }
 
-#____________________________________________________________________________________________________
 function _check(p)
 {
        
####################################################################################
@@ -1611,14 +1300,12 @@ function _check(p)
        _reg_check(p)
 }
 
-#_______________________________________________________________________
 function _chrline(t, ts, w, s)
 {
        #############################################
        return (t = " " _tabtospc(t, ts) (t ? t ~ /[ \t]$/ ? "" : " " : "")) 
_getchrln(s ? s : "_", (w ? w : _CON_WIDTH - 1) - length(t)) _CHR["EOL"]
 }
 
-#_____________________________________________________________________________
 function _cmd(c, i, A)
 {
        #######################################################
@@ -1636,7 +1323,6 @@ function _cmd(c, i, A)
        return RT
 }
 
-#_______________________________________________________________________
 function _cmparr(A0, A1, R, a, i)
 {
        ##########################################
@@ -1660,7 +1346,6 @@ function _cmparr(A0, A1, R, a, i)
        return a
 }
 
-#_____________________________________________________________________________
 function _con(t, ts, a, b, c, d, i, r, A, B)
 {
        ##########################################
@@ -1702,7 +1387,6 @@ function _con(t, ts, a, b, c, d, i, r, A, B)
        RLENGTH = d
 }
 
-#_______________________________________________________________________
 function _conin(t, a, b)
 {
        #################################################
@@ -1724,28 +1408,23 @@ function _conin(t, a, b)
        return t
 }
 
-#_______________________________________________________________________
 function _conl(t, ts)
 {
        ####################################################
        return _con(t (t ~ /\x0A$/ ? "" : _CHR["EOL"]), ts)
 }
 
-#_______________________________________________________________________
 function _conline(t, ts)
 {
        #################################################
        return _con(_chrline(t, ts))
 }
 
-#___________________________________________________________________________________
-####################################################################################
 function _conlq(t, ts)
 {
        return _conl("`" t "'", ts)
 }
 
-#_______________________________________________________________________
 function _constat(t, ts, ln, a)
 {
        ###########################################
@@ -1764,7 +1443,6 @@ function _constat(t, ts, ln, a)
        return _constatstr
 }
 
-#_________________________________________________________________
 function _constatgtstr(t, ln, a, b)
 {
        if (ln < 1) {
@@ -1782,7 +1460,6 @@ function _constatgtstr(t, ln, a, b)
        return (substr(t, 1, b = int((ln - 3) / 2)) "..." substr(t, a - ln + b 
+ 4))
 }
 
-#_______________________________________________________________________
 function _constatpop()
 {
        ##################################################
@@ -1792,7 +1469,6 @@ function _constatpop()
        return _constat("")
 }
 
-#_______________________________________________________________________
 function _constatpush(t, ts)
 {
        #############################################
@@ -1803,13 +1479,11 @@ function _constatpush(t, ts)
        return _constatstr
 }
 
-#___________________________________________________________________________________
 function _creport(p, t, f, z)
 {
        _[p]["REPORT"] = _[p]["REPORT"] _ln(t (f == "" ? "" : ": " f))
 }
 
-#_________________________________________________________________________________________
 function _defdir(pp, n, f, v, p)
 {
        #############################################################
@@ -1818,7 +1492,6 @@ function _defdir(pp, n, f, v, p)
        return p
 }
 
-#_________________________________________________________________________________________
 function _defdll(pp, n, rn, p)
 {
        ##############################################################
@@ -1828,7 +1501,6 @@ function _defdll(pp, n, rn, p)
        return p
 }
 
-#___________________________________________________________
 function _defescarr(D, r, S, i, c, t)
 {
        if (isarray(S)) {
@@ -1855,7 +1527,6 @@ function _defescarr(D, r, S, i, c, t)
        return t
 }
 
-#_________________________________________________________________________________________
 function _defile(pp, n, f, v, p)
 {
        #############################################################
@@ -1867,14 +1538,12 @@ function _defile(pp, n, f, v, p)
        return p
 }
 
-#_______________________________________________________________________
 function _defn(f, c, v)
 {
        ###################################################
        FUNCTAB[c f] = v
 }
 
-#_________________________________________________________________________________________
 function _defreg(pp, n, f, v, p)
 {
        #############################################################
@@ -1885,7 +1554,6 @@ function _defreg(pp, n, f, v, p)
        }
 }
 
-#_______________________________________________________________________________________________
 function _defsolution(pp, n, rn, p)
 {
        ###############################################################
@@ -1895,7 +1563,6 @@ function _defsolution(pp, n, rn, p)
        return p
 }
 
-#_________________________________________________________________________________________
 function _defsrv(pp, n, f, v, p)
 {
        #############################################################
@@ -1904,7 +1571,6 @@ function _defsrv(pp, n, f, v, p)
        return p
 }
 
-#_______________________________________________________________________
 function _del(f, c, a, A)
 {
        #################################################
@@ -1933,7 +1599,6 @@ function _del(f, c, a, A)
        return a
 }
 
-#_______________________________________________________________________
 function _delay(t, a)
 {
        ###################################################
@@ -1942,7 +1607,6 @@ function _delay(t, a)
        }
 }
 
-#_________________________________________________________________
 function _delayms(a)
 {
        #############################################
@@ -1950,7 +1614,6 @@ function _delayms(a)
        }
 }
 
-#_______________________________________________________________________
 function _deletepfx(A, f, B, le, i)
 {
        ########################################
@@ -1963,7 +1626,6 @@ function _deletepfx(A, f, B, le, i)
        }
 }
 
-#_________________________________________________________________
 function _delf(A, f)
 {
        ###############################################
@@ -1972,7 +1634,6 @@ function _delf(A, f)
        delete A["B"][f]
 }
 
-#_______________________________________________________________________
 function _deluid(p)
 {
        ################################################# 1 #
@@ -1986,7 +1647,6 @@ function _deluid(p)
        return _deluida0
 }
 
-#_______________________________________________________________________
 function _dir(A, rd, i, r, f, ds, pf, B, C)
 {
        ####################################
@@ -2016,7 +1676,6 @@ function _dir(A, rd, i, r, f, ds, pf, B, C)
        return r
 }
 
-#_________________________________________________________________
 function _dirtree(A, f, B)
 {
        #########################################
@@ -2028,7 +1687,6 @@ function _dirtree(A, f, B)
        return f
 }
 
-#___________________________________________________________
 function _dirtree_i0(B, i, c, A, f, lf, a, C)
 {
        delete A[f]
@@ -2049,7 +1707,6 @@ function _dirtree_i0(B, i, c, A, f, lf, a, C)
        return i
 }
 
-#_______________________________________________________________________
 function _dll_check(pp)
 {
        _dllchktv = ""
@@ -2067,7 +1724,6 @@ function _dll_check(pp)
        }
 }
 
-#_______________________________________________
 function _dll_check_i0(p, R, pp, p2, i, i2, r, f, v, rs, d, tv, tf)
 {
        if (_[p]["TYPE"] == "defdll") {
@@ -2123,7 +1779,6 @@ function _dll_check_i0(p, R, pp, p2, i, i2, r, f, v, rs, 
d, tv, tf)
        }
 }
 
-#_______________________________________________
 function _dll_check_i1(p, pp, p1, p2, p3, i)
 {
        if (_[p]["TYPE"] == "defdll") {
@@ -2135,7 +1790,6 @@ function _dll_check_i1(p, pp, p1, p2, p3, i)
        }
 }
 
-#___________________________________________________________________________________
 function _dllerr(p, t, f)
 {
        if (t !~ /\x00/) {
@@ -2175,7 +1829,6 @@ function _drawuid(p, cn, ch, o)
        }
 }
 
-#_______________________________________________________________________
 function _dumparr(A, t, lv, a)
 {
        ############################################
@@ -2190,7 +1843,6 @@ function _dumparr(A, t, lv, a)
        }
 }
 
-#___________________________________________________________
 function _dumparr_i1(A, lv, ls, ln, t, t2, i, a, f)
 {
        t2 = _getchrln(" ", length(t))
@@ -2233,14 +1885,6 @@ function _dumparr_i1(A, lv, ls, ln, t, t2, i, a, f)
        }
 }
 
-#___________________________________________________________________________________
-####################################################################################
-
-
-#___________________________________________________________________________________
-# OTHER tFUNCTIONs 
#################################################################
-
-#_____________________________________________________________________________
 function _dumpobj(p, f, t, s)
 {
        ###################################################
@@ -2251,7 +1895,6 @@ function _dumpobj(p, f, t, s)
        return s
 }
 
-#___________________________________________________________
 function _dumpobj_i0(p, f, t)
 {
        if (f == "") {
@@ -2263,19 +1906,16 @@ function _dumpobj_i0(p, f, t)
        return (_dumpobj_i1(p, t " ") _dumpobj_i2(p, _getchrln(" ", length(t))))
 }
 
-#___________________________________________________________
 function _dumpobj_i1(p, t)
 {
        return _ln(t substr(((p in _tPREV) ? "\253" _tPREV[p] : "") "       ", 
1, 7) " " substr(((p in _tPARENT) ? "\210" _tPARENT[p] : "") "       ", 1, 7) " 
" substr(((p in _tFCHLD) ? _tFCHLD[p] : "") "\205" ((p in _tQCHLD) ? " (" 
_tQCHLD[p] ") " : "\205") "\205" ((p in _tLCHLD) ? _tLCHLD[p] : "") "           
           ", 1, 22) substr(((p in _tNEXT) ? "\273" _tNEXT[p] : "") "        ", 
1, 8))
 }
 
-#___________________________________________________________
 function _dumpobj_i2(p, t)
 {
        return (_dumpobj_i3(_[p], t " ") _dumpobj_i3(_ptr[p], _getchrln(" ", 
length(t)) "`", "`"))
 }
 
-#___________________________________________________________
 function _dumpobj_i3(A, t, p, e, s, i, t2)
 {
        if (isarray(A)) {
@@ -2299,7 +1939,6 @@ function _dumpobj_i3(A, t, p, e, s, i, t2)
        return _ln(t "=" _dumpobj_i4(p A) "'")
 }
 
-#___________________________________________________________
 function _dumpobj_i4(t)
 {
        if (length(t) > 64) {
@@ -2308,14 +1947,12 @@ function _dumpobj_i4(t)
        return t
 }
 
-#_________________________________________________________________
 function _dumpobj_nc(p, f, t)
 {
        #######################################
        return _dumpobj_i0(p, f, t "." p "{ ")
 }
 
-#_________________________________________________________________
 function _dumpobjm(p, f, t, s, t2)
 {
        ###################################
@@ -2327,7 +1964,6 @@ function _dumpobjm(p, f, t, s, t2)
        return s
 }
 
-#_________________________________________________________________
 function _dumpobjm_nc(p, f, t, s, t2)
 {
        ################################
@@ -2362,14 +1998,12 @@ function _dumpuidgen(p, pd, pc, ps)
        }
 }
 
-#_____________________________________________________________________________
 function _dumpval(v, n)
 {
        _dumpstr = _dumpstr (v = _ln((n == 0 && n == "" ? "RET" : n) ": " (v == 
0 && v == "" ? "-" : v "'")))
        return v
 }
 
-########################################################
 function _eXTFN(c, t, P)
 {
        switch (c) {
@@ -2393,13 +2027,11 @@ function _eXTFN(c, t, P)
        }
 }
 
-#_________________________________________________________________
 function _endpass(t)
 {
        _endpass_v0 = t
 }
 
-#_______________________________________________________________________
 function _err(t, a, b)
 {
        ###################################################
@@ -2414,14 +2046,12 @@ function _err(t, a, b)
        return t
 }
 
-#_________________________________________________________________
 function _errnl(t)
 {
        ################################################
        return _err(t (t ~ /\x0A$/ ? "" : _CHR["EOL"]))
 }
 
-#_______________________________________________________________________
 function _error(t, d, A)
 {
        #################################################
@@ -2432,14 +2062,12 @@ function _error(t, d, A)
        }
 }
 
-#_______________________________________________________________________
 function _exit(c)
 {
        #######################################################
        exit c
 }
 
-#_____________________________________________________________________________
 function _export_data(t, i, A)
 {
        #################################################
@@ -2448,10 +2076,6 @@ function _export_data(t, i, A)
        _expout("_DATA: " _Zexparr(A) "\n")
 }
 
-#___________________________________________________________________________________
-####################################################################################
-
-#_____________________________________________________________________________
 function _expout(t, d, a, b)
 {
        ####################################################
@@ -2465,8 +2089,6 @@ function _expout(t, d, a, b)
        ORS = b
 }
 
-#_________________________________________________________________________________________
-##########################################################################################
 function _extfn_init()
 {
        ##############################################################
@@ -2499,7 +2121,6 @@ function _faccr_i0(A, t, p, P, f, r)
        return r
 }
 
-#_______________________________________________________________________
 function _fatal(t, d, A)
 {
        #################################################
@@ -2533,20 +2154,17 @@ function _ffaccr(A, t, p, P)
        return _faccr_i0(A["F"], t, p, P)
 }
 
-##################
 function _fframe(A, t, p)
 {
-       #_______________________________________________________________________
-       return _fframe_i0(A, t, p, A[""])       
#################################################
+       #################################################
+       return _fframe_i0(A, t, p, A[""])
 }
 
-#___________________________________________________________
 function _fframe_i0(A, t, p, f)
 {
        return (f ? ((@f(t, p)) _fframe_i0(A, t, p, A[f])) : "")
 }
 
-#_________________________________________________________________
 function _file(f)
 {
        #################################################
@@ -2556,7 +2174,6 @@ function _file(f)
        return (f in _FILEXT ? _FILEXT[f] : "")
 }
 
-#_______________________________________________________________________
 function _file_check(p)
 {
        if (1 || "AGENT" in _[p]) {
@@ -2564,7 +2181,6 @@ function _file_check(p)
        }
 }
 
-#_______________________________________________
 function _file_check_i0(p, pp, p1, p2, f, v)
 {
        if (_[p]["TYPE"] == "defile") {
@@ -2593,7 +2209,6 @@ function _file_check_i0(p, pp, p1, p2, f, v)
        }
 }
 
-#_________________________________________________________________
 function _filed(f, dd, d)
 {
        ##########################################
@@ -2618,7 +2233,6 @@ function _filed(f, dd, d)
        return d
 }
 
-#_________________________________________________________________
 function _filen(f)
 {
        ################################################
@@ -2628,7 +2242,6 @@ function _filen(f)
        return (f in _FILENAM ? _FILENAM[f] : "")
 }
 
-#_________________________________________________________________
 function _filene(f)
 {
        ###############################################
@@ -2638,7 +2251,6 @@ function _filene(f)
        return (f in _FILENAM ? _FILENAM[f] : "") (f in _FILEXT ? _FILEXT[f] : 
"")
 }
 
-#_________________________________________________________________
 function _filenotexist(f, a)
 {
        ######################################
@@ -2656,7 +2268,6 @@ function _filenotexist(f, a)
        return a
 }
 
-#_______________________________________________________________________
 function _filepath(f, dd)
 {
        ################################################
@@ -2666,7 +2277,6 @@ function _filepath(f, dd)
        return (filegetrootdir(f, dd) (f in _FILENAM ? _FILENAM[f] : "") (f in 
_FILEXT ? _FILEXT[f] : ""))
 }
 
-#_________________________________________________________________
 function _filer(f, dd)
 {
        #############################################
@@ -2682,7 +2292,6 @@ function _filer(f, dd)
        return (_FILEROOT[dd, f] = fileri(dd))
 }
 
-#_________________________________________________________________
 function _filerd(f, dd)
 {
        ############################################
@@ -2692,7 +2301,6 @@ function _filerd(f, dd)
        return filegetrootdir(f, dd)
 }
 
-#_________________________________________________________________
 function _filerdn(f, dd)
 {
        ###########################################
@@ -2702,7 +2310,6 @@ function _filerdn(f, dd)
        return (f in _FILENAM ? (filegetrootdir(f, dd) _FILENAM[f]) : "")
 }
 
-#_________________________________________________________________
 function _filerdne(f, dd)
 {
        ##########################################
@@ -2718,7 +2325,6 @@ function _filerdne(f, dd)
        return ""
 }
 
-#___________________________________________________________
 function _filerdnehnd(st, c, r, d, n, A)
 {
        if (st) {
@@ -2773,7 +2379,6 @@ function _filerdnehnd(st, c, r, d, n, A)
        return ""
 }
 
-#_______________________________________________________________________
 function _filexist(f, a)
 {
        ################################################
@@ -2792,7 +2397,6 @@ function _filexist(f, a)
        return _NOP
 }
 
-#_______________________________________________________________________
 function _fn(f, p0, p1, p2)
 {
        ################################################
@@ -2801,7 +2405,6 @@ function _fn(f, p0, p1, p2)
        }
 }
 
-#_______________________________________________________________________
 function _foreach(A, f, r, p0, p1, p2, i, p)
 {
        ####################################
@@ -2817,7 +2420,6 @@ function _foreach(A, f, r, p0, p1, p2, i, p)
        }
 }
 
-#_____________________________________________________
 function _foreach_i0(A, f, D, p0, p1, p2)
 {
        for (i in A) {
@@ -2829,13 +2431,11 @@ function _foreach_i0(A, f, D, p0, p1, p2)
        }
 }
 
-#_____________________________________________________
 function _foreach_i1(p, f, D, p0, p1, p2)
 {
        _gen(D, @f(p, p0, p1, p2))
 }
 
-#_____________________________________________________________________________
 function _formatrexp(t)
 {
        _formatstrq0 = split(t, _FORMATSTRA, /[\/\x00-\x1F\x80-\xFF]/, 
_FORMATSTRB)
@@ -2846,7 +2446,6 @@ function _formatrexp(t)
        return (_formatstrs0 _FORMATSTRA[t])
 }
 
-#___________________________________________________________
 function _formatrexp_init()
 {
        _defescarr(_FORMATREXPESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC)
@@ -2854,7 +2453,6 @@ function _formatrexp_init()
        _FORMATREXPESC["\t"] = "\\t"
 }
 
-#_____________________________________________________________________________
 function _formatstrd(t)
 {
        _formatstrq0 = split(t, _FORMATSTRA, /["\x00-\x1F\x80-\xFF]/, 
_FORMATSTRB)
@@ -2865,7 +2463,6 @@ function _formatstrd(t)
        return (_formatstrs0 _FORMATSTRA[t])
 }
 
-#___________________________________________________________
 function _formatstrd_init()
 {
        _defescarr(_FORMATSTRDESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC)
@@ -2873,15 +2470,8 @@ function _formatstrd_init()
        _FORMATSTRDESC["\t"] = "\\t"
 }
 
-#__________________________________________________________________________________
 function _formatstrs(t)
 {
-       
####################################################################################
-       
-       
-       
-       
-       
#___________________________________________________________________________________
        _formatstrq0 = split(t, _FORMATSTRA, /['\x00-\x1F\x80-\xFF]/, 
_FORMATSTRB)
        _formatstrs0 = ""
        for (t = 1; t < _formatstrq0; t++) {
@@ -2890,7 +2480,6 @@ function _formatstrs(t)
        return (_formatstrs0 _FORMATSTRA[t])
 }
 
-#___________________________________________________________
 function _formatstrs_init()
 {
        _defescarr(_FORMATSTRSESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC)
@@ -2911,14 +2500,11 @@ function _fpp(q, D, S)
        return q
 }
 
-#_______________________________________________________________________
-########################################################################
 function _fthru(A, c, p, B)
 {
        return _fthru_i0(A, c, p, B, A[""])
 }
 
-#_________________________________________________________________
 function _fthru_i0(A, c, p, B, f)
 {
        return (f ? @f(c, _fthru_i0(A, c, p, B, A[f]), B) : "")
@@ -2931,7 +2517,6 @@ function _gen(D, t)
        }
 }
 
-#_____________________________________________________________________________
 function _gensubfn(t, r, f, p0, A)
 {
        ###############################################
@@ -2941,20 +2526,17 @@ function _gensubfn(t, r, f, p0, A)
        return t
 }
 
-#_____________________________________________________________________________
 function _get_errout(p)
 {
        #######################################################
        return _tframe("_get_errout_i0", p)
 }
 
-#_______________________________________________________________________
 function _get_errout_i0(p, t, n, a)
 {
        return (p in _tLOG ? (_get_errout_i1(p) _get_errout_i3(p)) : "")
 }
 
-#_________________________________________________________________
 function _get_errout_i1(p, t, n, a)
 {
        if (p in _tLOG) {
@@ -2971,13 +2553,11 @@ function _get_errout_i1(p, t, n, a)
        }
 }
 
-#_______________________________________________________________________
 function _get_errout_i2(p)
 {
        return ("FILE" in _tLOG[p] ? (_tLOG[p]["FILE"] ("LINE" in _tLOG[p] ? 
("(" _tLOG[p]["LINE"] ")") : "") ": ") : "")
 }
 
-#_______________________________________________________________________
 function _get_errout_i3(p, t, ts, cl, cp, cr, a, b)
 {
        if ("LSTR" in _tLOG[p]) {
@@ -2996,14 +2576,12 @@ function _get_errout_i3(p, t, ts, cl, cp, cr, a, b)
        }
 }
 
-#_____________________________________________________________________________
 function _get_logout(p)
 {
        #######################################################
        return _tframe("_get_logout_i0", p)
 }
 
-#_______________________________________________________________________
 function _get_logout_i0(p, t, n, a)
 {
        if (p in _tLOG) {
@@ -3020,14 +2598,13 @@ function _get_logout_i0(p, t, n, a)
        }
 }
 
-#_______________________________________________________________________
 function _getchrln(s, w)
 {
        #################################################
        if (s == "") {
                return 
+               #if ( w!=w+0 || w<0 )   w=_CON_WIDTH
        }
-       #if ( w!=w+0 || w<0 )   w=_CON_WIDTH
        if (length(s) < w) {
                if (s in _GETCHRLN) {
                        if (length(_getchrlnt0 = _GETCHRLN[s]) >= w) {
@@ -3046,14 +2623,12 @@ function _getchrln(s, w)
        }
 }
 
-#_______________________________________________________________________
 function _getdate()
 {
        #####################################################
        return strftime("%F")
 }
 
-#_____________________________________________________________________________
 function _getfilepath(t, f, al, b, A)
 {
        ############################################
@@ -3082,14 +2657,12 @@ function _getfilever(f)
        }
 }
 
-#_________________________________________________________________
 function _getime()
 {
        ################################################
        return strftime("%H:%M:%S")
 }
 
-#_________________________________________________________________
 function _getmpdir(f, dd)
 {
        ##########################################
@@ -3102,7 +2675,6 @@ function _getmpdir(f, dd)
        return f
 }
 
-#_________________________________________________________________
 function _getmpfile(f, dd)
 {
        #########################################
@@ -3115,7 +2687,6 @@ function _getmpfile(f, dd)
        return f
 }
 
-#_______________________________________________________________________
 function _getperf(o, t, a)
 {
        ###############################################
@@ -3127,7 +2698,6 @@ function _getperf(o, t, a)
        return 1
 }
 
-#___________________________________________________________
 function _getperf_(o, t, a)
 {
        if (a >= _getperf_end) {
@@ -3140,7 +2710,6 @@ function _getperf_(o, t, a)
        return 1
 }
 
-#___________________________________________________________
 function _getperf_noe(o, t, a)
 {
        if (_getperf_opsecp != _getperf_opsec) {
@@ -3150,13 +2719,11 @@ function _getperf_noe(o, t, a)
        return 1
 }
 
-#___________________________________________________________
 function _getperf_noenot(o, t, a)
 {
        return 1
 }
 
-#___________________________________________________________
 function _getperf_not(o, t, a)
 {
        if (a < _getperf_end) {
@@ -3164,8 +2731,6 @@ function _getperf_not(o, t, a)
        }
 }
 
-#_________________________________________________________________________________________
-##########################################################################################
 function _getreg_i1(D, r, R, a, i, il, ir, rc, B)
 {
        a = IGNORECASE
@@ -3190,14 +2755,12 @@ function _getreg_i1(D, r, R, a, i, il, ir, rc, B)
        }
 }
 
-#_________________________________________________________________
 function _getsecond()
 {
        #############################################
        return systime()
 }
 
-#___________________________________________________________
 function _getsecondsync(a, c, b, c2)
 {
        ##########################
@@ -3208,7 +2771,6 @@ function _getsecondsync(a, c, b, c2)
        return (a + 1)
 }
 
-#_______________________________________________________________________
 function _getuid(p)
 {
        ################################################# 1 #
@@ -3223,7 +2785,6 @@ function _getuid(p)
        return _tptr
 }
 
-#_____________________________________________________
 function _getuid_i0(p, UL, UH)
 {
        if ("" == (_tptr = UL[_UIDCNTL[p]])) {
@@ -3241,7 +2802,6 @@ function _handle8494(t)
        return gensub(/(.)/, ".\\1", "G", t)
 }
 
-#_____________________________________________________________________________
 function _hexnum(n, l)
 {
        #########################################################
@@ -3251,7 +2811,6 @@ function _hexnum(n, l)
        return sprintf("%." (l + 0 < 1 ? 2 : l) "X", n)
 }
 
-#_________________________________________________________________
 function _igetperf(t, s, o)
 {
        #########################################       # t-test period in 
seconds(==0 ? no period; s(=true/false)-output/not output status; o-qnt of ops 
before test start
@@ -3282,7 +2841,6 @@ function _import_data(t, p, p2, a)
        return t
 }
 
-#_______________________________________________________________________
 function _info(t, d, A)
 {
        ##################################################
@@ -3293,8 +2851,6 @@ function _info(t, d, A)
        }
 }
 
-# test with the different path types
-#      _conl(_ln("SRC:") _dumparr(S)); _conl();
 function _ini(p, cs, dptr, pfx, sfx, hstr, lstr)
 {
        return _inituid(p, cs, dptr, pfx, sfx, hstr, lstr, A)
@@ -3338,7 +2894,6 @@ function _initshare()
        _sharextool = "\\\\CPU\\eGAWK\\LIB\\_share\\_share.exe"
 }
 
-#_________________________________________
 function _initspecialuid()
 {
        _NOINDEX = _getuid()
@@ -3353,7 +2908,6 @@ function _initsys()
 {
 }
 
-#_______________________________________________________________________
 function _inituid(p, cs, dptr, pfx, sfx, hstr, lstr, A)
 {
        ################### 1 #
@@ -3413,7 +2967,6 @@ function _inituidefault(h, l, H, L)
        _initspecialuid()
 }
 
-#_______________________________________________________________________
 function _ins(S, sf, D, df)
 {
        ################################################
@@ -3437,14 +2990,12 @@ function _ins(S, sf, D, df)
        }
 }
 
-#_________________________________________________________________
 function _insf(A, f)
 {
        ###############################################
        A["F"][""] = A["B"][A["F"][f] = A["F"][""]] = f
 }
 
-#_________________________________________________________________
 function _insframe(A, f)
 {
        ###########################################
@@ -3452,17 +3003,12 @@ function _insframe(A, f)
        A[""] = f
 }
 
-########################
 function _inspass(A, f)
 {
-       #_________________________________________________________________
        A[f] = A[""]
        A[""] = f
 }
 
-# there is problem with string's format: i can;t easilly merge 2 charsets: 
comma-divided and every-char-divided strings
-
-#_______________________________________________________________________
 function _isptr(p)
 {
        ################################################## 1 #
@@ -3483,7 +3029,6 @@ function _isptr(p)
        return 0
 }
 
-#_______________________________________________________________________
 function _istr(p)
 {
        ################################################### 1 #
@@ -3500,57 +3045,48 @@ function _istr(p)
        return (it = p == "" ? "s" : "S")
 }
 
-#_________________________________________________________________
 function _lengthsort(i1, v1, i2, v2)
 {
        ##############################
        return (length(i1) < length(i2) ? -1 : length(i1) > length(i2) ? 1 : i1 
< i2 ? -1 : 1)
 }
 
-#_________________________________________________________________
 function _lib_APPLY()
 {
        return _ffaccr(_LIBAPI, "_lib_APPLY")
 }
 
-#_________________________________________________________________
 function _lib_BEGIN(A)
 {
        return _ffaccr(_LIBAPI, "_lib_BEGIN", "", A)
 }
 
-#_______________________________________________________________________
 function _lib_CMDLN(t)
 {
        return _pass(_LIBAPI["F"], "_lib_CMDLN", t)
 }
 
-#_________________________________________________________________
 function _lib_END(A)
 {
        return _ffaccr(_LIBAPI, "_lib_END", "", A)
 }
 
-#_________________________________________________________________
 function _lib_HELP()
 {
        return _fbaccr(_LIBAPI, "_lib_HELP")
 }
 
-#_________________________________________________________________
 function _lib_NAMEVER()
 {
        return _fbaccr(_LIBAPI, "_lib_NAMEVER")
 }
 
-#_____________________________________________________________________________
 function _ln(t)
 {
        ###############################################################
        return (t ~ /\x0A$/ ? t : (t _CHR["EOL"]))
 }
 
-#_________________________________________________________________
 function _log(A, p, a, B)
 {
        ###########################################
@@ -3571,7 +3107,6 @@ function _log(A, p, a, B)
        }
 }
 
-#_________________________________________________________________
 function _lspctab(t, ts, l, l1, l2, A)
 {
        ################################
@@ -3613,7 +3148,6 @@ function _macsfx94(F, D, C, p1, p2, p3)
        return _mpuretsub(D, _handle8494(_mpuacc))
 }
 
-#_______________________________________________________________________
 function _movarr(D, S)
 {
        ###################################################
@@ -3640,11 +3174,6 @@ function _mpu(t, F, p1, p2, p3, D, C)
        return t
 }
 
-#
-#      /rexpstr/       ->      datastr
-#      (\x00\t\+)*     ->      28 00 09 5B 2B 29
-#
-# unesc all non-rexp characters: replace unesc of rexp-characters but do not 
remove it: \* -> \*, \x2A -> \*, \052 -> \*, \\ -> \#
 function _mpudefaulthnd(F, D, C, p1, p2, p3)
 {
        _mpuretsub(D, _mpucc0)
@@ -3697,7 +3226,6 @@ function _mpusub(F, D, C, d, p1, p2, p3, q)
        _conl("mpusub exit: _mpuacc: `" _mpuacc "'")
 }
 
-#_______________________________________________________________________
 function _n(F, v, p)
 {
        #####################################################
@@ -3723,7 +3251,6 @@ function _n(F, v, p)
        return _nN_i0(_tgenuid(), F, v)
 }
 
-#_____________________________________________________
 function _nN_i0(p, F, v)
 {
        _[p][""]
@@ -3754,7 +3281,6 @@ function _nN_i0(p, F, v)
        return p
 }
 
-#_________________________________________________________________
 function _newclrdir(f)
 {
        ############################################
@@ -3767,7 +3293,6 @@ function _newclrdir(f)
        return f
 }
 
-#_______________________________________________________________________
 function _newdir(f)
 {
        #####################################################
@@ -3781,28 +3306,10 @@ function _newdir(f)
        return f
 }
 
-##############################
 function _nop(p0, p1, p2, p3)
 {
-       #_______________________________________________________________________
 }
 
-#_____________________________________________________
-#      _retarr(ARRAY,start,prefixtr,postfixtr)
-#              Return string collected from elements of ARRAY.
-#              The data elements in ARRAY have numeric indexes. By default it 
starts from element with index 1, but it is possible to locate elements 
starting from
-#              0,-1,-.... The last data element in the ARRAY have the highest 
numeric index that is stored in ARRAY[_ARRLEN].
-#              Optimized for very large data size.
-#
-#                      IN:             ARRAY                   - source data 
array(is ARRAY is not array then return undefined)
-#                                      start                   - (optional) 
start index in ARRAY; if missed or have non-numeric value then start array 
index will be 1.
-#                                      prefixst                - the string 
that will be inserted in the begin of generated return string
-#                                      postfix         - the string that will 
be added at the end of generated return string
-#                      MOD:            -
-#                      OUT:            -
-#                      RETURN: undefined               - if ARRAY is not 
array; if ARRAY is empty; if start is higher than ARRAY last element index
-#                                      string          - collected string: 
prefixtr-arraydata-postfixtr
-#_________________________________________________________________
 function _nretarr(A, i, v, r, q)
 {
        #####################################
@@ -3822,7 +3329,6 @@ function _nretarr(A, i, v, r, q)
        return 
 }
 
-#___________________________________________________________
 function _nretarrd(A, i, v, r, q)
 {
        ##############################
@@ -3844,10 +3350,6 @@ function _nretarrd(A, i, v, r, q)
        delete A[""]
 }
 
-#___________________________________________________________________________________
-####################################################################################
-
-#___________________________________________________________________________________
 function _out(t, a, b)
 {
        ###############################################################
@@ -3862,7 +3364,6 @@ function _out(t, a, b)
        return t
 }
 
-#_________________________________________________________________
 function _outnl(t)
 {
        ################################################
@@ -3917,7 +3418,6 @@ function _p8(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, 
p4, p5, p6, p7, p8)
        return @_qparamf0(s1, s2, s3, s4, s5, s6, s7, s8, s8, p1, p2, p3, p4, 
p5, p6, p7)
 }
 
-#_______________________________________________________________________
 function _pass(A, f, t, p2, i, a)
 {
        ###########################################
@@ -3939,8 +3439,6 @@ function _pass(A, f, t, p2, i, a)
        return t
 }
 
-# this is somnitelno: that   / / . / / com 56 / / - is the DEV...; what is DEV 
??? this already PROBLEM
-#_____________________________________________________________________________
 function _patharr0(D, q, i, h, A, B)
 {
        ##############################################
@@ -3979,7 +3477,6 @@ function _patharr0(D, q, i, h, A, B)
        }
 }
 
-#_____________________________________________________
 function _patharr0_i0(t, D, l, r, d, i)
 {
        if (i = index(t, ":")) {
@@ -3999,7 +3496,6 @@ function _patharr0_i0(t, D, l, r, d, i)
        return t
 }
 
-#_____________________________________________________
 function _patharr0_i1(D, A, i, q, t, c)
 {
        if (D["type"] == "UNC") {
@@ -4025,7 +3521,6 @@ function _patharr0_i1(D, A, i, q, t, c)
        return 1
 }
 
-#############################################################################
 function _pmap(m, s1, s2, s3, s4, s5, s6, s7, s8)
 {
        if (match(m, /^([^\(]+)\(([^\)]*)\)$/, _QMAP)) {
@@ -4081,7 +3576,6 @@ function _pr8(s1, s2, s3, s4, s5, s6, s7, s8, p1, p2, p3, 
p4, p5, p6, p7, p8)
        return @_qparamf1(p1, p2, p3, p4, p5, p6, p7, p8)
 }
 
-#_________________________________________________________________
 function _printarr(A, t, lv, r, a)
 {
        ####################################
@@ -4097,7 +3591,6 @@ function _printarr(A, t, lv, r, a)
        }
 }
 
-#___________________________________________________________
 function _printarr_i1(A, lv, ls, ln, t, t2, i, a, f)
 {
        t2 = _getchrln(" ", length(t))
@@ -4181,7 +3674,6 @@ function _qparam_i0(p0, p1, p2, p3, p4, p5, p6, p7)
        }
 }
 
-#_______________________________________________________________________
 function _qstr(t, c, A, B)
 {
        ################################################
@@ -4192,7 +3684,6 @@ function _qstr(t, c, A, B)
        return c
 }
 
-#_________________________________________________________________
 function _qstrq(t)
 {
        ################################################
@@ -4201,15 +3692,13 @@ function _qstrq(t)
        return t
 }
 
-################################################################
 function _rEG(c, t, P, a, A)
 {
-       
#_____________________________________________________________________________
+       #####################################################
        switch (c) {
+       #___________________________________________________________
        case "_lib_CMDLN":
-               #####################################################
                return t
-               #___________________________________________________________
                #_____________________________________________________
        case "_lib_APPLY":
                return 
@@ -4228,7 +3717,6 @@ function _rEG(c, t, P, a, A)
        }
 }
 
-#_______________________________________________________________________
 function _rFBRO(p)
 {
        ######################################################
@@ -4244,7 +3732,6 @@ function _rFBRO(p)
        return p
 }
 
-#_______________________________________________________________________
 function _rFCHLD(p)
 {
        #####################################################
@@ -4254,11 +3741,10 @@ function _rFCHLD(p)
        return ""
 }
 
-######################## p="", !v
 function _rLBRO(p)
 {
-       #_______________________________________________________________________
-       if (p) {        ######################################################
+       ######################################################
+       if (p) {
                if (p in _tPARENT) {
                        return _tLCHLD[_tPARENT[p]]
                }
@@ -4270,58 +3756,52 @@ function _rLBRO(p)
        return p
 }
 
-######################## p=""
 function _rLCHLD(p)
 {
-       #_______________________________________________________________________
-       if ((p) && (p in _tLCHLD)) {    
#####################################################
+       #####################################################
+       if ((p) && (p in _tLCHLD)) {
                return _tLCHLD[p]
        }
        return ""
 }
 
-#_______________________________________________________________________
 function _rLINK(p)
 {
        ######################################################
        return (p in _tLINK ? _tLINK[p] : "")
 }
 
-######################## p=""
 function _rNEXT(p)
 {
-       #_______________________________________________________________________
-       if ((p) && (p in _tNEXT)) {     
######################################################
+       ######################################################
+       if ((p) && (p in _tNEXT)) {
                return _tNEXT[p]
        }
        return ""
 }
 
-######################## p=""
 function _rPARENT(p)
 {
-       #_______________________________________________________________________
-       if ((p) && (p in _tPARENT)) {   
####################################################
+       ####################################################
+       if ((p) && (p in _tPARENT)) {
                return _tPARENT[p]
        }
        return ""
 }
 
-######################## p=""
 function _rPREV(p)
 {
-       #_______________________________________________________________________
-       if ((p) && (p in _tPREV)) {     
######################################################
+       ######################################################
+       if ((p) && (p in _tPREV)) {
                return _tPREV[p]
        }
        return ""
 }
 
-######################## p=""
 function _rQBRO(p, c, p1)
 {
-       #_______________________________________________________________________
-       if (p) {        ################################################
+       ################################################
+       if (p) {
                if (p in _tPARENT) {
                        return _tQCHLD[_tPARENT[p]]
                }
@@ -4340,20 +3820,15 @@ function _rQBRO(p, c, p1)
        return p
 }
 
-######################## p=""
 function _rQCHLD(p)
 {
-       #_______________________________________________________________________
-       if ((p) && (p in _tQCHLD)) {    
#####################################################
+       #####################################################
+       if ((p) && (p in _tQCHLD)) {
                return _tQCHLD[p]
        }
        return ""
 }
 
-#___________________________________________________________________________________
-# EMMULATED FUNCTIONAL FIELDS 
######################################################
-
-#_____________________________________________________________________________
 function _rSQFIRST(g, p, A)
 {
        #####################################################
@@ -4365,7 +3840,6 @@ function _rSQFIRST(g, p, A)
        return _rsqgetptr(g, p)
 }
 
-#_________________________________________________________________
 function _rSQFIRSTA(g, p, A)
 {
        ########################################
@@ -4377,7 +3851,6 @@ function _rSQFIRSTA(g, p, A)
        return _rSQNEXTA(g, p, A)
 }
 
-#_______________________________________________________________________
 function _rSQNEXT(g, p, A)
 {
        ################################################
@@ -4387,7 +3860,6 @@ function _rSQNEXT(g, p, A)
        return _rsqnext_i0(g, p)
 }
 
-#_________________________________________________________________
 function _rSQNEXTA(g, p, A)
 {
        #########################################
@@ -4416,7 +3888,6 @@ function _rconline(t)
        _rprt = _rprt _ln((t = " " t " ") _getchrln("_", _CON_WIDTH - length(t) 
- 1))
 }
 
-#___________________________________________________________
 function _rd_shortcut(D, f)
 {
        if ((_shrtcutf0 = _filepath(f)) && _shortcut_nerr(_shrtcuta0 = 
_cmd(_shortcut_fpath " /A:Q /F:\"" _shrtcutf0 "\" 2>&1"), _shrtcutf0)) {
@@ -4433,7 +3904,6 @@ function _rd_shortcut(D, f)
        return (ERRNO ? ERRNO = "read shortcut: " ERRNO : _NOP)
 }
 
-#_______________________________________________________________________
 function _rdfile(f, i, A)
 {
        ################################################
@@ -4458,35 +3928,6 @@ function _rdfile(f, i, A)
        return (RT = _NOP)
 }
 
-####################################################################################
-# PUBLIC:
-#_____________________________________________________________________________
-#      fn      _th0,_th1,_th2,_th3
-#              USAGE:
-#                      _th0(p1,p2,p3,p4)
-#
-#                      Each of this functions can have up to 4 parameters.
-#                              _th0(p1,p2,p3,p4) return 1st parameter (p1)
-#                              _th1(p1,p2,p3,p4) return 2nd parameter (p2)
-#                              _th2(p1,p2,p3,p4) return 3rd parameter (p3)
-#                              _th3(p1,p2,p3,p4) return 4th parameter (p4)
-#_____________________________________________________________________________
-#      fn      _nop(p1,p2,p3,p4,p5,p6,p7,p8)
-#              USAGE:
-#                      _nop()
-#
-#                      Does not do any action. No result returned. Up to 8 
parameters.
-#_____________________________________________________________________________
-#      fn      _exit(c)
-#              USAGE:
-#                      _exit(code)
-#
-#                      This function do the same as GAWK-operator `exit code'.
-#_____________________________________________________________________________
-#      fn      _getdate()
-#      fn      _getime()
-#      fn      _getsecond()
-#      fn      _getsecondsync()
 function _rdreg(D, p)
 {
        ################################################################
@@ -4499,7 +3940,6 @@ function _rdreg(D, p)
        return (_rdregfld + _rdregkey)
 }
 
-#___________________________________________________________
 function _rdreg_i0(D, A)
 {
        while (_rdregq0 > 0) {
@@ -4519,8 +3959,6 @@ function _rdreg_i0(D, A)
        return 1
 }
 
-#_____________________________________________________________________________________________________
-######################################################################################################
 function _rdsafe(A, i, d)
 {
        if (i in A) {
@@ -4529,13 +3967,11 @@ function _rdsafe(A, i, d)
        return d
 }
 
-#_______________________________________________________________________
 function _reg_check(p)
 {
        _tframe("_reg_check_i0", p, p)
 }
 
-#_______________________________________________
 function _reg_check_i0(p, pp, p1, p2)
 {
        if (_[p]["TYPE"] == "defreg") {
@@ -4557,15 +3993,11 @@ function _reg_check_i0(p, pp, p1, p2)
        }
 }
 
-#_____________________________________________________
 function _registryinit()
 {
        _registrytmpfile = _getmpfile()
 }
 
-# _rdregfld            : gvar  - number of readed registry fields by _rdreg()
-# _rdregkey            : gvar  - number of readed registry keys by _rdreg()
-#_____________________________________________________________________________
 function _regpath0(D, i, s, q, S)
 {
        ############################################ 0 #
@@ -4589,7 +4021,6 @@ function _regpath0(D, i, s, q, S)
        }
 }
 
-#_________________________________________________________________________________________
 function _report(p)
 {
        #######################################################################
@@ -4614,7 +4045,6 @@ function _report_i0(p, p0, p1, p2)
        }
 }
 
-#___________________________________________________________________________________
 function _reporterr(p, t3, pp, t, t2)
 {
        t = ""
@@ -4628,66 +4058,6 @@ function _reporterr(p, t3, pp, t, t2)
        return (t t3)
 }
 
-#___________________________________________________________________________________
-####################################################################################
-
-
-
-
-#_______________________________________________________________________
-# _CHR array
-#
-#      _CHR[ASC-code decimal number]=="char"
-#
-#              Contains 256 elements. The index is the decimal number from 
0-255.
-#              The value is the single character with ASC-code equivalent to 
index number:
-#
-#                      _CHR[97]                =="a"                   - 
character with ASC-code 97 is `a'
-#
-#              This array is useful if you want to get character using it's 
ASC-code
-#_________________________________________________________________
-# _ASC array
-#
-#      _ASC[char]==number: ASC-code of char
-#
-#              Contains 256 elements. The index is the any single character 
with ASC-code \x00-\xFF.
-#              The value is the number equivalent of character's ASC-code:
-#
-#                      _ASC["A"]               ==65                    - 
ASC-code of character `A' is 65
-#
-#              This array is useful if you want to get ASC-code of the 
character.
-#_________________________________________________________________
-# _QASC array
-#
-#      _QASC[char]=="string: octal ASC-code of char in 3-digit octal format"
-#
-#              Contains 256 elements. The index is the any single charcter 
with ASC-code \x00-\xFF.
-#              The value is the octal number equivalent of character's 
ASC-code in fixed-length - 3-digit - string:
-#
-#                      _QASC["!"]              =="041"         - ASC-code of 
character `!' is 33(decimal) == 41(in octal)
-#                      _QASC["\x0D"]   =="015"
-#
-#              This array is useful when some type of string escape conversion 
is performed. It allows quickly get
-#              replace string for the characters that can be specified only by 
character code in result string:
-#
-#                      "\x0D"  ->      "\\015"
-#_______________________________________________________________________
-
-
-
-
-
-
-
-####################################################################################
-# PUBLIC:
-#_____________________________________________________________________________
-#      fn      _getchrln(ptt,len)
-#_____________________________________________________________________________
-#      fn      _tabtospc(src,tabstep,xcoord)
-####################################################################################
-
-#_____________________________________________________________________________
 function _retarr(A, i, p, a, q)
 {
        ##################################################
@@ -4711,7 +4081,6 @@ function _retarr_i0(A, q, i, a)
        return a
 }
 
-#_________________________________________________________________
 function _retarrd(A, v, i)
 {
        #########################################
@@ -4722,7 +4091,6 @@ function _retarrd(A, v, i)
        return v
 }
 
-#_____________________________________________________
 function _retarrd_i0(A, i)
 {
        if (i in A) {
@@ -4731,9 +4099,6 @@ function _retarrd_i0(A, i)
        delete A
 }
 
-#_______________________________________________________________________
-########################################################################
-#EXPERIMENTAL
 function _rexpfn(R, t, p)
 {
        _REXPFN[""] = ""
@@ -4748,7 +4113,6 @@ function _rexpfnend(t)
        _REXPFN[""] = t
 }
 
-#_____________________________________________________________________________
 function _rexpstr(r, i, c, A)
 {
        ###################################################
@@ -4760,13 +4124,11 @@ function _rexpstr(r, i, c, A)
        return r
 }
 
-#_____________________________________________________________________________
 function _rexpstr_i0(t, A, p0)
 {
        return (_REXPSTR[t] = "\\" t)
 }
 
-#___________________________________________________________
 function _rmtsharerr(h, t)
 {
        gsub(/[\x0D\x0A]+/, "", t)
@@ -4789,7 +4151,6 @@ function _rpp(q, D, S)
        return q
 }
 
-#_________________________________________________________________________________________
 function _rrdreg(DD, p, k, t, v, c, i, q, tT, A, B, C, D)
 {
        #############################################   old; regedit
@@ -4842,7 +4203,6 @@ function _rrdreg(DD, p, k, t, v, c, i, q, tT, A, B, C, D)
        }
 }
 
-#_________________________________________________________________
 function _rsqgetptr(g, p, A)
 {
        if (p in _tLINK) {
@@ -4859,7 +4219,6 @@ function _rsqgetptr(g, p, A)
        return p
 }
 
-#___________________________________________________________
 function _rsqnext_i0(g, p)
 {
        if (p == _SQTOPTR[g]) {
@@ -4908,15 +4267,13 @@ function _rxpfn(R, t, p, i, f, A)
        return _rexpfnend(t)
 }
 
-##############################################################
 function _sHARE(c, t, P, a, A)
 {
-       
#_____________________________________________________________________________
+       ###################################################
        switch (c) {
+       #___________________________________________________________
        case "_lib_CMDLN":
-               ###################################################
                return t
-               #___________________________________________________________
                #_____________________________________________________
        case "_lib_APPLY":
                return 
@@ -4935,15 +4292,13 @@ function _sHARE(c, t, P, a, A)
        }
 }
 
-################################################################
 function _sYS(c, t, P, a, A)
 {
-       
#_____________________________________________________________________________
+       #####################################################
        switch (c) {
+       #___________________________________________________________
        case "_lib_CMDLN":
-               #####################################################
                return t
-               #___________________________________________________________
                #_____________________________________________________
        case "_lib_APPLY":
                return 
@@ -4962,13 +4317,11 @@ function _sYS(c, t, P, a, A)
        }
 }
 
-#_______________________________________________________________________
 function _serv_check(p)
 {
        _tframe("_serv_check_i0", p, p)
 }
 
-#_______________________________________________
 function _serv_check_i0(p, p0, p1, p2, p3, i, q, c)
 {
        if (_[p]["TYPE"] == "defsrv") {
@@ -4983,7 +4336,6 @@ function _serv_check_i0(p, p0, p1, p2, p3, i, q, c)
        IGNORECASE = i
 }
 
-#_______________________________________________________________________
 function _setarrsort(f, a)
 {
        ##############################################
@@ -4996,7 +4348,6 @@ function _setarrsort(f, a)
        return a
 }
 
-#_______________________________________________________________________
 function _setmpath(p, a)
 {
        ################################################
@@ -5004,17 +4355,15 @@ function _setmpath(p, a)
        if ((p) && (a = _filerd(p))) {
                if (_FILEIO_TMPRD) {
                        _FILEIO_TMPATHS[_FILEIO_TMPRD]
+                       #if ( _filexist(a) ) _del(a)
+                       #_cmd("rd " a " /S /Q 2>NUL"); _cmd("del " a " /Q 
2>NUL")
                }
-               #if ( _filexist(a) ) _del(a)
-               #_cmd("rd " a " /S /Q 2>NUL"); _cmd("del " a " /Q 2>NUL")
                return (_FILEIO_TMPRD = a)
        } else {
                return _warning("`" p "': cannot set temporary folder" (ERRNO ? 
(": " ERRNO) : ""))
        }
 }
 
-#_________________________________________________________________________________________
-##########################################################################################
 function _sharelist(D, h, q, c, l, A, B)
 {
        #################################################
@@ -5034,7 +4383,6 @@ function _sharelist(D, h, q, c, l, A, B)
        return _rmtsharerr(h, c)
 }
 
-#_____________________________________________________________________________
 function _sharepath(h, s, A)
 {
        ###################################################
@@ -5051,27 +4399,26 @@ function _shortcut(D, S)
        if (isarray(D)) {
                if (isarray(S)) {
                        _addarrmask(D, S, _SHORTCUTWSTRUC)
-               } else if (S == 0 && S == "") { # array,array2*         - copy 
from array2 to array shorcut-specific elements
-                       _addarrmask(D, _SHORTCUTDEFAULT, _SHORTCUTWSTRUC)
-               } else if (_isnotfileptr(S)) {  # array*                        
- define shortcut-specific elements in array by default values
-                       _addarrmask(D, _[S], _SHORTCUTWSTRUC)
+               } else if (S == 0 && S == "") {
+                       _addarrmask(D, _SHORTCUTDEFAULT, _SHORTCUTWSTRUC)       
# array,array2*         - copy from array2 to array shorcut-specific elements
+               } else if (_isnotfileptr(S)) {
+                       _addarrmask(D, _[S], _SHORTCUTWSTRUC)   # array*        
                - define shortcut-specific elements in array by default values
                } else if (_rd_shortcut(D, S)) {
-                       return  # array,ptr*            - copy from array 
_[ptr] to array shorcut-specific elements
-               }
+                       return 
+               }               # array,ptr*            - copy from array 
_[ptr] to array shorcut-specific elements
        } else if (D == 0 && D == "") {
-               return _NOP     # array,filepath*               - define in 
array shortcut-specific elements by reading its from shortcut file 
filepath(load shortcut)
-               # -*                            - no action(return -)
+               return _NOP     # -*                            - no 
action(return -)
        } else if (_isnotfileptr(D)) {
                if (isarray(S)) {
-                       _addarrmask(_[D], S, _SHORTCUTWSTRUC)
-               } else if (S == 0 && S == "") { # ptr,array*            - copy 
from array to array _[ptr] shorcut-specific elements
-                       _addarrmask(_[D], _SHORTCUTDEFAULT, _SHORTCUTWSTRUC)
-               } else if (_isnotfileptr(S)) {  # ptr*                  - 
define shortcut-specifc elements in array _[ptr] by default values
-                       _addarrmask(_[D], _[S], _SHORTCUTWSTRUC)
+                       _addarrmask(_[D], S, _SHORTCUTWSTRUC)   # 
array,filepath*               - define in array shortcut-specific elements by 
reading its from shortcut file filepath(load shortcut)
+               } else if (S == 0 && S == "") {
+                       _addarrmask(_[D], _SHORTCUTDEFAULT, _SHORTCUTWSTRUC)    
# ptr,array*            - copy from array to array _[ptr] shorcut-specific 
elements
+               } else if (_isnotfileptr(S)) {
+                       _addarrmask(_[D], _[S], _SHORTCUTWSTRUC)        # ptr*  
                - define shortcut-specifc elements in array _[ptr] by default 
values
                } else if (_rd_shortcut(_[D], S)) {
-                       return  # ptr,ptr2*                     - copy from 
array _[ptr2] to array _[ptr] shorcut-specific elements
-               }
-       } else {        # ptr,filepath*         - define in array _[ptr] 
shortcut-specific elements by reading its from shortcut file filepath(load 
shortcut)
+                       return 
+               }               # ptr,ptr2*                     - copy from 
array _[ptr2] to array _[ptr] shorcut-specific elements
+       } else {
                if (isarray(S) && _wr_shortcut(D, S)) {
                        return  # filepath,array*               - [over]write 
shorcut file filepath; shortcut parameters will be defined by shortcut-specific 
elements in array(save shortcut)
                } else if (S == 0 && S == "" && _wr_shortcut(D, 
_SHORTCUTDEFAULT)) {
@@ -5080,11 +4427,11 @@ function _shortcut(D, S)
                        return  # filepath,ptr*         - [over]write shorcut 
file filepath; shortcut parameters will be defined by shortcut-specific 
elements in array _[ptr](save shortcut)
                } else if (_rd_shortcut(_SHRTCUTA1, S) || _wr_shortcut(D, 
_SHRTCUTA1)) {
                        return 
-               }       }       # filepath,filepath2*   - [over]write shorcut 
file filepath; shortcut parameters will be defined from shortcut file 
filepath2(copy shortcut)
+               }               # ptr,filepath*         - define in array 
_[ptr] shortcut-specific elements by reading its from shortcut file 
filepath(load shortcut)
+       }       # filepath,filepath2*   - [over]write shorcut file filepath; 
shortcut parameters will be defined from shortcut file filepath2(copy shortcut)
        return 1
 }
 
-#________________________________________________
 function _shortcut_init(A, B, q)
 {
        _SHORTCUTERR[2] = "file not found"
@@ -5116,7 +4463,6 @@ function _shortcut_init(A, B, q)
        _shortcut_fpath = "\\\\localhost\\eGAWK\\LIB\\_shortcut\\_shortcut.exe"
 }
 
-#_____________________________________________________
 function _shortcut_nerr(t, s, A)
 {
        if (match(t, /\x0ASystem error 
(-?[0-9]+)[^\x0D\x0A]*[\x0D\x0A]+([^\x0D\x0A]+)/, A)) {
@@ -5261,7 +4607,6 @@ function _splitpath_test()
        return 
 }
 
-#_______________________________________________________________________
 function _splitstr(A, t, r)
 {
        ########################################### 1 #
@@ -5289,7 +4634,6 @@ function _splitstr(A, t, r)
        }
 }
 
-#_____________________________________________________
 function _splitstr_i0(A, t, C)
 {
        if (2 > (_splitstrq0 = patsplit(t, _SPLITSTRA0, 
/([^,\xB4]*\xB4.)*[^,\xB4]*/))) {
@@ -5297,124 +4641,48 @@ function _splitstr_i0(A, t, C)
        }
        delete A
        _splitstri0 = _splitstrp0 = 0
-       while (_splitstri0++ < _splitstrq0) {
-               if ((t = gensub(/\xB4(.)/, "\\1", "G", 
_SPLITSTRA0[_splitstri0])) in C || t == "") {
-                       continue
-               }
-               C[A[++_splitstrp0] = t]
-       }
-       return _splitstrp0
-}
-
-#_______________________________________________
-function _strtorexp(t)
-{
-       gsub(/[\\\.\?\*\+\-\(\)\{\}\[\]\^\$\/\|]/, "\\\\&", t)
-       t = split(t, _TOREXP_STRA, /[\x00-\x1F]/, _TOREXP_STRB)
-       _torexp_strt0 = ""
-       for (_torexp_stri0 = 1; _torexp_stri0 < t; _torexp_stri0++) {
-               _torexp_strt0 = _torexp_strt0 _TOREXP_STRA[_torexp_stri0] "\\" 
_QASC[_TOREXP_STRB[_torexp_stri0]]
-       }
-       return (_torexp_strt0 _TOREXP_STRA[_torexp_stri0])
-}
-
-function _subseqoff(r, B)
-{
-       patsplit(r, B, /\x84[^\x94]*\x94/)
-       return gensub(/\x84[^\x94]*\x94/, "\204", "G", r)
-}
-
-function _subseqon(B, r, F, f, s, e, q, i, A)
-{
-       q = split(r, A, /\x84/)
-       r = ""
-       f = F[""]
-       for (i = 1; i < q; i++) {
-               s = substr(e = B[i], 2, 1)
-               #_conl("curr r==`" r "': A[" i "]=`" A[i] "'")
-               #s=s in F ? _th0(F[s],_conl("handler `" F[s] "' for `" s "' 
ost=`" substr(e,3,length(e)-3) "'")) : _th0(F[""],_conl("default handler for `" 
s "'"))
-               s = s in F ? F[s] : F[""]
-               #_conl("`" f "'")
-               r = r (@f(A[i])) (@s(substr(e, 3, length(e) - 3)))
-       }
-       return (r (@f(A[i])))
-}
-
-#_____________________________________________________________________________
-# _rdreg(ARRAY,reg_path)
-#              Import into ARRAY the content of the whole registree tree with 
the higher point specified by reg_path.
-#              ARRAY will be filled by the strings with following format:
-#
-# 
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\GnuWin32\CoreUtils\5.3.0\pck\InstallPath.STR=C:\Program
 Files (x86)\GnuWin32
-#      where:
-# HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\GnuWin32\CoreUtils\5.3.0\pck         
                                                        <- REG KEY PATH
-#                                                                              
             InstallPath                                                        
<- DATA FIELD
-#                                                                              
                             STR                                                
<- TYPE
-#                                                                              
                                   C:\Program Files (x86)\GnuWin32      <- VALUE
-# TYPE:
-#      STR             - REG_SZ                (String Value)
-#      W32             - REG_DWORD             (DWORD (32-bit) Value)
-#      W64             - REG_QWORD             (QWORD (64-bit) Value)
-#      BIN             - REG_BINARY    (Binary Value)
-#      XSZ             - REG_EXPAND_SZ (Expandable String Value)
-#      MSZ             - REG_MULTI_SZ  (Multi-String Value)
-#_________________________________________________________________________________________
-
-
-
-
-# HKCR         HKEY_CLASSES_ROOT
-# HKCU         HKEY_CURRENT_USER
-# HKLM         HKEY_LOCAL_MACHINE
-# HKU                  HKEY_USERS
-# HKCC         HKEY_CURRENT_CONFIG
-# HKPD         HKEY_PERFORMANCE_DATA
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+       while (_splitstri0++ < _splitstrq0) {
+               if ((t = gensub(/\xB4(.)/, "\\1", "G", 
_SPLITSTRA0[_splitstri0])) in C || t == "") {
+                       continue
+               }
+               C[A[++_splitstrp0] = t]
+       }
+       return _splitstrp0
+}
 
+function _strtorexp(t)
+{
+       gsub(/[\\\.\?\*\+\-\(\)\{\}\[\]\^\$\/\|]/, "\\\\&", t)
+       t = split(t, _TOREXP_STRA, /[\x00-\x1F]/, _TOREXP_STRB)
+       _torexp_strt0 = ""
+       for (_torexp_stri0 = 1; _torexp_stri0 < t; _torexp_stri0++) {
+               _torexp_strt0 = _torexp_strt0 _TOREXP_STRA[_torexp_stri0] "\\" 
_QASC[_TOREXP_STRB[_torexp_stri0]]
+       }
+       return (_torexp_strt0 _TOREXP_STRA[_torexp_stri0])
+}
 
+function _subseqoff(r, B)
+{
+       patsplit(r, B, /\x84[^\x94]*\x94/)
+       return gensub(/\x84[^\x94]*\x94/, "\204", "G", r)
+}
 
+function _subseqon(B, r, F, f, s, e, q, i, A)
+{
+       q = split(r, A, /\x84/)
+       r = ""
+       f = F[""]
+       for (i = 1; i < q; i++) {
+               s = substr(e = B[i], 2, 1)
+               #_conl("curr r==`" r "': A[" i "]=`" A[i] "'")
+               #s=s in F ? _th0(F[s],_conl("handler `" F[s] "' for `" s "' 
ost=`" substr(e,3,length(e)-3) "'")) : _th0(F[""],_conl("default handler for `" 
s "'"))
+               s = s in F ? F[s] : F[""]
+               #_conl("`" f "'")
+               r = r (@f(A[i])) (@s(substr(e, 3, length(e) - 3)))
+       }
+       return (r (@f(A[i])))
+}
 
-#___________________________________________________________________________________
-####################################################################################
 function _sysinfo(D, h)
 {
        ##############################################################
@@ -5429,12 +4697,11 @@ function _sysinfo(D, h)
        }
 }
 
-#########################################################
 function _tOBJ(c, t, P)
 {
        switch (c) {
+       #___________________________________________________________
        case "_lib_CMDLN":
-               #___________________________________________________________
                return t
                #___________________________________________________________
        case "_lib_APPLY":
@@ -5457,7 +4724,6 @@ function _tOBJ(c, t, P)
        }
 }
 
-#_______________________________________________________________________
 function _tOBJ_CLEANUP(p)
 {
        ##############################################
@@ -5476,7 +4742,6 @@ function _tOBJ_CLEANUP(p)
        }
 }
 
-#_______________________________________________________________________
 function _tabtospc(t, ts, xc, a, c, n, A, B)
 {
        ##################################
@@ -5492,8 +4757,6 @@ function _tabtospc(t, ts, xc, a, c, n, A, B)
        return t
 }
 
-#___________________________________________________________________________________
-####################################################################################
 function _tapi(p, f, p0, p1, p2, p3, c)
 {
        c = p
@@ -5506,7 +4769,6 @@ function _tapi(p, f, p0, p1, p2, p3, c)
        } while ("CLASS" in _[c])
 }
 
-#_____________________________________________________________________________
 function _tbframe(f, p, p0, p1)
 {
        ##################################################
@@ -5516,7 +4778,6 @@ function _tbframe(f, p, p0, p1)
        return f
 }
 
-#___________________________________________________________
 function _tbframe_i0(f, p, p0, p1, a)
 {
        while (p in _tLINK) {
@@ -5525,7 +4786,6 @@ function _tbframe_i0(f, p, p0, p1, a)
        return (p in _tLCHLD ? _tmbframe(f, _tLCHLD[p], p0, p1) : @f(p, p0, p1))
 }
 
-#_______________________________________________________________________
 function _tbframex(f, p, p0, p1)
 {
        ###########################################
@@ -5535,7 +4795,6 @@ function _tbframex(f, p, p0, p1)
        return f
 }
 
-#___________________________________________________________
 function _tbframex_i0(f, p, p0, p1)
 {
        while (p in _tLINK) {
@@ -5544,7 +4803,6 @@ function _tbframex_i0(f, p, p0, p1)
        return (p in _tLCHLD ? _tmbframex(f, _tLCHLD[p], p0, p1) : @f(p, p0, 
p1))
 }
 
-#_____________________________________________________________________________
 function _tbpass(f, p, p0, p1)
 {
        ###################################################
@@ -5554,7 +4812,6 @@ function _tbpass(f, p, p0, p1)
        return f
 }
 
-#___________________________________________________________
 function _tbpass_i0(f, p, p0, p1, a)
 {
        while (p in _tLINK) {
@@ -5563,7 +4820,6 @@ function _tbpass_i0(f, p, p0, p1, a)
        return (p in _tLCHLD ? _tmbpass(f, _tLCHLD[p], p0, p1) : @f(p, p0, p1))
 }
 
-#_____________________________________________________________________________
 function _tbpassx(f, p, p0, p1)
 {
        ##################################################
@@ -5573,7 +4829,6 @@ function _tbpassx(f, p, p0, p1)
        return f
 }
 
-#___________________________________________________________
 function _tbpassx_i0(f, p, p0, p1)
 {
        while (p in _tLINK) {
@@ -5582,7 +4837,6 @@ function _tbpassx_i0(f, p, p0, p1)
        return (p in _tLCHLD ? _tmbpassx(f, _tLCHLD[p], p0, p1) : @f(p, p0, p1))
 }
 
-#_____________________________________________________________________________
 function _tbrochld(p, f, pp)
 {
        ###################################################                     
        # TEST!!!
@@ -5666,35 +4920,30 @@ function _tbrochld(p, f, pp)
        return p
 }
 
-#_________________________________________________________________
 function _tbrunframe(f, p, p0, p1)
 {
        ###################################
        return _tbframe(f ? f : "_trunframe_i0", p, p0, p1)
 }
 
-#_________________________________________________________________
 function _tbrunframex(f, p, p0, p1)
 {
        ##################################
        return _tbframex(f ? f : "_trunframe_i0", p, p0, p1)
 }
 
-#_________________________________________________________________
 function _tbrunpass(f, p, p0, p1)
 {
        ####################################
        return _tbpass(f ? f : "_trunframe_i0", p, p0, p1)
 }
 
-#_________________________________________________________________
 function _tbrunpassx(f, p, p0, p1)
 {
        ###################################
        return _tbpassx(f ? f : "_trunframe_i0", p, p0, p1)
 }
 
-#_____________________________________________________________________________
 function _tdel(p, i)
 {
        ##########################################################
@@ -5718,7 +4967,6 @@ function _tdel(p, i)
        }
 }
 
-#_____________________________________________________
 function _tdel_i0(p, i)
 {
        for (i in _ptr[p]) {
@@ -5738,7 +4986,6 @@ function _tdel_i0(p, i)
        _UIDSDEL[p]
 }
 
-#_____________________________________________________
 function _tdel_i1(A, i)
 {
        for (i in A) {
@@ -5750,7 +4997,6 @@ function _tdel_i1(A, i)
        }
 }
 
-#_____________________________________________________________________________
 function _tdelete(p, v)
 {
        #######################################################                 
        # REMAKE EXCLUDE
@@ -5760,7 +5006,6 @@ function _tdelete(p, v)
        return v
 }
 
-#_________________________________________________________________
 function _tdelitem(p)
 {
        #############################################
@@ -5773,7 +5018,6 @@ function _tdelitem(p)
        }
 }
 
-#_______________________________________________________________________
 function _tend(a, b)
 {
        #####################################################
@@ -5784,7 +5028,6 @@ function _tend(a, b)
        }
 }
 
-#_____________________________________________________________________________
 function _texclude(p, v, pp)
 {
        ###################################################                     
        # TEST!!!
@@ -5826,8 +5069,6 @@ function _texclude(p, v, pp)
        }
 }
 
-# _tDLINK progressive development: concrete _tDLINK function\processing algo; 
all frame's families support
-#_____________________________________________________________________________
 function _tframe(fF, p, p0, p1, p2)
 {
        ###############################################
@@ -5837,7 +5078,6 @@ function _tframe(fF, p, p0, p1, p2)
        return p
 }
 
-#_____________________________________________________________________________
 function _tframe0(f, p, p0, p1, p2, p3, A)
 {
        #########################################
@@ -5850,7 +5090,6 @@ function _tframe0(f, p, p0, p1, p2, p3, A)
        }
 }
 
-#_______________________________________________
 function _tframe0_i0(A, p, f)
 {
        if (p in _tLINK) {
@@ -5874,7 +5113,6 @@ function _tframe0_i0(A, p, f)
        return _tframe0_i2(A, ".", p)
 }
 
-#_______________________________________________
 function _tframe0_i1(A, p)
 {
        if (_TEND[_ARRLEN] in _TEND) {
@@ -5886,7 +5124,6 @@ function _tframe0_i1(A, p)
        return _tframe0_i0(A, p)
 }
 
-#_______________________________________________
 function _tframe0_i2(A, m, p)
 {
        _tframe_dlink = p
@@ -5904,7 +5141,6 @@ function _tframe0_i2(A, m, p)
        }
 }
 
-#_________________________________________________________________
 function _tframe1(f, p, p0, p1, p2, p3, A)
 {
        #############################
@@ -5917,7 +5153,6 @@ function _tframe1(f, p, p0, p1, p2, p3, A)
        }
 }
 
-#_______________________________________________
 function _tframe1_i0(A, p, p0)
 {
        _tframe_link = p
@@ -5930,7 +5165,6 @@ function _tframe1_i0(A, p, p0)
        return _tframe1_i2(A, ".", p, p0)
 }
 
-#_______________________________________________
 function _tframe1_i1(A, p, p0)
 {
        if (_TEND[_ARRLEN] in _TEND) {
@@ -5942,7 +5176,6 @@ function _tframe1_i1(A, p, p0)
        return _tframe1_i0(A, p, p0)
 }
 
-#_______________________________________________
 function _tframe1_i2(A, m, p, p0)
 {
        _tframe_dlink = p
@@ -5960,7 +5193,6 @@ function _tframe1_i2(A, m, p, p0)
        }
 }
 
-#_________________________________________________________________
 function _tframe2(f, p, p0, p1, p2, p3, A)
 {
        #############################
@@ -5973,7 +5205,6 @@ function _tframe2(f, p, p0, p1, p2, p3, A)
        }
 }
 
-#_______________________________________________
 function _tframe2_i0(A, p, p0, p1)
 {
        _tframe_link = p
@@ -5986,7 +5217,6 @@ function _tframe2_i0(A, p, p0, p1)
        return _tframe2_i2(A, ".", p, p0, p1)
 }
 
-#_______________________________________________
 function _tframe2_i1(A, p, p0, p1)
 {
        if (_TEND[_ARRLEN] in _TEND) {
@@ -5998,7 +5228,6 @@ function _tframe2_i1(A, p, p0, p1)
        return _tframe2_i0(A, p, p0, p1)
 }
 
-#_______________________________________________
 function _tframe2_i2(A, m, p, p0, p1)
 {
        _tframe_dlink = p
@@ -6016,7 +5245,6 @@ function _tframe2_i2(A, m, p, p0, p1)
        }
 }
 
-#_________________________________________________________________
 function _tframe3(f, p, p0, p1, p2, p3, A)
 {
        #############################
@@ -6029,7 +5257,6 @@ function _tframe3(f, p, p0, p1, p2, p3, A)
        }
 }
 
-#_______________________________________________
 function _tframe3_i0(A, p, p0, p1, p2)
 {
        _tframe_link = p
@@ -6042,7 +5269,6 @@ function _tframe3_i0(A, p, p0, p1, p2)
        return _tframe3_i2(A, ".", p, p0, p1, p2)
 }
 
-#_______________________________________________
 function _tframe3_i1(A, p, p0, p1, p2)
 {
        if (_TEND[_ARRLEN] in _TEND) {
@@ -6054,7 +5280,6 @@ function _tframe3_i1(A, p, p0, p1, p2)
        return _tframe3_i0(A, p, p0, p1, p2)
 }
 
-#_______________________________________________
 function _tframe3_i2(A, m, p, p0, p1, p2)
 {
        _tframe_dlink = p
@@ -6072,7 +5297,6 @@ function _tframe3_i2(A, m, p, p0, p1, p2)
        }
 }
 
-#_________________________________________________________________
 function _tframe4(f, p, p0, p1, p2, p3, A)
 {
        #############################
@@ -6085,7 +5309,6 @@ function _tframe4(f, p, p0, p1, p2, p3, A)
        }
 }
 
-#_______________________________________________
 function _tframe4_i0(A, p, p0, p1, p2, p3)
 {
        _tframe_link = p
@@ -6098,7 +5321,6 @@ function _tframe4_i0(A, p, p0, p1, p2, p3)
        return _tframe4_i2(A, ".", p, p0, p1, p2, p3)
 }
 
-#_______________________________________________
 function _tframe4_i1(A, p, p0, p1, p2, p3)
 {
        if (_TEND[_ARRLEN] in _TEND) {
@@ -6110,7 +5332,6 @@ function _tframe4_i1(A, p, p0, p1, p2, p3)
        return _tframe4_i0(A, p, p0, p1, p2, p3)
 }
 
-#_______________________________________________
 function _tframe4_i2(A, m, p, p0, p1, p2, p3)
 {
        _tframe_dlink = p
@@ -6128,7 +5349,6 @@ function _tframe4_i2(A, m, p, p0, p1, p2, p3)
        }
 }
 
-#___________________________________________________________
 function _tframe_i0(f, p, p0, p1, p2, a)
 {
        while (p in _tLINK) {
@@ -6137,7 +5357,6 @@ function _tframe_i0(f, p, p0, p1, p2, a)
        return (p in _tFCHLD ? _tmframe_i0(f, _tFCHLD[p], p0, p1, p2) : (p in 
_tDLINK ? @f(_tDLINK[p], p0, p1, p2) : @f(p, p0, p1, p2)))
 }
 
-#___________________________________________________________
 function _tframe_i1(F, p, p0, p1, p2, a)
 {
        while (p in _tLINK) {
@@ -6146,7 +5365,6 @@ function _tframe_i1(F, p, p0, p1, p2, a)
        return (p in _tFCHLD ? ("." in F ? _th1(a = F["."], @a(p, p0, p1, p2)) 
: "") _tmframe_i1(F, _tFCHLD[p], p0, p1, p2) : (">" in F ? _th1(a = F[">"], p 
in _tDLINK ? @a(_tDLINK[p], p0, p1, p2) : @a(p, p0, p1, p2)) : ""))
 }
 
-#_______________________________________________________________________
 function _tframex(f, p, p0, p1)
 {
        ############################################
@@ -6156,7 +5374,6 @@ function _tframex(f, p, p0, p1)
        return f
 }
 
-#___________________________________________________________
 function _tframex_i0(f, p, p0, p1)
 {
        while (p in _tLINK) {
@@ -6165,7 +5382,6 @@ function _tframex_i0(f, p, p0, p1)
        return (p in _tFCHLD ? _tmframex(f, _tFCHLD[p], p0, p1) : @f(p, p0, p1))
 }
 
-#_____________________________________________________
 function _tframex_p0(A, f, q, i, B, C)
 {
        _tframe_qparam = q
@@ -6186,7 +5402,6 @@ function _tframex_p0(A, f, q, i, B, C)
        }
 }
 
-#_______________________________________________
 function _tframex_p1(A, v, i, r, B)
 {
        gsub(/[ \t]+/, "", v)
@@ -6213,17 +5428,6 @@ function _tframex_p1(A, v, i, r, B)
        }
 }
 
-#_____________________________________________________
-#      F       v       action
-#-----------------------------------------------------
-#      -       *       no additional action
-#      A       B       delete A[p] and define A[p] as array; copy array B to 
array A[p]
-#      A       -       delete A[p]
-#      A       "*"     delete A[p]; A[p]="*"
-#      "*"     B       define _[p]["*"] as array; copy array B to array 
_[p]["*"]
-#      "*"     -       run _mpu program "*" for `p
-#      "*0"    "*1"    _[p]["*0"]="*1"
-#___________________________________________________________
 function _tgenuid(c)
 {
        for (_uidcntr in _UIDARR1) {
@@ -6237,7 +5441,6 @@ function _tgenuid(c)
        return _fatal("_tUID: Out of UID range")
 }
 
-#_____________________________________________________
 function _tgenuid_init(a, b, A)
 {
        _ptrlength = 4
@@ -6251,12 +5454,6 @@ function _tgenuid_init(a, b, A)
        _uidcntr = A[a] A[b]
 }
 
-#      if ( F in _TCLASS )                             { 
_[p]["CLASS"]=_TCLASS[F]; _tapi(p); return p }
-#              # ???           _mpu(F,p)               ???
-#              return p }
-#      _[p][F]=v; return p }
-
-#_______________________________________________________________________
 function _tgetitem(p, n, a, b)
 {
        ############################################
@@ -6275,59 +5472,43 @@ function _tgetitem(p, n, a, b)
        }
 }
 
-#_________________________________________________________________
 function _tgetsp(p)
 {
        ###############################################
        return _tSTACK[p][0]
 }
 
-####################################################################################
-
-#_____________________________________________________________________________
 function _th0(p, p1, p2, p3)
 {
        return p
 }
 
-##########################################
 function _th1(p0, p, p2, p3)
 {
-       #_________________________________________________________________
        return p
 }
 
-##############################
 function _th10(p0, p1)
 {
-       #_________________________________________________________________
        return (p1 p0)
 }
 
-##############################
 function _th2(p0, p1, r, p3)
 {
-       #_________________________________________________________________
        return p
 }
 
-##############################
 function _th3(p0, p1, p2, r)
 {
-       #_________________________________________________________________
        return p
 }
 
-#_________________________________________________________________
 function _tifend(l)
 {
        ###############################################
        return (_t_ENDF[0] + l) in _t_ENDF ? (_t_ENDF[_t_ENDF[0] + l] ? 
_t_ENDF[_t_ENDF[0] + l] : 1) : ""
 }
 
-#      test _tbrochld fn; develope tOBJ r\w func specification for brochld func
-
-#_________________________________________________________________
 function _tinit_i0(D, S, i)
 {
        for (i in S) {
@@ -6347,76 +5528,6 @@ function _tinit_i0(D, S, i)
        }
 }
 
-#_______________________________________________________________________
-########################################################################
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#_______________________________________________________________________
-#      _N(arr\str\mpuptr,val) \ _n(arr\str\mpuptr,val)
-#              This functions create new object and return ptr.
-#              _n() - creates object from list of deleted objects or if it's 
empty create new one, while _N() always create new one
-#              It is strongly recommended to use _N() for the objects that 
have some data outside of standart object arrays. Or - make routines
-#              that will clear outsided object data in case if object deleting.
-#
-#                      IN:             arr\str\mpu,val - (both missed) just 
create obj and return ptr
-#                                      arr,val         - create object and 
write arr[ptr]=val
-#                                      str,val         - create object and 
write _[ptr][str]=val
-#                                      mpuptr          - NOT ALLOWED (val 
missed) create object and run MPU-code specified by mpuptr with created object 
ptr as primary parameter
-#                      MOD:            -
-#                      OUT:            -
-#                      RETURN: ptr                     - pointer to newly 
created object
-#_________________________________________________________________
-#      _tdel(ptr)
-#              This function exclude object from it's current structure and 
delete it. ptr can be later used by function: _n() for creating new object
-#              Also same story will occured with all chields and subchields of 
object specified by ptr.
-#              ??? What happened with linked py _ptr[ptr] objects ???
-#
-#                      IN:             ptr                     - pointer to 
object that will deleted
-#                      MOD:            -
-#                      OUT:            -
-#                      RETURN: undefined
-#_________________________________________________________________
-#      _isptr(ptr)
-#              This function checks: is ptr is the object pointer that is 
currently exist?
-#              Unescaped remained data will be in data of src_dst_ptr.
-#
-#                      IN:             ptr                     - string that 
will be tested
-#                      MOD:            -
-#                      OUT:            -
-#                      RETURN: undefined               - if ptr is not pointer 
to exist object
-#                                      ptr                     - if ptr is the 
pointer to exist object
-#_________________________________________________________________
-
-
-
-#_________________________________________________________________
-#
-# TO DESIGN:
-#
-# create basic objectapi interface support
-# modify everywhere checking ptr not by `if ( ptr )...', but by `if ( ptr in _ 
)...'
-# _TMP0, _TMP1 name change to something like _DATA name ???
-# think about redesigning routines for not depending if ptr is exist in 
tsysarrs: reason: performance\light code
 function _tlist(L, p, f)
 {
        _tlisti1 = _tlisti0 = L[_ARRLEN] + 0
@@ -6477,7 +5588,6 @@ function _tlist_i1(L, p)
        }
 }
 
-#_________________________________________________________________
 function _tmbframe(f, p, p0, p1, t)
 {
        ##################################
@@ -6487,7 +5597,6 @@ function _tmbframe(f, p, p0, p1, t)
        return t
 }
 
-#_________________________________________________________________
 function _tmbframex(f, p, p0, p1, t)
 {
        #################################
@@ -6498,7 +5607,6 @@ function _tmbframex(f, p, p0, p1, t)
        return t
 }
 
-#_________________________________________________________________
 function _tmbpass(f, p, p0, p1)
 {
        ######################################
@@ -6508,7 +5616,6 @@ function _tmbpass(f, p, p0, p1)
        return p0
 }
 
-#_________________________________________________________________
 function _tmbpassx(f, p, p0, p1)
 {
        #####################################
@@ -6519,7 +5626,6 @@ function _tmbpassx(f, p, p0, p1)
        return p0
 }
 
-#_________________________________________________________________
 function _tmframe(f, p, p0, p1, p2)
 {
        ###################################
@@ -6529,7 +5635,6 @@ function _tmframe(f, p, p0, p1, p2)
        return f
 }
 
-#___________________________________________________________
 function _tmframe_i0(f, p, p0, p1, p2, t)
 {
        while ((p) && (! (_t_ENDF[0] in _t_ENDF))) {
@@ -6538,7 +5643,6 @@ function _tmframe_i0(f, p, p0, p1, p2, t)
        return t
 }
 
-#___________________________________________________________
 function _tmframe_i1(F, p, p0, p1, p2, t)
 {
        while ((p) && (! (_t_ENDF[0] in _t_ENDF))) {
@@ -6547,7 +5651,6 @@ function _tmframe_i1(F, p, p0, p1, p2, t)
        return t
 }
 
-#_________________________________________________________________
 function _tmframex(f, p, p0, p1, t)
 {
        ##################################
@@ -6558,7 +5661,6 @@ function _tmframex(f, p, p0, p1, t)
        return t
 }
 
-#_________________________________________________________________
 function _tmpass(f, p, p0, p1)
 {
        #######################################
@@ -6568,7 +5670,6 @@ function _tmpass(f, p, p0, p1)
        return p0
 }
 
-#_________________________________________________________________
 function _tmpassx(f, p, p0, p1)
 {
        ######################################
@@ -6594,7 +5695,6 @@ function _torexp_fmask(t)
        return gensub(/\\\*/, ".*", "G", gensub(/\\\?/, ".?", "G", 
_strtorexp(t)))
 }
 
-#_______________________________________________
 function _torexp_init()
 {
        _TOREXPFN[""] = "_strtorexp"
@@ -6606,13 +5706,11 @@ function _torexp_init()
        _TOREXPFN["'"] = "_torexp_sqstr"
 }
 
-#_______________________________________________
 function _torexp_rexp(t)
 {
        return t
 }
 
-#_____________________________________________________________________________
 function _tpass(f, p, p0, p1)
 {
        ####################################################
@@ -6622,7 +5720,6 @@ function _tpass(f, p, p0, p1)
        return f
 }
 
-#___________________________________________________________
 function _tpass_i0(f, p, p0, p1, a)
 {
        while (p in _tLINK) {
@@ -6631,7 +5728,6 @@ function _tpass_i0(f, p, p0, p1, a)
        return (p in _tFCHLD ? _tmpass(f, _tFCHLD[p], p0, p1) : @f(p, p0, p1))
 }
 
-#_____________________________________________________________________________
 function _tpassx(f, p, p0, p1)
 {
        ###################################################
@@ -6641,7 +5737,6 @@ function _tpassx(f, p, p0, p1)
        return f
 }
 
-#___________________________________________________________
 function _tpassx_i0(f, p, p0, p1)
 {
        while (p in _tLINK) {
@@ -6650,7 +5745,6 @@ function _tpassx_i0(f, p, p0, p1)
        return (p in _tFCHLD ? _tmpassx(f, _tFCHLD[p], p0, p1) : @f(p, p0, p1))
 }
 
-#_________________________________________________________________
 function _tpop(p, aA, a)
 {
        ###########################################
@@ -6666,7 +5760,6 @@ function _tpop(p, aA, a)
        _fatal("^" p ": Out of tSTACK")
 }
 
-#_____________________________________________________________________________
 function _tpush(p, aA, a)
 {
        ######################################################
@@ -6681,11 +5774,6 @@ function _tpush(p, aA, a)
        return (_tSTACK[p][a] = aA)
 }
 
-# prefix       -
-# prichr       - aware character `{', `^',`]'
-# sechr        - aware character `.' as the first char of sechr, and character 
`}'
-# suffix       - aware character `]'
-# cntptr       - aware character `]'
 function _tr(n, cs, H)
 {
        #_tuidinitcs[p]=cs
@@ -6704,7 +5792,6 @@ function _tr(n, cs, H)
        _rconl()
 }
 
-#_______________________________________________________________________
 function _trace(t, d, A)
 {
        #################################################
@@ -6715,14 +5802,12 @@ function _trace(t, d, A)
        }
 }
 
-#_________________________________________________________________
 function _trunframe(f, p, p0, p1, p2)
 {
        #################################
        return _tframe(f ? f : "_trunframe_i0", p, p0, p1, p2)
 }
 
-#_________________________________________________________________
 function _trunframe_i0(p, p0, p1, p2, f)
 {
        if (p in _tFN) {
@@ -6731,94 +5816,30 @@ function _trunframe_i0(p, p0, p1, p2, f)
        }
 }
 
-#_________________________________________________________________
 function _trunframex(f, p, p0, p1)
 {
        ###################################
        return _tframex(f ? f : "_trunframe_i0", p, p0, p1)
 }
 
-#_________________________________________________________________
 function _trunpass(f, p, p0, p1)
 {
        #####################################
        return _tpass(f ? f : "_trunframe_i0", p, p0, p1)
 }
 
-#_________________________________________________________________
 function _trunpassx(f, p, p0, p1)
 {
        ####################################
        return _tpassx(f ? f : "_trunframe_i0", p, p0, p1)
 }
 
-#_________________________________________________________________
 function _tsetsp(p, v)
 {
        #############################################
        return (_tSTACK[p][0] = v)
 }
 
-#                      dptr                    - morg ptr; in case if object 
deleted then _CLASSPTR[ptr] will be deleted(object is death), but
-#                                                      _tUIDEL[_CLASSPTR[ptr]] 
will be created that object can be resurrected from morg
-#                                                      dptr can be any string 
containing any characters except `:'. It's not verified
-#                      pfx,sfx         - uid prefix str, and uid suffix str; 
this strings specifies string that can be inserted before/after
-#                                                      uid generated by uid 
generator:
-#
-#                                                              class uid:      
                pfx uidgen sfx
-#
-#                                                      Both can be any 
string(including ""), and can contains any character with B4-escaping feature.
-#                                                      Note: that this strings 
cannot contains "'" character: it's should be escaped by B4-escaper.
-#                      hstr,lstr               - this values configure 
uid-generator itself. ther is a 3 combinations regarding its:
-#
-#                                                              hstr            
        lstr                    function
-#
-#                                                              `ptr            
        *                       - specify pointer to external uid-generator
-#                                                                              
                                All uids and chars will be generated by 
external uid-generator
-#                                                              *               
        ^ptr                    - class will have it's own uid generator using 
external character set
-#                                                              str             
        str                     - class will have it's own uid generator with 
it's own character set
-#                                                                              
                                character set inmplemented in 
hstr(high-charset) and in lstr(low-charset) in 2 ways:
-#                                                      1)      "AB"            
        "AB01"                  - this mean that high-charset contain chars: 
`A' and `B'
-#                                                                              
                                                low-charset contains chars: 
`A', `B', `0', `1'
-#
-#                                                      2)      "Az,By"         
"Ax,Bw,0v,1u"           - this mean that high-charset contain chars: `Az' and 
`By'
-#                                                                              
                                                low-charset contains chars:  
`Ax', `Bw', `0v', `1u'
-#                                                                              
                                        Note: both: hstr and lstr cannot 
contain char `,' directly, but it's can uses
-#                                                                              
                                                        B4-escaper to escape 
any char including `,'
-
-
-
-# !!!! in case of using `,' in hstr/lstr - the escaped `,' will leads to 
interpretate hstr and lstr as divided by `,'
-# if parameters error then i should be more specific about what error in 
parameters detected
-# document _inituid(): parameters; document cs: uid initialization string 
format
-# test with escape char
-# adv hstr and lstr splitting?
-# chk if hstr len==0 ?
-# return _tclass & report error?
-# _tapi thru function
-
-# additional syntax checking ???
-# implement syntax and uid srv in docs
-# add _dumpuid() ????
-# make performance measurement
-# protection against badchar list
-# additional feature to specify _getuid() to not resurrect uid; and 
informative that uid was ressurected or not
-# build _defclass fn
-
-# _tuidinitcs ????
-# _tuidchrh[p]
-# _tuidchrl[p]
-# _tuidchr[p]
-# _tuidcnt[p]
-# _tUIDPFX[p]
-# _tUIDSFX[p]
-# _tUIDEL
-# _tUIDCNTH
-# _tUIDCNTL
-# _tUIDCHRL
-# _tUIDCHRH
-
-# create default class basic `new' and `del' functions
 function _tstini()
 {
        _ini("uidel:pfx'hstr|lstr'sfx")
@@ -6906,31 +5927,6 @@ function _typa(p, A)
        return (_t0 = isarray(p) ? "#" : p == 0 ? p == "" ? 0 : p in A ? "`" : 
p ? 3 : 4 : p in A ? "`" : p + 0 == p ? 5 : p ? 3 : 2)
 }
 
-#_____________________________________________________
-#      _tframe0(hndstr,ptr)
-#
-#
-#                      IN:
-#                      MOD:
-#                      OUT:
-#                      RETURN:
-#
-#      handler string:
-#              Handler-string divides to words. Word splitter is char ";"
-#
-#      Note that handler-string processed left to right. This mean that next 
word(more rightly) will overwrite fields implemented before(leftmost).
-#      Note that if word-string contains more than one rexp-field then only 
last rexp-field(most rightly) will be applied.
-#_______________________________________________
-# TO DESIGN:
-#
-# 0-4: complete design of tlink handler call
-# 1-4: add new tlink handler call
-# 1-4: add new run fn (changed rexp to different for each type: see _tframe0)
-#
-# hndstr:
-#      may be add rexp for each type of handler and also total rexp for all 
??? ADDED (test)
-#      may be add separator char ";" ???               ADDED (test)
-#_______________________________________________________________________
 function _tzend(a, b)
 {
        #####################################################
@@ -6955,7 +5951,6 @@ function _une(t)
        return gensub(/\xB4(.)/, "\\1", "G", t)
 }
 
-#___________________________________________________________________________________
 function _unformatrexp(t)
 {
        _formatstrq0 = split(t, _FORMATSTRA, 
/(\\[0-9]{1,3})|(\\x[[:xdigit:]]+)|(\\.)/, _FORMATSTRB)
@@ -6966,7 +5961,6 @@ function _unformatrexp(t)
        return (_formatstrs0 _FORMATSTRA[t])
 }
 
-#___________________________________________________________
 function _unformatrexp_init(i, a)
 {
        _formatstrs0 = "\\^$.[]|()*+?{}-sSwW<>yB`'"
@@ -6994,7 +5988,6 @@ function _unformatrexp_init(i, a)
        }
 }
 
-#___________________________________________________________________________________
 function _unformatstr(t)
 {
        _formatstrq0 = split(t, _FORMATSTRA, 
/(\\[0-9]{1,3})|(\\x[[:xdigit:]]+)|(\\.)/, _FORMATSTRB)
@@ -7005,7 +5998,6 @@ function _unformatstr(t)
        return (_formatstrs0 _FORMATSTRA[t])
 }
 
-#___________________________________________________________
 function _unformatstr_init(i)
 {
        for (i = 0; i < 256; i++) {
@@ -7031,44 +6023,16 @@ function _unformatstr_init(i)
        }
 }
 
-#_____________________________________________________________________________
 function _uninit_del(A, i, p0)
 {
        _del(i)
 }
 
-####################################################################################
-# PUBLIC:
-#_____________________________________________________________________________
-#      var     _SYS_STDOUT                     - (by default = "/dev/stdout") 
standart output pipe filename
-#      var     _SYS_STDERR                     - (by default = "/dev/stderr") 
standart error output pipe filename
-#      var     _SYS_STDCON                     - (by default = "CON") standart 
console output device
-#_____________________________________________________________________________
-#      var     _CHR["CR"]                      - return cursor to the position 
0 without newline(normally ="\x0D")
-#      var     _CHR["EOL"]                     - return cursor to the position 
0 & newline (MS:="\x0D\x0A" / UX:="\x0D")
-#      var     _CON_WIDTH                      - console width(columns number)
-#_____________________________________________________________________________
-#      fn      _cmd(c)                 - execute shell command c and return 
output
-#      fn      _err                            - output string w\o any 
addition into _SYS_STDERR device
-#      fn      _errnl                  - output string with addition 
_CHR["EOL"] at the end of the string into _SYS_STDERR device
-#      fn      _out                            - output string w\o any 
addition into _SYS_STDOUT device
-#      fn      _outnl                  - output string with addition 
_CHR["EOL"] at the end of the string into _SYS_STDOUT device
-#_____________________________________________________________________________
-#      fn      _con(text[,tabspace])
-#      fn      _conl(text[,tabspace])
-#      fn      _conline(text[,tabspace])
-#      fn      _constat(status[,tabspace])
-#      fn      _constatpush([status[,tabspace]])
-#      fn      _constatpop()
-#_______________________________________________________________________
-#      var     _constatstr
-####################################################################################
 function _unstr(t)
 {
        return gensub(/\\(.)/, "\\1", "G", t)
 }
 
-#_________________________________________________________________
 function _untmp(f, a)
 {
        #############################################
@@ -7084,7 +6048,6 @@ function _untmp(f, a)
        return ""
 }
 
-#_____________________________________________________________________________
 function _val(v, t)
 {
        if (isarray(v)) {
@@ -7096,7 +6059,6 @@ function _val(v, t)
        return (_ln(v "'") _ln(t))
 }
 
-#_____________________________________________________________________________
 function _val0(v)
 {
        if (isarray(v)) {
@@ -7108,7 +6070,6 @@ function _val0(v)
        return ("\"" v "\"")
 }
 
-#_____________________________________________________________________________
 function _var(v, t)
 {
        if (isarray(v)) {
@@ -7120,7 +6081,6 @@ function _var(v, t)
        return (_ln(v "'") _ln(t))
 }
 
-#_______________________________________________________________________
 function _verb(t, d, A)
 {
        ##################################################
@@ -7131,7 +6091,6 @@ function _verb(t, d, A)
        }
 }
 
-#_________________________________________________________________
 function _wFBRO(p, v, a)
 {
        ###########################################
@@ -7234,10 +6193,10 @@ function _wFBRO(p, v, a)
                        }                       ######################## p=ptr, 
v=0
                        return v
                }
-       } else {        ######################## p=ptr, v=""
+       } else {
                if (p == 0) {
                        return v        ######################## p=0
-               }
+               }               ######################## p=ptr, v=""
                if (v) {
                        return _texclude(v)     ######################## p="", 
v=ptr    - exclude v
                }
@@ -7245,7 +6204,6 @@ function _wFBRO(p, v, a)
        }
 }
 
-#_________________________________________________________________
 function _wFCHLD(p, v, a)
 {
        ##########################################
@@ -7325,15 +6283,14 @@ function _wFCHLD(p, v, a)
                        }
                        return v
                }
-       } else {        ######################## p=ptr, v="" > ignore action
+       } else {
                if (p == 0) {
                        return v        ######################## p=0
-               }
+               }               ######################## p=ptr, v="" > ignore 
action
                return v
        }
 }
 
-#_________________________________________________________________
 function _wLBRO(p, v, a)
 {
        ###########################################
@@ -7436,10 +6393,10 @@ function _wLBRO(p, v, a)
                        }                       ######################## p=ptr, 
v=0
                        return v
                }
-       } else {        ######################## p=ptr, v=""
+       } else {
                if (p == 0) {
                        return v        ######################## p=0
-               }
+               }               ######################## p=ptr, v=""
                if (v) {
                        return _texclude(v)     ######################## p="", 
v=ptr    - exclude v
                }
@@ -7447,7 +6404,6 @@ function _wLBRO(p, v, a)
        }
 }
 
-#_________________________________________________________________
 function _wLCHLD(p, v, a)
 {
        ##########################################
@@ -7527,22 +6483,20 @@ function _wLCHLD(p, v, a)
                        }
                        return v
                }
-       } else {        ######################## p=ptr, v="" > ignore action
+       } else {
                if (p == 0) {
                        return v        ######################## p=0
-               }
+               }               ######################## p=ptr, v="" > ignore 
action
                return v
        }
 }
 
-#_________________________________________________________________
 function _wLINK(p, v)
 {
        ##############################################
        return (_tLINK[p] = v)
 }
 
-#_________________________________________________________________
 function _wNEXT(p, v, a, b)
 {
        #########################################
@@ -7606,10 +6560,10 @@ function _wNEXT(p, v, a, b)
                        }                       ######################## p=ptr, 
v=0
                        return v
                }
-       } else {        ######################## p=ptr, v=""
+       } else {
                if (p == 0) {
                        return v        ######################## p=0
-               }
+               }               ######################## p=ptr, v=""
                if (v) {
                        return _texclude(v)     ######################## p="", 
v=ptr    - exclude v
                }
@@ -7617,14 +6571,12 @@ function _wNEXT(p, v, a, b)
        }
 }
 
-#_________________________________________________________________
 function _wPARENT(p, v)
 {
        ############################################
        return v
 }
 
-#_________________________________________________________________
 function _wPREV(p, v, a, b)
 {
        #########################################
@@ -7688,10 +6640,10 @@ function _wPREV(p, v, a, b)
                        }                       ######################## p=ptr, 
v=0
                        return v
                }
-       } else {        ######################## p=ptr, v=""
+       } else {
                if (p == 0) {
                        return v        ######################## p=0
-               }
+               }               ######################## p=ptr, v=""
                if (v) {
                        return _texclude(v)     ######################## p="", 
v=ptr    - exclude v
                }
@@ -7699,23 +6651,21 @@ function _wPREV(p, v, a, b)
        }
 }
 
-#_________________________________________________________________
 function _wQBRO(p, v)
 {
        ##############################################
        return v
 }
 
-#_________________________________________________________________
 function _wQCHLD(p, v)
 {
        #############################################
        if (p) {
                if (v) {
-               } else {        ######################## p=ptr, v=ptr
+               } else {
                        if (v == 0) {
                                if (p in _tFCHLD) {     
######################## p=ptr, v=0 > delete all chld
-                                       v = _tFCHLD[p]
+                                       v = _tFCHLD[p]  
######################## p=ptr, v=ptr
                                        delete _tFCHLD[p]
                                        delete _tLCHLD[p]
                                        delete _tQCHLD[p]
@@ -7726,15 +6676,14 @@ function _wQCHLD(p, v)
                        }
                        return v
                }
-       } else {        ######################## p=ptr, v="" > ignore action
+       } else {
                if (p == 0) {
-                       return v
+                       return v        ######################## p=ptr, v="" > 
ignore action
                }               ######################## p=0
                return v
        }
 }
 
-#_______________________________________________________________________
 function _warning(t, d, A)
 {
        ###############################################
@@ -7745,7 +6694,6 @@ function _warning(t, d, A)
        }
 }
 
-#___________________________________________________________
 function _wfilerdnehnd(f, t)
 {
        if ((f = _filerdne(f)) == "") {
@@ -7768,7 +6716,6 @@ function _wonline(t)
        wonl = wonl _ln(substr(" _ " t " 
_____________________________________________________________________________________________________________________________________",
 1, 126))
 }
 
-#___________________________________________________________
 function _wr_shortcut(f, S)
 {
        if ((_shrtcutf0 = _filepath(f))) {
@@ -7786,7 +6733,6 @@ function _wr_shortcut(f, S)
        return (ERRNO ? ERRNO = "write shortcut: " ERRNO : _NOP)
 }
 
-#_________________________________________________________________
 function _wrfile(f, d, a, b)
 {
        #########################################
@@ -7812,7 +6758,6 @@ function _wrfile(f, d, a, b)
        return f
 }
 
-#___________________________________________________________
 function _wrfile1(f, d, a, b)
 {
        ##################################
@@ -7838,14 +6783,12 @@ function _wrfile1(f, d, a, b)
        return d
 }
 
-#_______________________________________________________________________
 function _yexport(p)
 {
        #####################################################
        return _tframe("_yexport_i0", p)
 }
 
-#_______________________________________________________________________
 function _yexport_i0(p, p0, p1, p2)
 {
        if (p in _tLOG) {
@@ -7859,14 +6802,12 @@ function _yexport_i0(p, p0, p1, p2)
        }
 }
 
-#_________________________________________________________________
 function cmp_str_idx(i1, v1, i2, v2)
 {
        ##############################
        return (i1 < i2 ? -1 : 1)
 }
 
-#___________________________________________________________
 function filedi(f, d)
 {
        if ((f = filerdnehndi(f)) == "") {
@@ -7887,7 +6828,6 @@ function filedi(f, d)
        return (_FILEDIR[_FILEIO_RD, f] = _FILEIO_D _FILEDIR[f])
 }
 
-#___________________________________________________________
 function filegetdrvdir(t, r)
 {
        if (t in _FILEDRV) {
@@ -7903,7 +6843,6 @@ function filegetdrvdir(t, r)
        return ""
 }
 
-#___________________________________________________________
 function filegetrootdir(f, dd, d)
 {
        if (f in _FILEDIRFL) {
@@ -7941,7 +6880,6 @@ function filegetrootdir(f, dd, d)
        return (_FILEROOT[dd, f] = fileri(dd)) d
 }
 
-#___________________________________________________________
 function filerdnehndi(st, a, c, r, d, n, A)
 {
        if (st) {
@@ -7994,7 +6932,6 @@ function filerdnehndi(st, a, c, r, d, n, A)
        return ""
 }
 
-#_____________________________________________________
 function fileri(f)
 {
        if ((f = filerdnehndi(f)) == "") {
@@ -8014,7 +6951,6 @@ function hujf(a, b, c)
        _conl("hujf(" a "," b "," c ")")
 }
 
-#___________________________________________________________
 function ncmp_str_idx(i1, v1, i2, v2)
 {
        #######################
@@ -8109,22 +7045,6 @@ function tts(p, uidel, psfx, cnt, chr, p5, p6, p7, im)
        _conl("mask: `" _qparamask "'")
 }
 
-#                      #               - p is array
-#                      `               - p is ptr detected in array 
_CLASSPTR(for _typ); or p is ptr detected in array A(for _typa)
-#                      0               - p is undefined
-
-#                      2               - p is string==""
-#                      3               - p is string!=""
-#                      4               - p is number 0
-#                      5               - p is any number except 0(positive and 
negative)
-
-# str:                 _typ(p)+0               !_typ(p)+0
-# str/ptr                      _typ(p)>0               _typ(p)<1
-# str/arr                      "`">_typ(p0) && _t0
-# str/ptr/arr          _typ(p)         !_typ(p)
-# ptr                          _typ(p)=="`"    _typ(p)<"`"  ?
-# ptr/arr                      _typ(p)+0!=_t0
-# arr                          _typ(p)=="#"    _typ(p)>"#"  ?
 function zorr(A, i, r)
 {
        if (i in A) {
@@ -8139,7 +7059,6 @@ function zorr(A, i, r)
        _conl("``````````````" a "''''''''''''''''")
 }
 
-#_____________________________________________________________________________
 function zzer()
 {
        ################################################################

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog        |    6 +
 awkgram.c        |  885 ++++++++++++++++----------------
 awkgram.y        |   80 +--
 test/ChangeLog   |    4 +
 test/profile5.ok | 1499 ++++++++----------------------------------------------
 5 files changed, 712 insertions(+), 1762 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]