1 #include "arguments.h" 2 3 // Valida que los argumentos esten correctos y guarda los nombres de los 4 // archivos de entrada y salida en src y dest respectivamente; 5 status_t validate_arguments(int argc, char * argv[], char * src, char * dest) 6 { 7 if(argc < EXPECTED_CMD_ARGUMENTS || argc > EXPECTED_CMD_ARGUMENTS) 8 return ERROR_INVOCATING_PROGRAM; 9 else if(argv == NULL) 10 return ERROR_NULL_POINTER; 11 12 if((strcmp(argv[1], INPUT_ARGUMENT)) && (strcmp(argv[3], OUTPUT_ARGUMENT))) 13 if((strcmp(argv[1], OUTPUT_ARGUMENT)) && (strcmp(argv[3], INPUT_ARGUMENT))) 14 return ERROR_INVOCATING_PROGRAM; 15 16 status_t inputFile, outputFile; 17 inputFile = outputFile = IO_FILE_NOT_FOUND; 18 19 size_t i; 20 for(i = 1; i < argc; i++) { 21 // Comprueba que el primer argumento sea INPUT_ARGUMENT ('-in'); 22 if(!strcmp(argv[i], INPUT_ARGUMENT)) { 23 24 // Si el argumento que sigue es OUTPUT_ARGUMENT entonces hay un error 25 // en la invocacion de el programa, y si el que le sigue a ese no es 26 // OUTPUT_ARGUMENT estamos ante un problema de orden de argumentos; 27 if(!strcmp(argv[i + 1], OUTPUT_ARGUMENT)) 28 return ERROR_INVOCATING_PROGRAM; 29 30 // Si el primer argumento esta bien y el siguiente es una cadena entonces 31 // guarda en src la cadena e imprime dicha cadena; 32 strcpy(src, argv[++i]); 33 34 printf(INPUT_ARGUMENT_FOUND_MSG); 35 printf(INPUT_FILE_NAME_MSG"'%s'\n", src); 36 37 // Marca el archivo de entrada como encontrado; 38 inputFile = OK; 39 40 // Procede de la misma forma pero para OUTPUT_ARGUMENT ('-out'); 41 } else if(!strcmp(argv[i], OUTPUT_ARGUMENT)) { 42 43 if(!strcmp(argv[i + 1], INPUT_ARGUMENT)) 44 return ERROR_INVOCATING_PROGRAM; 45 46 strcpy(dest, argv[++i]); 47 48 printf(OUTPUT_ARGUMENT_FOUND_MSG); 49 printf(OUTPUT_FILE_NAME_MSG"'%s'\n", dest); 50 51 outputFile = OK; 52 } 53 } 54 55 // Si uno o ambos de los argumentos no se encontro entonces imprime un codigo 56 // de error; 57 if((inputFile && outputFile) != OK) 58 return ERROR_INVOCATING_PROGRAM; 59 60 return OK; 61 } 62 63