void rutina_ejecucion(){ char* linea=malloc(sizeof(char)*1024); char* nom_usuario; char* nom_host=malloc(sizeof(char)*257); nom_usuario = getenv("USER"); FILE* archivo=fopen("/proc/sys/kernel/hostname","r"); nom_host = fgets(nom_host,257,archivo); char* aux; aux=nom_host; while(*aux!='\n') aux++; *aux='\0'; while(1) { /* * Pide y lee un comando. */ printf("%c[%d;%dm%s@%s:%s > %c[%dm", 0x1B, BRIGHT,GREEN,nom_usuario,nom_host,getcwd(NULL,0),0x1B,0); printf("%c[%dm", 0x1B,0); linea=leer_linea_terminal(); char** args=obtener_arreglo_de_argumentos(linea); if (*linea == '\n'); else{ if(strcmp("cd",*args)==0) cambiar_directorio(args); else{ char** copia_args=args; if((strcmp("exit",*copia_args++)==0)&&(*copia_args==NULL)) exit(0); else{ copia_args--; if((strcmp("-h",*copia_args)==0)||(strcmp("--help",*copia_args)==0)||(strcmp("help",*copia_args)==0)||(strcmp("-a",*copia_args)==0)||(strcmp("--ayuda",*copia_args)==0)||(strcmp("ayuda",*copia_args)==0)) imprimir_ayuda(); else{ if(contar_caracter_enArreglo_deCadenas('|',copia_args)==1) ejecutar_tuberias(obtener_comandos_ejecucionxtuberias(linea)); else ejecutar_estandar(args); } } } } } }
void procesar_opciones(int argc, char **argv, configuracion_t *config) { // Si se ejecuta sin parametros ni opciones if (argc == 1) { imprimir_ayuda (argv[0]); exit ( EXIT_SUCCESS ); } char *tipo_filtro; int cant_iteraciones = 1; int tiempo = 0; int siguiente_opcion; // opciones por defecto config->es_video = false; config->verbose = false; config->frames = false; config->nombre = false; config->archivo_entrada = NULL; config->carpeta_salida = "."; config->extra_archivo_salida = ""; // esto lo agregue yo config->tiempo = false; config->cant_iteraciones = 1; // extraemos opciones de la linea de comandos const char* const op_cortas = "hi:vt:fo:wn"; const struct option op_largas[] = { { "help", 0, NULL, 'h' }, { "implementacion", 1, NULL, 'i' }, { "verbose", 0, NULL, 'v' }, { "video", 0, NULL, 'w' }, { "tiempo", 1, NULL, 't' }, { "frames", 0, NULL, 'f' }, { "nombre", 0, NULL, 'n' }, { "output", 1, NULL, 'o' }, { NULL, 0, NULL, 0 } }; // no se para que el while while (1) { siguiente_opcion = getopt_long ( argc, argv, op_cortas, op_largas, NULL); // No hay mas opciones if ( siguiente_opcion == -1 ) break; // Procesar opcion switch ( siguiente_opcion ) { case 'h' : /* -h o --help */ imprimir_ayuda (argv[0]); exit ( EXIT_SUCCESS ); break; case 'i' : /* -i o --implementacion */ tipo_filtro = optarg; break; case 't' : /* -t o --tiempo */ tiempo = 1; cant_iteraciones = atoi ( optarg ); break; case 'v' : /* -v o --verbose */ config->verbose = true; break; case 'f' : /* -f o --frames */ config->frames = true; break; case 'n' : /* -n o --nombre */ config->nombre = true; break; case 'o' : /* -o o --output */ config->carpeta_salida = optarg; break; case 'w' : /* -w o --video */ config->es_video = true; break; case '?' : /* opcion no valida */ imprimir_ayuda (argv[0]); exit ( EXIT_SUCCESS ); default : /* opcion no valida */ abort ( ); } } // Verifico nombre del proceso config->nombre_filtro = argv[optind++]; if (config->nombre_filtro == NULL) { imprimir_ayuda (argv[0]); exit ( EXIT_SUCCESS ); } // Verifico nombre de la implementacion if (tipo_filtro == NULL || (strcmp(tipo_filtro, "c") != 0 && strcmp(tipo_filtro, "asm") != 0)) { imprimir_ayuda (argv[0]); exit ( EXIT_SUCCESS ); } if (strcmp(tipo_filtro, "c") == 0) { config->tipo_filtro = FILTRO_C; } else { config->tipo_filtro = FILTRO_ASM; } // Verifico nombre de archivo config->archivo_entrada = argv[optind++]; if (config->archivo_entrada == NULL) { imprimir_ayuda (argv[0]); exit ( EXIT_SUCCESS ); } if (access( config->archivo_entrada, F_OK ) == -1) { printf("Error al intentar abrir el archivo: %s.\n", config->archivo_entrada); exit ( EXIT_SUCCESS ); } // Verifico carpeta de frames if ( config->frames ) { struct stat s; int err = stat(config->carpeta_salida, &s); if (err == -1 || !S_ISDIR(s.st_mode)) { fprintf(stderr, "Carpeta de Frames invalida: %s.\n", config->carpeta_salida); exit (EXIT_FAILURE) ; } } // esto lo agregue yo if (tiempo) { config->tiempo = true; config->cant_iteraciones = cant_iteraciones; } }
int main( int argc, char** argv ) { int siguiente_opcion; // Opciones const char* const op_cortas = "hi:vt:f:"; const struct option op_largas[] = { { "help", 0, NULL, 'h' }, { "implementacion", 1, NULL, 'i' }, { "verbose", 0, NULL, 'v' }, { "tiempo", 1, NULL, 't' }, { "frames", 1, NULL, 'f' }, { NULL, 0, NULL, 0 } }; // Parametros const char *nombre_implementacion = NULL; int cant_iteraciones = 1; // Flags de opciones bool verbose = false; int tiempo = 0; bool frames = false; const char *carpeta_frames = NULL; // Guardar nombre del programa para usarlo en la ayuda nombre_programa = argv[0]; // Si se ejecuta sin parametros ni opciones if (argc == 1) { imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); } // Procesar opciones while (1) { siguiente_opcion = getopt_long ( argc, argv, op_cortas, op_largas, NULL); // No hay mas opciones if ( siguiente_opcion == -1 ) break; // Procesar opcion switch ( siguiente_opcion ) { case 'h' : /* -h o --help */ imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); break; case 'i' : /* -i o --implementacion */ nombre_implementacion = optarg; break; case 't' : /* -t o --tiempo */ tiempo = 1; cant_iteraciones = atoi ( optarg ); break; case 'v' : /* -v o --verbose */ verbose = true; break; case 'f' : /* -f o --frames */ frames = 1; carpeta_frames = optarg; break; case '?' : /* opcion no valida */ imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); default : /* opcion no valida */ abort ( ); } } // Verifico nombre del proceso char *nomb_proceso = argv[optind++]; if (nomb_proceso == NULL || (strcmp(nomb_proceso, "miniature") != 0 && strcmp(nomb_proceso, "decode") != 0 && strcmp(nomb_proceso, "fcolor") != 0 && strcmp(nomb_proceso, "original") != 0)) { imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); } // Verifico nombre de la implementacion if (nombre_implementacion == NULL || (strcmp(nombre_implementacion, "c") != 0 && strcmp(nombre_implementacion, "asm") != 0)) { imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); } // Verifico nombre de archivo const char *nomb_arch_entrada = argv[optind++]; if (nomb_arch_entrada == NULL) { imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); } if (access( nomb_arch_entrada, F_OK ) == -1) { printf("Error al intentar abrir el archivo: %s.\n", nomb_arch_entrada); exit ( EXIT_SUCCESS ); } // Verifico carpeta de frames if ( frames ) { struct stat s; int err = stat(carpeta_frames, &s); if (err == -1 || !S_ISDIR(s.st_mode)) { fprintf(stderr, "Carpeta de Frames invalida: %s.\n", carpeta_frames); exit (EXIT_FAILURE) ; } } // Imprimo info printf ( "Procesando...\n"); printf ( " Filtro : %s\n", nomb_proceso); printf ( " Implementación : %s\n", nombre_implementacion); printf ( " Archivo de entrada : %s\n", nomb_arch_entrada); // Procesar imagen // FILE* f = fopen("Tiempos totales.txt","a"); int t = 0; global = cant_iteraciones; while(t<cant_iteraciones){ if (strcmp(nomb_proceso, "fcolor") == 0) { int threshold, gc, rc, bc; threshold = atoi(argv[argc - 1]); bc = atoi(argv[argc - 2]); gc = atoi(argv[argc - 3]); rc = atoi(argv[argc - 4]); aplicar_filtro_color(nombre_implementacion, nomb_arch_entrada, verbose, frames, carpeta_frames, rc, gc, bc, threshold); } else if (strcmp(nomb_proceso, "decode") == 0) { aplicar_decode(nombre_implementacion, nomb_arch_entrada, verbose); } else if (strcmp(nomb_proceso, "miniature") == 0) { int iters; float bottomPlane, topPlane; iters = atoi(argv[argc - 1]); bottomPlane = strtof(argv[argc - 2], NULL); topPlane = strtof(argv[argc - 3], NULL); int start = 0; int stop = 0; long long int tiempo = 0; MEDIR_TIEMPO_START(start); aplicar_miniature(nombre_implementacion, nomb_arch_entrada, verbose, frames, carpeta_frames, topPlane, bottomPlane, iters); MEDIR_TIEMPO_STOP(stop); tiempo = start - stop; //fprintf(f,"%d %lld \n", t, tiempo); } else if (strcmp(nomb_proceso, "original") == 0) { aplicar_original(nomb_arch_entrada, verbose, frames, carpeta_frames); } t++; } FILE* h = fopen(PROMEDIO, "a"); fprintf(h,"%ld \n", promedio); fclose(h); return 0; }
int main(int argc, char** argv){ float* h=NULL; float* x=NULL; int hsize; int xsize; t_entrada entradah; t_entrada entradax; init(&entradah); init(&entradax); int ileido,fleido; int error=0; int i; ileido=0; fleido=0; int pulso=0; int archivo=0; int errors=0; int opcion; const char* const short_options = "hVr:p:"; const struct option long_options[] = { { "help", 0, NULL, 'h' }, { "version", 0, NULL, 'V' }, { "response", 1, NULL, 'r' }, { "pulse", 1, NULL, 'p' }, { NULL, 0, NULL, 0 } }; int lista_archivos=0; int res; int opt=0; if(argc==1) fprintf(stderr,"Error: Falta especificar una opción."); else { do { opcion = getopt_long (argc, argv, short_options, long_options, NULL); switch (opcion) { case 'h': /* -h o --help */ imprimir_ayuda (stdout, 0); opt=1; break; case 'r': /* -r o --response */ if((!pulso)&&(!archivo)){ lista_archivos=1; res=leer_archivo(optarg,&entradah); if(res==3) fprintf(stderr,"ERROR: No se pudo abrir el archivo %s.\n",optarg); if(res==1) fprintf(stderr,"ERROR: No hay memoria suficiente para continuar.\n"); opt=1; archivo=1; } else{ errors=1; }; break; case 'p': /* -p o --pulse */ if((!pulso)&&(!archivo)){ res=generar_pulso(optarg,&h,&hsize); if(res==1) fprintf(stderr,"ERROR: No hay memoria suficiente para continuar.\n"); if(res==2) fprintf(stderr,"ERROR: la sintaxis del pulso ingresado es incorrecta.\n"); opt=1; ileido=1; fleido=1; pulso=1; } else{ errors=1; } break; case 'V': /* -V o --version */ imprimir_version (stdout, 0); opt=1; break; case '?': /*error*/ fprintf(stderr,"ERROR: La opción no existe.\n"); imprimir_ayuda (stderr, 1); opt=1; case -1: break; case ':': fprintf(stderr,"ERROR: Faltan argumentos.\n"); imprimir_ayuda (stderr, 1); break; default: break; } } while((opcion != -1)); if((!opt)&&(argc>1)) fprintf(stderr,"ERROR: Falta especificar una opción."); if(lista_archivos) { for (i = optind; i < argc; ++i) { res=leer_archivo(argv[i],&entradah); if(res==3) fprintf(stderr,"ERROR: No se pudo abrir el archivo %s.\n",optarg); if(res==1) fprintf(stderr,"ERROR: No hay memoria suficiente para continuar.\n"); } } } if(errors){ fprintf(stderr,"ERROR: las opciones ingresadas son incorrectas.\n"); destroy(&entradah); destroy(&entradax); return 1; }; entradah.data[entradah.index]='\0'; res=check_sintax(&entradah); if(res==0) error=armar_vector(entradah.data,&h,&hsize); else if(!pulso)fprintf(stderr,"ERROR: la sintaxis de h es incorrecta.\n"); if(!pulso){ if(error==1) fprintf(stderr,"ERROR: no hay memoria suficiente para continuar.\n "); if(error==2) fprintf(stderr,"ERROR: hay caracteres inválidos en el vector h.\n "); } destroy(&entradah); if(h==NULL){ /* no hay h , no se puede hacer nada*/ return 1; } if(!pulso) if((error)||(res!=0)) return 1; /* leo x desde stdin */; ileido=0; fleido=0; error=leerEntrada(stdin,&entradax); entradax.data[entradax.index]='\0'; res=check_sintax(&entradax); if(res==0) error=armar_vector(entradax.data,&x,&xsize); else fprintf(stderr,"ERROR: la sintaxis de x es incorrecta.\n"); destroy(&entradax); if(error==1) fprintf(stderr,"ERROR: no hay memoria suficiente para continuar.\n "); if(error==2) fprintf(stderr,"ERROR: hay caracteres inválidos en el vector x.\n "); if(x==NULL){ /*no tengo x, no puedo ahcer nada*/ if(h!=NULL){ /*libero h*/ free(h); return 1; } } if((error)||(res!=0)) return 1; /* tengo h y x*/ if((!errors)&&(!error)){ /*no hay error de sintaxis: -r y -p*/ i=0; /* si x tiene menos elementos que h, repito x*/ if(xsize<hsize){ while(xsize<hsize){ push_back(&x,&xsize,x[i]); i++; }; } /* reservo espacio para y, xsize + hsize -1 */ y=(float*)malloc((xsize+hsize-1)*sizeof(float)); if(y!=NULL){ /* LLAMAR A CONVOLUCIÓN*/ conv(x,xsize,h,hsize); }; /*imprimo y*/ printf("%s","[ "); for(i=0;i<xsize+hsize-1;i++){ printf("%.2f ",y[i]); } printf("%s","]\n"); /* LIBERO Y*/ if(y!=NULL) free(y); } /* printf("\n\n X es:"); i=0; while(i<xsize){ printf(" %f \n",x[i]); i++; } i=0; printf("\n\n h es:"); while(i<hsize){ printf(" %f \n",h[i]); i++; } */ /*LIBERO H y X*/ if(h!=NULL) free(h); if(x!=NULL) free(x); return 0; }
void aplicar_waves (int tiempo, int cant_iteraciones, const char *nomb_impl, const char *nomb_arch_entrada, float x_scale, float y_scale, float g_scale) { IplImage *src = 0; IplImage *dst = 0; CvSize dst_size; // Cargo la imagen if( (src = cvLoadImage (nomb_arch_entrada, CV_LOAD_IMAGE_GRAYSCALE)) == 0 ) exit(EXIT_FAILURE); dst_size.width = src->width; dst_size.height = src->height; // Creo una IplImage para cada salida esperada if( (dst = cvCreateImage (dst_size, IPL_DEPTH_8U, 1) ) == 0 ) exit(EXIT_FAILURE); // Chequeo de parametros if (!(x_scale <= 32.0 && x_scale >= 0.0 && y_scale <= 32.0 && y_scale >= 0.0 && g_scale <= 255.0 && g_scale >= 0.0)) { imprimir_ayuda(); cvReleaseImage(&src); cvReleaseImage(&dst); exit ( EXIT_SUCCESS ); } typedef void (waves_fn_t) (unsigned char*, unsigned char*, int, int, int, float, float, float); waves_fn_t *proceso; if (strcmp(nomb_impl, "c") == 0) { proceso = waves_c; } else { proceso = waves_asm; } if (tiempo) { unsigned long long int start, end; MEDIR_TIEMPO_START(start); for(int i=0; i<cant_iteraciones; i++) { proceso((unsigned char*)src->imageData, (unsigned char*)dst->imageData, src->height, src->width, src->widthStep, x_scale, y_scale, g_scale); } MEDIR_TIEMPO_STOP(end); imprimir_tiempos_ejecucion(start, end, cant_iteraciones); } else { proceso((unsigned char*)src->imageData, (unsigned char*)dst->imageData, src->height, src->width, src->widthStep, x_scale, y_scale, g_scale); } // Guardo imagen y libero las imagenes char nomb_arch_salida[256]; memset(nomb_arch_salida, 0, 256); sprintf(nomb_arch_salida, "%s.waves.x_scale-%3.2f.y_scale-%3.2f.g_scale-%3.2f.%s.bmp", nomb_arch_entrada, x_scale, y_scale, g_scale, nomb_impl); cvSaveImage(nomb_arch_salida, dst, NULL); cvReleaseImage(&src); cvReleaseImage(&dst); }
void aplicar_umbralizar (int tiempo, int cant_iteraciones, const char *nomb_impl, const char *nomb_arch_entrada, unsigned char min, unsigned char max, unsigned char q) { IplImage *src = 0; IplImage *dst = 0; CvSize dst_size; // Cargo la imagen if( (src = cvLoadImage (nomb_arch_entrada, CV_LOAD_IMAGE_GRAYSCALE)) == 0 ) exit(EXIT_FAILURE); dst_size.width = src->width; dst_size.height = src->height; // Creo una IplImage para cada salida esperada if( (dst = cvCreateImage (dst_size, IPL_DEPTH_8U, 1) ) == 0 ) exit(EXIT_FAILURE); // Chequeo de parametros if (!(min <= max && min >= 0 && max <= 255 && q >= 0 && q <= 255)) { imprimir_ayuda(); cvReleaseImage(&src); cvReleaseImage(&dst); exit ( EXIT_SUCCESS ); } typedef void (umbralizar_fn_t) (unsigned char*, unsigned char*, int, int, int, unsigned char, unsigned char, unsigned char); umbralizar_fn_t *proceso; if (strcmp(nomb_impl, "c") == 0) { proceso = umbralizar_c; } else { proceso = umbralizar_asm; } if (tiempo) { unsigned long long int start, end; MEDIR_TIEMPO_START(start); for(int i=0; i<cant_iteraciones; i++) { proceso((unsigned char*)src->imageData, (unsigned char*)dst->imageData, src->height, src->width, src->widthStep, min, max, q); } MEDIR_TIEMPO_STOP(end); imprimir_tiempos_ejecucion(start, end, cant_iteraciones); } else { proceso((unsigned char*)src->imageData, (unsigned char*)dst->imageData, src->height, src->width, src->widthStep, min, max, q); } // Guardo imagen y libero las imagenes char nomb_arch_salida[256]; memset(nomb_arch_salida, 0, 256); sprintf(nomb_arch_salida, "%s.umbralizar.min-%d.max-%d.q-%d.%s.bmp", nomb_arch_entrada, min, max, q, nomb_impl); cvSaveImage(nomb_arch_salida, dst, NULL); cvReleaseImage(&src); cvReleaseImage(&dst); }
int main( int argc, char** argv ) { int siguiente_opcion; // Opciones const char* const op_cortas = "hi:vt:"; const struct option op_largas[] = { { "help", 0, NULL, 'h' }, { "implementacion", 1, NULL, 'i' }, { "verbose", 0, NULL, 'v' }, { "tiempo", 1, NULL, 't' }, { NULL, 0, NULL, 0 } }; // Parametros const char* nombre_implementacion = NULL; int cant_iteraciones = 0; // Flags de opciones int verbose = 0; int tiempo = 0; // Guardar nombre del programa para usarlo en la ayuda nombre_programa = argv[0]; // Si se ejecuta sin parametros ni opciones if (argc == 1) { imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); } // Procesar opciones while (1) { siguiente_opcion = getopt_long ( argc, argv, op_cortas, op_largas, NULL); // No hay mas opciones if ( siguiente_opcion == -1 ) break; // Procesar opcion switch ( siguiente_opcion ) { case 'h' : /* -h o --help */ imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); break; case 'i' : /* -i o --implementacion */ nombre_implementacion = optarg; break; case 't' : /* -t o --tiempo */ tiempo = 1; cant_iteraciones = atoi ( optarg ); break; case 'v' : /* -v o --verbose */ verbose = 1; break; case '?' : /* opcion no valida */ imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); default : /* opcion no valida */ abort ( ); } } // Verifico nombre del proceso char *nomb_proceso = argv[optind++]; if (nomb_proceso == NULL || (strcmp(nomb_proceso, "recortar") != 0 && strcmp(nomb_proceso, "colorizar") != 0 && strcmp(nomb_proceso, "halftone") != 0 && strcmp(nomb_proceso, "rotar") != 0 && strcmp(nomb_proceso, "umbralizar") != 0 && strcmp(nomb_proceso, "waves") != 0)) { imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); } // Verifico nombre de la implementacion if (nombre_implementacion == NULL || (strcmp(nombre_implementacion, "c") != 0 && strcmp(nombre_implementacion, "asm") != 0)) { imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); } // Verifico nombre de archivo const char *nomb_arch_entrada = argv[optind++]; if (nomb_arch_entrada == NULL) { imprimir_ayuda ( ); exit ( EXIT_SUCCESS ); } if (access( nomb_arch_entrada, F_OK ) == -1) { printf("Error al intentar abrir el archivo: %s.\n", nomb_arch_entrada); exit ( EXIT_SUCCESS ); } // Imprimo info if ( verbose ) { printf ( "Procesando imagen...\n"); printf ( " Filtro : %s\n", nomb_proceso); printf ( " Implementación : %s\n", nombre_implementacion); printf ( " Archivo de entrada : %s\n", nomb_arch_entrada); } // Procesar imagen if (strcmp(nomb_proceso, "recortar") == 0) { int tam = atoi(argv[optind++]); aplicar_recortar(tiempo, cant_iteraciones, nombre_implementacion, nomb_arch_entrada, tam); } else if (strcmp(nomb_proceso, "colorizar") == 0) { float alpha = (float) atof(argv[optind++]); aplicar_colorizar(tiempo, cant_iteraciones, nombre_implementacion, nomb_arch_entrada, alpha); } else if (strcmp(nomb_proceso, "halftone") == 0) { aplicar_halftone(tiempo, cant_iteraciones, nombre_implementacion, nomb_arch_entrada); } else if (strcmp(nomb_proceso, "rotar") == 0) { aplicar_rotar(tiempo, cant_iteraciones, nombre_implementacion, nomb_arch_entrada); } else if (strcmp(nomb_proceso, "umbralizar") == 0) { int min = atoi(argv[optind++]); int max = atoi(argv[optind++]); int q = atoi(argv[optind++]); aplicar_umbralizar(tiempo, cant_iteraciones, nombre_implementacion, nomb_arch_entrada, min, max, q); } else if (strcmp(nomb_proceso, "waves") == 0) { float x_scale = (float) atof(argv[optind++]); float y_scale = (float) atof(argv[optind++]); float g_scale = (float) atof(argv[optind++]); aplicar_waves(tiempo, cant_iteraciones, nombre_implementacion, nomb_arch_entrada, x_scale, y_scale, g_scale); } return 0; }