diff --git a/Final Code/fonctions.h b/Final Code/fonctions.h
new file mode 100644
index 0000000000000000000000000000000000000000..f70773b78d072f758b5a6ddf6969a0335ce05120
--- /dev/null
+++ b/Final Code/fonctions.h	
@@ -0,0 +1,59 @@
+#ifndef fonctions_h
+#define fonctions_h
+
+typedef struct node {
+    uint64_t value;
+    struct node *next;
+} node_t;
+
+typedef struct list {
+    node_t *first;
+    node_t *last;
+    int length;
+} list_t;
+
+typedef struct node2 {
+    list_t *diviseurs;
+    struct node2 *next;
+} node_lst;
+
+typedef struct list2 {
+    node_lst *first;
+    node_lst *last;
+    int length;
+} list_lst;
+
+typedef struct buffer1 {
+    list_t *numbers;
+    sem_t free;
+    sem_t full;
+    pthread_mutex_t mutex;
+    bool can_stop;
+} buffer1;
+
+typedef struct buffer2 {
+    list_lst *prime_numbers;
+    sem_t free;
+    sem_t full;
+    pthread_mutex_t mutex;
+} buffer2;
+
+void init_list_t(list_t *my_list);
+void init_list_lst(list_lst *my_list);
+
+void put_node_t(list_t *my_list, uint64_t value);
+void put_node_lst(list_lst *my_list, list_t *put_list);
+
+uint64_t get_node_t(list_t *my_list);
+list_t *get_node_lst(list_lst *my_list);
+
+void clear_list_t(list_t *my_list);
+
+list_t *prime_list(uint64_t value);
+
+int count_lines(char *filename);
+
+buffer1 *init_buffer_1(int nthreads);
+buffer2 *init_buffer_2(int nthreads);
+
+#endif //fonctions_h
\ No newline at end of file