1445 {
1447 char line[2000],
prompt[256];
1448 char param[10][2000];
1455 char user_name[80] = "";
1458 char message[2000], client_name[256], *p;
1461
1463
1464
1467 else
1469
1470
1472 printf(
"Directory \"%s\" not found.\n",
pwd);
1473 return -1;
1474 }
1475
1476
1477 if (cmd[0] == '@') {
1480 printf(
"Command file %s not found.\n", cmd + 1);
1481 return -1;
1482 }
1483 }
1484
1485 do {
1486
1489
1491 line[0] = 0;
1494 } else if (cmd[0] != '@')
1496 else {
1497 memset(line, 0,
sizeof(line));
1499
1500 if (s ==
NULL || line[0] == 0)
1501 break;
1502
1503
1504 while (
strlen(line) > 0 && line[
strlen(line) - 1] ==
'\n')
1505 line[
strlen(line) - 1] = 0;
1506
1507 if (line[0] == 0)
1508 continue;
1509 }
1510
1511
1516
1518 do {
1525 }
else if (*
pc ==
'\'') {
1527 for (
i = 0; *
pc && *
pc !=
'\'' &&
i < (
int)
sizeof(
param[0]) - 1;
i++)
1531 }
else if (*
pc ==
'`') {
1537 } else
1545
1546
1549
1550
1551 else if ((
param[0][0] ==
'l' &&
param[0][1] ==
's') || (
param[0][0] ==
'd' &&
param[0][1] ==
'i')) {
1557
1558
1559 for (
i = 1;
i < 4;
i++)
1560 if (
param[
i][0] ==
'-') {
1572 }
1573 }
1574
1575 for (
i = 1;
param[
i][0] ==
'-';
i++)
1576 ;
1577
1578
1581 for (p =
strchr(
param[
i],
'[') + 1; *p && *p !=
']'; p++)
1583 break;
1584
1585 if (*p && *p == ']') {
1588 }
1589 }
1590
1593
1595 } else {
1598 else
1600
1603
1605 printf(
"link %s points to invalid location\n",
param[
i]);
1606 }
1607 }
1608
1611 printf(
"Key name Type #Val Size Last Opn Mode Value\n");
1612 printf(
"---------------------------------------------------------------------------\n");
1613 }
1614
1619 } else {
1623 else
1627 break;
1628 }
1629
1631
1633 break;
1634
1638 break;
1639 }
1640 }
1641 }
1642 }
1643
1644
1645 else if (
param[0][0] ==
'c' &&
param[0][1] ==
'd') {
1648 else
1650
1652
1658 printf(
"key has no subkeys\n");
1659 else {
1662 }
1663 } else
1664 printf(
"key not found\n");
1665 }
1666
1667
1668 else if (
param[0][0] ==
'p' &&
param[0][1] ==
'w') {
1670 }
1671
1672
1673 else if (
param[0][0] ==
'c' &&
param[0][1] ==
'r') {
1675
1676
1677
1687 }
1688 } else
1690
1691
1694 break;
1695 }
1696
1698 printf(
"Unknown type. Must be one of:\n");
1699 printf(
"{ UINT8,INT8,UINT16,INT16,UINT32,INT32,UINT64,INT64,BOOL,FLOAT,DOUBLE,STRING }\n");
1700 } else {
1704
1711 else
1715 else
1717
1721 free(buf);
1722 }
1723
1730 free(buf);
1731 }
1732 }
1733 }
1734
1735
1736 else if (
param[0][0] ==
'm' &&
param[0][1] ==
'k') {
1739 }
1740
1741
1742 else if (
param[0][0] ==
'l' &&
param[0][1] ==
'n') {
1745 }
1746
1747
1748 else if (
param[0][0] ==
'c' && (
param[0][1] ==
'o' ||
param[0][1] ==
'p')) {
1749
1755 else {
1756 printf(
"Overwrite existing key\n\"%s\"\n(y/[n]) ",
str);
1758 }
1761 }
1762
1765
1769
1772
1780 free(buf);
1781 } else {
1783 size =
sizeof(
data);
1786 printf(
"error: db_copy() status %d, odbedit internal buffer is too small, size %d\n",
status, size);
1789 } else {
1792 }
1793 }
1794 } else {
1795 printf(
"key not found\n");
1796 }
1797 }
1798 }
1799
1800
1801 else if ((
param[0][0] ==
'd' &&
param[0][1] ==
'e') || (
param[0][0] ==
'r' &&
param[0][1] ==
'm')) {
1802 flags = 0;
1804 flags |= (1 << 0);
1806 flags |= (1 << 1);
1807
1808 for (
i = 1;
param[
i][0] ==
'-';
i++)
1809 ;
1810
1812
1815
1819 else {
1821 printf(
"Are you sure to delete the key\n\"%s\"\nand all its subkeys? (y/[n]) ",
1823 else
1824 printf(
"Are you sure to delete the key\n\"%s\"\n(y/[n]) ",
str);
1825
1827 }
1828
1829 if (
str[0] ==
'y') {
1832 printf(
"deletion of key not allowed\n");
1834 printf(
"key is open by other client\n");
1837 }
1838 }
1839 } else
1840 printf(
"key not found\n");
1841 }
1842
1843
1844 else if (
param[0][0] ==
's' &&
param[0][1] ==
'e') {
1845
1850
1851 std::vector<HNDLE> keys;
1853
1855 printf(
"Error: Key \"%s\" not found\n",
name);
1857 return -1;
1858 } else {
1861 }
1862 }
1863 }
1864
1865
1866 else if (
param[0][0] ==
'c' &&
param[0][1] ==
'h' &&
param[0][2] ==
'm') {
1868 printf(
"Please specify mode and key\n");
1869 } else {
1871
1873
1876 } else {
1879 }
1880
1884 else {
1885 printf(
"Are you sure to change the mode of key\n %s\nand all its subkeys\n",
1891 }
1894 } else {
1895 printf(
"Error: Key \"%s\" not found\n",
str);
1897 return -1;
1898 }
1899 }
1900 }
1901
1902
1906 printf(
"RPC test passed!\n");
1907 else
1908 printf(
"RPC test failed!\n");
1909 }
1910
1911
1912 else if (
param[0][0] ==
't' &&
param[0][1] ==
'r') {
1913 if (
param[1][0] == 0) {
1914 printf(
"Please specify key\n");
1915 } else {
1917
1919
1923
1926 else {
1927 printf(
"Error: Key \"%s\" not found\n",
str);
1929 return -1;
1930 }
1931 }
1932 }
1933
1934
1935 else if (
param[0][0] ==
'r' &&
param[0][1] ==
'e' &&
param[0][2] ==
'n') {
1936 if (
param[1][0] == 0) {
1937 printf(
"Please specify key\n");
1938 } else {
1940
1943 else
1945
1948 else {
1949 printf(
"Error: Key \"%s\" not found\n",
str);
1951 return -1;
1952 }
1953 }
1954 }
1955
1956
1957 else if (
param[0][0] ==
'm' &&
param[0][1] ==
'o') {
1958 if (
param[1][0] == 0) {
1959 printf(
"Please specify key\n");
1960 } else {
1962
1965 else
1967
1969 if (
param[2][0] ==
't')
1971 else if (
param[2][0] ==
'b')
1973 else
1975
1978 printf(
"no write access to key\n");
1980 printf(
"key is open by other client\n");
1981 } else {
1982 printf(
"Error: Key \"%s\" not found\n",
str);
1984 return -1;
1985 }
1986 }
1987 }
1988
1989
1990 else if (
param[0][0] ==
'f' &&
param[0][1] ==
'i') {
1992
1995 else
1996 printf(
"current key is invalid / no read access\n");
1997 }
1998
1999
2000 else if (
param[0][0] ==
'l' &&
param[0][1] ==
'o') {
2002
2004 }
2005
2006
2007 else if (
param[0][0] ==
's' &&
param[0][1] ==
'a') {
2009
2014 else if (
param[1][0] ==
'-') {
2015 if (
param[1][1] ==
'c' &&
param[1][2] ==
's') {
2018 }
else if (
param[1][1] ==
'c')
2020 else if (
param[1][1] ==
's')
2022 else if (
param[1][1] ==
'x')
2024 else if (
param[1][1] ==
'j')
2026 else if (
param[1][1] ==
'z')
2029 } else
2031 }
2032
2033
2035
2036 if (
param[1][0] ==
'/') {
2041 } else {
2043 }
2044
2045 char *buffer =
NULL;
2046 int buffer_size = 0;
2048
2050
2052
2053 if (buffer)
2054 free(buffer);
2055 }
2056
2057
2060
2061 char *buffer =
NULL;
2062 int buffer_size = 0;
2064
2069
2071
2073
2074 if (buffer)
2075 free(buffer);
2076 }
2077
2078
2080
2081 if (
param[1][0] ==
'/') {
2086 } else {
2088 }
2089
2090 char *buffer =
NULL;
2091 int buffer_size = 0;
2093
2095
2097
2098 if (buffer)
2099 free(buffer);
2100 }
2101
2102
2103 else if (
param[0][0] ==
'm' &&
param[0][1] ==
'a') {
2106 else
2108 }
2109
2110
2111 else if (
param[0][0] ==
'p' &&
param[0][1] ==
'a' &&
param[0][2] ==
's') {
2112
2113
2114
2115
2116
2117
2121
2124
2128
2131 printf(
"Mismatch - password unchanged\n");
2132 else
2134 } else
2135 printf(
"Wrong password\n");
2136 } else {
2139
2142 printf(
"Mismatch - password not set\n");
2143 else {
2144
2147
2148
2150 "/Experiment/Security/Allowed hosts/host.sample.domain",
2154 }
2155 }
2156
2157 }
2158
2159
2160 else if (
param[0][0] ==
'w' &&
param[0][1] ==
'e' &&
param[0][2] ==
'b') {
2164
2167
2171
2174 printf(
"Mismatch - password unchanged\n");
2175 else
2177 } else
2178 printf(
"Wrong password\n");
2179 } else {
2182
2185 printf(
"Mismatch - password not set\n");
2186 else
2187
2190 }
2191 }
2192
2193
2194 else if (
param[0][0] ==
'h' &&
param[0][1] ==
'i') {
2196
2197 client_name[0] = 0;
2198
2200
2206 printf(
"No client currently exports the CLEAR HISTO functionality.\n");
2207 break;
2208 }
2209
2213 size = sizeof(client_name);
2216 break;
2217 }
2218 }
2219 }
2220
2223 else
2225
2228 else
2230 } else {
2231 strcpy(client_name,
param[1]);
2232
2235 else
2237
2240 else
2242 }
2243
2244 if (client_name[0]) {
2247
2248 } else
2249 printf(
"Cannot connect to client %s\n", client_name);
2250 }
2251 }
2252
2253
2254 else if (
param[0][0] ==
'i' &&
param[0][1] ==
'm') {
2258 } else {
2263 } else {
2266 char *buf = (
char *)
malloc(size + 1);
2271 free(buf);
2272 } else {
2275 if (size == 0) {
2276 buf[size] = 0;
2277 size++;
2278 } else if (buf[size - 1] != 0) {
2279 buf[size] = 0;
2280 size++;
2281 }
2282
2283 if (
param[2][0] == 0) {
2286 } else {
2288 }
2289
2291
2295 free(buf);
2296 }
2297 }
2298 }
2299
2300 }
2301
2302
2303 else if (
param[0][0] ==
'e' &&
param[0][1] ==
'x' &&
param[0][2] ==
'p') {
2305
2306 if (
param[1][0] == 0)
2307 printf(
"please specify key\n");
2308 else {
2310
2313 printf(
"Error: Key \"%s\" not found\n",
param[1]);
2314 else {
2315 if (
param[2][0] == 0) {
2318 } else
2320
2324 else {
2327 printf(
"Only export of STRING key possible\n");
2328 else {
2335 free(buf);
2336 }
2337 }
2338 }
2339 }
2340 }
2341
2342
2343 else if (
param[0][0] ==
'a' &&
param[0][1] ==
'l') {
2344
2349
2351 break;
2352
2356 printf(
"Alarm of class \"%s\" reset sucessfully\n",
key.
name);
2357 }
2358 }
2359 }
2360
2361
2362 else if (
param[0][0] ==
'm' &&
param[0][1] ==
'e') {
2364 printf(
"This function works only locally\n");
2365 else {
2366#ifdef LOCAL_ROUTINES
2369 if (buf) {
2371 free(buf);
2372 }
2373#else
2374 printf(
"This MIDAS only works remotely\n");
2375#endif
2376 }
2377 }
2378
2379
2380 else if (
param[0][0] ==
's' &&
param[0][1] ==
'o') {
2385 }
2386
2387
2388 else if (
param[0][0] ==
's' &&
param[0][1] ==
'c') {
2392 "cannot find System/Clients entry in database");
2393 else {
2394 if (
param[1][1] ==
'w')
2395 printf(
"Name Host Timeout Last called\n");
2396 else
2398
2399
2403 break;
2404
2406 size =
sizeof(
name);
2411
2417
2418
2419 if (
param[1][1] ==
'w') {
2421
2424 }
2425
2427 }
2428 }
2429 }
2430 }
2431
2432
2433 else if (
param[0][0] ==
's' &&
param[0][1] ==
't' &&
param[0][2] ==
'a') {
2434 debug_flag = ((
param[1][0] ==
'-' &&
param[1][1] ==
'v') || (
param[2][0] ==
'-' &&
param[2][1] ==
'v') || (
param[3][0] ==
'-' &&
param[3][1] ==
'v'));
2436
2437
2442 printf(
"Run is already started\n");
2444 printf(
"Run is paused, please use \"resume\"\n");
2445 } else {
2446
2451
2452
2455 line[0] = 'y';
2456 } else {
2458 do {
2462
2464 break;
2465
2468
2470 continue;
2471
2472 if (
str.find(
"Options ") == 0)
2473 continue;
2474
2477
2480
2484 free(buf);
2485 continue;
2486 }
2487
2494 } else {
2496 }
2497
2502
2503 if (line[0]) {
2506 }
2507 }
2508
2509 free(buf);
2510 }
2511 }
2512
2513
2515
2518 } else {
2519
2522 if (line[0] &&
atoi(line) > 0)
2524 }
2525
2526 printf(
"Are the above parameters correct? ([y]/n/q): ");
2528
2529 } while (line[0] == 'n' || line[0] == 'N');
2530 }
2531
2532 if (line[0] != 'q' && line[0] != 'Q') {
2533
2535
2537
2541
2546
2548 }
2549 }
2550 }
2551 }
2552
2553
2554 else if (
param[0][0] ==
's' &&
param[0][1] ==
't' &&
param[0][2] ==
'o') {
2555 debug_flag = ((
param[1][0] ==
'-' &&
param[1][1] ==
'v') || (
param[2][0] ==
'-' &&
param[2][1] ==
'v') || (
param[3][0] ==
'-' &&
param[3][1] ==
'v'));
2557
2558
2564 printf(
"Run is already stopped. Stop again? (y/[n]) ");
2566 }
2568 if (
param[1][0] ==
'n')
2571 else
2573
2577 printf(
"Deferred stop already in progress, enter \"stop now\" to force stop\n");
2580 }
2581 }
2582
2583
2584 else if (
param[0][0] ==
'p' &&
param[0][1] ==
'a' &&
param[0][2] ==
'u') {
2585 debug_flag = ((
param[1][0] ==
'-' &&
param[1][1] ==
'v') || (
param[2][0] ==
'-' &&
param[2][1] ==
'v'));
2586
2587
2592 printf(
"Run is not started\n");
2593 } else {
2594 if (
param[1][0] ==
'n')
2596 else
2598
2602 printf(
"Deferred pause already in progress, enter \"pause now\" to force pause\n");
2605 }
2606 }
2607
2608
2609 else if (
param[0][0] ==
'r' &&
param[0][1] ==
'e' &&
param[0][2] ==
's') {
2610 debug_flag = ((
param[1][0] ==
'-' &&
param[1][1] ==
'v') || (
param[2][0] ==
'-' &&
param[2][1] ==
'v'));
2611
2612
2617 printf(
"Run is not paused\n");
2618 } else {
2622 }
2623 }
2624
2625
2626 else if (
param[0][0] ==
'm' &&
param[0][1] ==
's') {
2627
2629 printf(
"Error: Not enough parameters. Please use\n\n");
2630 printf(
" msg <facility> <type> <name> <message>\n\n");
2631 printf(
"where <facility> can be \"midas\", \"chat\", ...\n");
2632 printf(
"and <type> must be \"error\", \"info\", \"debug\", \"user\", \"log\", \"talk\" or \"call\".\n");
2633 } else {
2650 printf(
"Error: inavlid type \"%s\".\n",
param[2]);
2651 printf(
"<type> must be one of \"error\", \"info\", \"debug\", \"user\", \"log\", \"talk\", \"call\".\n");
2652 } else {
2653
2656 }
2657 }
2658 }
2659
2660
2661 else if (
param[0][0] ==
'c' &&
param[0][1] ==
'h' &&
param[0][2] ==
'a') {
2663
2667 }
2668
2669 printf(
"Exit chat mode with empty line.\n");
2670 do {
2675
2678
2680
2682 }
2683
2684
2685 else if (
param[0][0] ==
'o' &&
param[0][1] ==
'l') {
2689
2693 }
2694
2695
2696 else if (
param[0][0] ==
'c' &&
param[0][1] ==
'l') {
2699
2701 if (
param[1][0] ==
'-' &&
param[1][1] ==
'f')
2703 if (
param[2][0] ==
'-' &&
param[2][1] ==
'f')
2705
2707
2710 else
2713 }
2714
2715
2716 else if (
param[0][0] ==
's' &&
param[0][1] ==
'h') {
2717 if (
param[1][0] == 0)
2718 printf(
"Please enter client name or \"all\" to shutdown all clients.\n");
2719 else {
2723 printf(
"No clients found\n");
2724 else
2726 }
2727 }
2728 }
2729
2730
2731 else if (
param[0][0] ==
'v' &&
param[0][1] ==
'e') {
2735 }
2736
2737
2738 else if (
param[0][0] ==
'e' &&
param[0][1] ==
'x' &&
param[0][2] ==
'e') {
2745 printf(
"Key contains no command\n");
2746 continue;
2747 }
2750
2752 } else {
2754 }
2756 }
2757
2758
2759 else if (
param[0][0] ==
'w' &&
param[0][1] ==
'a' &&
param[0][2] ==
'i') {
2760 if (
param[1][0] == 0) {
2761 printf(
"Please specify key\n");
2762 } else {
2764
2768 } else
2770
2773 printf(
"Waiting for key \"%s\" to be modified, abort with any key\n",
key.
name);
2775 char *buf = (
char *)
malloc(size);
2778
2779 do {
2782 break;
2784
2787
2789 if (buf) {
2790 free(buf);
2792 }
2793
2795 break;
2796
2798 printf(
"Wait aborted.\n");
2799 else
2800 printf(
"Key has been modified.\n");
2801 } else
2803 }
2804 }
2805
2806
2807 else if (
param[0][0] ==
'w' &&
param[0][1] ==
'a' &&
param[0][2] ==
't') {
2808 if (
param[1][0] == 0) {
2809 printf(
"Please specify key\n");
2810 } else {
2812
2817 printf(
"Watch key \"%s\" to be modified, abort with any key\n",
str);
2818 else
2819 printf(
"Watch ODB tree \"%s\" to be modified, abort with any key\n",
str);
2821
2822 do {
2825 break;
2827
2830
2832
2834 break;
2835 } else
2837 }
2838 }
2839
2840
2841 else if (
param[0][0] ==
't' &&
param[0][1] ==
'1') {
2845
2850
2852 do {
2865
2866 printf(
"%d accesses per second\n",
i / 5);
2867 }
2868
2869
2870 else if (
param[0][0] ==
't' &&
param[0][1] ==
'2') {
2871 do {
2872 do {
2875 }
while (
i > 0 &&
i != 4);
2876
2879
2881 }
2882
2883
2884 else if (
param[0][0] ==
't' &&
param[0][1] ==
'3') {
2885#ifdef USE_ADDRESS_SANITIZER
2886
2887 int *a = (
int *)
malloc(
sizeof(
int) * 10);
2889 free(a);
2890#else
2891 printf(
"test address sanitizer is disabled!\n");
2892#endif
2893 }
2894
2895
2896 else if ((
param[0][0] ==
'e' &&
param[0][1] ==
'x' &&
param[0][2] ==
'i') || (
param[0][0] ==
'q'))
2897 break;
2898
2899 else if (
param[0][0] == 0)
2900 ;
2901
2902 else
2904
2905
2907 break;
2908
2909
2912 break;
2913
2915
2916
2918
2919 return 1;
2920}
INT al_reset_alarm(const char *alarm_name)
INT bm_open_buffer(const char *buffer_name, INT buffer_size, INT *buffer_handle)
INT bm_close_buffer(INT buffer_handle)
INT cm_shutdown(const char *name, BOOL bUnique)
INT cm_connect_client(const char *client_name, HNDLE *hConn)
INT cm_transition(INT transition, INT run_number, char *errstr, INT errstr_size, INT async_flag, INT debug_flag)
void cm_ack_ctrlc_pressed()
INT cm_execute(const char *command, char *result, INT bufsize)
INT cm_get_watchdog_info(HNDLE hDB, const char *client_name, DWORD *timeout, DWORD *last)
INT cm_cleanup(const char *client_name, BOOL ignore_timeout)
const char * cm_get_version()
const char * cm_get_revision()
#define CM_DEFERRED_TRANSITION
#define CM_TRANSITION_IN_PROGRESS
#define DB_NO_MORE_SUBKEYS
char * ss_getpass(const char *prompt)
INT ss_sleep(INT millisec)
char * ss_crypt(const char *buf, const char *salt)
INT cm_msg1(INT message_type, const char *filename, INT line, const char *facility, const char *routine, const char *format,...)
INT cm_msg(INT message_type, const char *filename, INT line, const char *routine, const char *format,...)
INT cm_msg_retrieve(INT n_message, char *message, INT buf_size)
INT db_delete_key(HNDLE hDB, HNDLE hKey, BOOL follow_links)
INT db_reorder_key(HNDLE hDB, HNDLE hKey, INT idx)
INT db_save_json(HNDLE hDB, HNDLE hKey, const char *filename, int flags)
INT db_open_record(HNDLE hDB, HNDLE hKey, void *ptr, INT rec_size, WORD access_mode, void(*dispatcher)(INT, INT, void *), void *info)
INT db_get_open_records(HNDLE hDB, HNDLE hKey, char *str, INT buf_size, BOOL fix)
INT db_show_mem(HNDLE hDB, char **result, BOOL verbose)
INT db_save_xml(HNDLE hDB, HNDLE hKey, const char *filename)
INT db_set_link_data(HNDLE hDB, HNDLE hKey, const void *data, INT buf_size, INT num_values, DWORD type)
INT db_get_path(HNDLE hDB, HNDLE hKey, char *path, INT buf_size)
INT db_copy(HNDLE hDB, HNDLE hKey, char *buffer, INT *buffer_size, const char *path)
INT db_set_link_data_index(HNDLE hDB, HNDLE hKey, const void *data, INT data_size, INT idx, DWORD type)
INT db_get_record_size(HNDLE hDB, HNDLE hKey, INT align, INT *buf_size)
INT db_get_data(HNDLE hDB, HNDLE hKey, void *data, INT *buf_size, DWORD type)
INT db_create_key(HNDLE hDB, HNDLE hKey, const char *key_name, DWORD type)
INT db_copy_json_save(HNDLE hDB, HNDLE hKey, char **buffer, int *buffer_size, int *buffer_end)
INT db_save_struct(HNDLE hDB, HNDLE hKey, const char *file_name, const char *struct_name, BOOL append)
INT db_unwatch(HNDLE hDB, HNDLE hKey)
INT db_set_mode(HNDLE hDB, HNDLE hKey, WORD mode, BOOL recurse)
INT db_save(HNDLE hDB, HNDLE hKey, const char *filename, BOOL bRemote)
INT db_scan_tree(HNDLE hDB, HNDLE hKey, INT level, INT(*callback)(HNDLE, HNDLE, KEY *, INT, void *), void *info)
INT db_get_key(HNDLE hDB, HNDLE hKey, KEY *key)
INT db_load(HNDLE hDB, HNDLE hKeyRoot, const char *filename, BOOL bRemote)
INT db_set_data_index(HNDLE hDB, HNDLE hKey, const void *data, INT data_size, INT idx, DWORD type)
INT db_find_keys(HNDLE hDB, HNDLE hKeyRoot, char *odbpath, std::vector< HNDLE > &hKeyVector)
INT db_save_string(HNDLE hDB, HNDLE hKey, const char *file_name, const char *string_name, BOOL append)
INT db_paste(HNDLE hDB, HNDLE hKeyRoot, const char *buffer)
INT db_watch(HNDLE hDB, HNDLE hKey, void(*dispatcher)(INT, INT, INT, void *), void *info)
INT db_set_data(HNDLE hDB, HNDLE hKey, const void *data, INT buf_size, INT num_values, DWORD type)
INT db_copy_json_ls(HNDLE hDB, HNDLE hKey, char **buffer, int *buffer_size, int *buffer_end)
void strarrayindex(char *odbpath, int *index1, int *index2)
INT db_copy_json_values(HNDLE hDB, HNDLE hKey, char **buffer, int *buffer_size, int *buffer_end, int omit_names, int omit_last_written, time_t omit_old_timestamp, int preserve_case)
INT db_set_value(HNDLE hDB, HNDLE hKeyRoot, const char *key_name, const void *data, INT data_size, INT num_values, DWORD type)
INT db_rename_key(HNDLE hDB, HNDLE hKey, const char *name)
INT db_enum_key(HNDLE hDB, HNDLE hKey, INT idx, HNDLE *subkey_handle)
INT db_close_record(HNDLE hDB, HNDLE hKey)
INT db_sscanf(const char *data_str, void *data, INT *data_size, INT i, DWORD tid)
INT db_set_num_values(HNDLE hDB, HNDLE hKey, INT num_values)
INT db_create_link(HNDLE hDB, HNDLE hKey, const char *link_name, const char *destination)
INT rpc_client_call(HNDLE hConn, DWORD routine_id,...)
const char * rpc_tid_name(INT id)
#define RPC_ANA_CLEAR_HISTOS
std::string msprintf(const char *format,...)
#define JSFLAG_FOLLOW_LINKS
#define JSFLAG_OMIT_LAST_WRITTEN
#define DEFAULT_BUFFER_SIZE
#define EVENT_BUFFER_NAME
#define message(type, str)
INT cmd_edit(const char *prompt, char *cmd, INT(*dir)(char *, INT *), INT(*idle)())
void watch_callback(HNDLE hDB, HNDLE hKey, INT index, void *info)
void compose_name(char *pwd, char *name, char *full_name)
void set_key(HNDLE hDB, HNDLE hKey, int index1, int index2, char *value)
void print_help(char *command)
INT cmd_dir(char *line, INT *cursor)
void assemble_prompt(char *prompt, int psize, char *host_name, char *exp_name, char *pwd)
INT search_key(HNDLE hDB, HNDLE hKey, KEY *key, INT level, void *info)
void create_experim_h(HNDLE hDB, const char *analyzer_name)
void key_update(HNDLE hDB, HNDLE hkey, void *info)
INT print_key(HNDLE hDB, HNDLE hKey, KEY *pkey, INT level, void *info)