From f1660b1be3867a1c22d58a8019ca3e9c71c648b2 Mon Sep 17 00:00:00 2001
From: Alnotz <fredh0001@net-c.fr>
Date: Sat, 7 Jan 2023 16:20:12 +0100
Subject: [PATCH] New C projects
---
csvfc.c | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
invNb.c | 66 ++++++++++++++++++++++
random.c | 95 ++++++++++++++++++++++++++++++++
sapin.c | 120 ++++++++++++++++++++++++++++++++++++++++
wcplus.c | 114 ++++++++++++++++++++++++++++++++++++++
5 files changed, 559 insertions(+)
create mode 100644 csvfc.c
create mode 100644 invNb.c
create mode 100644 random.c
create mode 100644 sapin.c
create mode 100644 wcplus.c
diff --git a/csvfc.c b/csvfc.c
new file mode 100644
index 0000000..760b2a5
--- /dev/null
+++ b/csvfc.c
@@ -0,0 +1,164 @@
+/*****************************************\
+|* Code C pour lire un fichier CSV. *|
+|* *|
+|* Auteur : Frederic Henry. *|
+|* Note : On peut surement faire mieux ! *|
+\*****************************************/
+/*g++ -Wall -Wextra -c csvfc.c && g++ -Wall -Wextra csvfc.o -o csvfc && ./csvfc;*/
+/* Bibliotheques standards de C 90. */
+/* Entree/sortie & fichiers. */
+#include <stdio.h>
+/* Caracteres. */
+#include <string.h>
+/* Controles de procedures. */
+#include <stdlib.h>
+/* Lignes. */
+#define LINES 8
+/* Colonnes. */
+#define ROWS 6
+/* Fonction secondaire. */
+/* Un texte d'aide pour connaître les commandes. */
+/* Une seule commande ici : '-h' pour l'aide. X-) */
+void helper(void)/* Que du texte... :-| */
+{
+ printf("/*********************************************\\\n");
+ printf("|* Section d'aide pour le programme 'csvfc'. *|\n");
+ printf("|* *|\n");
+ printf("|* csvfc [-h|--help] *|\n");
+ printf("|* *|\n");
+ printf("\\*********************************************/\n");
+ printf("Pour manipuler ce programme, il suffit d'avoir");
+ printf(" le fichier 'csvin.csv' dans le meme repertoire.\n\n");
+ printf(" Contenu de 'csvin.csv' :\n");
+ printf("\"X\",\"Y\",\"Z\",\"U\",\"V\",\"P\"\n");
+ printf("1,1,1,1,1,1\n");
+ printf("2,2,2,2,2,2\n");
+ printf("3,3,3,3,3,3\n");
+ printf("4,4,4,4,4,4\n");
+ printf("5,5,5,5,5,5\n");
+ printf("6,6,6,6,6,6\n");
+ printf("7,7,7,7,7,7\n");
+ printf("8,8,8,8,8,8\n\n");
+ printf("Apres ca, on execute 'csvf'.\n");
+}
+/* Fonction principale. */
+int main(int argc, char** argv)
+{
+ /* Avant de commencer, a-t-on ajoute une option ? */
+ if (argc == 2)/* Si une option... */
+ {
+ /* En cas d'option '-h' ou '--help'... */
+ if (strcmp(argv[1],"--help")==0 || strcmp(argv[1],"-h")==0)
+ {
+ /* Page d'aide invoquee. */
+ helper();
+ /* Fin du programme avec succes. */
+ exit(EXIT_SUCCESS);
+ }
+ }
+ /* Texte memorise. */
+ char text[LINES+1][5*ROWS-1];
+ /* Indices ligne/colonne. */
+ char i,j;
+ /* Matrice d'entiers. */
+ int matrix[LINES][ROWS];
+ /* Pour s'assurer la fin de chaque ligne.
+ * Une ligne = une sous-chaine.
+ */
+ for (i=1; i<ROWS; i=i+1)
+ {
+ text[i][5*ROWS-1-1]='\0';
+ }
+ /* Pour la deco. car j'aime ca. :-D */
+ printf("/*****************************************\\\n");
+ printf("|* Code C++ pour lire un fichier CSV. *|\n");
+ printf("|* *|\n");
+ printf("|* Auteur : Frederic Henry. *|\n");
+ printf("|* Note : On peut surement faire mieux ! *|\n");
+ printf("\\*****************************************/\n\n");
+ printf("Lecture de \"./csvin.csv\"...\n");
+ /* Lecture de fichier texte avec "FILE*". */
+ FILE* entree;
+ entree = fopen("./csvin.csv","r");
+ printf("Table CSV (en-tete) :\n");
+ /* Ligne 0 lue. */
+ fscanf(entree,"%s",text[0]);
+ printf("%s\n",text[0]);
+ /* Les autres lignes. */
+ printf("Table CSV (corps) :\n");
+ for (i=1; i<LINES+1; i=i+1)
+ {
+ fscanf(entree,"%s",text[i]);
+ printf("%s\n",text[i]);
+ }
+ /* Lecture integrale. */
+ printf("Table CSV (tout) :\n");
+ for (i=0; i<LINES+1; i=i+1)
+ {
+ printf("%s\n",text[i]);
+ }
+ printf("\n");
+ /* Fermeture du fichier. */
+ fclose(entree);
+ /* Affichage du tableau de caracteres. */
+ printf("Version tableau de caracteres :\n");
+ /* En-tete. */
+ for (j=0; j<ROWS; j=j+1)
+ {
+ printf("%c ",text[0][4*j+1]);
+ }
+ /* Corps. */
+ printf("\n");
+ for (i=1; i<LINES+1; i=i+1)
+ {
+ for (j=0; j<ROWS; j=j+1)
+ {
+ printf("%c ",text[i][2*j]);
+ }
+ printf("\n");
+ }
+ printf("\n");
+ /* Pareil, facon nombres entiers. */
+ printf("Version tableau d'entiers :\n");
+ /* Conversion du texte a la matrice entiere. */
+ for (i=0; i<LINES; i=i+1)
+ {
+ for (j=0; j<ROWS; j=j+1)
+ {
+ matrix[i][j]=(int)text[i+1][2*j]-48;
+ }
+ }
+ /* Affichage de la matrice. */
+ for (i=0; i<LINES; i=i+1)
+ {
+ for (j=0; j<ROWS; j=j+1)
+ {
+ printf("%d ",matrix[i][j]);
+ }
+ printf("\n");
+ }
+ printf("\n");
+ /* Ce coup-ci, ecriture de tableau dans un fichier. */
+ printf("Ecriture d'un tableau CSV \"./csvout.csv\"...\n");
+ FILE* sortie;
+ sortie = fopen("csvout.csv","w");
+ /* Dabord l'en-tete. */
+ fprintf(sortie,"\"X\",\"Y\",\"Z\",\"U\",\"V\",\"P\"\n");
+ /* En suite le corps. */
+ for (i=0; i<LINES; i=i+1)
+ {
+ for (j=0; j<ROWS-1; j=j+1)
+ {
+ fprintf(sortie,"%d,",matrix[i][j]);
+ }
+ fprintf(sortie,"%d\n",matrix[i][ROWS-1]);
+ }
+ /* Fichier ferme. */
+ fclose(sortie);
+ printf("\n");
+ /* Fini. */
+ printf("Fin\n");
+ /* Pour dire que tout a bien marche. */
+ return EXIT_SUCCESS;
+}
+
diff --git a/invNb.c b/invNb.c
new file mode 100644
index 0000000..965545f
--- /dev/null
+++ b/invNb.c
@@ -0,0 +1,66 @@
+/*********************\
+|**Frédéric Henry*****|
+|**SETSIS 2020********|
+\*********************/
+/* gcc -Wall -Wextra -o invNb invNb.c */
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+/* Opérateur puissance. */
+int puis(int nb, int i)
+{
+ /* Base. */
+ int b=nb;
+ /* Multiplications. */
+ if(i!=0)
+ {
+ for(long int j=0; j<i-1; j=j+1)
+ {
+ nb=nb*b;
+ }
+ return nb;
+ }
+ /* Extension nulle. */
+ else
+ {
+ return 1;
+ }
+}
+/* Fonction principale. */
+int main(int argc, char* argv[])
+{
+ /* Aide. */
+ if(!strcmp(argv[1],"-h")||!strcmp(argv[1],"--help"))
+ {
+ printf("Usage : %s -h|--help|NUMBER\n",argv[0]);
+ printf("Litteral inverse of NUMBER is returned.\n");
+ return EXIT_SUCCESS;
+ }
+ /* Le nombre entier non signé en entrée. */
+ else
+ {
+ /* Nombre de chiffres. */
+ const long int taille = strlen(argv[1]);
+ /* Vraiment un nombre entier non signé?
+ * Dans ce cas, les caractères sont dans
+ * [48;57].
+ */
+ for(long int i=0; i<taille; i=i+1)
+ {
+ if(argv[1][i]<48||argv[1][i]>57)
+ {
+ /* Si non, erreur! */
+ return EXIT_FAILURE;
+ }
+ }
+ /* Nombre littéralement inversé. */
+ int nb=0;
+ for(long int i=0; i<taille; i=i+1)
+ {
+ nb=nb+(int)(argv[1][taille-i-1]-48)*puis(10,taille-i-1);
+ }
+ /* Nombre inversé en sortie. */
+ printf("%d\n", nb);
+ return EXIT_SUCCESS;
+ }
+}
diff --git a/random.c b/random.c
new file mode 100644
index 0000000..40a156a
--- /dev/null
+++ b/random.c
@@ -0,0 +1,95 @@
+/*
+ * Fichier : random.c
+ * Auteur : Frédéric Henry
+ * Diplôme : Lpro Vision robotique
+ * Date : 23/10/2018
+ * Version : 0.1
+ */
+/* En-tête : Bibliothèque standard pour I/O. */
+#include <stdio.h>
+/* En-tête : Bibliothèque standard pour "rand()" et "random()". */
+#include <stdlib.h>
+/* Taille du tableau. */
+#define N 128
+/* Valeur aléatoire maximale. */
+#define MAXI 2147483648
+/* Fonction principale.
+ * Un programme pour étudier la fonction "random()",
+ * la distribution uniforme et celle normale.
+ */
+int main(void)
+{
+ unsigned i ;
+ unsigned j ;
+ short int flag0 = 0 ;
+ short int flag1 = 1 ;
+ long int maximum = 0 ;
+ long int minimum = MAXI ;
+ long int alea ;
+ unsigned table[N] ;
+ /* Remplissage de zéros. */
+ for (i=0;i<N;i=i+1)
+ {
+ table[i] = 0 ;
+ }
+ printf("Randomness values :\n") ;
+ for(i=0;i<10000;i=i+1)
+ {
+ /* Création de valeur aléatoire. */
+ alea = 0 ;
+ for (j=0;j<16;j=j+1)
+ {
+ /* diviser atténue l'amplitude. */
+ alea = random()/16 + alea ;
+ }
+ /* Classement croissant des valeurs. */
+ for (j=0;j<N;j=j+1)
+ {
+ /* Multiplier élargit les intervalles. */
+ if (alea > MAXI / N * j && alea < MAXI / N * (j+1))
+ {
+ table[j] = table[j] + 1 ;
+ j = N ;
+ }
+ }
+ /* Recherche des extremums. */
+ if (maximum < alea)
+ {
+ maximum = alea ;
+ }
+ if (minimum > alea)
+ {
+ minimum = alea ;
+ }
+ /* printf("N%02u = %010ld\n", i, alea) ; */
+ }
+ printf("Highest number : %ld\n", minimum) ;
+ printf("Highest number : %ld\n", maximum) ;
+ /* Multiples binaires. */
+ alea = 1 ;
+ i = 0 ;
+ while (alea < maximum)
+ {
+ alea = alea * 2 ;
+ i = i + 1 ;
+ if (alea > minimum && flag1 == 1)
+ {
+ printf("2^%2u = %ld\n", i, alea) ;
+ flag1 = 0 ;
+ }
+ }
+ printf("2^%2u = %ld\n", i, alea) ;
+ /* Graphe */
+ printf("Graph :\n\n") ;
+ for (i=0;i<N;i=i+1)
+ {
+ printf("[ %03u / %03d ]\t", i+1, N) ;
+ /* Sauter des valeurs atténue l'amplitude. */
+ for (j=0;j<table[i];j=j+2)
+ {
+ printf("|") ;
+ }
+ printf("\n") ;
+ }
+ return 0 ;
+}
diff --git a/sapin.c b/sapin.c
new file mode 100644
index 0000000..2a0aae6
--- /dev/null
+++ b/sapin.c
@@ -0,0 +1,120 @@
+/**************************************\
+| Alnotz |
+| Le générateur de sapin |
+\**************************************/
+/* gcc -Wall -Wextra -o sapin sapin.c */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+/* Une entrée numérique? */
+int estNumerique(char chaine[])
+{
+ size_t taille = strlen(chaine);
+ for(size_t i=0; i<taille; i=i+1)
+ {
+ switch(chaine[i])
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ break;
+ default:
+ return 0;
+ }
+ }
+ return 1;
+}
+/* Bloc d'espaces ou traits */
+void multibloc(unsigned long int compteur,unsigned int no)
+{
+ if(no==0)
+ {
+ for(unsigned long int i=compteur; i>0; i=i-1)
+ {
+ printf(" ");
+ }
+ }
+ if(no==1)
+ {
+ for(unsigned long int i=compteur; i>0; i=i-1)
+ {
+ printf("____");
+ }
+ }
+}
+/* Fonction principale */
+int main(int argc, char* argv[])
+{
+ if(argc<2)
+ {
+ printf("Pas d'argument? Ça sent le sapin!\n");
+ return EXIT_FAILURE;
+ }
+ /* Aide */
+ if(!strcmp(argv[1],"-h")||!strcmp(argv[1],"--help"))
+ {
+ printf("Commande : ");
+ printf("%s",argv[0]);
+ printf(" -h | --help | NOMBRE\n");
+ printf("-h | --help\t\tDonne l\'aide.\n");
+ printf("NOMBRE\t\tConstruit l\'arbre sur NOMBRE étages.\n");
+ return EXIT_SUCCESS;
+ }
+ if(!estNumerique(argv[1]))
+ {
+ printf("Tape un nombre!\n");
+ return EXIT_FAILURE;
+ }
+ /* Texte => Nombre */
+ unsigned long int hauteur = strtoul(argv[1],argv,10);
+ /* Étoile du soir */
+ multibloc(hauteur-1,0);
+ printf(" __/\\__\n");
+ multibloc(hauteur-1,0);
+ printf(" \\ /\n");
+ multibloc(hauteur-1,0);
+ printf(" \\/\\/\n");
+ multibloc(hauteur-1,0);
+ printf("____/ \\____\n");
+ /* Étages */
+ for(unsigned long int i=hauteur-1; i>0; i=i-1)
+ {
+ /* Ligne 0 */
+ multibloc(i,0);
+ printf("\\ ");
+ multibloc(2*(hauteur-i),0);
+ printf(" /\n");
+ /* Ligne 1 */
+ multibloc(i-1,0);
+ multibloc(1,1);
+ printf("_\\");
+ multibloc(2*(hauteur-i),0);
+ printf("/_");
+ multibloc(1,1);
+ printf("\n");
+ }
+ /* Dernier étage. */
+ printf("\\ ");
+ multibloc(2*hauteur,0);
+ printf(" /\n \\");
+ multibloc(2*hauteur,1);
+ printf("/ \n");
+ /* Tronc */
+ for(unsigned long int i=0; i<hauteur; i=i+1)
+ {
+ multibloc(hauteur,0);
+ printf("| |\n");
+ }
+ /* Sol */
+ multibloc(hauteur,0);
+ printf("|__|\n");
+ /* FINI! */
+ return EXIT_SUCCESS;
+}
diff --git a/wcplus.c b/wcplus.c
new file mode 100644
index 0000000..48650f1
--- /dev/null
+++ b/wcplus.c
@@ -0,0 +1,114 @@
+/*********************\
+| WCPlus |
+| By Alnotz |
+\*********************/
+/*
+gcc -fPIC -Wall -Wextra -o wcplus.o `/usr/bin/pkg-config --libs --cflags weechat` -c wcplus.c
+gcc -shared -fPIC -Wall -Wextra -o wcplus.so wcplus.o
+*/
+#include <stdlib.h>
+#include <weechat-plugin.h>
+#define VERBOSE_MASKS_SIZE 3
+#define HELP_MASKS_SIZE 3
+struct t_weechat_plugin *weechat_plugin = NULL;
+WEECHAT_PLUGIN_NAME("WCPlus");
+WEECHAT_PLUGIN_DESCRIPTION("Juste une autre extension");
+WEECHAT_PLUGIN_AUTHOR("Alnotz <alnotz@protonmail.com>");
+WEECHAT_PLUGIN_VERSION("0.2");
+WEECHAT_PLUGIN_LICENSE("GNU GPLv3");
+WEECHAT_PLUGIN_PRIORITY(999);
+void arg_test(int argc,
+ char **argv)
+{
+ weechat_printf(NULL, "%s###########%s", weechat_color("*green"), weechat_color("reset"));
+ weechat_printf(NULL, "%sTotal d’arguments: %s%d%s", weechat_color("red"), weechat_color("*blue"), argc, weechat_color("reset"));
+ for(int i=0; i<argc; i=i+1)
+ {
+ weechat_printf(NULL, "%sArgument n°%d: %s%s%s", weechat_color("red"), i, weechat_color("*blue"), argv[i], weechat_color("reset"));
+ }
+ weechat_printf(NULL, "%s###########%s", weechat_color("*green"), weechat_color("reset"));
+}
+int command_truc(const void *pointer,
+ void *data,
+ struct t_gui_buffer *buffer,
+ int argc,
+ char **argv,
+ char **argv_eol)
+{
+ (void) pointer;
+ (void) data;
+ (void) buffer;
+ (void) argv_eol;
+ if(argc == 1)
+ {
+ weechat_printf(NULL, "Tu peux taper `%s/truc -help%s`.", weechat_color("*white"), weechat_color("reset"));
+ }
+ else
+ {
+ unsigned char verbose_flag = 0;
+ unsigned char help_flag = 0;
+ for(int i=1; i<argc; i=i+1)
+ {
+ const char *verbose_masks[VERBOSE_MASKS_SIZE] = {"-v", "-verbose", NULL};
+ const char *help_masks[HELP_MASKS_SIZE] = {"-h", "-help", NULL};
+ if(weechat_string_match_list(argv[i], verbose_masks, 1) && verbose_flag == 0)
+ {
+ verbose_flag = 1;
+ }
+ if(weechat_string_match_list(argv[i], help_masks, 1) && help_flag == 0)
+ {
+ help_flag = 1;
+ }
+ }
+ if(verbose_flag == 1)
+ {
+ arg_test(argc, argv);
+ }
+ if(help_flag == 1)
+ {
+ weechat_printf(NULL, "Maintenant tu peux taper `%s/help truc%s`.\n:-P", weechat_color("*white"), weechat_color("reset"));
+ }
+ }
+ return WEECHAT_RC_OK;
+}
+int command_truc_options(const void *pointer,
+ void *data,
+ const char *completion_item,
+ struct t_gui_buffer *buffer,
+ struct t_gui_completion *completion)
+{
+ (void) pointer;
+ (void) data;
+ (void) completion_item;
+ (void) buffer;
+ weechat_completion_list_add (completion, "-verbose", 0, WEECHAT_LIST_POS_END);
+ weechat_completion_list_add (completion, "-help", 0, WEECHAT_LIST_POS_END);
+ return WEECHAT_RC_OK;
+}
+int weechat_plugin_init (struct t_weechat_plugin *plugin,
+ int argc, char *argv[])
+{
+ weechat_plugin = plugin;
+ weechat_hook_completion("truc_options",
+ "Complétion des options de `truc`",
+ &command_truc_options,
+ NULL,
+ NULL);
+ weechat_hook_command("truc",
+ "C’est une commande d'essai.",
+ "[-v|-verbose] [-h|-help]",
+ "-h|-help : Aide\n"
+ "-v|-verbose : Débogage",
+ "%(truc_options) %(truc_options)",
+ &command_truc,
+ NULL,
+ NULL);
+ weechat_printf(NULL, "%sExtension chargée!%s", weechat_color("*red"), weechat_color("reset"));
+ return WEECHAT_RC_OK;
+}
+int weechat_plugin_end (struct t_weechat_plugin *plugin)
+{
+ (void) plugin;
+ weechat_printf(NULL, "%sExtension dé-chargée!%s", weechat_color("*red"), weechat_color("reset"));
+ return WEECHAT_RC_OK;
+}