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;
+}