9511_project01

project 1 for algorithms & programming I (9511) prof. Cardozo
Index Commits Files Refs README
commit ac237f61261ad447bb1665df7a6341706083683e
parent a83d11b524462fa7f71e8fa5a08fa8f0bccad8b7
Author: Martin J. Klöckner <64109770+klewer-martin@users.noreply.github.com>
Date:   Thu,  4 Feb 2021 00:29:26 -0300

Merge pull request #3 from klewer-martin/alpha

Alpha
Diffstat:
MMakefile | 10+++++-----
Marguments.c | 11++++-------
Marguments.h | 11+++++++----
Ddata.c | 38--------------------------------------
Ddata.h | 9---------
Mload_country_codes.c | 12+++++-------
Mmacros.h | 3++-
Mmain.c | 10++++------
Mmain.h | 2++
Aperrors.c | 37+++++++++++++++++++++++++++++++++++++
Aperrors.h | 42++++++++++++++++++++++++++++++++++++++++++
Mreadlines.c | 10++--------
Mreadlines.h | 12+++++++++---
13 files changed, 119 insertions(+), 88 deletions(-)
diff --git a/Makefile b/Makefile
@@ -1,11 +1,11 @@
 CC = gcc
-CFLAGS = -std=c99
+CFLAGS = -std=c99 -Wall -pedantic
 
 all: main clean
 
 
-main: main.o arguments.o data.o load_country_codes.o readlines.o
-    $(CC) $(CFLAGS) main.o arguments.o data.o load_country_codes.o readlines.o -o main 
+main: main.o arguments.o perrors.o load_country_codes.o readlines.o
+    $(CC) $(CFLAGS) main.o arguments.o perrors.o load_country_codes.o readlines.o -o main 
 
 main.o: main.c main.h arguments.h macros.h
     $(CC) -c main.c
@@ -13,8 +13,8 @@ main.o: main.c main.h arguments.h macros.h
 arguments.o: arguments.c arguments.h macros.h
     $(CC) -c arguments.c
 
-data.o: main.c main.h
-    $(CC) -c data.c
+perrors.o: main.c main.h
+    $(CC) -c perrors.c
 
 load_country_codes.o: load_country_codes.h main.h
     $(CC) -c load_country_codes.c 
diff --git a/arguments.c b/arguments.c
@@ -1,11 +1,5 @@
 #include "arguments.h"
 
-#define INPUT_ARGUMENT_FOUND_MSG     "Encontre un '-in'\n"
-#define OUTPUT_ARGUMENT_FOUND_MSG     "Encontre un '-out'\n"
-
-#define INPUT_FILE_NAME_MSG     "\t -> Archivo de entrada: "
-#define OUTPUT_FILE_NAME_MSG     "\t -> Archivo de salida: "
-
 //    Valida que los argumentos esten correctos y guarda los nombres de los 
 //    archivos de entrada y salida en src y dest respectivamente;
 status_t validate_arguments(int argc, char * argv[], char * src, char * dest)
@@ -38,6 +32,8 @@ status_t validate_arguments(int argc, char * argv[], char * src, char * dest)
 
 //            Marca el archivo de entrada como encontrado;
             inputFile = OK;
+
+//        Procede de la misma forma pero para OUTPUT_ARGUMENT ('-out');
         } else if(!strcmp(argv[i], OUTPUT_ARGUMENT)) {
             printf(OUTPUT_ARGUMENT_FOUND_MSG);
             if(!strcmp(argv[i + 1], INPUT_ARGUMENT))
@@ -49,7 +45,8 @@ status_t validate_arguments(int argc, char * argv[], char * src, char * dest)
         }
     }
 
-//    Return error if it could get input or output file names;
+//    Si uno o ambos de los argumentos no se encontro entonces imprime un codigo 
+//    de error;
     if((inputFile && outputFile) != OK)
         return IO_FILE_NOT_FOUND;
 
diff --git a/arguments.h b/arguments.h
@@ -1,10 +1,13 @@
-#include "main.h"
-#include "macros.h"
-
 #ifndef ARGUMENTS_H
 #define ARGUMENTS_H
 
-void print_error(status_t error);
+#include "main.h"
+
+#define INPUT_ARGUMENT_FOUND_MSG     "Encontre un '-in'\n"
+#define OUTPUT_ARGUMENT_FOUND_MSG     "Encontre un '-out'\n"
+
+#define INPUT_FILE_NAME_MSG     "\t -> Archivo de entrada: "
+#define OUTPUT_FILE_NAME_MSG     "\t -> Archivo de salida: "
 
 status_t validate_arguments(int argc, char * argv[], char * src, char * dest);
 
diff --git a/data.c b/data.c
@@ -1,38 +0,0 @@
-#include "main.h"
-#include "macros.h"
-
-
-//    The switch below the order of the error must be in the same as "main.h" 
-//    status_t structure, in order to print the correct errors;
-void print_error(status_t error)
-{
-    switch (error) {
-        case IO_FILE_NOT_FOUND: 
-            fprintf(stderr, MSG_IO_FILE_NOT_FOUND"\n");
-            break;
-        case ERROR_INVOCATING_PROGRAM: 
-            fprintf(stderr, MSG_ERROR_INVOCATING_PROGRAM"\n");
-            break;
-        case ERROR_NULL_POINTER:
-            fprintf(stderr, MSG_ERROR_NULL_POINTER"\n");
-            break;
-        case ERROR_LOADING_COUNTRY_CODES:
-            fprintf(stderr, MSG_ERROR_LOADING_COUNTRY_CODES"\n");
-            break;
-        case ERROR_PRINTING: 
-            fprintf(stderr, MSG_ERROR_PRINTING"\n");
-            break;
-        case ERROR_READING_FILE:
-            fprintf(stderr, MSG_ERROR_READING_FILE"\n");
-            break;
-        case ERROR_ALLOCATING_TIME: 
-            fprintf(stderr, MSG_ERROR_ALLOCATING_TIME"\n");
-            break;
-        case ERROR_DATA_ON_FILE_MISSING: 
-            fprintf(stderr, MSG_ERROR_DATA_ON_FILE_MISSING"\n");
-            break;
-        default:
-            fprintf(stdin, MSG_OK"\n");
-    }
-}
-
diff --git a/data.h b/data.h
@@ -1,9 +0,0 @@
-#include <stdlib.h>
-#include "main.h"
-
-#ifndef DATA_H
-#define DATA_H
-
-void print_error(status_t error);
-
-#endif
diff --git a/load_country_codes.c b/load_country_codes.c
@@ -3,8 +3,6 @@
 // a dicho arreglo con los codigos cargados;
 
 
-#include "main.h"
-#include "macros.h"
 #include "load_country_codes.h"
 
 
@@ -38,11 +36,11 @@ status_t empty_country_codes(char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH]
 }
 
 
-// Abre el archivo "COUNTRY_CODES_FILE_NAME" y lee linea por linea hasta llegar
-// al final, mientras lee lo va guardando en un buffer que recorre caracter por
-// caracter en busqueda de el character separador de datos, en este caso ',', 
-// mientras recorre el buffer va separando los datos y los guarda en la variable
-// que corresponda;
+//    Abre el archivo "COUNTRY_CODES_FILE_NAME" y lee linea por linea hasta llegar
+//    al final, mientras lee lo va guardando en un buffer que recorre caracter por
+//    caracter en busqueda de el character separador de datos, en este caso ',', 
+//    mientras recorre el buffer va separando los datos y los guarda en la variable
+//    que corresponda;
 status_t load_country_codes(char country_codes[COUNTRIES_NUMBER][ARRAYS_LENGTH])
 {
     FILE *fp;
diff --git a/macros.h b/macros.h
@@ -10,6 +10,7 @@
 
 #define INITIAL_SIZE        1000
 
+/*
 #define MSG_ERROR_NULL_POINTER    "ERROR_NULL_POINTER\n"\
                                 "An unexpected error has occured during the execution\n"\
                                 "of the program"
@@ -43,5 +44,5 @@
                                         "el programa nuevamente"
 
 #define MSG_OK "\nEverything executed correctly.\n"
-
+*/
 #endif
diff --git a/main.c b/main.c
@@ -11,23 +11,21 @@
 //    Lee texto de un archivo con extension .csv cuyo nombre recibe 
 //    como argumento; el cual contiene solo numeros que representan 
 //    un pais, una fecha y una cantidad de infectados y lo guarda en
-//    un archivo de extension .csv que tambien recibe como argumento,
-//    si no recibe un archivo de salida crea uno con el nombre por
-//    defecto 'output.csv';
+//    un archivo de texto cuyo nombre tambien recibe como argumento.
 
 
 #include "main.h"
-#include "arguments.h"
 #include "macros.h"
+#include "arguments.h"
 #include "load_country_codes.h"
 #include "readlines.h"
+#include "perrors.h"
 
 
 int main(int argc, char * argv[])
 {
 
-//    Esta variable es para guardar los codigos de error en
-//    caso de que haya alguno;
+//    Esta variable es para guardar los codigos de error;
     status_t st;
 
 //    Las siguientes variables son para guardar los nombres de los archivos de 
diff --git a/main.h b/main.h
@@ -6,6 +6,8 @@
 #include <string.h>
 #include <time.h>
 
+#include "macros.h"
+
 #define COUNTRY_CODES_FILE_NAME "iso3166-1.csv"
 
 typedef enum {
diff --git a/perrors.c b/perrors.c
@@ -0,0 +1,37 @@
+#include "perrors.h"
+#include "main.h"
+
+//    The switch below the order of the error must be in the same as "main.h" 
+//    status_t structure, in order to print the correct errors;
+void print_error(status_t error)
+{
+    switch (error) {
+        case IO_FILE_NOT_FOUND: 
+            fprintf(stderr, MSG_IO_FILE_NOT_FOUND"\n");
+            break;
+        case ERROR_INVOCATING_PROGRAM: 
+            fprintf(stderr, MSG_ERROR_INVOCATING_PROGRAM"\n");
+            break;
+        case ERROR_NULL_POINTER:
+            fprintf(stderr, MSG_ERROR_NULL_POINTER"\n");
+            break;
+        case ERROR_LOADING_COUNTRY_CODES:
+            fprintf(stderr, MSG_ERROR_LOADING_COUNTRY_CODES"\n");
+            break;
+        case ERROR_PRINTING: 
+            fprintf(stderr, MSG_ERROR_PRINTING"\n");
+            break;
+        case ERROR_READING_FILE:
+            fprintf(stderr, MSG_ERROR_READING_FILE"\n");
+            break;
+        case ERROR_ALLOCATING_TIME: 
+            fprintf(stderr, MSG_ERROR_ALLOCATING_TIME"\n");
+            break;
+        case ERROR_DATA_ON_FILE_MISSING: 
+            fprintf(stderr, MSG_ERROR_DATA_ON_FILE_MISSING"\n");
+            break;
+        default:
+            fprintf(stdin, MSG_OK"\n");
+    }
+}
+
diff --git a/perrors.h b/perrors.h
@@ -0,0 +1,42 @@
+#ifndef DATA_H
+#define DATA_H
+
+#include "main.h"
+
+void print_error(status_t error);
+
+#define MSG_ERROR_NULL_POINTER    "ERROR_NULL_POINTER\n"\
+                                "An unexpected error has occured during the execution\n"\
+                                "of the program"
+
+#define MSG_ERROR_INVOCATING_PROGRAM    "\nERROR_INVOCATING_PROGRAM\n"\
+                                        "Usage:\t$ ./main -in <input file> -out <outputfile>\n"\
+                                        "\t$ ./main -out <output file -in <input file>\n"\
+                                        "Read documentation to know more"
+
+#define MSG_IO_FILE_NOT_FOUND     "\nIO_FILE_NOT_FOUND\n"\
+                                "Un de los archivos de entrada o salida no se ha especificado"\
+
+#define MSG_ERROR_LOADING_COUNTRY_CODES "\nERROR_LOADING_COUNTRY_CODES\n"\
+                                        "Ha ocurrido un error al cargar los codigos de los paises.\n"\
+                                        "compruebe que el archivo \""COUNTRY_CODES_FILE_NAME"\" se encuentre\n"\
+                                        "disponible en el directorio de el programa ejecutado y que\n"\
+                                        "el nombre coincida con el de \"COUNTRY_CODES_FILE_NAME\" dentro\n"\
+                                        "de el archivo main.h\n"
+
+#define MSG_ERROR_PRINTING
+
+#define MSG_ERROR_READING_FILE            "\nERROR_READING_FILE\n"\
+                                        "El archivo de entrada no pudo ser leido, compruebe que el nombre este\n"\
+                                        "escrito correctamente y la existencia de el mismo"
+
+#define MSG_ERROR_ALLOCATING_TIME        "\nstrftime(3): el formato especificado "
+
+#define MSG_ERROR_DATA_ON_FILE_MISSING    "\nERROR_DATA_ON_FILE_MISSING\n"\
+                                        "En alguna linea de el archivo de entrada falta un dato,\n"\
+                                        "compruebe que dicho archivo no esta corrupto y ejecute\n"\
+                                        "el programa nuevamente"
+
+#define MSG_OK "\nEverything executed correctly.\n"
+
+#endif
diff --git a/readlines.c b/readlines.c
@@ -1,15 +1,9 @@
 //    Lee el archivo de entrada y va separando los datos mientras va leyendo linea
 //    por linea, y los va imprimiendo en pantalla
 
-
 #include "readlines.h"
 
-#define COUNTRY_PROMPT "Pais"
-
-#define SIZE_OF_BUFF1    32
-#define SIZE_OF_BUFF2    32    
-
-const char date_print_format[] = "%d %b %Y";
+const char formato_de_la_fecha[] = "%d %b %Y";
 
 status_t readlines(char *src, char *dest)
 {
@@ -180,7 +174,7 @@ status_t time_translator(time_t unix_time, char *res, size_t size)
     if(res == NULL)
         return ERROR_NULL_POINTER;
 
-    const char *format = date_print_format;
+    const char *format = formato_de_la_fecha;
     struct tm *tmp = gmtime(&unix_time);
 
     if (strftime(res, size, format, tmp) == 0) {
diff --git a/readlines.h b/readlines.h
@@ -1,19 +1,25 @@
-#ifndef READLINES
-#define READLINES
+#ifndef READLINES_H
+#define READLINES_H
 
 #include "main.h"
 #include "load_country_codes.h"
 
+#define COUNTRY_PROMPT "Pais"
+
+#define SIZE_OF_BUFF1    32
+#define SIZE_OF_BUFF2    32    
+
 #define INITIAL_SIZE 1000
 #define TIME_MAX_DIGITS 1000
 
+extern const char formato_de_la_fecha[];
+
 typedef enum {
     PAIS,
     DATE,
     INFECTED
 } data_t;
 
-
 status_t readlines(char *src, char *dest);
 status_t fprintf_date(FILE *dest, size_t data);
 status_t fprintf_infected(FILE *dest, size_t data);