]> granicus.if.org Git - vnstat/commitdiff
use ANSI escape codes move cursor and clear line instead of backspace output in ...
authorTeemu Toivola <git@humdi.net>
Sat, 27 Jun 2015 20:05:10 +0000 (23:05 +0300)
committerTeemu Toivola <git@humdi.net>
Sat, 27 Jun 2015 20:05:10 +0000 (23:05 +0300)
src/misc.c
src/misc.h
src/traffic.c

index 89b2daa594d43100fafb75919a3d6ff9497baf14..99c3a72fe395ab8e9458ecce348914cf74ac900b 100644 (file)
@@ -400,3 +400,23 @@ int getpadding(int len, char *str)
        }
        return len + ((int)strlen(str) - (int)mbstowcs(NULL, str, 0));
 }
+
+void cursortocolumn(int column)
+{
+       printf("\033[%dG", column);
+}
+
+void cursorhide(void)
+{
+       printf("\033[?25l");
+}
+
+void cursorshow(void)
+{
+       printf("\033[?25h");
+}
+
+void eraseline(void)
+{
+       printf("\033[2K");
+}
index 812af8f804075bccb22696c50eab30be32fe8176..4d3ef3c850086d7f86f929489de6c7364987c962 100644 (file)
@@ -16,5 +16,9 @@ char *getrateunit(int unit, int index);
 uint32_t getunitdivider(int unit, int index);
 char *getratestring(float rate, int len, int declen, int unit);
 int getpadding(int len, char *str);
+void cursortocolumn(int column);
+void cursorhide(void);
+void cursorshow(void);
+void eraseline(void);
 
 #endif
index 0215e13ce9c9dd52e93d58b1c56295e4fa633962..d78e51cea7faafac36fcade3536e829b8d2daea5 100644 (file)
@@ -46,11 +46,8 @@ void trafficmeter(char iface[], int sampletime)
                sleep(sampletime-((sampletime/3)*3));
        }
 
-       len=strlen(buffer)+3;
-
-       for (i=0;i<len;i++) {
-               printf("\b \b");
-       }
+       cursortocolumn(1);
+       eraseline();
 
        /* read those values again... */
        if (!getifinfo(iface)) {
@@ -111,6 +108,8 @@ void livetrafficmeter(char iface[32], int mode)
                exit(EXIT_FAILURE);
        }
 
+       cursorhide();
+
        /* loop until user gets bored */
        while (intsignal==0) {
 
@@ -134,6 +133,7 @@ void livetrafficmeter(char iface[32], int mode)
 
                /* read those values again... */
                if (!getifinfo(iface)) {
+                       cursorshow();
                        printf("Error: Interface \"%s\" not available, exiting.\n", iface);
                        exit(EXIT_FAILURE);
                }
@@ -184,10 +184,8 @@ void livetrafficmeter(char iface[32], int mode)
                        if (debug) {
                                printf("\nlinelen: %d\n", len);
                        } else {
-                               for (i=0;i<len;i++) {
-                                       printf("\b \b");
-                               }
-                               fflush(stdout);
+                               cursortocolumn(1);
+                               eraseline();
                        }
                }
                if (cfg.ostyle!=4) {
@@ -201,6 +199,7 @@ void livetrafficmeter(char iface[32], int mode)
        }
 
        timespent = (uint64_t)time(NULL) - timespent - timeslept;
+       cursorshow();
 
        printf("\n\n");