diff options
-rwxr-xr-x | ChangeLog | 6 | ||||
-rw-r--r-- | awkgram.c | 808 | ||||
-rw-r--r-- | awkgram.y | 18 | ||||
-rw-r--r-- | test/ChangeLog | 5 | ||||
-rw-r--r-- | test/profile11.awk | 16 | ||||
-rw-r--r-- | test/profile11.ok | 24 | ||||
-rw-r--r-- | test/profile5.ok | 1291 |
7 files changed, 1675 insertions, 493 deletions
@@ -1,3 +1,9 @@ +2018-11-27 Arnold D. Robbins <arnold@skeeve.com> + + * awkgram.y (Grammar): In rule for function, set interblock_comment. + (mk_function): Hook interblock_comment onto fi->comment, merge it + with the existing one first, if any. Append trailing_comment. + 2018-11-26 Arnold D. Robbins <arnold@skeeve.com> * main.c (platform_name): Add os390. Treat Cygwin and Mac OS X @@ -662,26 +662,26 @@ static const yytype_uint8 yytranslate[] = static const yytype_uint16 yyrline[] = { 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 + 279, 289, 302, 312, 314, 319, 329, 331, 337, 341, + 346, 376, 389, 402, 409, 419, 437, 439, 441, 447, + 455, 456, 460, 460, 494, 493, 527, 542, 544, 549, + 550, 570, 575, 576, 580, 591, 596, 603, 711, 762, + 812, 938, 959, 980, 990, 1000, 1010, 1021, 1034, 1052, + 1051, 1065, 1083, 1083, 1181, 1181, 1214, 1244, 1252, 1253, + 1259, 1260, 1267, 1272, 1285, 1300, 1302, 1310, 1317, 1319, + 1327, 1336, 1338, 1347, 1348, 1356, 1361, 1361, 1374, 1380, + 1392, 1396, 1418, 1419, 1425, 1426, 1435, 1436, 1441, 1446, + 1463, 1465, 1467, 1474, 1475, 1481, 1482, 1487, 1489, 1496, + 1498, 1506, 1511, 1522, 1523, 1528, 1530, 1537, 1539, 1547, + 1552, 1562, 1563, 1568, 1575, 1579, 1581, 1583, 1596, 1613, + 1623, 1630, 1632, 1637, 1639, 1641, 1649, 1651, 1656, 1658, + 1663, 1665, 1667, 1724, 1726, 1728, 1730, 1732, 1734, 1736, + 1738, 1752, 1757, 1762, 1787, 1793, 1795, 1797, 1799, 1801, + 1803, 1808, 1812, 1844, 1852, 1858, 1864, 1877, 1878, 1879, + 1884, 1889, 1893, 1897, 1912, 1933, 1938, 1975, 2004, 2005, + 2011, 2012, 2017, 2019, 2026, 2043, 2060, 2062, 2069, 2074, + 2082, 2092, 2104, 2113, 2117, 2122, 2126, 2130, 2134, 2139, + 2140, 2144, 2148, 2152 }; #endif @@ -1965,13 +1965,17 @@ yyreduce: in_function = NULL; (void) mk_function((yyvsp[-1]), (yyvsp[0])); want_param_names = DONT_CHECK; + if (pending_comment != NULL) { + interblock_comment = pending_comment; + pending_comment = NULL; + } yyerrok; } -#line 1971 "awkgram.c" /* yacc.c:1645 */ +#line 1975 "awkgram.c" /* yacc.c:1645 */ break; case 10: -#line 276 "awkgram.y" /* yacc.c:1645 */ +#line 280 "awkgram.y" /* yacc.c:1645 */ { want_source = false; at_seen = false; @@ -1981,11 +1985,11 @@ yyreduce: } yyerrok; } -#line 1985 "awkgram.c" /* yacc.c:1645 */ +#line 1989 "awkgram.c" /* yacc.c:1645 */ break; case 11: -#line 286 "awkgram.y" /* yacc.c:1645 */ +#line 290 "awkgram.y" /* yacc.c:1645 */ { want_source = false; at_seen = false; @@ -1995,11 +1999,11 @@ yyreduce: } yyerrok; } -#line 1999 "awkgram.c" /* yacc.c:1645 */ +#line 2003 "awkgram.c" /* yacc.c:1645 */ break; case 12: -#line 299 "awkgram.y" /* yacc.c:1645 */ +#line 303 "awkgram.y" /* yacc.c:1645 */ { void *srcfile = NULL; @@ -2009,23 +2013,23 @@ yyreduce: bcfree((yyvsp[0])); (yyval) = (INSTRUCTION *) srcfile; } -#line 2013 "awkgram.c" /* yacc.c:1645 */ +#line 2017 "awkgram.c" /* yacc.c:1645 */ break; case 13: -#line 309 "awkgram.y" /* yacc.c:1645 */ +#line 313 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 2019 "awkgram.c" /* yacc.c:1645 */ +#line 2023 "awkgram.c" /* yacc.c:1645 */ break; case 14: -#line 311 "awkgram.y" /* yacc.c:1645 */ +#line 315 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 2025 "awkgram.c" /* yacc.c:1645 */ +#line 2029 "awkgram.c" /* yacc.c:1645 */ break; case 15: -#line 316 "awkgram.y" /* yacc.c:1645 */ +#line 320 "awkgram.y" /* yacc.c:1645 */ { void *srcfile; @@ -2035,40 +2039,40 @@ yyreduce: bcfree((yyvsp[0])); (yyval) = (INSTRUCTION *) srcfile; } -#line 2039 "awkgram.c" /* yacc.c:1645 */ +#line 2043 "awkgram.c" /* yacc.c:1645 */ break; case 16: -#line 326 "awkgram.y" /* yacc.c:1645 */ +#line 330 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 2045 "awkgram.c" /* yacc.c:1645 */ +#line 2049 "awkgram.c" /* yacc.c:1645 */ break; case 17: -#line 328 "awkgram.y" /* yacc.c:1645 */ +#line 332 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 2051 "awkgram.c" /* yacc.c:1645 */ +#line 2055 "awkgram.c" /* yacc.c:1645 */ break; case 18: -#line 333 "awkgram.y" /* yacc.c:1645 */ +#line 337 "awkgram.y" /* yacc.c:1645 */ { rule = Rule; (yyval) = NULL; } -#line 2060 "awkgram.c" /* yacc.c:1645 */ +#line 2064 "awkgram.c" /* yacc.c:1645 */ break; case 19: -#line 338 "awkgram.y" /* yacc.c:1645 */ +#line 342 "awkgram.y" /* yacc.c:1645 */ { rule = Rule; } -#line 2068 "awkgram.c" /* yacc.c:1645 */ +#line 2072 "awkgram.c" /* yacc.c:1645 */ break; case 20: -#line 343 "awkgram.y" /* yacc.c:1645 */ +#line 347 "awkgram.y" /* yacc.c:1645 */ { INSTRUCTION *tp; @@ -2098,11 +2102,11 @@ yyreduce: (yyval) = list_append(list_merge((yyvsp[-3]), (yyvsp[0])), tp); rule = Rule; } -#line 2102 "awkgram.c" /* yacc.c:1645 */ +#line 2106 "awkgram.c" /* yacc.c:1645 */ break; case 21: -#line 373 "awkgram.y" /* yacc.c:1645 */ +#line 377 "awkgram.y" /* yacc.c:1645 */ { static int begin_seen = 0; @@ -2115,11 +2119,11 @@ yyreduce: (yyvsp[0])->source_file = source; (yyval) = (yyvsp[0]); } -#line 2119 "awkgram.c" /* yacc.c:1645 */ +#line 2123 "awkgram.c" /* yacc.c:1645 */ break; case 22: -#line 386 "awkgram.y" /* yacc.c:1645 */ +#line 390 "awkgram.y" /* yacc.c:1645 */ { static int end_seen = 0; @@ -2132,33 +2136,33 @@ yyreduce: (yyvsp[0])->source_file = source; (yyval) = (yyvsp[0]); } -#line 2136 "awkgram.c" /* yacc.c:1645 */ +#line 2140 "awkgram.c" /* yacc.c:1645 */ break; case 23: -#line 399 "awkgram.y" /* yacc.c:1645 */ +#line 403 "awkgram.y" /* yacc.c:1645 */ { func_first = false; (yyvsp[0])->in_rule = rule = BEGINFILE; (yyvsp[0])->source_file = source; (yyval) = (yyvsp[0]); } -#line 2147 "awkgram.c" /* yacc.c:1645 */ +#line 2151 "awkgram.c" /* yacc.c:1645 */ break; case 24: -#line 406 "awkgram.y" /* yacc.c:1645 */ +#line 410 "awkgram.y" /* yacc.c:1645 */ { func_first = false; (yyvsp[0])->in_rule = rule = ENDFILE; (yyvsp[0])->source_file = source; (yyval) = (yyvsp[0]); } -#line 2158 "awkgram.c" /* yacc.c:1645 */ +#line 2162 "awkgram.c" /* yacc.c:1645 */ break; case 25: -#line 416 "awkgram.y" /* yacc.c:1645 */ +#line 420 "awkgram.y" /* yacc.c:1645 */ { INSTRUCTION *ip = make_braced_statements((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2])); @@ -2173,48 +2177,48 @@ yyreduce: (yyval) = ip; } -#line 2177 "awkgram.c" /* yacc.c:1645 */ +#line 2181 "awkgram.c" /* yacc.c:1645 */ break; case 26: -#line 434 "awkgram.y" /* yacc.c:1645 */ +#line 438 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 2183 "awkgram.c" /* yacc.c:1645 */ +#line 2187 "awkgram.c" /* yacc.c:1645 */ break; case 27: -#line 436 "awkgram.y" /* yacc.c:1645 */ +#line 440 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 2189 "awkgram.c" /* yacc.c:1645 */ +#line 2193 "awkgram.c" /* yacc.c:1645 */ break; case 28: -#line 438 "awkgram.y" /* yacc.c:1645 */ +#line 442 "awkgram.y" /* yacc.c:1645 */ { yyerror(_("`%s' is a built-in function, it cannot be redefined"), tokstart); YYABORT; } -#line 2199 "awkgram.c" /* yacc.c:1645 */ +#line 2203 "awkgram.c" /* yacc.c:1645 */ break; case 29: -#line 444 "awkgram.y" /* yacc.c:1645 */ +#line 448 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); at_seen = false; } -#line 2208 "awkgram.c" /* yacc.c:1645 */ +#line 2212 "awkgram.c" /* yacc.c:1645 */ break; case 32: -#line 456 "awkgram.y" /* yacc.c:1645 */ +#line 460 "awkgram.y" /* yacc.c:1645 */ { want_param_names = FUNC_HEADER; } -#line 2214 "awkgram.c" /* yacc.c:1645 */ +#line 2218 "awkgram.c" /* yacc.c:1645 */ break; case 33: -#line 457 "awkgram.y" /* yacc.c:1645 */ +#line 461 "awkgram.y" /* yacc.c:1645 */ { INSTRUCTION *func_comment = NULL; // Merge any comments found in the parameter list with those @@ -2240,17 +2244,17 @@ yyreduce: (yyval) = (yyvsp[-6]); want_param_names = FUNC_BODY; } -#line 2244 "awkgram.c" /* yacc.c:1645 */ +#line 2248 "awkgram.c" /* yacc.c:1645 */ break; case 34: -#line 490 "awkgram.y" /* yacc.c:1645 */ +#line 494 "awkgram.y" /* yacc.c:1645 */ { want_regexp = true; } -#line 2250 "awkgram.c" /* yacc.c:1645 */ +#line 2254 "awkgram.c" /* yacc.c:1645 */ break; case 35: -#line 492 "awkgram.y" /* yacc.c:1645 */ +#line 496 "awkgram.y" /* yacc.c:1645 */ { NODE *n, *exp; char *re; @@ -2279,11 +2283,11 @@ yyreduce: (yyval)->opcode = Op_match_rec; (yyval)->memory = n; } -#line 2283 "awkgram.c" /* yacc.c:1645 */ +#line 2287 "awkgram.c" /* yacc.c:1645 */ break; case 36: -#line 524 "awkgram.y" /* yacc.c:1645 */ +#line 528 "awkgram.y" /* yacc.c:1645 */ { char *re; size_t len; @@ -2296,23 +2300,23 @@ yyreduce: (yyval)->opcode = Op_push_re; (yyval)->memory = make_typed_regex(re, len); } -#line 2300 "awkgram.c" /* yacc.c:1645 */ +#line 2304 "awkgram.c" /* yacc.c:1645 */ break; case 37: -#line 539 "awkgram.y" /* yacc.c:1645 */ +#line 543 "awkgram.y" /* yacc.c:1645 */ { bcfree((yyvsp[0])); } -#line 2306 "awkgram.c" /* yacc.c:1645 */ +#line 2310 "awkgram.c" /* yacc.c:1645 */ break; case 39: -#line 545 "awkgram.y" /* yacc.c:1645 */ +#line 549 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 2312 "awkgram.c" /* yacc.c:1645 */ +#line 2316 "awkgram.c" /* yacc.c:1645 */ break; case 40: -#line 547 "awkgram.y" /* yacc.c:1645 */ +#line 551 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[0]) == NULL) { (yyval) = (yyvsp[-1]); @@ -2332,29 +2336,29 @@ yyreduce: yyerrok; } -#line 2336 "awkgram.c" /* yacc.c:1645 */ +#line 2340 "awkgram.c" /* yacc.c:1645 */ break; case 41: -#line 567 "awkgram.y" /* yacc.c:1645 */ +#line 571 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 2342 "awkgram.c" /* yacc.c:1645 */ +#line 2346 "awkgram.c" /* yacc.c:1645 */ break; case 42: -#line 571 "awkgram.y" /* yacc.c:1645 */ +#line 575 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 2348 "awkgram.c" /* yacc.c:1645 */ +#line 2352 "awkgram.c" /* yacc.c:1645 */ break; case 43: -#line 572 "awkgram.y" /* yacc.c:1645 */ +#line 576 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 2354 "awkgram.c" /* yacc.c:1645 */ +#line 2358 "awkgram.c" /* yacc.c:1645 */ break; case 44: -#line 577 "awkgram.y" /* yacc.c:1645 */ +#line 581 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[0]) != NULL) { INSTRUCTION *ip; @@ -2365,31 +2369,31 @@ yyreduce: } else (yyval) = NULL; } -#line 2369 "awkgram.c" /* yacc.c:1645 */ +#line 2373 "awkgram.c" /* yacc.c:1645 */ break; case 45: -#line 588 "awkgram.y" /* yacc.c:1645 */ +#line 592 "awkgram.y" /* yacc.c:1645 */ { trailing_comment = (yyvsp[0]); // NULL or comment (yyval) = make_braced_statements((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); } -#line 2378 "awkgram.c" /* yacc.c:1645 */ +#line 2382 "awkgram.c" /* yacc.c:1645 */ break; case 46: -#line 593 "awkgram.y" /* yacc.c:1645 */ +#line 597 "awkgram.y" /* yacc.c:1645 */ { if (do_pretty_print) (yyval) = list_prepend((yyvsp[0]), instruction(Op_exec_count)); else (yyval) = (yyvsp[0]); } -#line 2389 "awkgram.c" /* yacc.c:1645 */ +#line 2393 "awkgram.c" /* yacc.c:1645 */ break; case 47: -#line 600 "awkgram.y" /* yacc.c:1645 */ +#line 604 "awkgram.y" /* yacc.c:1645 */ { INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt; INSTRUCTION *ip, *nextc, *tbreak; @@ -2497,11 +2501,11 @@ yyreduce: break_allowed--; fix_break_continue(ip, tbreak, NULL); } -#line 2501 "awkgram.c" /* yacc.c:1645 */ +#line 2505 "awkgram.c" /* yacc.c:1645 */ break; case 48: -#line 708 "awkgram.y" /* yacc.c:1645 */ +#line 712 "awkgram.y" /* yacc.c:1645 */ { /* * ----------------- @@ -2552,11 +2556,11 @@ yyreduce: continue_allowed--; fix_break_continue(ip, tbreak, tcont); } -#line 2556 "awkgram.c" /* yacc.c:1645 */ +#line 2560 "awkgram.c" /* yacc.c:1645 */ break; case 49: -#line 759 "awkgram.y" /* yacc.c:1645 */ +#line 763 "awkgram.y" /* yacc.c:1645 */ { /* * ----------------- @@ -2606,11 +2610,11 @@ yyreduce: /* else $1 and $4 are NULLs */ } -#line 2610 "awkgram.c" /* yacc.c:1645 */ +#line 2614 "awkgram.c" /* yacc.c:1645 */ break; case 50: -#line 809 "awkgram.y" /* yacc.c:1645 */ +#line 813 "awkgram.y" /* yacc.c:1645 */ { INSTRUCTION *ip; char *var_name = (yyvsp[-5])->lextok; @@ -2736,11 +2740,11 @@ regular_loop: break_allowed--; continue_allowed--; } -#line 2740 "awkgram.c" /* yacc.c:1645 */ +#line 2744 "awkgram.c" /* yacc.c:1645 */ break; case 51: -#line 935 "awkgram.y" /* yacc.c:1645 */ +#line 939 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[-7]) != NULL) { merge_comments((yyvsp[-7]), NULL); @@ -2761,11 +2765,11 @@ regular_loop: break_allowed--; continue_allowed--; } -#line 2765 "awkgram.c" /* yacc.c:1645 */ +#line 2769 "awkgram.c" /* yacc.c:1645 */ break; case 52: -#line 956 "awkgram.y" /* yacc.c:1645 */ +#line 960 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[-6]) != NULL) { merge_comments((yyvsp[-6]), NULL); @@ -2786,22 +2790,22 @@ regular_loop: break_allowed--; continue_allowed--; } -#line 2790 "awkgram.c" /* yacc.c:1645 */ +#line 2794 "awkgram.c" /* yacc.c:1645 */ break; case 53: -#line 977 "awkgram.y" /* yacc.c:1645 */ +#line 981 "awkgram.y" /* yacc.c:1645 */ { if (do_pretty_print) (yyval) = list_prepend((yyvsp[0]), instruction(Op_exec_count)); else (yyval) = (yyvsp[0]); } -#line 2801 "awkgram.c" /* yacc.c:1645 */ +#line 2805 "awkgram.c" /* yacc.c:1645 */ break; case 54: -#line 987 "awkgram.y" /* yacc.c:1645 */ +#line 991 "awkgram.y" /* yacc.c:1645 */ { if (! break_allowed) error_ln((yyvsp[-1])->source_line, @@ -2811,11 +2815,11 @@ regular_loop: if ((yyvsp[0]) != NULL) (yyval) = list_append((yyval), (yyvsp[0])); } -#line 2815 "awkgram.c" /* yacc.c:1645 */ +#line 2819 "awkgram.c" /* yacc.c:1645 */ break; case 55: -#line 997 "awkgram.y" /* yacc.c:1645 */ +#line 1001 "awkgram.y" /* yacc.c:1645 */ { if (! continue_allowed) error_ln((yyvsp[-1])->source_line, @@ -2825,11 +2829,11 @@ regular_loop: if ((yyvsp[0]) != NULL) (yyval) = list_append((yyval), (yyvsp[0])); } -#line 2829 "awkgram.c" /* yacc.c:1645 */ +#line 2833 "awkgram.c" /* yacc.c:1645 */ break; case 56: -#line 1007 "awkgram.y" /* yacc.c:1645 */ +#line 1011 "awkgram.y" /* yacc.c:1645 */ { /* if inside function (rule = 0), resolve context at run-time */ if (rule && rule != Rule) @@ -2840,11 +2844,11 @@ regular_loop: if ((yyvsp[0]) != NULL) (yyval) = list_append((yyval), (yyvsp[0])); } -#line 2844 "awkgram.c" /* yacc.c:1645 */ +#line 2848 "awkgram.c" /* yacc.c:1645 */ break; case 57: -#line 1018 "awkgram.y" /* yacc.c:1645 */ +#line 1022 "awkgram.y" /* yacc.c:1645 */ { /* if inside function (rule = 0), resolve context at run-time */ if (rule == BEGIN || rule == END || rule == ENDFILE) @@ -2857,11 +2861,11 @@ regular_loop: if ((yyvsp[0]) != NULL) (yyval) = list_append((yyval), (yyvsp[0])); } -#line 2861 "awkgram.c" /* yacc.c:1645 */ +#line 2865 "awkgram.c" /* yacc.c:1645 */ break; case 58: -#line 1031 "awkgram.y" /* yacc.c:1645 */ +#line 1035 "awkgram.y" /* yacc.c:1645 */ { /* Initialize the two possible jump targets, the actual target * is resolved at run-time. @@ -2878,20 +2882,20 @@ regular_loop: if ((yyvsp[0]) != NULL) (yyval) = list_append((yyval), (yyvsp[0])); } -#line 2882 "awkgram.c" /* yacc.c:1645 */ +#line 2886 "awkgram.c" /* yacc.c:1645 */ break; case 59: -#line 1048 "awkgram.y" /* yacc.c:1645 */ +#line 1052 "awkgram.y" /* yacc.c:1645 */ { if (! in_function) yyerror(_("`return' used outside function context")); } -#line 2891 "awkgram.c" /* yacc.c:1645 */ +#line 2895 "awkgram.c" /* yacc.c:1645 */ break; case 60: -#line 1051 "awkgram.y" /* yacc.c:1645 */ +#line 1055 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[-1]) == NULL) { (yyval) = list_create((yyvsp[-3])); @@ -2902,28 +2906,28 @@ regular_loop: if ((yyvsp[0]) != NULL) (yyval) = list_append((yyval), (yyvsp[0])); } -#line 2906 "awkgram.c" /* yacc.c:1645 */ +#line 2910 "awkgram.c" /* yacc.c:1645 */ break; case 61: -#line 1062 "awkgram.y" /* yacc.c:1645 */ +#line 1066 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[0]) != NULL) (yyval) = list_append((yyvsp[-1]), (yyvsp[0])); else (yyval) = (yyvsp[-1]); } -#line 2917 "awkgram.c" /* yacc.c:1645 */ +#line 2921 "awkgram.c" /* yacc.c:1645 */ break; case 62: -#line 1079 "awkgram.y" /* yacc.c:1645 */ +#line 1083 "awkgram.y" /* yacc.c:1645 */ { in_print = true; in_parens = 0; } -#line 2923 "awkgram.c" /* yacc.c:1645 */ +#line 2927 "awkgram.c" /* yacc.c:1645 */ break; case 63: -#line 1080 "awkgram.y" /* yacc.c:1645 */ +#line 1084 "awkgram.y" /* yacc.c:1645 */ { /* * Optimization: plain `print' has no expression list, so $3 is null. @@ -3020,17 +3024,17 @@ regular_print: } } } -#line 3024 "awkgram.c" /* yacc.c:1645 */ +#line 3028 "awkgram.c" /* yacc.c:1645 */ break; case 64: -#line 1177 "awkgram.y" /* yacc.c:1645 */ +#line 1181 "awkgram.y" /* yacc.c:1645 */ { sub_counter = 0; } -#line 3030 "awkgram.c" /* yacc.c:1645 */ +#line 3034 "awkgram.c" /* yacc.c:1645 */ break; case 65: -#line 1178 "awkgram.y" /* yacc.c:1645 */ +#line 1182 "awkgram.y" /* yacc.c:1645 */ { char *arr = (yyvsp[-2])->lextok; @@ -3063,11 +3067,11 @@ regular_print: (yyval) = list_append(list_append((yyvsp[0]), (yyvsp[-2])), (yyvsp[-3])); } } -#line 3067 "awkgram.c" /* yacc.c:1645 */ +#line 3071 "awkgram.c" /* yacc.c:1645 */ break; case 66: -#line 1215 "awkgram.y" /* yacc.c:1645 */ +#line 1219 "awkgram.y" /* yacc.c:1645 */ { static bool warned = false; char *arr = (yyvsp[-1])->lextok; @@ -3093,54 +3097,54 @@ regular_print: fatal(_("`delete' is not allowed with FUNCTAB")); } } -#line 3097 "awkgram.c" /* yacc.c:1645 */ +#line 3101 "awkgram.c" /* yacc.c:1645 */ break; case 67: -#line 1241 "awkgram.y" /* yacc.c:1645 */ +#line 1245 "awkgram.y" /* yacc.c:1645 */ { (yyval) = optimize_assignment((yyvsp[0])); } -#line 3105 "awkgram.c" /* yacc.c:1645 */ +#line 3109 "awkgram.c" /* yacc.c:1645 */ break; case 68: -#line 1248 "awkgram.y" /* yacc.c:1645 */ +#line 1252 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3111 "awkgram.c" /* yacc.c:1645 */ +#line 3115 "awkgram.c" /* yacc.c:1645 */ break; case 69: -#line 1250 "awkgram.y" /* yacc.c:1645 */ +#line 1254 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3117 "awkgram.c" /* yacc.c:1645 */ +#line 3121 "awkgram.c" /* yacc.c:1645 */ break; case 70: -#line 1255 "awkgram.y" /* yacc.c:1645 */ +#line 1259 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3123 "awkgram.c" /* yacc.c:1645 */ +#line 3127 "awkgram.c" /* yacc.c:1645 */ break; case 71: -#line 1257 "awkgram.y" /* yacc.c:1645 */ +#line 1261 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[-1]) == NULL) (yyval) = list_create((yyvsp[0])); else (yyval) = list_prepend((yyvsp[-1]), (yyvsp[0])); } -#line 3134 "awkgram.c" /* yacc.c:1645 */ +#line 3138 "awkgram.c" /* yacc.c:1645 */ break; case 72: -#line 1264 "awkgram.y" /* yacc.c:1645 */ +#line 1268 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3140 "awkgram.c" /* yacc.c:1645 */ +#line 3144 "awkgram.c" /* yacc.c:1645 */ break; case 73: -#line 1269 "awkgram.y" /* yacc.c:1645 */ +#line 1273 "awkgram.y" /* yacc.c:1645 */ { INSTRUCTION *casestmt = (yyvsp[0]); if ((yyvsp[0]) == NULL) @@ -3153,11 +3157,11 @@ regular_print: bcfree((yyvsp[-2])); (yyval) = (yyvsp[-4]); } -#line 3157 "awkgram.c" /* yacc.c:1645 */ +#line 3161 "awkgram.c" /* yacc.c:1645 */ break; case 74: -#line 1282 "awkgram.y" /* yacc.c:1645 */ +#line 1286 "awkgram.y" /* yacc.c:1645 */ { INSTRUCTION *casestmt = (yyvsp[0]); if ((yyvsp[0]) == NULL) @@ -3169,17 +3173,17 @@ regular_print: (yyvsp[-3])->comment = (yyvsp[-1]); (yyval) = (yyvsp[-3]); } -#line 3173 "awkgram.c" /* yacc.c:1645 */ +#line 3177 "awkgram.c" /* yacc.c:1645 */ break; case 75: -#line 1297 "awkgram.y" /* yacc.c:1645 */ +#line 1301 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3179 "awkgram.c" /* yacc.c:1645 */ +#line 3183 "awkgram.c" /* yacc.c:1645 */ break; case 76: -#line 1299 "awkgram.y" /* yacc.c:1645 */ +#line 1303 "awkgram.y" /* yacc.c:1645 */ { NODE *n = (yyvsp[0])->memory; (void) force_number(n); @@ -3187,28 +3191,28 @@ regular_print: bcfree((yyvsp[-1])); (yyval) = (yyvsp[0]); } -#line 3191 "awkgram.c" /* yacc.c:1645 */ +#line 3195 "awkgram.c" /* yacc.c:1645 */ break; case 77: -#line 1307 "awkgram.y" /* yacc.c:1645 */ +#line 1311 "awkgram.y" /* yacc.c:1645 */ { NODE *n = (yyvsp[0])->lasti->memory; bcfree((yyvsp[-1])); add_sign_to_num(n, '+'); (yyval) = (yyvsp[0]); } -#line 3202 "awkgram.c" /* yacc.c:1645 */ +#line 3206 "awkgram.c" /* yacc.c:1645 */ break; case 78: -#line 1314 "awkgram.y" /* yacc.c:1645 */ +#line 1318 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3208 "awkgram.c" /* yacc.c:1645 */ +#line 3212 "awkgram.c" /* yacc.c:1645 */ break; case 79: -#line 1316 "awkgram.y" /* yacc.c:1645 */ +#line 1320 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[0])->memory->type == Node_regex) (yyvsp[0])->opcode = Op_push_re; @@ -3216,57 +3220,57 @@ regular_print: (yyvsp[0])->opcode = Op_push; (yyval) = (yyvsp[0]); } -#line 3220 "awkgram.c" /* yacc.c:1645 */ +#line 3224 "awkgram.c" /* yacc.c:1645 */ break; case 80: -#line 1324 "awkgram.y" /* yacc.c:1645 */ +#line 1328 "awkgram.y" /* yacc.c:1645 */ { assert(((yyvsp[0])->memory->flags & REGEX) == REGEX); (yyvsp[0])->opcode = Op_push_re; (yyval) = (yyvsp[0]); } -#line 3230 "awkgram.c" /* yacc.c:1645 */ +#line 3234 "awkgram.c" /* yacc.c:1645 */ break; case 81: -#line 1333 "awkgram.y" /* yacc.c:1645 */ +#line 1337 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3236 "awkgram.c" /* yacc.c:1645 */ +#line 3240 "awkgram.c" /* yacc.c:1645 */ break; case 82: -#line 1335 "awkgram.y" /* yacc.c:1645 */ +#line 1339 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3242 "awkgram.c" /* yacc.c:1645 */ +#line 3246 "awkgram.c" /* yacc.c:1645 */ break; case 84: -#line 1345 "awkgram.y" /* yacc.c:1645 */ +#line 1349 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[-1]); } -#line 3250 "awkgram.c" /* yacc.c:1645 */ +#line 3254 "awkgram.c" /* yacc.c:1645 */ break; case 85: -#line 1352 "awkgram.y" /* yacc.c:1645 */ +#line 1356 "awkgram.y" /* yacc.c:1645 */ { in_print = false; in_parens = 0; (yyval) = NULL; } -#line 3260 "awkgram.c" /* yacc.c:1645 */ +#line 3264 "awkgram.c" /* yacc.c:1645 */ break; case 86: -#line 1357 "awkgram.y" /* yacc.c:1645 */ +#line 1361 "awkgram.y" /* yacc.c:1645 */ { in_print = false; in_parens = 0; } -#line 3266 "awkgram.c" /* yacc.c:1645 */ +#line 3270 "awkgram.c" /* yacc.c:1645 */ break; case 87: -#line 1358 "awkgram.y" /* yacc.c:1645 */ +#line 1362 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[-2])->redir_type == redirect_twoway && (yyvsp[0])->lasti->opcode == Op_K_getline_redir @@ -3276,21 +3280,21 @@ regular_print: lintwarn(_("concatenation as I/O `>' redirection target is ambiguous")); (yyval) = list_prepend((yyvsp[0]), (yyvsp[-2])); } -#line 3280 "awkgram.c" /* yacc.c:1645 */ +#line 3284 "awkgram.c" /* yacc.c:1645 */ break; case 88: -#line 1371 "awkgram.y" /* yacc.c:1645 */ +#line 1375 "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 3290 "awkgram.c" /* yacc.c:1645 */ +#line 3294 "awkgram.c" /* yacc.c:1645 */ break; case 89: -#line 1378 "awkgram.y" /* yacc.c:1645 */ +#line 1382 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[-4]) != NULL) (yyvsp[-8])->comment = (yyvsp[-4]); @@ -3298,19 +3302,19 @@ regular_print: (yyvsp[-2])->comment = (yyvsp[-1]); (yyval) = mk_condition((yyvsp[-6]), (yyvsp[-8]), (yyvsp[-3]), (yyvsp[-2]), (yyvsp[0])); } -#line 3302 "awkgram.c" /* yacc.c:1645 */ +#line 3306 "awkgram.c" /* yacc.c:1645 */ break; case 90: -#line 1389 "awkgram.y" /* yacc.c:1645 */ +#line 1393 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3310 "awkgram.c" /* yacc.c:1645 */ +#line 3314 "awkgram.c" /* yacc.c:1645 */ break; case 91: -#line 1393 "awkgram.y" /* yacc.c:1645 */ +#line 1397 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[-1]) != NULL && (yyvsp[0]) != NULL) { if ((yyvsp[-1])->memory->comment_type == EOL_COMMENT) { @@ -3328,59 +3332,59 @@ regular_print: } else (yyval) = NULL; } -#line 3332 "awkgram.c" /* yacc.c:1645 */ +#line 3336 "awkgram.c" /* yacc.c:1645 */ break; case 92: -#line 1414 "awkgram.y" /* yacc.c:1645 */ +#line 1418 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3338 "awkgram.c" /* yacc.c:1645 */ +#line 3342 "awkgram.c" /* yacc.c:1645 */ break; case 93: -#line 1416 "awkgram.y" /* yacc.c:1645 */ +#line 1420 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3344 "awkgram.c" /* yacc.c:1645 */ +#line 3348 "awkgram.c" /* yacc.c:1645 */ break; case 94: -#line 1421 "awkgram.y" /* yacc.c:1645 */ +#line 1425 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3350 "awkgram.c" /* yacc.c:1645 */ +#line 3354 "awkgram.c" /* yacc.c:1645 */ break; case 95: -#line 1423 "awkgram.y" /* yacc.c:1645 */ +#line 1427 "awkgram.y" /* yacc.c:1645 */ { bcfree((yyvsp[-1])); (yyval) = (yyvsp[0]); } -#line 3359 "awkgram.c" /* yacc.c:1645 */ +#line 3363 "awkgram.c" /* yacc.c:1645 */ break; case 96: -#line 1431 "awkgram.y" /* yacc.c:1645 */ +#line 1435 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3365 "awkgram.c" /* yacc.c:1645 */ +#line 3369 "awkgram.c" /* yacc.c:1645 */ break; case 97: -#line 1433 "awkgram.y" /* yacc.c:1645 */ +#line 1437 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3371 "awkgram.c" /* yacc.c:1645 */ +#line 3375 "awkgram.c" /* yacc.c:1645 */ break; case 98: -#line 1438 "awkgram.y" /* yacc.c:1645 */ +#line 1442 "awkgram.y" /* yacc.c:1645 */ { (yyvsp[0])->param_count = 0; (yyval) = list_create((yyvsp[0])); } -#line 3380 "awkgram.c" /* yacc.c:1645 */ +#line 3384 "awkgram.c" /* yacc.c:1645 */ break; case 99: -#line 1443 "awkgram.y" /* yacc.c:1645 */ +#line 1447 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[-2]) != NULL && (yyvsp[0]) != NULL) { (yyvsp[0])->param_count = (yyvsp[-2])->lasti->param_count + 1; @@ -3397,76 +3401,76 @@ regular_print: } else (yyval) = NULL; } -#line 3401 "awkgram.c" /* yacc.c:1645 */ +#line 3405 "awkgram.c" /* yacc.c:1645 */ break; case 100: -#line 1460 "awkgram.y" /* yacc.c:1645 */ +#line 1464 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3407 "awkgram.c" /* yacc.c:1645 */ +#line 3411 "awkgram.c" /* yacc.c:1645 */ break; case 101: -#line 1462 "awkgram.y" /* yacc.c:1645 */ +#line 1466 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[-1]); } -#line 3413 "awkgram.c" /* yacc.c:1645 */ +#line 3417 "awkgram.c" /* yacc.c:1645 */ break; case 102: -#line 1464 "awkgram.y" /* yacc.c:1645 */ +#line 1468 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[-2]); } -#line 3419 "awkgram.c" /* yacc.c:1645 */ +#line 3423 "awkgram.c" /* yacc.c:1645 */ break; case 103: -#line 1470 "awkgram.y" /* yacc.c:1645 */ +#line 1474 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3425 "awkgram.c" /* yacc.c:1645 */ +#line 3429 "awkgram.c" /* yacc.c:1645 */ break; case 104: -#line 1472 "awkgram.y" /* yacc.c:1645 */ +#line 1476 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3431 "awkgram.c" /* yacc.c:1645 */ +#line 3435 "awkgram.c" /* yacc.c:1645 */ break; case 105: -#line 1477 "awkgram.y" /* yacc.c:1645 */ +#line 1481 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3437 "awkgram.c" /* yacc.c:1645 */ +#line 3441 "awkgram.c" /* yacc.c:1645 */ break; case 106: -#line 1479 "awkgram.y" /* yacc.c:1645 */ +#line 1483 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3443 "awkgram.c" /* yacc.c:1645 */ +#line 3447 "awkgram.c" /* yacc.c:1645 */ break; case 107: -#line 1484 "awkgram.y" /* yacc.c:1645 */ +#line 1488 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_expression_list(NULL, (yyvsp[0])); } -#line 3449 "awkgram.c" /* yacc.c:1645 */ +#line 3453 "awkgram.c" /* yacc.c:1645 */ break; case 108: -#line 1486 "awkgram.y" /* yacc.c:1645 */ +#line 1490 "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 3460 "awkgram.c" /* yacc.c:1645 */ +#line 3464 "awkgram.c" /* yacc.c:1645 */ break; case 109: -#line 1493 "awkgram.y" /* yacc.c:1645 */ +#line 1497 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3466 "awkgram.c" /* yacc.c:1645 */ +#line 3470 "awkgram.c" /* yacc.c:1645 */ break; case 110: -#line 1495 "awkgram.y" /* yacc.c:1645 */ +#line 1499 "awkgram.y" /* yacc.c:1645 */ { /* * Returning the expression list instead of NULL lets @@ -3474,66 +3478,66 @@ regular_print: */ (yyval) = (yyvsp[-1]); } -#line 3478 "awkgram.c" /* yacc.c:1645 */ +#line 3482 "awkgram.c" /* yacc.c:1645 */ break; case 111: -#line 1503 "awkgram.y" /* yacc.c:1645 */ +#line 1507 "awkgram.y" /* yacc.c:1645 */ { /* Ditto */ (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0])); } -#line 3487 "awkgram.c" /* yacc.c:1645 */ +#line 3491 "awkgram.c" /* yacc.c:1645 */ break; case 112: -#line 1508 "awkgram.y" /* yacc.c:1645 */ +#line 1512 "awkgram.y" /* yacc.c:1645 */ { /* Ditto */ if ((yyvsp[-1]) != NULL) (yyvsp[-2])->lasti->comment = (yyvsp[-1]); (yyval) = (yyvsp[-2]); } -#line 3498 "awkgram.c" /* yacc.c:1645 */ +#line 3502 "awkgram.c" /* yacc.c:1645 */ break; case 113: -#line 1518 "awkgram.y" /* yacc.c:1645 */ +#line 1522 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3504 "awkgram.c" /* yacc.c:1645 */ +#line 3508 "awkgram.c" /* yacc.c:1645 */ break; case 114: -#line 1520 "awkgram.y" /* yacc.c:1645 */ +#line 1524 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3510 "awkgram.c" /* yacc.c:1645 */ +#line 3514 "awkgram.c" /* yacc.c:1645 */ break; case 115: -#line 1525 "awkgram.y" /* yacc.c:1645 */ +#line 1529 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_expression_list(NULL, (yyvsp[0])); } -#line 3516 "awkgram.c" /* yacc.c:1645 */ +#line 3520 "awkgram.c" /* yacc.c:1645 */ break; case 116: -#line 1527 "awkgram.y" /* yacc.c:1645 */ +#line 1531 "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 3527 "awkgram.c" /* yacc.c:1645 */ +#line 3531 "awkgram.c" /* yacc.c:1645 */ break; case 117: -#line 1534 "awkgram.y" /* yacc.c:1645 */ +#line 1538 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 3533 "awkgram.c" /* yacc.c:1645 */ +#line 3537 "awkgram.c" /* yacc.c:1645 */ break; case 118: -#line 1536 "awkgram.y" /* yacc.c:1645 */ +#line 1540 "awkgram.y" /* yacc.c:1645 */ { /* * Returning the expression list instead of NULL lets @@ -3541,74 +3545,74 @@ regular_print: */ (yyval) = (yyvsp[-1]); } -#line 3545 "awkgram.c" /* yacc.c:1645 */ +#line 3549 "awkgram.c" /* yacc.c:1645 */ break; case 119: -#line 1544 "awkgram.y" /* yacc.c:1645 */ +#line 1548 "awkgram.y" /* yacc.c:1645 */ { /* Ditto */ (yyval) = mk_expression_list((yyvsp[-2]), (yyvsp[0])); } -#line 3554 "awkgram.c" /* yacc.c:1645 */ +#line 3558 "awkgram.c" /* yacc.c:1645 */ break; case 120: -#line 1549 "awkgram.y" /* yacc.c:1645 */ +#line 1553 "awkgram.y" /* yacc.c:1645 */ { /* Ditto */ if ((yyvsp[-1]) != NULL) (yyvsp[-2])->comment = (yyvsp[-1]); (yyval) = (yyvsp[-2]); } -#line 3565 "awkgram.c" /* yacc.c:1645 */ +#line 3569 "awkgram.c" /* yacc.c:1645 */ break; case 121: -#line 1558 "awkgram.y" /* yacc.c:1645 */ +#line 1562 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3571 "awkgram.c" /* yacc.c:1645 */ +#line 3575 "awkgram.c" /* yacc.c:1645 */ break; case 122: -#line 1559 "awkgram.y" /* yacc.c:1645 */ +#line 1563 "awkgram.y" /* yacc.c:1645 */ { (yyval) = list_create((yyvsp[0])); } -#line 3577 "awkgram.c" /* yacc.c:1645 */ +#line 3581 "awkgram.c" /* yacc.c:1645 */ break; case 123: -#line 1565 "awkgram.y" /* yacc.c:1645 */ +#line 1569 "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 3588 "awkgram.c" /* yacc.c:1645 */ +#line 3592 "awkgram.c" /* yacc.c:1645 */ break; case 124: -#line 1572 "awkgram.y" /* yacc.c:1645 */ +#line 1576 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_assignment((yyvsp[-2]), list_create((yyvsp[0])), (yyvsp[-1])); } -#line 3596 "awkgram.c" /* yacc.c:1645 */ +#line 3600 "awkgram.c" /* yacc.c:1645 */ break; case 125: -#line 1576 "awkgram.y" /* yacc.c:1645 */ +#line 1580 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3602 "awkgram.c" /* yacc.c:1645 */ +#line 3606 "awkgram.c" /* yacc.c:1645 */ break; case 126: -#line 1578 "awkgram.y" /* yacc.c:1645 */ +#line 1582 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_boolean((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3608 "awkgram.c" /* yacc.c:1645 */ +#line 3612 "awkgram.c" /* yacc.c:1645 */ break; case 127: -#line 1580 "awkgram.y" /* yacc.c:1645 */ +#line 1584 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[-2])->lasti->opcode == Op_match_rec) warning_ln((yyvsp[-1])->source_line, @@ -3621,11 +3625,11 @@ regular_print: bcfree((yyvsp[0])); (yyval) = list_append((yyvsp[-2]), (yyvsp[-1])); } -#line 3625 "awkgram.c" /* yacc.c:1645 */ +#line 3629 "awkgram.c" /* yacc.c:1645 */ break; case 128: -#line 1593 "awkgram.y" /* yacc.c:1645 */ +#line 1597 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[-2])->lasti->opcode == Op_match_rec) warning_ln((yyvsp[-1])->source_line, @@ -3642,11 +3646,11 @@ regular_print: (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), (yyvsp[-1])); } } -#line 3646 "awkgram.c" /* yacc.c:1645 */ +#line 3650 "awkgram.c" /* yacc.c:1645 */ break; case 129: -#line 1610 "awkgram.y" /* yacc.c:1645 */ +#line 1614 "awkgram.y" /* yacc.c:1645 */ { if (do_lint_old) warning_ln((yyvsp[-1])->source_line, @@ -3656,91 +3660,91 @@ regular_print: (yyvsp[-1])->expr_count = 1; (yyval) = list_append(list_merge((yyvsp[-2]), (yyvsp[0])), (yyvsp[-1])); } -#line 3660 "awkgram.c" /* yacc.c:1645 */ +#line 3664 "awkgram.c" /* yacc.c:1645 */ break; case 130: -#line 1620 "awkgram.y" /* yacc.c:1645 */ +#line 1624 "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 3671 "awkgram.c" /* yacc.c:1645 */ +#line 3675 "awkgram.c" /* yacc.c:1645 */ break; case 131: -#line 1627 "awkgram.y" /* yacc.c:1645 */ +#line 1631 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_condition((yyvsp[-4]), (yyvsp[-3]), (yyvsp[-2]), (yyvsp[-1]), (yyvsp[0])); } -#line 3677 "awkgram.c" /* yacc.c:1645 */ +#line 3681 "awkgram.c" /* yacc.c:1645 */ break; case 132: -#line 1629 "awkgram.y" /* yacc.c:1645 */ +#line 1633 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3683 "awkgram.c" /* yacc.c:1645 */ +#line 3687 "awkgram.c" /* yacc.c:1645 */ break; case 133: -#line 1634 "awkgram.y" /* yacc.c:1645 */ +#line 1638 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3689 "awkgram.c" /* yacc.c:1645 */ +#line 3693 "awkgram.c" /* yacc.c:1645 */ break; case 134: -#line 1636 "awkgram.y" /* yacc.c:1645 */ +#line 1640 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3695 "awkgram.c" /* yacc.c:1645 */ +#line 3699 "awkgram.c" /* yacc.c:1645 */ break; case 135: -#line 1638 "awkgram.y" /* yacc.c:1645 */ +#line 1642 "awkgram.y" /* yacc.c:1645 */ { (yyvsp[0])->opcode = Op_assign_quotient; (yyval) = (yyvsp[0]); } -#line 3704 "awkgram.c" /* yacc.c:1645 */ +#line 3708 "awkgram.c" /* yacc.c:1645 */ break; case 136: -#line 1646 "awkgram.y" /* yacc.c:1645 */ +#line 1650 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3710 "awkgram.c" /* yacc.c:1645 */ +#line 3714 "awkgram.c" /* yacc.c:1645 */ break; case 137: -#line 1648 "awkgram.y" /* yacc.c:1645 */ +#line 1652 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3716 "awkgram.c" /* yacc.c:1645 */ +#line 3720 "awkgram.c" /* yacc.c:1645 */ break; case 138: -#line 1653 "awkgram.y" /* yacc.c:1645 */ +#line 1657 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3722 "awkgram.c" /* yacc.c:1645 */ +#line 3726 "awkgram.c" /* yacc.c:1645 */ break; case 139: -#line 1655 "awkgram.y" /* yacc.c:1645 */ +#line 1659 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3728 "awkgram.c" /* yacc.c:1645 */ +#line 3732 "awkgram.c" /* yacc.c:1645 */ break; case 140: -#line 1660 "awkgram.y" /* yacc.c:1645 */ +#line 1664 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3734 "awkgram.c" /* yacc.c:1645 */ +#line 3738 "awkgram.c" /* yacc.c:1645 */ break; case 141: -#line 1662 "awkgram.y" /* yacc.c:1645 */ +#line 1666 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 3740 "awkgram.c" /* yacc.c:1645 */ +#line 3744 "awkgram.c" /* yacc.c:1645 */ break; case 142: -#line 1664 "awkgram.y" /* yacc.c:1645 */ +#line 1668 "awkgram.y" /* yacc.c:1645 */ { int count = 2; bool is_simple_var = false; @@ -3794,47 +3798,47 @@ regular_print: max_args = count; } } -#line 3798 "awkgram.c" /* yacc.c:1645 */ +#line 3802 "awkgram.c" /* yacc.c:1645 */ break; case 144: -#line 1723 "awkgram.y" /* yacc.c:1645 */ +#line 1727 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3804 "awkgram.c" /* yacc.c:1645 */ +#line 3808 "awkgram.c" /* yacc.c:1645 */ break; case 145: -#line 1725 "awkgram.y" /* yacc.c:1645 */ +#line 1729 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3810 "awkgram.c" /* yacc.c:1645 */ +#line 3814 "awkgram.c" /* yacc.c:1645 */ break; case 146: -#line 1727 "awkgram.y" /* yacc.c:1645 */ +#line 1731 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3816 "awkgram.c" /* yacc.c:1645 */ +#line 3820 "awkgram.c" /* yacc.c:1645 */ break; case 147: -#line 1729 "awkgram.y" /* yacc.c:1645 */ +#line 1733 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3822 "awkgram.c" /* yacc.c:1645 */ +#line 3826 "awkgram.c" /* yacc.c:1645 */ break; case 148: -#line 1731 "awkgram.y" /* yacc.c:1645 */ +#line 1735 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3828 "awkgram.c" /* yacc.c:1645 */ +#line 3832 "awkgram.c" /* yacc.c:1645 */ break; case 149: -#line 1733 "awkgram.y" /* yacc.c:1645 */ +#line 1737 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3834 "awkgram.c" /* yacc.c:1645 */ +#line 3838 "awkgram.c" /* yacc.c:1645 */ break; case 150: -#line 1735 "awkgram.y" /* yacc.c:1645 */ +#line 1739 "awkgram.y" /* yacc.c:1645 */ { /* * In BEGINFILE/ENDFILE, allow `getline [var] < file' @@ -3848,29 +3852,29 @@ regular_print: _("non-redirected `getline' undefined inside END action")); (yyval) = mk_getline((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), redirect_input); } -#line 3852 "awkgram.c" /* yacc.c:1645 */ +#line 3856 "awkgram.c" /* yacc.c:1645 */ break; case 151: -#line 1749 "awkgram.y" /* yacc.c:1645 */ +#line 1753 "awkgram.y" /* yacc.c:1645 */ { (yyvsp[0])->opcode = Op_postincrement; (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0])); } -#line 3861 "awkgram.c" /* yacc.c:1645 */ +#line 3865 "awkgram.c" /* yacc.c:1645 */ break; case 152: -#line 1754 "awkgram.y" /* yacc.c:1645 */ +#line 1758 "awkgram.y" /* yacc.c:1645 */ { (yyvsp[0])->opcode = Op_postdecrement; (yyval) = mk_assignment((yyvsp[-1]), NULL, (yyvsp[0])); } -#line 3870 "awkgram.c" /* yacc.c:1645 */ +#line 3874 "awkgram.c" /* yacc.c:1645 */ break; case 153: -#line 1759 "awkgram.y" /* yacc.c:1645 */ +#line 1763 "awkgram.y" /* yacc.c:1645 */ { if (do_lint_old) { warning_ln((yyvsp[-1])->source_line, @@ -3890,64 +3894,64 @@ regular_print: (yyval) = list_append(list_merge(t, (yyvsp[0])), (yyvsp[-1])); } } -#line 3894 "awkgram.c" /* yacc.c:1645 */ +#line 3898 "awkgram.c" /* yacc.c:1645 */ break; case 154: -#line 1784 "awkgram.y" /* yacc.c:1645 */ +#line 1788 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_getline((yyvsp[-1]), (yyvsp[0]), (yyvsp[-3]), (yyvsp[-2])->redir_type); bcfree((yyvsp[-2])); } -#line 3903 "awkgram.c" /* yacc.c:1645 */ +#line 3907 "awkgram.c" /* yacc.c:1645 */ break; case 155: -#line 1790 "awkgram.y" /* yacc.c:1645 */ +#line 1794 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3909 "awkgram.c" /* yacc.c:1645 */ +#line 3913 "awkgram.c" /* yacc.c:1645 */ break; case 156: -#line 1792 "awkgram.y" /* yacc.c:1645 */ +#line 1796 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3915 "awkgram.c" /* yacc.c:1645 */ +#line 3919 "awkgram.c" /* yacc.c:1645 */ break; case 157: -#line 1794 "awkgram.y" /* yacc.c:1645 */ +#line 1798 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3921 "awkgram.c" /* yacc.c:1645 */ +#line 3925 "awkgram.c" /* yacc.c:1645 */ break; case 158: -#line 1796 "awkgram.y" /* yacc.c:1645 */ +#line 1800 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3927 "awkgram.c" /* yacc.c:1645 */ +#line 3931 "awkgram.c" /* yacc.c:1645 */ break; case 159: -#line 1798 "awkgram.y" /* yacc.c:1645 */ +#line 1802 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3933 "awkgram.c" /* yacc.c:1645 */ +#line 3937 "awkgram.c" /* yacc.c:1645 */ break; case 160: -#line 1800 "awkgram.y" /* yacc.c:1645 */ +#line 1804 "awkgram.y" /* yacc.c:1645 */ { (yyval) = mk_binary((yyvsp[-2]), (yyvsp[0]), (yyvsp[-1])); } -#line 3939 "awkgram.c" /* yacc.c:1645 */ +#line 3943 "awkgram.c" /* yacc.c:1645 */ break; case 161: -#line 1805 "awkgram.y" /* yacc.c:1645 */ +#line 1809 "awkgram.y" /* yacc.c:1645 */ { (yyval) = list_create((yyvsp[0])); } -#line 3947 "awkgram.c" /* yacc.c:1645 */ +#line 3951 "awkgram.c" /* yacc.c:1645 */ break; case 162: -#line 1809 "awkgram.y" /* yacc.c:1645 */ +#line 1813 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[0])->opcode == Op_match_rec) { (yyvsp[0])->opcode = Op_nomatch; @@ -3979,11 +3983,11 @@ regular_print: } } } -#line 3983 "awkgram.c" /* yacc.c:1645 */ +#line 3987 "awkgram.c" /* yacc.c:1645 */ break; case 163: -#line 1841 "awkgram.y" /* yacc.c:1645 */ +#line 1845 "awkgram.y" /* yacc.c:1645 */ { // Always include. Allows us to lint warn on // print "foo" > "bar" 1 @@ -3991,31 +3995,31 @@ regular_print: // print "foo" > ("bar" 1) (yyval) = list_append((yyvsp[-1]), bcalloc(Op_parens, 1, sourceline)); } -#line 3995 "awkgram.c" /* yacc.c:1645 */ +#line 3999 "awkgram.c" /* yacc.c:1645 */ break; case 164: -#line 1849 "awkgram.y" /* yacc.c:1645 */ +#line 1853 "awkgram.y" /* yacc.c:1645 */ { (yyval) = snode((yyvsp[-1]), (yyvsp[-3])); if ((yyval) == NULL) YYABORT; } -#line 4005 "awkgram.c" /* yacc.c:1645 */ +#line 4009 "awkgram.c" /* yacc.c:1645 */ break; case 165: -#line 1855 "awkgram.y" /* yacc.c:1645 */ +#line 1859 "awkgram.y" /* yacc.c:1645 */ { (yyval) = snode((yyvsp[-1]), (yyvsp[-3])); if ((yyval) == NULL) YYABORT; } -#line 4015 "awkgram.c" /* yacc.c:1645 */ +#line 4019 "awkgram.c" /* yacc.c:1645 */ break; case 166: -#line 1861 "awkgram.y" /* yacc.c:1645 */ +#line 1865 "awkgram.y" /* yacc.c:1645 */ { static bool warned = false; @@ -4028,45 +4032,45 @@ regular_print: if ((yyval) == NULL) YYABORT; } -#line 4032 "awkgram.c" /* yacc.c:1645 */ +#line 4036 "awkgram.c" /* yacc.c:1645 */ break; case 169: -#line 1876 "awkgram.y" /* yacc.c:1645 */ +#line 1880 "awkgram.y" /* yacc.c:1645 */ { (yyvsp[-1])->opcode = Op_preincrement; (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1])); } -#line 4041 "awkgram.c" /* yacc.c:1645 */ +#line 4045 "awkgram.c" /* yacc.c:1645 */ break; case 170: -#line 1881 "awkgram.y" /* yacc.c:1645 */ +#line 1885 "awkgram.y" /* yacc.c:1645 */ { (yyvsp[-1])->opcode = Op_predecrement; (yyval) = mk_assignment((yyvsp[0]), NULL, (yyvsp[-1])); } -#line 4050 "awkgram.c" /* yacc.c:1645 */ +#line 4054 "awkgram.c" /* yacc.c:1645 */ break; case 171: -#line 1886 "awkgram.y" /* yacc.c:1645 */ +#line 1890 "awkgram.y" /* yacc.c:1645 */ { (yyval) = list_create((yyvsp[0])); } -#line 4058 "awkgram.c" /* yacc.c:1645 */ +#line 4062 "awkgram.c" /* yacc.c:1645 */ break; case 172: -#line 1890 "awkgram.y" /* yacc.c:1645 */ +#line 1894 "awkgram.y" /* yacc.c:1645 */ { (yyval) = list_create((yyvsp[0])); } -#line 4066 "awkgram.c" /* yacc.c:1645 */ +#line 4070 "awkgram.c" /* yacc.c:1645 */ break; case 173: -#line 1894 "awkgram.y" /* yacc.c:1645 */ +#line 1898 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[0])->lasti->opcode == Op_push_i && ((yyvsp[0])->lasti->memory->flags & STRING) == 0 @@ -4081,11 +4085,11 @@ regular_print: (yyval) = list_append((yyvsp[0]), (yyvsp[-1])); } } -#line 4085 "awkgram.c" /* yacc.c:1645 */ +#line 4089 "awkgram.c" /* yacc.c:1645 */ break; case 174: -#line 1909 "awkgram.y" /* yacc.c:1645 */ +#line 1913 "awkgram.y" /* yacc.c:1645 */ { if ((yyvsp[0])->lasti->opcode == Op_push_i && ((yyvsp[0])->lasti->memory->flags & STRING) == 0 @@ -4103,20 +4107,20 @@ regular_print: (yyval) = list_append((yyvsp[0]), (yyvsp[-1])); } } -#line 4107 "awkgram.c" /* yacc.c:1645 */ +#line 4111 "awkgram.c" /* yacc.c:1645 */ break; case 175: -#line 1930 "awkgram.y" /* yacc.c:1645 */ +#line 1934 "awkgram.y" /* yacc.c:1645 */ { func_use((yyvsp[0])->lasti->func_name, FUNC_USE); (yyval) = (yyvsp[0]); } -#line 4116 "awkgram.c" /* yacc.c:1645 */ +#line 4120 "awkgram.c" /* yacc.c:1645 */ break; case 176: -#line 1935 "awkgram.y" /* yacc.c:1645 */ +#line 1939 "awkgram.y" /* yacc.c:1645 */ { /* indirect function call */ INSTRUCTION *f, *t; @@ -4150,11 +4154,11 @@ regular_print: (yyval) = list_prepend((yyvsp[0]), t); at_seen = false; } -#line 4154 "awkgram.c" /* yacc.c:1645 */ +#line 4158 "awkgram.c" /* yacc.c:1645 */ break; case 177: -#line 1972 "awkgram.y" /* yacc.c:1645 */ +#line 1976 "awkgram.y" /* yacc.c:1645 */ { NODE *n; @@ -4179,49 +4183,49 @@ regular_print: (yyval) = list_append(t, (yyvsp[-3])); } } -#line 4183 "awkgram.c" /* yacc.c:1645 */ +#line 4187 "awkgram.c" /* yacc.c:1645 */ break; case 178: -#line 2000 "awkgram.y" /* yacc.c:1645 */ +#line 2004 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 4189 "awkgram.c" /* yacc.c:1645 */ +#line 4193 "awkgram.c" /* yacc.c:1645 */ break; case 179: -#line 2002 "awkgram.y" /* yacc.c:1645 */ +#line 2006 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 4195 "awkgram.c" /* yacc.c:1645 */ +#line 4199 "awkgram.c" /* yacc.c:1645 */ break; case 180: -#line 2007 "awkgram.y" /* yacc.c:1645 */ +#line 2011 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 4201 "awkgram.c" /* yacc.c:1645 */ +#line 4205 "awkgram.c" /* yacc.c:1645 */ break; case 181: -#line 2009 "awkgram.y" /* yacc.c:1645 */ +#line 2013 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[-1]); } -#line 4207 "awkgram.c" /* yacc.c:1645 */ +#line 4211 "awkgram.c" /* yacc.c:1645 */ break; case 182: -#line 2014 "awkgram.y" /* yacc.c:1645 */ +#line 2018 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 4213 "awkgram.c" /* yacc.c:1645 */ +#line 4217 "awkgram.c" /* yacc.c:1645 */ break; case 183: -#line 2016 "awkgram.y" /* yacc.c:1645 */ +#line 2020 "awkgram.y" /* yacc.c:1645 */ { (yyval) = list_merge((yyvsp[-1]), (yyvsp[0])); } -#line 4221 "awkgram.c" /* yacc.c:1645 */ +#line 4225 "awkgram.c" /* yacc.c:1645 */ break; case 184: -#line 2023 "awkgram.y" /* yacc.c:1645 */ +#line 2027 "awkgram.y" /* yacc.c:1645 */ { INSTRUCTION *ip = (yyvsp[0])->lasti; int count = ip->sub_count; /* # of SUBSEP-seperated expressions */ @@ -4235,11 +4239,11 @@ regular_print: sub_counter++; /* count # of dimensions */ (yyval) = (yyvsp[0]); } -#line 4239 "awkgram.c" /* yacc.c:1645 */ +#line 4243 "awkgram.c" /* yacc.c:1645 */ break; case 185: -#line 2040 "awkgram.y" /* yacc.c:1645 */ +#line 2044 "awkgram.y" /* yacc.c:1645 */ { INSTRUCTION *t = (yyvsp[-1]); if ((yyvsp[-1]) == NULL) { @@ -4253,31 +4257,31 @@ regular_print: (yyvsp[0])->sub_count = count_expressions(&t, false); (yyval) = list_append(t, (yyvsp[0])); } -#line 4257 "awkgram.c" /* yacc.c:1645 */ +#line 4261 "awkgram.c" /* yacc.c:1645 */ break; case 186: -#line 2057 "awkgram.y" /* yacc.c:1645 */ +#line 2061 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 4263 "awkgram.c" /* yacc.c:1645 */ +#line 4267 "awkgram.c" /* yacc.c:1645 */ break; case 187: -#line 2059 "awkgram.y" /* yacc.c:1645 */ +#line 2063 "awkgram.y" /* yacc.c:1645 */ { (yyval) = list_merge((yyvsp[-1]), (yyvsp[0])); } -#line 4271 "awkgram.c" /* yacc.c:1645 */ +#line 4275 "awkgram.c" /* yacc.c:1645 */ break; case 188: -#line 2066 "awkgram.y" /* yacc.c:1645 */ +#line 2070 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[-1]); } -#line 4277 "awkgram.c" /* yacc.c:1645 */ +#line 4281 "awkgram.c" /* yacc.c:1645 */ break; case 189: -#line 2071 "awkgram.y" /* yacc.c:1645 */ +#line 2075 "awkgram.y" /* yacc.c:1645 */ { char *var_name = (yyvsp[0])->lextok; @@ -4285,22 +4289,22 @@ regular_print: (yyvsp[0])->memory = variable((yyvsp[0])->source_line, var_name, Node_var_new); (yyval) = list_create((yyvsp[0])); } -#line 4289 "awkgram.c" /* yacc.c:1645 */ +#line 4293 "awkgram.c" /* yacc.c:1645 */ break; case 190: -#line 2079 "awkgram.y" /* yacc.c:1645 */ +#line 2083 "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 4300 "awkgram.c" /* yacc.c:1645 */ +#line 4304 "awkgram.c" /* yacc.c:1645 */ break; case 191: -#line 2089 "awkgram.y" /* yacc.c:1645 */ +#line 2093 "awkgram.y" /* yacc.c:1645 */ { INSTRUCTION *ip = (yyvsp[0])->nexti; if (ip->opcode == Op_push @@ -4312,85 +4316,85 @@ regular_print: } else (yyval) = (yyvsp[0]); } -#line 4316 "awkgram.c" /* yacc.c:1645 */ +#line 4320 "awkgram.c" /* yacc.c:1645 */ break; case 192: -#line 2101 "awkgram.y" /* yacc.c:1645 */ +#line 2105 "awkgram.y" /* yacc.c:1645 */ { (yyval) = list_append((yyvsp[-1]), (yyvsp[-2])); if ((yyvsp[0]) != NULL) mk_assignment((yyvsp[-1]), NULL, (yyvsp[0])); } -#line 4326 "awkgram.c" /* yacc.c:1645 */ +#line 4330 "awkgram.c" /* yacc.c:1645 */ break; case 193: -#line 2110 "awkgram.y" /* yacc.c:1645 */ +#line 2114 "awkgram.y" /* yacc.c:1645 */ { (yyvsp[0])->opcode = Op_postincrement; } -#line 4334 "awkgram.c" /* yacc.c:1645 */ +#line 4338 "awkgram.c" /* yacc.c:1645 */ break; case 194: -#line 2114 "awkgram.y" /* yacc.c:1645 */ +#line 2118 "awkgram.y" /* yacc.c:1645 */ { (yyvsp[0])->opcode = Op_postdecrement; } -#line 4342 "awkgram.c" /* yacc.c:1645 */ +#line 4346 "awkgram.c" /* yacc.c:1645 */ break; case 195: -#line 2118 "awkgram.y" /* yacc.c:1645 */ +#line 2122 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 4348 "awkgram.c" /* yacc.c:1645 */ +#line 4352 "awkgram.c" /* yacc.c:1645 */ break; case 196: -#line 2122 "awkgram.y" /* yacc.c:1645 */ +#line 2126 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); } -#line 4354 "awkgram.c" /* yacc.c:1645 */ +#line 4358 "awkgram.c" /* yacc.c:1645 */ break; case 197: -#line 2126 "awkgram.y" /* yacc.c:1645 */ +#line 2130 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); yyerrok; } -#line 4360 "awkgram.c" /* yacc.c:1645 */ +#line 4364 "awkgram.c" /* yacc.c:1645 */ break; case 198: -#line 2130 "awkgram.y" /* yacc.c:1645 */ +#line 2134 "awkgram.y" /* yacc.c:1645 */ { yyerrok; } -#line 4366 "awkgram.c" /* yacc.c:1645 */ +#line 4370 "awkgram.c" /* yacc.c:1645 */ break; case 199: -#line 2135 "awkgram.y" /* yacc.c:1645 */ +#line 2139 "awkgram.y" /* yacc.c:1645 */ { (yyval) = NULL; } -#line 4372 "awkgram.c" /* yacc.c:1645 */ +#line 4376 "awkgram.c" /* yacc.c:1645 */ break; case 201: -#line 2140 "awkgram.y" /* yacc.c:1645 */ +#line 2144 "awkgram.y" /* yacc.c:1645 */ { yyerrok; } -#line 4378 "awkgram.c" /* yacc.c:1645 */ +#line 4382 "awkgram.c" /* yacc.c:1645 */ break; case 202: -#line 2144 "awkgram.y" /* yacc.c:1645 */ +#line 2148 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); yyerrok; } -#line 4384 "awkgram.c" /* yacc.c:1645 */ +#line 4388 "awkgram.c" /* yacc.c:1645 */ break; case 203: -#line 2148 "awkgram.y" /* yacc.c:1645 */ +#line 2152 "awkgram.y" /* yacc.c:1645 */ { (yyval) = (yyvsp[0]); yyerrok; } -#line 4390 "awkgram.c" /* yacc.c:1645 */ +#line 4394 "awkgram.c" /* yacc.c:1645 */ break; -#line 4394 "awkgram.c" /* yacc.c:1645 */ +#line 4398 "awkgram.c" /* yacc.c:1645 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4617,7 +4621,7 @@ yyreturn: #endif return yyresult; } -#line 2150 "awkgram.y" /* yacc.c:1903 */ +#line 2154 "awkgram.y" /* yacc.c:1903 */ struct token { @@ -7307,6 +7311,15 @@ mk_function(INSTRUCTION *fi, INSTRUCTION *def) thisfunc = fi->func_body; assert(thisfunc != NULL); + /* add any pre-function comment to start of action for profile.c */ + + if (interblock_comment != NULL) { + interblock_comment->source_line = 0; + merge_comments(interblock_comment, fi->comment); + fi->comment = interblock_comment; + interblock_comment = NULL; + } + /* * Add an implicit return at end; * also used by 'return' command in debugger @@ -7316,6 +7329,11 @@ mk_function(INSTRUCTION *fi, INSTRUCTION *def) def->lasti->memory = dupnode(Nnull_string); (void) list_append(def, instruction(Op_K_return)); + if (trailing_comment != NULL) { + (void) list_append(def, trailing_comment); + trailing_comment = NULL; + } + if (do_pretty_print) (void) list_prepend(def, instruction(Op_exec_count)); @@ -270,6 +270,10 @@ rule in_function = NULL; (void) mk_function($1, $2); want_param_names = DONT_CHECK; + if (pending_comment != NULL) { + interblock_comment = pending_comment; + pending_comment = NULL; + } yyerrok; } | '@' LEX_INCLUDE source statement_term @@ -4836,6 +4840,15 @@ mk_function(INSTRUCTION *fi, INSTRUCTION *def) thisfunc = fi->func_body; assert(thisfunc != NULL); + /* add any pre-function comment to start of action for profile.c */ + + if (interblock_comment != NULL) { + interblock_comment->source_line = 0; + merge_comments(interblock_comment, fi->comment); + fi->comment = interblock_comment; + interblock_comment = NULL; + } + /* * Add an implicit return at end; * also used by 'return' command in debugger @@ -4845,6 +4858,11 @@ mk_function(INSTRUCTION *fi, INSTRUCTION *def) def->lasti->memory = dupnode(Nnull_string); (void) list_append(def, instruction(Op_K_return)); + if (trailing_comment != NULL) { + (void) list_append(def, trailing_comment); + trailing_comment = NULL; + } + if (do_pretty_print) (void) list_prepend(def, instruction(Op_exec_count)); diff --git a/test/ChangeLog b/test/ChangeLog index 3def1823..846be8ff 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2018-11-27 Arnold D. Robbins <arnold@skeeve.com> + + * profile11.awk: Disambiguate some comments. + * profile5.ok, profile11.ok: Updated after code change. + 2018-11-26 Arnold D. Robbins <arnold@skeeve.com> * profile5.ok: Updated after code change. diff --git a/test/profile11.awk b/test/profile11.awk index 180e3bb5..06ede8ac 100644 --- a/test/profile11.awk +++ b/test/profile11.awk @@ -208,8 +208,8 @@ function bar(p1, p2) { print "foo" -} # rbrace eol - # rbrace block +} # rbrace eol bar + # rbrace block bar # comments2/function.awk function baz(p1, # comment @@ -218,8 +218,8 @@ function baz(p1, # comment { # lbrace eol # lbrace block print "foo" -} # rbrace eol - # rbrace block +} # rbrace eol baz + # rbrace block baz # comments/function.awk function funny(param1, # param comment 1 @@ -229,8 +229,8 @@ function funny(param1, # param comment 1 { # lbrace EOL comment # lbrace block comment print "funny" -} # rbrace EOL comment - # rbrace block comment +} # rbrace EOL comment funny + # rbrace block comment funny # comments/function2.awk function funnyhaha(param1, @@ -239,8 +239,8 @@ function funnyhaha(param1, { # lbrace EOL comment # lbrace block comment print "funny" -} # rbrace EOL comment - # rbrace block comment +} # rbrace EOL comment funnyhaha + # rbrace block comment funnyhaha # comments/callcoma.awk function callme(a, b, c) diff --git a/test/profile11.ok b/test/profile11.ok index 1be49aa8..5daf7ccc 100644 --- a/test/profile11.ok +++ b/test/profile11.ok @@ -234,7 +234,6 @@ BEGIN { } } -# comments2/f.awk BEGIN { callme(1, # 1 comment 2, # 2 comment @@ -303,11 +302,18 @@ BEGIN { } +# comments2/f.awk function bar(p1, p2) { print "foo" } +# rbrace eol bar + +# rbrace block bar + +# comments2/function.awk + # comment # comment before braces @@ -318,6 +324,11 @@ function baz(p1, p2) print "foo" } +# rbrace EOL comment funnyhaha + +# rbrace block comment funnyhaha + +# comments/callcoma.awk function callme(a, b, c) { printf "a = %s, b = %s, c = %s\n", # format comment @@ -326,6 +337,12 @@ function callme(a, b, c) c } +# rbrace eol baz + +# rbrace block baz + +# comments/function.awk + # param comment 1 # param comment 2 @@ -338,6 +355,11 @@ function funny(param1, param2, param3, param4) print "funny" } +# rbrace EOL comment funny + +# rbrace block comment funny + +# comments/function2.awk function funnyhaha(param1, param2, param3, param4) { # lbrace EOL comment diff --git a/test/profile5.ok b/test/profile5.ok index 0880f028..e15e96a2 100644 --- a/test/profile5.ok +++ b/test/profile5.ok @@ -2,7 +2,7 @@ BEGIN { _addlib("_BASE") } -########################################################## +#___________________________________________________________________________________ BEGIN { ############################################################################ BINMODE = "rw" SUBSEP = "\000" @@ -15,29 +15,24 @@ BEGIN { _addlib("_sYS") } -################################################################ -#_____________________________________________________________________________ BEGIN { _addlib("_rEG") } -################################################################ -#_____________________________________________________________________________ BEGIN { _addlib("_INSTRUC") } -###################################################### +#___________________________________________________________________________________ BEGIN { ############################################################################# _delay_perfmsdelay = 11500 } -#___________________________________________________________________________________ BEGIN { _addlib("_ARR") } -########################################################## +#___________________________________________________________________________________ BEGIN { } @@ -46,7 +41,7 @@ BEGIN { _addlib("_EXTFN") } -######################################################## +#___________________________________________________________________________________ BEGIN { ############################################################################# delete _XCHR delete _ASC @@ -102,23 +97,21 @@ BEGIN { ######################################################################## _gensubfn("\\^$.()|{,}[-]?+*", ".", "_rexpstr_i0") } -#_____________________________________________________________________________ BEGIN { _addlib("_SYSIO") } -######################################################### +#___________________________________________________________________________________ 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 { ############################################################################# if (_SYS_STDOUT == "") { _SYS_STDOUT = "/dev/stdout" @@ -136,12 +129,11 @@ BEGIN { ######################################################################## } } -#___________________________________________________________________________________ BEGIN { _addlib("_tOBJ") } -######################################################### +#___________________________________________________________________________________ BEGIN { ############################################################################# _tInBy = "\212._tInBy" _tgenuid_init() @@ -169,12 +161,11 @@ BEGIN { ######################################################################## delete _TMP1[""] } -#___________________________________________________________________________________ BEGIN { _addlib("_ERRLOG") } -######################################################## +#___________________________________________________________________________________ BEGIN { ############################################################################# if (_gawk_scriptlevel < 1) { _ERRLOG_TF = 1 @@ -187,12 +178,11 @@ BEGIN { ######################################################################## } } -#___________________________________________________________________________________ BEGIN { _addlib("_SHORTCUT") } -##################################################### +#___________________________________________________________________________________ BEGIN { _shortcut_init() } @@ -202,7 +192,7 @@ BEGIN { _addlib("_eXTFN") } -######################################################## +#___________________________________________________________________________________ BEGIN { _extfn_init() } @@ -212,14 +202,10 @@ BEGIN { _addlib("_sHARE") } -############################################################## -#_____________________________________________________________________________ BEGIN { _addlib("_FILEVER") } -############################################################ -#_____________________________________________________________________________ BEGIN { _addlib("_DS") ############################################################################### _PRODUCT_NAME = "Deployment Solution Control" @@ -228,14 +214,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() @@ -246,33 +232,29 @@ 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 } @@ -292,7 +274,17 @@ 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 { ############################################################################ a = ENVIRON["EGAWK_CMDLINE"] gsub(/^[ \t]*/, "", a) @@ -317,7 +309,8 @@ END { ######################################################################## _EXIT() } -#_____________________________________________________ +#_______________________________________________________________________ +######################################################################## END { ############################################################################### if (_gawk_scriptlevel < 1) { close(_errlog_file) @@ -328,9 +321,28 @@ 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") + } + } +} +#___________________________________________________________________________________ +#################################################################################### @@ -347,67 +359,279 @@ 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. # -# 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 ??? +# fn _newdir(_filepath) # -# 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. +# 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. +#___________________________________________________________________________________ # -# 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 -#_________________________________________________________________ - - - -#_________________________________________________________________ +# fn _getmpfile(_filepath,_currfilepath) # -# TO DESIGN: +# Return .... # -# 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") - } - } -} - #_____________________________________________________________________________ +# +# fn _getmpdir(_filepath,_currfilepath) +# +# Return ... +# +#_____________________________________________________________________________ +# +# 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 { ############################################################################### if (_constatstrln > 0) { _constat() @@ -415,7 +639,21 @@ END { ########################################################################## } #___________________________________________________________________________________ +#################################################################################### + + + + + + +# 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) { ##################################################### @@ -451,6 +689,7 @@ function W(p, p0, p1) return (_[p][p0] = p1) } +########################################################## function _ARR(c, t, P) { switch (c) { @@ -474,6 +713,7 @@ function _ARR(c, t, P) } } +########################################################## function _BASE(c, t, P, A) { switch (c) { @@ -515,6 +755,7 @@ function _BASE(c, t, P, A) } } +#____________________________________________________________________________ function _DS(c, t, P, a, A) { ###################################################### @@ -540,11 +781,13 @@ function _DS(c, t, P, a, A) } } +#______________________________________________________________________________________________ function _END() { ################################################################################# } +######################################################## function _ERRLOG(c, t, P, a, b, A) { switch (c) { @@ -609,11 +852,13 @@ function _ERRLOG(c, t, P, a, b, A) } } +#______________________________________________________________________________________________ function _EXIT() { ################################################################################ } +######################################################## function _EXTFN(c, t, P) { switch (c) { @@ -637,6 +882,7 @@ function _EXTFN(c, t, P) } } +####################################################### function _FILEIO(c, t, P, A) { switch (c) { @@ -678,6 +924,9 @@ function _FILEIO(c, t, P, A) } } +############################################################ + +#_____________________________________________________________________________ function _FILEVER(c, t, P, a, A) { ################################################# @@ -714,12 +963,14 @@ function _INIT(f) { } +#___________________________________________________________________________________ function _INITBASE() { ################################################################ _egawk_utilpath = ENVIRON["EGAWK_PATH"] "BIN\\UTIL\\" } +###################################################### function _INSTRUC(c, t, P) { switch (c) { @@ -743,6 +994,13 @@ function _INSTRUC(c, t, P) } } +#___________________________________________________________________________________ + + +#################################################################################### + + +#_____________________________________________________________________________ function _N(F, v, p) { ########################################################### @@ -753,6 +1011,7 @@ function _N(F, v, p) return _nN_i0(_tgenuid(), F, v) } +##################################################### function _SHORTCUT(c, t, P) { switch (c) { @@ -776,6 +1035,7 @@ function _SHORTCUT(c, t, P) } } +#______________________________________________________________________________________________ function _START(t, i, A) { ######################################################################### @@ -884,6 +1144,7 @@ function _START(t, i, A) _wrfile("report.txt", _report(pp)) } +######################################################### function _SYSIO(c, t, P) { switch (c) { @@ -907,6 +1168,8 @@ function _SYSIO(c, t, P) } } +#_______________________________________________________________________ +######################################################################## function _W(p, A, v) { if (isarray(v)) { @@ -925,6 +1188,7 @@ function _W(p, A, v) return v } +#_______________________________________________________________________ function _Zexparr(S, s, t, i) { ############################################## @@ -943,6 +1207,7 @@ function _Zexparr(S, s, t, i) return t } +#_________________________________________________________________ function _Zexparr_i0(S, t, i) { for (i in S) { @@ -951,6 +1216,7 @@ function _Zexparr_i0(S, t, i) return t } +#_________________________________________________________________ function _Zexparr_i1(t) { gsub(/\x1B/, "\033;", t) @@ -959,12 +1225,14 @@ function _Zexparr_i1(t) return t } +#_________________________________________________________________ function _Zexparr_i2(t) { gsub(/\x10/, "\0330", t) return t } +#_________________________________________________________________ function _Zexparr_i3(t) { gsub(/\x1B/, "\033;", t) @@ -972,6 +1240,7 @@ function _Zexparr_i3(t) return t } +#_______________________________________________________________________ function _Zimparr(D, t, A, B) { ############################################## @@ -984,11 +1253,13 @@ 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) { @@ -1012,6 +1283,7 @@ function _Zimparr_i1(D, A, B, i, t, a, n) } } +#_________________________________________________________________ function _Zimparr_i2(t) { gsub(/\x1B\x31/, "\021", t) @@ -1019,6 +1291,7 @@ function _Zimparr_i2(t) return t } +#_____________________________________________________________________________ function _Zimport(t, p, A, c, i, n, B) { ############################################## @@ -1091,6 +1364,7 @@ function _accmpu(A, a, n) } } +#_______________________________________________________________________ function _add(S, sf, D, df) { ################################################ @@ -1114,6 +1388,7 @@ function _add(S, sf, D, df) } } +#_________________________________________________________________ function _addarr(D, S) { ############################################# @@ -1122,6 +1397,7 @@ function _addarr(D, S) } } +#_____________________________________________________ function _addarr_i0(D, S, i) { for (i in S) { @@ -1137,6 +1413,7 @@ function _addarr_i0(D, S, i) } } +#_______________________________________________________________________ function _addarrmask(D, S, M) { ############################################# @@ -1165,12 +1442,18 @@ 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) { ################################## @@ -1196,18 +1479,27 @@ 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) { #################################################### @@ -1216,17 +1508,39 @@ function _bearray(A) } } +#_________________________________________________________________ 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 # @@ -1252,6 +1566,7 @@ function _cfguid(p, optr, pfx, sfx, hstrcnt, lstrchr) return p } +#_____________________________________________________ function _cfguidchr(p, h, l, H, L) { if (_isptr(l)) { @@ -1270,6 +1585,7 @@ 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++) { @@ -1291,6 +1607,7 @@ function _cfguidl(p, H, L, hi, h, hl, li) return hl } +#____________________________________________________________________________________________________ function _check(p) { #################################################################################### @@ -1300,12 +1617,14 @@ 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) { ####################################################### @@ -1323,6 +1642,7 @@ function _cmd(c, i, A) return RT } +#_______________________________________________________________________ function _cmparr(A0, A1, R, a, i) { ########################################## @@ -1346,6 +1666,7 @@ function _cmparr(A0, A1, R, a, i) return a } +#_____________________________________________________________________________ function _con(t, ts, a, b, c, d, i, r, A, B) { ########################################## @@ -1387,6 +1708,7 @@ function _con(t, ts, a, b, c, d, i, r, A, B) RLENGTH = d } +#_______________________________________________________________________ function _conin(t, a, b) { ################################################# @@ -1408,23 +1730,28 @@ 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) { ########################################### @@ -1443,6 +1770,7 @@ function _constat(t, ts, ln, a) return _constatstr } +#_________________________________________________________________ function _constatgtstr(t, ln, a, b) { if (ln < 1) { @@ -1460,6 +1788,7 @@ function _constatgtstr(t, ln, a, b) return (substr(t, 1, b = int((ln - 3) / 2)) "..." substr(t, a - ln + b + 4)) } +#_______________________________________________________________________ function _constatpop() { ################################################## @@ -1469,6 +1798,7 @@ function _constatpop() return _constat("") } +#_______________________________________________________________________ function _constatpush(t, ts) { ############################################# @@ -1479,11 +1809,13 @@ 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) { ############################################################# @@ -1492,6 +1824,7 @@ function _defdir(pp, n, f, v, p) return p } +#_________________________________________________________________________________________ function _defdll(pp, n, rn, p) { ############################################################## @@ -1501,6 +1834,7 @@ function _defdll(pp, n, rn, p) return p } +#___________________________________________________________ function _defescarr(D, r, S, i, c, t) { if (isarray(S)) { @@ -1527,6 +1861,7 @@ function _defescarr(D, r, S, i, c, t) return t } +#_________________________________________________________________________________________ function _defile(pp, n, f, v, p) { ############################################################# @@ -1538,12 +1873,14 @@ 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) { ############################################################# @@ -1554,6 +1891,7 @@ function _defreg(pp, n, f, v, p) } } +#_______________________________________________________________________________________________ function _defsolution(pp, n, rn, p) { ############################################################### @@ -1563,6 +1901,7 @@ function _defsolution(pp, n, rn, p) return p } +#_________________________________________________________________________________________ function _defsrv(pp, n, f, v, p) { ############################################################# @@ -1571,6 +1910,7 @@ function _defsrv(pp, n, f, v, p) return p } +#_______________________________________________________________________ function _del(f, c, a, A) { ################################################# @@ -1599,6 +1939,7 @@ function _del(f, c, a, A) return a } +#_______________________________________________________________________ function _delay(t, a) { ################################################### @@ -1607,6 +1948,7 @@ function _delay(t, a) } } +#_________________________________________________________________ function _delayms(a) { ############################################# @@ -1614,6 +1956,7 @@ function _delayms(a) } } +#_______________________________________________________________________ function _deletepfx(A, f, B, le, i) { ######################################## @@ -1626,6 +1969,7 @@ function _deletepfx(A, f, B, le, i) } } +#_________________________________________________________________ function _delf(A, f) { ############################################### @@ -1634,6 +1978,7 @@ function _delf(A, f) delete A["B"][f] } +#_______________________________________________________________________ function _deluid(p) { ################################################# 1 # @@ -1647,6 +1992,7 @@ function _deluid(p) return _deluida0 } +#_______________________________________________________________________ function _dir(A, rd, i, r, f, ds, pf, B, C) { #################################### @@ -1676,6 +2022,7 @@ function _dir(A, rd, i, r, f, ds, pf, B, C) return r } +#_________________________________________________________________ function _dirtree(A, f, B) { ######################################### @@ -1687,6 +2034,7 @@ function _dirtree(A, f, B) return f } +#___________________________________________________________ function _dirtree_i0(B, i, c, A, f, lf, a, C) { delete A[f] @@ -1707,6 +2055,7 @@ function _dirtree_i0(B, i, c, A, f, lf, a, C) return i } +#_______________________________________________________________________ function _dll_check(pp) { _dllchktv = "" @@ -1724,6 +2073,7 @@ 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") { @@ -1779,6 +2129,7 @@ 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") { @@ -1790,6 +2141,7 @@ function _dll_check_i1(p, pp, p1, p2, p3, i) } } +#___________________________________________________________________________________ function _dllerr(p, t, f) { if (t !~ /\x00/) { @@ -1829,6 +2181,7 @@ function _drawuid(p, cn, ch, o) } } +#_______________________________________________________________________ function _dumparr(A, t, lv, a) { ############################################ @@ -1843,6 +2196,7 @@ function _dumparr(A, t, lv, a) } } +#___________________________________________________________ function _dumparr_i1(A, lv, ls, ln, t, t2, i, a, f) { t2 = _getchrln(" ", length(t)) @@ -1885,6 +2239,14 @@ function _dumparr_i1(A, lv, ls, ln, t, t2, i, a, f) } } +#___________________________________________________________________________________ +#################################################################################### + + +#___________________________________________________________________________________ +# OTHER tFUNCTIONs ################################################################# + +#_____________________________________________________________________________ function _dumpobj(p, f, t, s) { ################################################### @@ -1895,6 +2257,7 @@ function _dumpobj(p, f, t, s) return s } +#___________________________________________________________ function _dumpobj_i0(p, f, t) { if (f == "") { @@ -1906,16 +2269,19 @@ 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)) { @@ -1939,6 +2305,7 @@ 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) { @@ -1947,12 +2314,14 @@ 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) { ################################### @@ -1964,6 +2333,7 @@ function _dumpobjm(p, f, t, s, t2) return s } +#_________________________________________________________________ function _dumpobjm_nc(p, f, t, s, t2) { ################################ @@ -1998,12 +2368,14 @@ 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) { @@ -2027,11 +2399,13 @@ function _eXTFN(c, t, P) } } +#_________________________________________________________________ function _endpass(t) { _endpass_v0 = t } +#_______________________________________________________________________ function _err(t, a, b) { ################################################### @@ -2046,12 +2420,14 @@ function _err(t, a, b) return t } +#_________________________________________________________________ function _errnl(t) { ################################################ return _err(t (t ~ /\x0A$/ ? "" : _CHR["EOL"])) } +#_______________________________________________________________________ function _error(t, d, A) { ################################################# @@ -2062,12 +2438,14 @@ function _error(t, d, A) } } +#_______________________________________________________________________ function _exit(c) { ####################################################### exit c } +#_____________________________________________________________________________ function _export_data(t, i, A) { ################################################# @@ -2076,6 +2454,10 @@ function _export_data(t, i, A) _expout("_DATA: " _Zexparr(A) "\n") } +#___________________________________________________________________________________ +#################################################################################### + +#_____________________________________________________________________________ function _expout(t, d, a, b) { #################################################### @@ -2089,6 +2471,8 @@ function _expout(t, d, a, b) ORS = b } +#_________________________________________________________________________________________ +########################################################################################## function _extfn_init() { ############################################################## @@ -2121,6 +2505,7 @@ function _faccr_i0(A, t, p, P, f, r) return r } +#_______________________________________________________________________ function _fatal(t, d, A) { ################################################# @@ -2154,17 +2539,22 @@ 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[""]) } +#___________________________________________________________ function _fframe_i0(A, t, p, f) { return (f ? ((@f(t, p)) _fframe_i0(A, t, p, A[f])) : "") } +#_________________________________________________________________ function _file(f) { ################################################# @@ -2174,6 +2564,7 @@ function _file(f) return (f in _FILEXT ? _FILEXT[f] : "") } +#_______________________________________________________________________ function _file_check(p) { if (1 || "AGENT" in _[p]) { @@ -2181,6 +2572,7 @@ function _file_check(p) } } +#_______________________________________________ function _file_check_i0(p, pp, p1, p2, f, v) { if (_[p]["TYPE"] == "defile") { @@ -2209,6 +2601,7 @@ function _file_check_i0(p, pp, p1, p2, f, v) } } +#_________________________________________________________________ function _filed(f, dd, d) { ########################################## @@ -2233,6 +2626,7 @@ function _filed(f, dd, d) return d } +#_________________________________________________________________ function _filen(f) { ################################################ @@ -2242,6 +2636,7 @@ function _filen(f) return (f in _FILENAM ? _FILENAM[f] : "") } +#_________________________________________________________________ function _filene(f) { ############################################### @@ -2251,6 +2646,7 @@ function _filene(f) return (f in _FILENAM ? _FILENAM[f] : "") (f in _FILEXT ? _FILEXT[f] : "") } +#_________________________________________________________________ function _filenotexist(f, a) { ###################################### @@ -2268,6 +2664,7 @@ function _filenotexist(f, a) return a } +#_______________________________________________________________________ function _filepath(f, dd) { ################################################ @@ -2277,6 +2674,7 @@ function _filepath(f, dd) return (filegetrootdir(f, dd) (f in _FILENAM ? _FILENAM[f] : "") (f in _FILEXT ? _FILEXT[f] : "")) } +#_________________________________________________________________ function _filer(f, dd) { ############################################# @@ -2292,6 +2690,7 @@ function _filer(f, dd) return (_FILEROOT[dd, f] = fileri(dd)) } +#_________________________________________________________________ function _filerd(f, dd) { ############################################ @@ -2301,6 +2700,7 @@ function _filerd(f, dd) return filegetrootdir(f, dd) } +#_________________________________________________________________ function _filerdn(f, dd) { ########################################### @@ -2310,6 +2710,7 @@ function _filerdn(f, dd) return (f in _FILENAM ? (filegetrootdir(f, dd) _FILENAM[f]) : "") } +#_________________________________________________________________ function _filerdne(f, dd) { ########################################## @@ -2325,6 +2726,7 @@ function _filerdne(f, dd) return "" } +#___________________________________________________________ function _filerdnehnd(st, c, r, d, n, A) { if (st) { @@ -2379,6 +2781,7 @@ function _filerdnehnd(st, c, r, d, n, A) return "" } +#_______________________________________________________________________ function _filexist(f, a) { ################################################ @@ -2397,6 +2800,7 @@ function _filexist(f, a) return _NOP } +#_______________________________________________________________________ function _fn(f, p0, p1, p2) { ################################################ @@ -2405,6 +2809,7 @@ function _fn(f, p0, p1, p2) } } +#_______________________________________________________________________ function _foreach(A, f, r, p0, p1, p2, i, p) { #################################### @@ -2420,6 +2825,7 @@ function _foreach(A, f, r, p0, p1, p2, i, p) } } +#_____________________________________________________ function _foreach_i0(A, f, D, p0, p1, p2) { for (i in A) { @@ -2431,11 +2837,13 @@ 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) @@ -2446,6 +2854,7 @@ function _formatrexp(t) return (_formatstrs0 _FORMATSTRA[t]) } +#___________________________________________________________ function _formatrexp_init() { _defescarr(_FORMATREXPESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC) @@ -2453,6 +2862,7 @@ function _formatrexp_init() _FORMATREXPESC["\t"] = "\\t" } +#_____________________________________________________________________________ function _formatstrd(t) { _formatstrq0 = split(t, _FORMATSTRA, /["\x00-\x1F\x80-\xFF]/, _FORMATSTRB) @@ -2463,6 +2873,7 @@ function _formatstrd(t) return (_formatstrs0 _FORMATSTRA[t]) } +#___________________________________________________________ function _formatstrd_init() { _defescarr(_FORMATSTRDESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC) @@ -2470,6 +2881,14 @@ function _formatstrd_init() _FORMATSTRDESC["\t"] = "\\t" } +#__________________________________________________________________________________ + +#################################################################################### + + + + +#___________________________________________________________________________________ function _formatstrs(t) { _formatstrq0 = split(t, _FORMATSTRA, /['\x00-\x1F\x80-\xFF]/, _FORMATSTRB) @@ -2480,6 +2899,7 @@ function _formatstrs(t) return (_formatstrs0 _FORMATSTRA[t]) } +#___________________________________________________________ function _formatstrs_init() { _defescarr(_FORMATSTRSESC, "[\\x00-\\x1F\\x80-\\xFF]", _QASC) @@ -2500,11 +2920,14 @@ 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) : "") @@ -2517,6 +2940,7 @@ function _gen(D, t) } } +#_____________________________________________________________________________ function _gensubfn(t, r, f, p0, A) { ############################################### @@ -2526,17 +2950,20 @@ 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) { @@ -2553,11 +2980,13 @@ 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]) { @@ -2576,12 +3005,14 @@ 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) { @@ -2598,6 +3029,7 @@ function _get_logout_i0(p, t, n, a) } } +#_______________________________________________________________________ function _getchrln(s, w) { ################################################# @@ -2623,12 +3055,14 @@ function _getchrln(s, w) } } +#_______________________________________________________________________ function _getdate() { ##################################################### return strftime("%F") } +#_____________________________________________________________________________ function _getfilepath(t, f, al, b, A) { ############################################ @@ -2657,12 +3091,14 @@ function _getfilever(f) } } +#_________________________________________________________________ function _getime() { ################################################ return strftime("%H:%M:%S") } +#_________________________________________________________________ function _getmpdir(f, dd) { ########################################## @@ -2675,6 +3111,7 @@ function _getmpdir(f, dd) return f } +#_________________________________________________________________ function _getmpfile(f, dd) { ######################################### @@ -2687,6 +3124,7 @@ function _getmpfile(f, dd) return f } +#_______________________________________________________________________ function _getperf(o, t, a) { ############################################### @@ -2698,6 +3136,7 @@ function _getperf(o, t, a) return 1 } +#___________________________________________________________ function _getperf_(o, t, a) { if (a >= _getperf_end) { @@ -2710,6 +3149,7 @@ function _getperf_(o, t, a) return 1 } +#___________________________________________________________ function _getperf_noe(o, t, a) { if (_getperf_opsecp != _getperf_opsec) { @@ -2719,11 +3159,13 @@ 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) { @@ -2731,6 +3173,8 @@ function _getperf_not(o, t, a) } } +#_________________________________________________________________________________________ +########################################################################################## function _getreg_i1(D, r, R, a, i, il, ir, rc, B) { a = IGNORECASE @@ -2755,12 +3199,14 @@ function _getreg_i1(D, r, R, a, i, il, ir, rc, B) } } +#_________________________________________________________________ function _getsecond() { ############################################# return systime() } +#___________________________________________________________ function _getsecondsync(a, c, b, c2) { ########################## @@ -2771,6 +3217,7 @@ function _getsecondsync(a, c, b, c2) return (a + 1) } +#_______________________________________________________________________ function _getuid(p) { ################################################# 1 # @@ -2785,6 +3232,7 @@ function _getuid(p) return _tptr } +#_____________________________________________________ function _getuid_i0(p, UL, UH) { if ("" == (_tptr = UL[_UIDCNTL[p]])) { @@ -2802,6 +3250,7 @@ function _handle8494(t) return gensub(/(.)/, ".\\1", "G", t) } +#_____________________________________________________________________________ function _hexnum(n, l) { ######################################################### @@ -2811,6 +3260,7 @@ 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 @@ -2841,6 +3291,7 @@ function _import_data(t, p, p2, a) return t } +#_______________________________________________________________________ function _info(t, d, A) { ################################################## @@ -2851,6 +3302,8 @@ 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) @@ -2894,6 +3347,7 @@ function _initshare() _sharextool = "\\\\CPU\\eGAWK\\LIB\\_share\\_share.exe" } +#_________________________________________ function _initspecialuid() { _NOINDEX = _getuid() @@ -2908,6 +3362,7 @@ function _initsys() { } +#_______________________________________________________________________ function _inituid(p, cs, dptr, pfx, sfx, hstr, lstr, A) { ################### 1 # @@ -2967,6 +3422,7 @@ function _inituidefault(h, l, H, L) _initspecialuid() } +#_______________________________________________________________________ function _ins(S, sf, D, df) { ################################################ @@ -2990,12 +3446,14 @@ function _ins(S, sf, D, df) } } +#_________________________________________________________________ function _insf(A, f) { ############################################### A["F"][""] = A["B"][A["F"][f] = A["F"][""]] = f } +#_________________________________________________________________ function _insframe(A, f) { ########################################### @@ -3003,12 +3461,18 @@ 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 # @@ -3029,6 +3493,7 @@ function _isptr(p) return 0 } +#_______________________________________________________________________ function _istr(p) { ################################################### 1 # @@ -3045,48 +3510,57 @@ 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) { ########################################### @@ -3107,6 +3581,7 @@ function _log(A, p, a, B) } } +#_________________________________________________________________ function _lspctab(t, ts, l, l1, l2, A) { ################################ @@ -3148,6 +3623,7 @@ function _macsfx94(F, D, C, p1, p2, p3) return _mpuretsub(D, _handle8494(_mpuacc)) } +#_______________________________________________________________________ function _movarr(D, S) { ################################################### @@ -3174,6 +3650,11 @@ 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) @@ -3226,6 +3707,7 @@ function _mpusub(F, D, C, d, p1, p2, p3, q) _conl("mpusub exit: _mpuacc: `" _mpuacc "'") } +#_______________________________________________________________________ function _n(F, v, p) { ##################################################### @@ -3251,6 +3733,7 @@ function _n(F, v, p) return _nN_i0(_tgenuid(), F, v) } +#_____________________________________________________ function _nN_i0(p, F, v) { _[p][""] @@ -3281,6 +3764,7 @@ function _nN_i0(p, F, v) return p } +#_________________________________________________________________ function _newclrdir(f) { ############################################ @@ -3293,6 +3777,7 @@ function _newclrdir(f) return f } +#_______________________________________________________________________ function _newdir(f) { ##################################################### @@ -3306,10 +3791,29 @@ 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) { ##################################### @@ -3329,6 +3833,7 @@ function _nretarr(A, i, v, r, q) return } +#___________________________________________________________ function _nretarrd(A, i, v, r, q) { ############################## @@ -3350,6 +3855,10 @@ function _nretarrd(A, i, v, r, q) delete A[""] } +#___________________________________________________________________________________ +#################################################################################### + +#___________________________________________________________________________________ function _out(t, a, b) { ############################################################### @@ -3364,6 +3873,7 @@ function _out(t, a, b) return t } +#_________________________________________________________________ function _outnl(t) { ################################################ @@ -3418,6 +3928,7 @@ 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) { ########################################### @@ -3439,6 +3950,8 @@ 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) { ############################################## @@ -3477,6 +3990,7 @@ function _patharr0(D, q, i, h, A, B) } } +#_____________________________________________________ function _patharr0_i0(t, D, l, r, d, i) { if (i = index(t, ":")) { @@ -3496,6 +4010,7 @@ function _patharr0_i0(t, D, l, r, d, i) return t } +#_____________________________________________________ function _patharr0_i1(D, A, i, q, t, c) { if (D["type"] == "UNC") { @@ -3521,6 +4036,7 @@ 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)) { @@ -3576,6 +4092,7 @@ 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) { #################################### @@ -3591,6 +4108,7 @@ function _printarr(A, t, lv, r, a) } } +#___________________________________________________________ function _printarr_i1(A, lv, ls, ln, t, t2, i, a, f) { t2 = _getchrln(" ", length(t)) @@ -3674,6 +4192,7 @@ function _qparam_i0(p0, p1, p2, p3, p4, p5, p6, p7) } } +#_______________________________________________________________________ function _qstr(t, c, A, B) { ################################################ @@ -3684,6 +4203,7 @@ function _qstr(t, c, A, B) return c } +#_________________________________________________________________ function _qstrq(t) { ################################################ @@ -3692,6 +4212,9 @@ function _qstrq(t) return t } +################################################################ + +#_____________________________________________________________________________ function _rEG(c, t, P, a, A) { ##################################################### @@ -3717,6 +4240,7 @@ function _rEG(c, t, P, a, A) } } +#_______________________________________________________________________ function _rFBRO(p) { ###################################################### @@ -3732,6 +4256,7 @@ function _rFBRO(p) return p } +#_______________________________________________________________________ function _rFCHLD(p) { ##################################################### @@ -3741,6 +4266,9 @@ function _rFCHLD(p) return "" } +######################## p="", !v + +#_______________________________________________________________________ function _rLBRO(p) { ###################################################### @@ -3756,6 +4284,9 @@ function _rLBRO(p) return p } +######################## p="" + +#_______________________________________________________________________ function _rLCHLD(p) { ##################################################### @@ -3765,12 +4296,16 @@ function _rLCHLD(p) return "" } +#_______________________________________________________________________ function _rLINK(p) { ###################################################### return (p in _tLINK ? _tLINK[p] : "") } +######################## p="" + +#_______________________________________________________________________ function _rNEXT(p) { ###################################################### @@ -3780,6 +4315,9 @@ function _rNEXT(p) return "" } +######################## p="" + +#_______________________________________________________________________ function _rPARENT(p) { #################################################### @@ -3789,6 +4327,9 @@ function _rPARENT(p) return "" } +######################## p="" + +#_______________________________________________________________________ function _rPREV(p) { ###################################################### @@ -3798,6 +4339,9 @@ function _rPREV(p) return "" } +######################## p="" + +#_______________________________________________________________________ function _rQBRO(p, c, p1) { ################################################ @@ -3820,6 +4364,9 @@ function _rQBRO(p, c, p1) return p } +######################## p="" + +#_______________________________________________________________________ function _rQCHLD(p) { ##################################################### @@ -3829,6 +4376,10 @@ function _rQCHLD(p) return "" } +#___________________________________________________________________________________ +# EMMULATED FUNCTIONAL FIELDS ###################################################### + +#_____________________________________________________________________________ function _rSQFIRST(g, p, A) { ##################################################### @@ -3840,6 +4391,7 @@ function _rSQFIRST(g, p, A) return _rsqgetptr(g, p) } +#_________________________________________________________________ function _rSQFIRSTA(g, p, A) { ######################################## @@ -3851,6 +4403,7 @@ function _rSQFIRSTA(g, p, A) return _rSQNEXTA(g, p, A) } +#_______________________________________________________________________ function _rSQNEXT(g, p, A) { ################################################ @@ -3860,6 +4413,7 @@ function _rSQNEXT(g, p, A) return _rsqnext_i0(g, p) } +#_________________________________________________________________ function _rSQNEXTA(g, p, A) { ######################################### @@ -3888,6 +4442,7 @@ 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)) { @@ -3904,6 +4459,7 @@ function _rd_shortcut(D, f) return (ERRNO ? ERRNO = "read shortcut: " ERRNO : _NOP) } +#_______________________________________________________________________ function _rdfile(f, i, A) { ################################################ @@ -3928,6 +4484,35 @@ 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) { ################################################################ @@ -3940,6 +4525,7 @@ function _rdreg(D, p) return (_rdregfld + _rdregkey) } +#___________________________________________________________ function _rdreg_i0(D, A) { while (_rdregq0 > 0) { @@ -3959,6 +4545,8 @@ function _rdreg_i0(D, A) return 1 } +#_____________________________________________________________________________________________________ +###################################################################################################### function _rdsafe(A, i, d) { if (i in A) { @@ -3967,11 +4555,13 @@ 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") { @@ -3993,11 +4583,15 @@ 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 # @@ -4021,6 +4615,7 @@ function _regpath0(D, i, s, q, S) } } +#_________________________________________________________________________________________ function _report(p) { ####################################################################### @@ -4045,6 +4640,7 @@ function _report_i0(p, p0, p1, p2) } } +#___________________________________________________________________________________ function _reporterr(p, t3, pp, t, t2) { t = "" @@ -4058,6 +4654,66 @@ 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) { ################################################## @@ -4081,6 +4737,7 @@ function _retarr_i0(A, q, i, a) return a } +#_________________________________________________________________ function _retarrd(A, v, i) { ######################################### @@ -4091,6 +4748,7 @@ function _retarrd(A, v, i) return v } +#_____________________________________________________ function _retarrd_i0(A, i) { if (i in A) { @@ -4099,6 +4757,9 @@ function _retarrd_i0(A, i) delete A } +#_______________________________________________________________________ +######################################################################## +#EXPERIMENTAL function _rexpfn(R, t, p) { _REXPFN[""] = "" @@ -4113,6 +4774,7 @@ function _rexpfnend(t) _REXPFN[""] = t } +#_____________________________________________________________________________ function _rexpstr(r, i, c, A) { ################################################### @@ -4124,11 +4786,13 @@ 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) @@ -4151,6 +4815,7 @@ function _rpp(q, D, S) return q } +#_________________________________________________________________________________________ function _rrdreg(DD, p, k, t, v, c, i, q, tT, A, B, C, D) { ############################################# old; regedit @@ -4203,6 +4868,7 @@ function _rrdreg(DD, p, k, t, v, c, i, q, tT, A, B, C, D) } } +#_________________________________________________________________ function _rsqgetptr(g, p, A) { if (p in _tLINK) { @@ -4219,6 +4885,7 @@ function _rsqgetptr(g, p, A) return p } +#___________________________________________________________ function _rsqnext_i0(g, p) { if (p == _SQTOPTR[g]) { @@ -4267,6 +4934,9 @@ function _rxpfn(R, t, p, i, f, A) return _rexpfnend(t) } +############################################################## + +#_____________________________________________________________________________ function _sHARE(c, t, P, a, A) { ################################################### @@ -4292,6 +4962,9 @@ function _sHARE(c, t, P, a, A) } } +################################################################ + +#_____________________________________________________________________________ function _sYS(c, t, P, a, A) { ##################################################### @@ -4317,11 +4990,13 @@ 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") { @@ -4336,6 +5011,7 @@ function _serv_check_i0(p, p0, p1, p2, p3, i, q, c) IGNORECASE = i } +#_______________________________________________________________________ function _setarrsort(f, a) { ############################################## @@ -4348,6 +5024,7 @@ function _setarrsort(f, a) return a } +#_______________________________________________________________________ function _setmpath(p, a) { ################################################ @@ -4364,6 +5041,8 @@ function _setmpath(p, a) } } +#_________________________________________________________________________________________ +########################################################################################## function _sharelist(D, h, q, c, l, A, B) { ################################################# @@ -4383,6 +5062,7 @@ function _sharelist(D, h, q, c, l, A, B) return _rmtsharerr(h, c) } +#_____________________________________________________________________________ function _sharepath(h, s, A) { ################################################### @@ -4432,6 +5112,7 @@ function _shortcut(D, S) return 1 } +#________________________________________________ function _shortcut_init(A, B, q) { _SHORTCUTERR[2] = "file not found" @@ -4463,6 +5144,7 @@ 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)) { @@ -4607,6 +5289,7 @@ function _splitpath_test() return } +#_______________________________________________________________________ function _splitstr(A, t, r) { ########################################### 1 # @@ -4634,6 +5317,7 @@ function _splitstr(A, t, r) } } +#_____________________________________________________ function _splitstr_i0(A, t, C) { if (2 > (_splitstrq0 = patsplit(t, _SPLITSTRA0, /([^,\xB4]*\xB4.)*[^,\xB4]*/))) { @@ -4650,6 +5334,7 @@ function _splitstr_i0(A, t, C) return _splitstrp0 } +#_______________________________________________ function _strtorexp(t) { gsub(/[\\\.\?\*\+\-\(\)\{\}\[\]\^\$\/\|]/, "\\\\&", t) @@ -4683,6 +5368,81 @@ function _subseqon(B, r, F, f, s, e, q, i, A) 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#___________________________________________________________________________________ +#################################################################################### function _sysinfo(D, h) { ############################################################## @@ -4697,6 +5457,7 @@ function _sysinfo(D, h) } } +######################################################### function _tOBJ(c, t, P) { switch (c) { @@ -4724,6 +5485,7 @@ function _tOBJ(c, t, P) } } +#_______________________________________________________________________ function _tOBJ_CLEANUP(p) { ############################################## @@ -4742,6 +5504,7 @@ function _tOBJ_CLEANUP(p) } } +#_______________________________________________________________________ function _tabtospc(t, ts, xc, a, c, n, A, B) { ################################## @@ -4757,6 +5520,8 @@ function _tabtospc(t, ts, xc, a, c, n, A, B) return t } +#___________________________________________________________________________________ +#################################################################################### function _tapi(p, f, p0, p1, p2, p3, c) { c = p @@ -4769,6 +5534,7 @@ function _tapi(p, f, p0, p1, p2, p3, c) } while ("CLASS" in _[c]) } +#_____________________________________________________________________________ function _tbframe(f, p, p0, p1) { ################################################## @@ -4778,6 +5544,7 @@ function _tbframe(f, p, p0, p1) return f } +#___________________________________________________________ function _tbframe_i0(f, p, p0, p1, a) { while (p in _tLINK) { @@ -4786,6 +5553,7 @@ 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) { ########################################### @@ -4795,6 +5563,7 @@ function _tbframex(f, p, p0, p1) return f } +#___________________________________________________________ function _tbframex_i0(f, p, p0, p1) { while (p in _tLINK) { @@ -4803,6 +5572,7 @@ 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) { ################################################### @@ -4812,6 +5582,7 @@ function _tbpass(f, p, p0, p1) return f } +#___________________________________________________________ function _tbpass_i0(f, p, p0, p1, a) { while (p in _tLINK) { @@ -4820,6 +5591,7 @@ 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) { ################################################## @@ -4829,6 +5601,7 @@ function _tbpassx(f, p, p0, p1) return f } +#___________________________________________________________ function _tbpassx_i0(f, p, p0, p1) { while (p in _tLINK) { @@ -4837,6 +5610,7 @@ 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!!! @@ -4920,30 +5694,35 @@ 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) { ########################################################## @@ -4967,6 +5746,7 @@ function _tdel(p, i) } } +#_____________________________________________________ function _tdel_i0(p, i) { for (i in _ptr[p]) { @@ -4986,6 +5766,7 @@ function _tdel_i0(p, i) _UIDSDEL[p] } +#_____________________________________________________ function _tdel_i1(A, i) { for (i in A) { @@ -4997,6 +5778,7 @@ function _tdel_i1(A, i) } } +#_____________________________________________________________________________ function _tdelete(p, v) { ####################################################### # REMAKE EXCLUDE @@ -5006,6 +5788,7 @@ function _tdelete(p, v) return v } +#_________________________________________________________________ function _tdelitem(p) { ############################################# @@ -5018,6 +5801,7 @@ function _tdelitem(p) } } +#_______________________________________________________________________ function _tend(a, b) { ##################################################### @@ -5028,6 +5812,7 @@ function _tend(a, b) } } +#_____________________________________________________________________________ function _texclude(p, v, pp) { ################################################### # TEST!!! @@ -5069,6 +5854,8 @@ 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) { ############################################### @@ -5078,6 +5865,7 @@ function _tframe(fF, p, p0, p1, p2) return p } +#_____________________________________________________________________________ function _tframe0(f, p, p0, p1, p2, p3, A) { ######################################### @@ -5090,6 +5878,7 @@ function _tframe0(f, p, p0, p1, p2, p3, A) } } +#_______________________________________________ function _tframe0_i0(A, p, f) { if (p in _tLINK) { @@ -5113,6 +5902,7 @@ function _tframe0_i0(A, p, f) return _tframe0_i2(A, ".", p) } +#_______________________________________________ function _tframe0_i1(A, p) { if (_TEND[_ARRLEN] in _TEND) { @@ -5124,6 +5914,7 @@ function _tframe0_i1(A, p) return _tframe0_i0(A, p) } +#_______________________________________________ function _tframe0_i2(A, m, p) { _tframe_dlink = p @@ -5141,6 +5932,7 @@ function _tframe0_i2(A, m, p) } } +#_________________________________________________________________ function _tframe1(f, p, p0, p1, p2, p3, A) { ############################# @@ -5153,6 +5945,7 @@ function _tframe1(f, p, p0, p1, p2, p3, A) } } +#_______________________________________________ function _tframe1_i0(A, p, p0) { _tframe_link = p @@ -5165,6 +5958,7 @@ function _tframe1_i0(A, p, p0) return _tframe1_i2(A, ".", p, p0) } +#_______________________________________________ function _tframe1_i1(A, p, p0) { if (_TEND[_ARRLEN] in _TEND) { @@ -5176,6 +5970,7 @@ function _tframe1_i1(A, p, p0) return _tframe1_i0(A, p, p0) } +#_______________________________________________ function _tframe1_i2(A, m, p, p0) { _tframe_dlink = p @@ -5193,6 +5988,7 @@ function _tframe1_i2(A, m, p, p0) } } +#_________________________________________________________________ function _tframe2(f, p, p0, p1, p2, p3, A) { ############################# @@ -5205,6 +6001,7 @@ function _tframe2(f, p, p0, p1, p2, p3, A) } } +#_______________________________________________ function _tframe2_i0(A, p, p0, p1) { _tframe_link = p @@ -5217,6 +6014,7 @@ 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) { @@ -5228,6 +6026,7 @@ 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 @@ -5245,6 +6044,7 @@ function _tframe2_i2(A, m, p, p0, p1) } } +#_________________________________________________________________ function _tframe3(f, p, p0, p1, p2, p3, A) { ############################# @@ -5257,6 +6057,7 @@ function _tframe3(f, p, p0, p1, p2, p3, A) } } +#_______________________________________________ function _tframe3_i0(A, p, p0, p1, p2) { _tframe_link = p @@ -5269,6 +6070,7 @@ 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) { @@ -5280,6 +6082,7 @@ 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 @@ -5297,6 +6100,7 @@ function _tframe3_i2(A, m, p, p0, p1, p2) } } +#_________________________________________________________________ function _tframe4(f, p, p0, p1, p2, p3, A) { ############################# @@ -5309,6 +6113,7 @@ function _tframe4(f, p, p0, p1, p2, p3, A) } } +#_______________________________________________ function _tframe4_i0(A, p, p0, p1, p2, p3) { _tframe_link = p @@ -5321,6 +6126,7 @@ 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) { @@ -5332,6 +6138,7 @@ 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 @@ -5349,6 +6156,7 @@ function _tframe4_i2(A, m, p, p0, p1, p2, p3) } } +#___________________________________________________________ function _tframe_i0(f, p, p0, p1, p2, a) { while (p in _tLINK) { @@ -5357,6 +6165,7 @@ 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) { @@ -5365,6 +6174,7 @@ 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) { ############################################ @@ -5374,6 +6184,7 @@ function _tframex(f, p, p0, p1) return f } +#___________________________________________________________ function _tframex_i0(f, p, p0, p1) { while (p in _tLINK) { @@ -5382,6 +6193,7 @@ 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 @@ -5402,6 +6214,7 @@ function _tframex_p0(A, f, q, i, B, C) } } +#_______________________________________________ function _tframex_p1(A, v, i, r, B) { gsub(/[ \t]+/, "", v) @@ -5428,6 +6241,17 @@ 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) { @@ -5441,6 +6265,7 @@ function _tgenuid(c) return _fatal("_tUID: Out of UID range") } +#_____________________________________________________ function _tgenuid_init(a, b, A) { _ptrlength = 4 @@ -5454,6 +6279,12 @@ 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) { ############################################ @@ -5472,43 +6303,63 @@ 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) { @@ -5528,6 +6379,76 @@ 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 @@ -5588,6 +6509,7 @@ function _tlist_i1(L, p) } } +#_________________________________________________________________ function _tmbframe(f, p, p0, p1, t) { ################################## @@ -5597,6 +6519,7 @@ function _tmbframe(f, p, p0, p1, t) return t } +#_________________________________________________________________ function _tmbframex(f, p, p0, p1, t) { ################################# @@ -5607,6 +6530,7 @@ function _tmbframex(f, p, p0, p1, t) return t } +#_________________________________________________________________ function _tmbpass(f, p, p0, p1) { ###################################### @@ -5616,6 +6540,7 @@ function _tmbpass(f, p, p0, p1) return p0 } +#_________________________________________________________________ function _tmbpassx(f, p, p0, p1) { ##################################### @@ -5626,6 +6551,7 @@ function _tmbpassx(f, p, p0, p1) return p0 } +#_________________________________________________________________ function _tmframe(f, p, p0, p1, p2) { ################################### @@ -5635,6 +6561,7 @@ 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))) { @@ -5643,6 +6570,7 @@ 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))) { @@ -5651,6 +6579,7 @@ function _tmframe_i1(F, p, p0, p1, p2, t) return t } +#_________________________________________________________________ function _tmframex(f, p, p0, p1, t) { ################################## @@ -5661,6 +6590,7 @@ function _tmframex(f, p, p0, p1, t) return t } +#_________________________________________________________________ function _tmpass(f, p, p0, p1) { ####################################### @@ -5670,6 +6600,7 @@ function _tmpass(f, p, p0, p1) return p0 } +#_________________________________________________________________ function _tmpassx(f, p, p0, p1) { ###################################### @@ -5695,6 +6626,7 @@ function _torexp_fmask(t) return gensub(/\\\*/, ".*", "G", gensub(/\\\?/, ".?", "G", _strtorexp(t))) } +#_______________________________________________ function _torexp_init() { _TOREXPFN[""] = "_strtorexp" @@ -5706,11 +6638,13 @@ function _torexp_init() _TOREXPFN["'"] = "_torexp_sqstr" } +#_______________________________________________ function _torexp_rexp(t) { return t } +#_____________________________________________________________________________ function _tpass(f, p, p0, p1) { #################################################### @@ -5720,6 +6654,7 @@ function _tpass(f, p, p0, p1) return f } +#___________________________________________________________ function _tpass_i0(f, p, p0, p1, a) { while (p in _tLINK) { @@ -5728,6 +6663,7 @@ 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) { ################################################### @@ -5737,6 +6673,7 @@ function _tpassx(f, p, p0, p1) return f } +#___________________________________________________________ function _tpassx_i0(f, p, p0, p1) { while (p in _tLINK) { @@ -5745,6 +6682,7 @@ 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) { ########################################### @@ -5760,6 +6698,7 @@ function _tpop(p, aA, a) _fatal("^" p ": Out of tSTACK") } +#_____________________________________________________________________________ function _tpush(p, aA, a) { ###################################################### @@ -5774,6 +6713,11 @@ 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 @@ -5792,6 +6736,7 @@ function _tr(n, cs, H) _rconl() } +#_______________________________________________________________________ function _trace(t, d, A) { ################################################# @@ -5802,12 +6747,14 @@ 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) { @@ -5816,30 +6763,94 @@ 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") @@ -5927,6 +6938,31 @@ 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) { ##################################################### @@ -5951,6 +6987,7 @@ function _une(t) return gensub(/\xB4(.)/, "\\1", "G", t) } +#___________________________________________________________________________________ function _unformatrexp(t) { _formatstrq0 = split(t, _FORMATSTRA, /(\\[0-9]{1,3})|(\\x[[:xdigit:]]+)|(\\.)/, _FORMATSTRB) @@ -5961,6 +6998,7 @@ function _unformatrexp(t) return (_formatstrs0 _FORMATSTRA[t]) } +#___________________________________________________________ function _unformatrexp_init(i, a) { _formatstrs0 = "\\^$.[]|()*+?{}-sSwW<>yB`'" @@ -5988,6 +7026,7 @@ function _unformatrexp_init(i, a) } } +#___________________________________________________________________________________ function _unformatstr(t) { _formatstrq0 = split(t, _FORMATSTRA, /(\\[0-9]{1,3})|(\\x[[:xdigit:]]+)|(\\.)/, _FORMATSTRB) @@ -5998,6 +7037,7 @@ function _unformatstr(t) return (_formatstrs0 _FORMATSTRA[t]) } +#___________________________________________________________ function _unformatstr_init(i) { for (i = 0; i < 256; i++) { @@ -6023,16 +7063,44 @@ 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) { ############################################# @@ -6048,6 +7116,7 @@ function _untmp(f, a) return "" } +#_____________________________________________________________________________ function _val(v, t) { if (isarray(v)) { @@ -6059,6 +7128,7 @@ function _val(v, t) return (_ln(v "'") _ln(t)) } +#_____________________________________________________________________________ function _val0(v) { if (isarray(v)) { @@ -6070,6 +7140,7 @@ function _val0(v) return ("\"" v "\"") } +#_____________________________________________________________________________ function _var(v, t) { if (isarray(v)) { @@ -6081,6 +7152,7 @@ function _var(v, t) return (_ln(v "'") _ln(t)) } +#_______________________________________________________________________ function _verb(t, d, A) { ################################################## @@ -6091,6 +7163,7 @@ function _verb(t, d, A) } } +#_________________________________________________________________ function _wFBRO(p, v, a) { ########################################### @@ -6204,6 +7277,7 @@ function _wFBRO(p, v, a) } } +#_________________________________________________________________ function _wFCHLD(p, v, a) { ########################################## @@ -6291,6 +7365,7 @@ function _wFCHLD(p, v, a) } } +#_________________________________________________________________ function _wLBRO(p, v, a) { ########################################### @@ -6404,6 +7479,7 @@ function _wLBRO(p, v, a) } } +#_________________________________________________________________ function _wLCHLD(p, v, a) { ########################################## @@ -6491,12 +7567,14 @@ function _wLCHLD(p, v, a) } } +#_________________________________________________________________ function _wLINK(p, v) { ############################################## return (_tLINK[p] = v) } +#_________________________________________________________________ function _wNEXT(p, v, a, b) { ######################################### @@ -6571,12 +7649,14 @@ function _wNEXT(p, v, a, b) } } +#_________________________________________________________________ function _wPARENT(p, v) { ############################################ return v } +#_________________________________________________________________ function _wPREV(p, v, a, b) { ######################################### @@ -6651,12 +7731,14 @@ function _wPREV(p, v, a, b) } } +#_________________________________________________________________ function _wQBRO(p, v) { ############################################## return v } +#_________________________________________________________________ function _wQCHLD(p, v) { ############################################# @@ -6684,6 +7766,7 @@ function _wQCHLD(p, v) } } +#_______________________________________________________________________ function _warning(t, d, A) { ############################################### @@ -6694,6 +7777,7 @@ function _warning(t, d, A) } } +#___________________________________________________________ function _wfilerdnehnd(f, t) { if ((f = _filerdne(f)) == "") { @@ -6716,6 +7800,7 @@ function _wonline(t) wonl = wonl _ln(substr(" _ " t " _____________________________________________________________________________________________________________________________________", 1, 126)) } +#___________________________________________________________ function _wr_shortcut(f, S) { if ((_shrtcutf0 = _filepath(f))) { @@ -6733,6 +7818,7 @@ function _wr_shortcut(f, S) return (ERRNO ? ERRNO = "write shortcut: " ERRNO : _NOP) } +#_________________________________________________________________ function _wrfile(f, d, a, b) { ######################################### @@ -6758,6 +7844,7 @@ function _wrfile(f, d, a, b) return f } +#___________________________________________________________ function _wrfile1(f, d, a, b) { ################################## @@ -6783,12 +7870,14 @@ 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) { @@ -6802,12 +7891,14 @@ 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)) == "") { @@ -6828,6 +7919,7 @@ function filedi(f, d) return (_FILEDIR[_FILEIO_RD, f] = _FILEIO_D _FILEDIR[f]) } +#___________________________________________________________ function filegetdrvdir(t, r) { if (t in _FILEDRV) { @@ -6843,6 +7935,7 @@ function filegetdrvdir(t, r) return "" } +#___________________________________________________________ function filegetrootdir(f, dd, d) { if (f in _FILEDIRFL) { @@ -6880,6 +7973,7 @@ function filegetrootdir(f, dd, d) return (_FILEROOT[dd, f] = fileri(dd)) d } +#___________________________________________________________ function filerdnehndi(st, a, c, r, d, n, A) { if (st) { @@ -6932,6 +8026,7 @@ function filerdnehndi(st, a, c, r, d, n, A) return "" } +#_____________________________________________________ function fileri(f) { if ((f = filerdnehndi(f)) == "") { @@ -6951,6 +8046,7 @@ function hujf(a, b, c) _conl("hujf(" a "," b "," c ")") } +#___________________________________________________________ function ncmp_str_idx(i1, v1, i2, v2) { ####################### @@ -7045,6 +8141,22 @@ 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) { @@ -7059,6 +8171,7 @@ function zorr(A, i, r) _conl("``````````````" a "''''''''''''''''") } +#_____________________________________________________________________________ function zzer() { ################################################################ |