Skip to content
Snippets Groups Projects
Select Git revision
  • c9b62645dffebbcdef1a6ac34d5bdf01648568df
  • main default protected
2 results

morse.c

Blame
  • user avatar
    Darius authored
    c9b62645
    History
    morse.c 2.25 KiB
    /*
     - Auteur      : Darius Gomes
     - Date        : 23.01.2025
     - Description : Fichier qui gère les fonctions pour encoder et décoder
     - Fichier     : morse.c
    */
    
    #include "morse.h"
    #include <stdlib.h>
    #include <stdio.h>  
    #include <string.h> 
    
    struct node_t * createNode(char letter)
    {
        node_t* node = malloc(sizeof(node_t));
        node->letter = letter;
        node->right = NULL;
        node->left = NULL;
        return node;
    }
    
    struct node_t * createTree(char * path){
        FILE *f = fopen(path, "r");
        char buffer[7];     
        if (f != NULL) {
            struct node_t* tree = createNode('*');
            while (fgets(buffer, 7, f)) {
                buffer[strcspn(buffer, "\r\n")] = 0;
                char letter;
                char code[6];
                if (strlen(buffer) == 0) {
                    continue;
                }
                sscanf(buffer, "%c%[^\n]", &letter, code);
                pushTree(tree, letter, code);
            }
            fclose(f);
            return tree;
        }
        return NULL;
    }
    
    struct node_t * pushTree(struct node_t * tree, char letter, char * code){
        if (code != NULL) {
            if (code[0] != '\0') {
                if (code[0] == '.') {
                    if (tree->left == NULL) {
                        tree->left = createNode('?');
                    }
                    return pushTree(tree->left, letter, code + 1);
                }
                else if (code[0] == '-') {
                    if (tree->right == NULL) {
                        tree->right = createNode('?');
                    }
                    return pushTree(tree->right, letter, code + 1);
                } else {
                    printf("Erreur de format !!\n");
                    return NULL;
                }  
            } else {
                tree->letter = letter;
                return tree;
            }
        } else {
            return NULL;
        }
    }
    
    
    char searchCodeTree(struct node_t * tree, char letter, char* code_out){}
    
    struct node_t * encodeMorse(struct node_t * tree, char * path){}
    
    void decodeMorse(struct node_t * tree, char * path){}
    
    void printTree(struct node_t * tree, int depth){
        if (tree == NULL) {
            return;
        }
        printTree(tree->right, depth + 1);
        for (int i = 0; i < depth; i++) {
            printf("     ");
        }
        printf("%c\n", tree->letter);
        printTree(tree->left, depth + 1);
    }
    
    void destroyTree(struct node_t ** tree){}