changeset 6589:7b90e3fd7e09

<\oren\> fetch http://www.orenwatson.be/grph.c
author HackBot
date Sat, 23 Jan 2016 20:59:37 +0000
parents df7545cff682
children 7c6fb0f063a4
files grph.c
diffstat 1 files changed, 78 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/grph.c	Sat Jan 23 20:59:37 2016 +0000
@@ -0,0 +1,78 @@
+#include "stdio.h"
+#include "string.h"
+#include "stdlib.h"
+#include "math.h"
+char *vgraph[] = {" ","▁","▂","▃","▄","▅","▆","▇","█"};
+char *hgraph[] = {"█","▉","▊","▋","▌","▍","▎","▏"," "};
+int main(int argc,char**argv){
+	int h = 3;
+	int w = 80;
+	int color = 0,ori = 0,zebra=0,label=0;
+	if(argc >= 2&&argv[1][0]=='-'){
+		if(strchr(argv[1],'c'))color = 1;
+		if(strchr(argv[1],'z'))zebra = 1;
+		if(strchr(argv[1],'h'))ori = 1;
+		if(strchr(argv[1],'l'))label = 1;
+		argv++;argc--;
+	}
+	if(ori)h=10;
+	if(argc >= 2)h = strtol(argv[1],0,0);
+	if(argc >= 3)w = strtol(argv[2],0,0);
+	float *x=malloc(sizeof(float)*w);
+	int i,c,j;
+	float M = -HUGE_VALF;
+	float m = HUGE_VALF;
+	for(i=0;i<w;i++){
+		c=scanf(" %f",x+i);
+		if(c<1)break;
+		if(x[i]>M)M=x[i];
+		if(x[i]<m)m=x[i];
+	}
+	if(argc >= 4)sscanf(argv[3],"%f",&m);
+	if(argc >= 5)sscanf(argv[4],"%f",&M);
+	w = i;
+	float l = (M-m)/h;
+	if(ori == 0){//vertical, default
+	for(j=h-1;j>=0;j--){
+		if(color)fputs("\e[44m",stdout);
+		for(i=0;i<w;i++){
+			float r = x[i]-m-l*j;
+			if(zebra)fputs((i%2)?"\e[31m":"\e[32m",stdout);
+			if(r>l){
+				fputs(vgraph[8],stdout);
+			}else if(r>0){
+				fputs(vgraph[(int)(r/l*8+0.5)],stdout);
+			}else{
+				fputs(" ",stdout);
+			}
+		}
+		if(color||zebra)fputs("\e[0m",stdout);
+		if(label&&j==h-1)printf(" %f",M);
+		if(label&&j==0)printf(" %f",m);
+		putchar(10);
+	}
+	}else{
+	for(i=0;i<w;i++){
+		if(zebra)fputs((i%2)?"\e[31m":"\e[32m",stdout);
+		if(color)fputs("\e[44m",stdout);
+		for(j=0;j<h;j++){
+			float r = x[i]-m-l*j;
+			if(r>l){
+				fputs(hgraph[0],stdout);
+			}else if(r>0){
+				fputs(hgraph[8-(int)(r/l*8+0.5)],stdout);
+			}else{
+				fputs(hgraph[8],stdout);
+			}
+		}
+		if(color||zebra)fputs("\e[0m",stdout);
+		putchar(10);
+	}
+	int n;
+	if(label){
+		printf("%f%n",m,&n);
+		while(n++<h-1)putchar(' ');
+		printf("▕ %f",M);
+	}
+	}
+}