fix ifdef use
[rrdtool.git] / src / rrd_tool.c
index ec2a573..d46d195 100644 (file)
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * RRDtool 1.4.2  Copyright by Tobi Oetiker, 1997-2009
+ * RRDtool 1.4.3  Copyright by Tobi Oetiker, 1997-2010
  *****************************************************************************
  * rrd_tool.c  Startup wrapper
  *****************************************************************************/
@@ -8,6 +8,8 @@
 #include "../win32/config.h"
 #include <stdlib.h>
 #include <sys/stat.h>
+#include <io.h>
+#include <fcntl.h>
 #else
 #ifdef HAVE_CONFIG_H
 #include "../rrd_config.h"
@@ -49,48 +51,49 @@ void PrintUsage(
         N_("RRDtool %s"
            "  Copyright 1997-2009 by Tobias Oetiker <tobi@oetiker.ch>\n"
            "               Compiled %s %s\n\n"
-           "Usage: rrdtool [options] command command_options\n\n");
+           "Usage: rrdtool [options] command command_options\n");
 
     const char *help_list =
         N_
         ("Valid commands: create, update, updatev, graph, graphv,  dump, restore,\n"
          "\t\tlast, lastupdate, first, info, fetch, tune,\n"
-         "\t\tresize, xport, flushcached\n\n");
+         "\t\tresize, xport, flushcached\n");
 
     const char *help_listremote =
-        N_("Valid remote commands: quit, ls, cd, mkdir, pwd\n\n");
+        N_("Valid remote commands: quit, ls, cd, mkdir, pwd\n");
 
 
     const char *help_create =
         N_("* create - create a new RRD\n\n"
            "\trrdtool create filename [--start|-b start time]\n"
            "\t\t[--step|-s step]\n"
+           "\t\t[--no-overwrite|-O]\n"
            "\t\t[DS:ds-name:DST:dst arguments]\n"
-           "\t\t[RRA:CF:cf arguments]\n\n");
+           "\t\t[RRA:CF:cf arguments]\n");
 
     const char *help_dump =
         N_("* dump - dump an RRD to XML\n\n"
-           "\trrdtool dump filename.rrd >filename.xml\n\n");
+           "\trrdtool dump filename.rrd >filename.xml\n");
 
     const char *help_info =
         N_("* info - returns the configuration and status of the RRD\n\n"
-           "\trrdtool info filename.rrd\n\n");
+           "\trrdtool info filename.rrd\n");
 
     const char *help_restore =
         N_("* restore - restore an RRD file from its XML form\n\n"
-           "\trrdtool restore [--range-check|-r] [--force-overwrite|-f] filename.xml filename.rrd\n\n");
+           "\trrdtool restore [--range-check|-r] [--force-overwrite|-f] filename.xml filename.rrd\n");
 
     const char *help_last =
         N_("* last - show last update time for RRD\n\n"
-           "\trrdtool last filename.rrd\n\n");
+           "\trrdtool last filename.rrd\n");
 
     const char *help_lastupdate =
         N_("* lastupdate - returns the most recent datum stored for\n"
-           "  each DS in an RRD\n\n" "\trrdtool lastupdate filename.rrd\n\n");
+           "  each DS in an RRD\n\n" "\trrdtool lastupdate filename.rrd\n");
 
     const char *help_first =
         N_("* first - show first update time for RRA within an RRD\n\n"
-           "\trrdtool first filename.rrd [--rraindex number]\n\n");
+           "\trrdtool first filename.rrd [--rraindex number]\n");
 
     const char *help_update =
         N_("* update - update an RRD\n\n"
@@ -99,7 +102,7 @@ void PrintUsage(
           "\t\t[--daemon <address>]\n"
            "\t\ttime|N:value[:value...]\n\n"
            "\t\tat-time@value[:value...]\n\n"
-           "\t\t[ time:value[:value...] ..]\n\n");
+           "\t\t[ time:value[:value...] ..]\n");
 
     const char *help_updatev =
         N_("* updatev - a verbose version of update\n"
@@ -108,19 +111,19 @@ void PrintUsage(
            "\t\t[--template|-t ds-name:ds-name:...]\n"
            "\t\ttime|N:value[:value...]\n\n"
            "\t\tat-time@value[:value...]\n\n"
-           "\t\t[ time:value[:value...] ..]\n\n");
+           "\t\t[ time:value[:value...] ..]\n");
 
     const char *help_fetch =
         N_("* fetch - fetch data out of an RRD\n\n"
            "\trrdtool fetch filename.rrd CF\n"
            "\t\t[-r|--resolution resolution]\n"
            "\t\t[-s|--start start] [-e|--end end]\n"
-          "\t\t[--daemon <address>]\n\n");
+          "\t\t[--daemon <address>]\n");
 
     const char *help_flushcached =
         N_("* flushcached - flush cached data out to an RRD file\n\n"
            "\trrdtool flushcached filename.rrd\n"
-          "\t\t[--daemon <address>]\n\n");
+          "\t\t[--daemon <address>]\n");
 
 /* break up very large strings (help_graph, help_tune) for ISO C89 compliance*/
 
@@ -153,6 +156,7 @@ void PrintUsage(
            "\t\t[-B|--font-smoothing-threshold size]\n"
            "\t\t[-T|--tabwidth width]\n"
            "\t\t[-E|--slope-mode]\n"
+           "\t\t[-P|--pango-markup]\n"
            "\t\t[-N|--no-gridfit]\n"
            "\t\t[-X|--units-exponent value]\n"
            "\t\t[-L|--units-length value]\n"
@@ -170,6 +174,7 @@ void PrintUsage(
            "\t\t[PRINT:vdefname:format]\n"
            "\t\t[GPRINT:vdefname:format]\n" "\t\t[COMMENT:text]\n"
            "\t\t[SHIFT:vname:offset]\n"
+           "\t\t[TEXTALIGN:{left|right|justified|center}]\n"
            "\t\t[TICK:vname#rrggbb[aa][:[fraction][:legend]]]\n"
            "\t\t[HRULE:value#rrggbb[aa][:legend]]\n"
            "\t\t[VRULE:value#rrggbb[aa][:legend]]\n"
@@ -177,7 +182,7 @@ void PrintUsage(
            "\t\t[AREA:vname[#rrggbb[aa][:[legend][:STACK]]]]\n"
            "\t\t[PRINT:vname:CF:format] (deprecated)\n"
            "\t\t[GPRINT:vname:CF:format] (deprecated)\n"
-           "\t\t[STACK:vname[#rrggbb[aa][:legend]]] (deprecated)\n\n");
+           "\t\t[STACK:vname[#rrggbb[aa][:legend]]] (deprecated)\n");
     const char *help_tune1 =
         N_(" * tune -  Modify some basic properties of an RRD\n\n"
            "\trrdtool tune filename\n"
@@ -193,37 +198,37 @@ void PrintUsage(
         N_("\t\t[--beta adaptation-parameter]\n"
            "\t\t[--gamma adaptation-parameter]\n"
            "\t\t[--gamma-deviation adaptation-parameter]\n"
-           "\t\t[--aberrant-reset ds-name]\n\n");
+           "\t\t[--aberrant-reset ds-name]\n");
     const char *help_resize =
         N_
         (" * resize - alter the length of one of the RRAs in an RRD\n\n"
-         "\trrdtool resize filename rranum GROW|SHRINK rows\n\n");
+         "\trrdtool resize filename rranum GROW|SHRINK rows\n");
     const char *help_xport =
         N_("* xport - generate XML dump from one or several RRD\n\n"
            "\trrdtool xport [-s|--start seconds] [-e|--end seconds]\n"
            "\t\t[-m|--maxrows rows]\n" "\t\t[--step seconds]\n"
            "\t\t[--enumds]\n" "\t\t[DEF:vname=rrd:ds-name:CF]\n"
            "\t\t[CDEF:vname=rpn-expression]\n"
-           "\t\t[XPORT:vname:legend]\n\n");
+           "\t\t[XPORT:vname:legend]\n");
     const char *help_quit =
         N_(" * quit - closing a session in remote mode\n\n"
-           "\trrdtool quit\n\n");
+           "\trrdtool quit\n");
     const char *help_ls =
         N_(" * ls - lists all *.rrd files in current directory\n\n"
-           "\trrdtool ls\n\n");
+           "\trrdtool ls\n");
     const char *help_cd =
         N_(" * cd - changes the current directory\n\n"
-           "\trrdtool cd new directory\n\n");
+           "\trrdtool cd new directory\n");
     const char *help_mkdir =
         N_(" * mkdir - creates a new directory\n\n"
-           "\trrdtool mkdir newdirectoryname\n\n");
+           "\trrdtool mkdir newdirectoryname\n");
     const char *help_pwd =
         N_(" * pwd - returns the current working directory\n\n"
-           "\trrdtool pwd\n\n");
+           "\trrdtool pwd\n");
     const char *help_lic =
         N_("RRDtool is distributed under the Terms of the GNU General\n"
            "Public License Version 2. (www.gnu.org/copyleft/gpl.html)\n\n"
-           "For more information read the RRD manpages\n\n");
+           "For more information read the RRD manpages\n");
     enum { C_NONE, C_CREATE, C_DUMP, C_INFO, C_RESTORE, C_LAST,
         C_LASTUPDATE, C_FIRST, C_UPDATE, C_FETCH, C_GRAPH, C_GRAPHV,
         C_TUNE,
@@ -280,83 +285,83 @@ void PrintUsage(
     fflush(stdout);
     switch (help_cmd) {
     case C_NONE:
-        fputs(_(help_list), stdout);
+        puts(_(help_list));
         if (RemoteMode) {
-            fputs(_(help_listremote), stdout);
+            puts(_(help_listremote));
         }
         break;
     case C_CREATE:
-        fputs(_(help_create), stdout);
+        puts(_(help_create));
         break;
     case C_DUMP:
-        fputs(_(help_dump), stdout);
+        puts(_(help_dump));
         break;
     case C_INFO:
-        fputs(_(help_info), stdout);
+        puts(_(help_info));
         break;
     case C_RESTORE:
-        fputs(_(help_restore), stdout);
+        puts(_(help_restore));
         break;
     case C_LAST:
-        fputs(_(help_last), stdout);
+        puts(_(help_last));
         break;
     case C_LASTUPDATE:
-        fputs(_(help_lastupdate), stdout);
+        puts(_(help_lastupdate));
         break;
     case C_FIRST:
-        fputs(_(help_first), stdout);
+        puts(_(help_first));
         break;
     case C_UPDATE:
-        fputs(_(help_update), stdout);
+        puts(_(help_update));
         break;
     case C_UPDATEV:
-        fputs(_(help_updatev), stdout);
+        puts(_(help_updatev));
         break;
     case C_FETCH:
-        fputs(_(help_fetch), stdout);
+        puts(_(help_fetch));
         break;
     case C_FLUSHCACHED:
-        fputs(_(help_flushcached), stdout);
+        puts(_(help_flushcached));
         break;
     case C_GRAPH:
-        fputs(_(help_graph0), stdout);
-        fputs(_(help_graph1), stdout);
-        fputs(_(help_graph2), stdout);
-        fputs(_(help_graph3), stdout);
+        puts(_(help_graph0));
+        puts(_(help_graph1));
+        puts(_(help_graph2));
+        puts(_(help_graph3));
         break;
     case C_GRAPHV:
-        fputs(_(help_graphv0), stdout);
-        fputs(_(help_graph1), stdout);
-        fputs(_(help_graph2), stdout);
-        fputs(_(help_graph3), stdout);
+        puts(_(help_graphv0));
+        puts(_(help_graph1));
+        puts(_(help_graph2));
+        puts(_(help_graph3));
         break;
     case C_TUNE:
-        fputs(_(help_tune1), stdout);
-        fputs(_(help_tune2), stdout);
+        puts(_(help_tune1));
+        puts(_(help_tune2));
         break;
     case C_RESIZE:
-        fputs(_(help_resize), stdout);
+        puts(_(help_resize));
         break;
     case C_XPORT:
-        fputs(_(help_xport), stdout);
+        puts(_(help_xport));
         break;
     case C_QUIT:
-        fputs(_(help_quit), stdout);
+        puts(_(help_quit));
         break;
     case C_LS:
-        fputs(_(help_ls), stdout);
+        puts(_(help_ls));
         break;
     case C_CD:
-        fputs(_(help_cd), stdout);
+        puts(_(help_cd));
         break;
     case C_MKDIR:
-        fputs(_(help_mkdir), stdout);
+        puts(_(help_mkdir));
         break;
     case C_PWD:
-        fputs(_(help_pwd), stdout);
+        puts(_(help_pwd));
         break;
     }
-    fputs(_(help_lic), stdout);
+    puts(_(help_lic));
 }
 
 static char *fgetslong(
@@ -411,6 +416,12 @@ int main(
        according to localeconv(3) */       
     setlocale(LC_ALL, "");
 
+#if defined(WIN32) && !defined(__CYGWIN__)
+    setmode(fileno(stdout), O_BINARY);
+    setmode(fileno(stdin), O_BINARY);
+#endif
+
+
 #if defined(HAVE_LIBINTL_H) && defined(BUILD_LIBINTL)
     bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
     textdomain(GETTEXT_PACKAGE);
@@ -531,7 +542,7 @@ int HandleInputLine(
      */
     if (RemoteMode) {
         if (argc > 1 && strcmp("quit", argv[1]) == 0) {
-            if (argc > 2) {
+            if (argc != 2) {
                 printf("ERROR: invalid parameter count for quit\n");
                 return (1);
             }
@@ -539,7 +550,7 @@ int HandleInputLine(
         }
 #if defined(HAVE_OPENDIR) && defined(HAVE_READDIR) && defined(HAVE_CHDIR)
         if (argc > 1 && strcmp("cd", argv[1]) == 0) {
-            if (argc > 3) {
+            if (argc != 3) {
                 printf("ERROR: invalid parameter count for cd\n");
                 return (1);
             }
@@ -559,7 +570,7 @@ int HandleInputLine(
         }
         if (argc > 1 && strcmp("pwd", argv[1]) == 0) {
             char     *cwd;      /* To hold current working dir on call to pwd */
-            if (argc > 2) {
+            if (argc != 2) {
                 printf("ERROR: invalid parameter count for pwd\n");
                 return (1);
             }
@@ -573,7 +584,7 @@ int HandleInputLine(
             return (0);
         }
         if (argc > 1 && strcmp("mkdir", argv[1]) == 0) {
-            if (argc > 3) {
+            if (argc != 3) {
                 printf("ERROR: invalid parameter count for mkdir\n");
                 return (1);
             }
@@ -592,7 +603,7 @@ int HandleInputLine(
             return (0);
         }
         if (argc > 1 && strcmp("ls", argv[1]) == 0) {
-            if (argc > 2) {
+            if (argc != 2) {
                 printf("ERROR: invalid parameter count for ls\n");
                 return (1);
             }
@@ -692,6 +703,7 @@ int HandleInputLine(
             free(data);
         }
     } else if (strcmp("xport", argv[1]) == 0) {
+#ifdef HAVE_RRD_GRAPH
         int       xxsize;
         unsigned long int j = 0;
         time_t    start, end, ti;
@@ -711,17 +723,18 @@ int HandleInputLine(
         if (rrd_xport
             (argc - 1, &argv[1], &xxsize, &start, &end, &step, &col_cnt,
              &legend_v, &data) != -1) {
-            char *old_locale = setlocale(LC_NUMERIC, "C");
+            char *old_locale = setlocale(LC_NUMERIC,NULL);
+            setlocale(LC_NUMERIC, "C");
             row_cnt = (end - start) / step;
             ptr = data;
             printf("<?xml version=\"1.0\" encoding=\"%s\"?>\n\n",
                    XML_ENCODING);
             printf("<%s>\n", ROOT_TAG);
             printf("  <%s>\n", META_TAG);
-            printf("    <%s>%lu</%s>\n", META_START_TAG,
-                   (unsigned long) start + step, META_START_TAG);
+            printf("    <%s>%lld</%s>\n", META_START_TAG,
+                   (long long int) start + step, META_START_TAG);
             printf("    <%s>%lu</%s>\n", META_STEP_TAG, step, META_STEP_TAG);
-            printf("    <%s>%lu</%s>\n", META_END_TAG, (unsigned long) end,
+            printf("    <%s>%lld</%s>\n", META_END_TAG, (long long int) end,
                    META_END_TAG);
             printf("    <%s>%lu</%s>\n", META_ROWS_TAG, row_cnt,
                    META_ROWS_TAG);
@@ -742,7 +755,7 @@ int HandleInputLine(
             printf("  <%s>\n", DATA_TAG);
             for (ti = start + step; ti <= end; ti += step) {
                 printf("    <%s>", DATA_ROW_TAG);
-                printf("<%s>%lu</%s>", COL_TIME_TAG, ti, COL_TIME_TAG);
+                printf("<%s>%lld</%s>", COL_TIME_TAG, (long long int)ti, COL_TIME_TAG);
                 for (j = 0; j < col_cnt; j++) {
                     rrd_value_t newval = DNAN;
 
@@ -767,7 +780,11 @@ int HandleInputLine(
             setlocale(LC_NUMERIC, old_locale);
         }
         free(vtag);
+#else
+        rrd_set_error("the instance of rrdtool has been compiled without graphics");
+#endif
     } else if (strcmp("graph", argv[1]) == 0) {
+#ifdef HAVE_RRD_GRAPH
         char    **calcpr;
 
 #ifdef notused /*XXX*/
@@ -801,7 +818,11 @@ int HandleInputLine(
             }
         }
 
+#else
+       rrd_set_error("the instance of rrdtool has been compiled without graphics");
+#endif
     } else if (strcmp("graphv", argv[1]) == 0) {
+#ifdef HAVE_RRD_GRAPH
         rrd_info_t *grinfo = NULL;  /* 1 to distinguish it from the NULL that rrd_graph sends in */
 
         grinfo = rrd_graph_v(argc - 1, &argv[1]);
@@ -809,11 +830,15 @@ int HandleInputLine(
             rrd_info_print(grinfo);
             rrd_info_free(grinfo);
         }
-
+#else
+       rrd_set_error("the instance of rrdtool has been compiled without graphics");
+#endif
     } else if (strcmp("tune", argv[1]) == 0)
         rrd_tune(argc - 1, &argv[1]);
+#ifndef WIN32
     else if (strcmp("flushcached", argv[1]) == 0)
         rrd_flushcached(argc - 1, &argv[1]);
+#endif
     else {
         rrd_set_error("unknown function '%s'", argv[1]);
     }