Ajout : implémentation C de mon programme separator

This commit is contained in:
Hippolyte Chauvin 2023-11-21 13:51:05 +01:00
parent dbf295355d
commit e178f4d504

67
src/separator.c Normal file
View file

@ -0,0 +1,67 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <unistd.h>
#define println() printf("\n")
#define printsep(sep) printf("%s\n", sep)
static char *separation_character_line(const char *separation_character, const unsigned short terminal_width) {
const unsigned short line_length = terminal_width / 3;
const size_t character_length = strlen(separation_character);
char *line = malloc(line_length * sizeof(char));
while (strlen(line) + character_length <= line_length) {
strncat(line, separation_character, character_length);
}
return line;
}
static unsigned short terminal_width() {
struct winsize w;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
return w.ws_col;
}
int main(int argc, char *argv[]) {
// Parsing arguments
char *name;
char *separation_character;
if (argc >= 2) {
name = argv[1];
} else {
name = "";
}
if (argc >= 3) {
separation_character = argv[2];
} else {
separation_character = "=";
}
// Creating a /3 terminal size character line
char *separation_line = separation_character_line(separation_character, terminal_width());
// Printing the separator
println();
printsep(separation_line);
if (name != NULL) {
printf("\t%s\n", name);
} else {
println();
}
printsep(separation_line);
// Freeing the created character line
free(separation_line);
// Returning with success
return EXIT_SUCCESS;
}