commit b22ec601297a9249437d3567fc0390e5a40cad87
parent 45d357e410024113a778dd18a174728673d152fc
Author: Bakar Chargeishvili <bakar@bcharge.de>
Date:   Tue, 17 Dec 2024 18:18:25 +0100
Detemine max_width inside syspipe
Diffstat:
| M | welcome.c |  |  | 131 | +++++++++++++++++++++++++++++++++++++++++++------------------------------------ | 
1 file changed, 72 insertions(+), 59 deletions(-)
diff --git a/welcome.c b/welcome.c
@@ -65,56 +65,66 @@ int curl(char* input, string* output)
 	return 0;
 }
 
-int syspipe(char* input, char* output) {
-    //char buf[11500] = {0};
-    char* buf = output;
-
-    FILE *fp;
-
-    if ((fp = popen(input, "r")) == NULL) {
-        printf("Error opening pipe!\n");
-    }
-    size_t len=MAXPIPE;
-    getdelim(&buf, &len, '\0', fp);
-    //while (fgets(buf, 400, fp) != NULL) {
-	    //mvaddstr(++lineno, COLS/2-shift, buf);
-	    //printw(buf);
-	    //printf("OUTPUT: %s", buf);
-    //}
-    //printf("OUTPUT: %s", output);
-
-    if (pclose(fp)) {
-        printf("Command not found or exited with error status\n");
-    }
-
-    return 0;
+int syspipe(char* input, char* output, size_t* max_width) {
+	//char buf[11500] = {0};
+	char* buf = output;
+
+	FILE *fp;
+
+	if ((fp = popen(input, "r")) == NULL) {
+		printf("Error opening pipe!\n");
+	}
+	size_t len=MAXPIPE;
+	//printf("INPUT: %s\n", input);
+	getdelim(&buf, &len, '\0', fp);
+	//printf("OUTPUT: %s", output);
+	*max_width = 0;
+	size_t current = 0;
+	int ch;
+	for (int i = 0; buf[i] != 0; i++) {
+		ch = buf[i];
+		if(ch == '\n') {
+			if(current > *max_width) *max_width = current;
+			current = 0;
+		}
+		else {
+			current++;
+		}
+	}
+	if(current > *max_width) *max_width = current;
+
+	if (pclose(fp)) {
+		printf("Command not found or exited with error status\n");
+	}
+
+	return 0;
 }
 
 int print_greet(WINDOW* frame) {
-    char buf[500] = {0};
-    const char *cmd = "figlet Welcome Bakar!";
-
-    FILE *fp;
-
-    if ((fp = popen(cmd, "r")) == NULL) {
-        printf("Error opening pipe!\n");
-    }
-    //ssize_t bytes_read = getdelim(&buf, &len, '\0', fp);
-    int lineno = 0;
-    int shift = 0;
-    while (fgets(buf, 400, fp) != NULL) {
-	    if(lineno==0)
+	char buf[500] = {0};
+	const char *cmd = "figlet Welcome Bakar!";
+
+	FILE *fp;
+
+	if ((fp = popen(cmd, "r")) == NULL) {
+		printf("Error opening pipe!\n");
+	}
+	//ssize_t bytes_read = getdelim(&buf, &len, '\0', fp);
+	int lineno = 0;
+	int shift = 0;
+	while (fgets(buf, 400, fp) != NULL) {
+		if(lineno==0)
 			shift=strlen(buf)/2;
-	    mvwaddstr(frame,++lineno, COLS/2-shift, buf);
-	    //printw(buf);
-	    //printf("OUTPUT: %s", buf);
-    }
+		mvwaddstr(frame,++lineno, COLS/2-shift, buf);
+		//printw(buf);
+		//printf("OUTPUT: %s", buf);
+	}
 
-    if (pclose(fp)) {
-        printf("Command not found or exited with error status\n");
-    }
+	if (pclose(fp)) {
+		printf("Command not found or exited with error status\n");
+	}
 
-    return 0;
+	return 0;
 }
 
 int main()
@@ -133,14 +143,14 @@ int main()
 	WINDOW* mainframe = newwin(LINES,COLS-2,0,1);
 	wattron(mainframe,COLOR_PAIR(1));
 	//printw("Hello World !!!");
-    wattron(mainframe,A_BLINK);
-    wattron(mainframe,A_BOLD);
-    print_greet(mainframe);
-    wattroff(mainframe,A_BLINK);
-
-    /*****************************
-	*  Extract the information   *
-	*****************************/
+	wattron(mainframe,A_BLINK);
+	wattron(mainframe,A_BOLD);
+	print_greet(mainframe);
+	wattroff(mainframe,A_BLINK);
+
+	/*****************************
+	 *  Extract the information   *
+	 *****************************/
 	string location;
 	init_string(&location);
 	string temperature;
@@ -154,22 +164,25 @@ int main()
 	char *events = calloc(MAXPIPE + 1,sizeof(char));
 	char *today  = calloc(MAXPIPE + 1,sizeof(char));
 	char *skull  = calloc(MAXPIPE + 1,sizeof(char));
+	size_t w_pipe_events = 0;
+	size_t w_pipe_today  = 0;
+	size_t w_pipe_skull  = 0;
 	curl("wttr.in/?format=%l",&location);
 	curl("wttr.in/?format=%t%20(%f)",&temperature);
 	curl("wttr.in/?format=%w",&wind);
 	curl("wttr.in/?format=%p",&precip);
 	curl("wttr.in/?format=%S%20-%20%s",&sunlife);
-	syspipe("calcurse -r7 --format-apt='- %S -> %E %m\n' --output-datefmt=\"%B %d, %Y\"",events);
-	syspipe("date '+%B %d, %Y' | tr -d '\n'",today);
-	syspipe("cat skull",skull);
+	syspipe("calcurse -r7 --format-apt='- %S -> %E %m\n' --output-datefmt=\"%B %d, %Y\"",events,&w_pipe_events);
+	syspipe("date '+%B %d, %Y' | tr -d '\n'",today,&w_pipe_today);
+	syspipe("cat skull",skull,&w_pipe_skull);
 	if(events[0]=='\0')
 		strcpy(events,"🎉 Looks like you have not planned anything 🎉\n"
-				);
+		      );
 
 
 	/***************************
-	*  Print the information   *
-	***************************/
+	 *  Print the information   *
+	 ***************************/
 	wprintw(mainframe,"Today is:\t\t%s\n",today);
 	wprintw(mainframe,"We are in:\t\t%s\n",location.ptr);
 	wprintw(mainframe,"Temperature:\t\t%s\n",temperature.ptr);
@@ -180,7 +193,7 @@ int main()
 	refresh();
 	wprintw(mainframe,"%s\n", skull);
 	wrefresh(mainframe);
-	for (int i = 0; i < 9; i++) {
+	for (int i = 0; i < COLS/w_pipe_skull; i++) {
 		BOARD[i]=derwin(mainframe,8,21,20,i*20);
 		wattron(BOARD[i],COLOR_PAIR(2));
 		wprintw(BOARD[i],skull);