From ed3c2fc0de85a9f32971cd6d1acc40acf334353e Mon Sep 17 00:00:00 2001
From: Anteunis Charles <charles.anteunis@gmail.com>
Date: Sun, 15 Dec 2019 02:17:05 +0100
Subject: [PATCH] add files

---
 a.out          | Bin 0 -> 8920 bytes
 affichage.h    |   6 +++++
 interpreteur.c |  56 +++++++++++++++++++++++++++++++++++++++
 interpreteur.h |  19 ++++++++++++++
 list.c         |  70 +++++++++++++++++++++++++++++++++++++++++++++++++
 list.h         |  40 ++++++++++++++++++++++++++++
 main.c         |  61 ++++++++++++++++++++++++++++++++++++++++++
 test.txt       |   5 ++++
 8 files changed, 257 insertions(+)
 create mode 100755 a.out
 create mode 100644 affichage.h
 create mode 100644 interpreteur.c
 create mode 100644 interpreteur.h
 create mode 100644 list.c
 create mode 100644 list.h
 create mode 100644 main.c
 create mode 100644 test.txt

diff --git a/a.out b/a.out
new file mode 100755
index 0000000000000000000000000000000000000000..3f19027cc3c8c4ae8005f632132486827d782a92
GIT binary patch
literal 8920
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
R6+}-O11uq7BwSDc0syP#Gr0f&

literal 0
HcmV?d00001

diff --git a/affichage.h b/affichage.h
new file mode 100644
index 0000000..55d8de4
--- /dev/null
+++ b/affichage.h
@@ -0,0 +1,6 @@
+#ifndef AFFICHAGE_H
+#define AFFICHAGE_H
+
+void print_grid(char **tab);
+
+#endif
\ No newline at end of file
diff --git a/interpreteur.c b/interpreteur.c
new file mode 100644
index 0000000..2b3dc4c
--- /dev/null
+++ b/interpreteur.c
@@ -0,0 +1,56 @@
+#include "interpreteur.h"
+
+void interpreteur(char **matrix, int height, int width) {
+    curseur cur;
+    int i, j;
+    list pile = empty();
+    char tmp;
+
+    cur.x = 0;
+    cur.y = 0;
+    cur.current_char = matrix[0][0];
+
+    while (cur.current_char != '@') {
+
+        /* Action en fonction du caractère lu */
+        switch (cur.current_char)
+        {
+        case 48 ... 57:
+            /* si on lit un entier */
+            push(cur.current_char - 48, &pile);
+            break;
+        
+        case '>':
+            cur.current_dir = W;
+            break;
+
+        case ',':
+            if (is_empty(pile))
+                tmp = '0';
+            else
+                tmp = pop(&pile) + 48;
+            break;
+            
+        default:
+            break;
+        }
+
+        /* Déplacement du curseur et lecture du prochain caractère */
+        switch (cur.current_dir)
+        {
+        case N:
+            cur.x = cur.x - 1;
+            /* Gérer les cas si on est au bord de la matrice */
+            cur.current_char = matrix[cur.y][cur.x];
+            break;
+
+        case NW:
+            cur.x = cur.x - 1;
+            cur.y = cur.y + 1;
+            break;
+        
+        default:
+            break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/interpreteur.h b/interpreteur.h
new file mode 100644
index 0000000..57ee305
--- /dev/null
+++ b/interpreteur.h
@@ -0,0 +1,19 @@
+#ifndef INTERPRETEUR_H
+#define INTERPRETEUR_H
+
+#include "list.h"
+
+typedef enum direction {
+    N, S, E, W, NE, NW, SE, SW
+} direction;
+
+typedef struct curseur {
+    int x;
+    int y;
+    char current_char;
+    direction current_dir;
+} curseur;
+
+void interpreteur(char **matrix, int height, int width);
+
+#endif
\ No newline at end of file
diff --git a/list.c b/list.c
new file mode 100644
index 0000000..cf6802c
--- /dev/null
+++ b/list.c
@@ -0,0 +1,70 @@
+#include "list.h"
+
+/**
+ * Return the empty list
+ */
+list empty() {
+    return NULL;
+}
+
+/**
+ * Return true if l is empty, else false
+ * \param l the list to test
+ */
+int is_empty(list l) {
+    return l==NULL;
+}
+
+/**
+ * Add an element to the head of a list
+ * \param e the element to add
+ * \param l a pointer to the list
+ * \attention modify the list, l must be allocated
+ */
+void push(int e, list *l) {
+    list tmp = (elem *)malloc(sizeof(elem));
+
+    tmp->val = e;
+    tmp->next = *l;
+    *l = tmp;
+}
+
+/**
+ * Return the head of the list and pop it from the list
+ * \param l a pointer to the list
+ * \attention modify the list, return 0 if l is empty
+ */
+int pop(list *l) {
+    if (l==NULL)
+        return 0;
+    int res = (*l)->val;
+    list tmp = *l;
+
+    *l = (*l)->next;
+    free(tmp);
+    return res;
+}
+
+/**
+ * Return the length of a list
+ * \param l the list we want the length
+ * \attention recursive function
+ */
+int len(list l) {
+    if (is_empty(l))
+        return 0;
+    else
+        return 1 + len(l->next);
+}
+
+/**
+ * Print a list like this : head->...->...->NULL
+ * \param l the list we want to print
+ */
+void print_list(list l) {
+    while (l != NULL) {
+        printf("%i->",l->val);
+        l = l->next;
+    }
+    printf("NULL\n");
+}
\ No newline at end of file
diff --git a/list.h b/list.h
new file mode 100644
index 0000000..5830bd4
--- /dev/null
+++ b/list.h
@@ -0,0 +1,40 @@
+#ifndef LIST_H
+#define LIST_H
+
+#include<stdio.h>
+#include<stdlib.h>
+
+/**
+ * \file list.h
+ * \author Charles Anteunis
+ * 
+ * Definiton of the int list structure in C
+ */
+
+/**
+ * Definition of list type
+ * 
+ */
+typedef struct elem * list;
+
+/**
+ * Definition of a list element
+ */
+typedef struct elem {
+    int val;
+    list next;
+} elem;
+
+list empty();
+
+int is_empty(list l);
+
+void push(int e, list *l);
+
+int pop(list *l);
+
+int len(list l);
+
+void print_list(list l);
+
+#endif
\ No newline at end of file
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..3ed035e
--- /dev/null
+++ b/main.c
@@ -0,0 +1,61 @@
+#include "list.h"
+#include "affichage.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char const *argv[])
+{
+    FILE *f;
+    char c = '\0';
+    int height = 0, width = 0;
+    int i, j;
+    char **matrix;
+
+    if (argc == 1) {
+        printf("Usage: ./prog2d file\n");
+        return 0;
+    }
+    else {
+        /* ouverture du fichier à lire */
+        if ((f = fopen(argv[1], "r")) == NULL) {
+            printf("Error while reading file\n");
+            exit(1);
+        }
+    }
+
+    /* on récupère le nombre de colonnes du fichier */
+    fread(&c, sizeof(char), 1, f);
+    while ( c != ' ') {
+        width = 10*width + strtol(&c, NULL, 10);
+        fread(&c, sizeof(char), 1, f);
+    }
+    width = width/10;
+
+    /* on récupère le nombre de lignes du fichier */
+    fread(&c, sizeof(char), 1, f);
+    while (c != '\n') {
+        height = 10*height + strtol(&c, NULL, 10);
+        fread(&c, sizeof(char), 1, f);
+    }
+    height = height/10;
+
+    matrix = (char **) malloc(height*sizeof(char *));
+    for (i=0 ; i<height ; i++) {
+        matrix[i] = (char *) malloc(width*sizeof(char));
+    }
+
+    i = 0;
+    j = 0;
+    /* On remplit la matrice avec les données du fichier */
+    while (fread(&c, sizeof(char), 1, f)) {
+        if (c == '\n') {
+            i++;
+            j = 0;
+            continue;
+        }
+        matrix[i][j] = c;
+        j++;
+    }
+
+    return 0;
+}
diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000..64aa092
--- /dev/null
+++ b/test.txt
@@ -0,0 +1,5 @@
+26 12
+a
+bsf
+czef qsf
+d qsf qsf
\ No newline at end of file
-- 
GitLab