version 1.1, 2006/01/19 17:16:29
|
version 1.2, 2006/02/15 13:00:30
|
Line 30
|
Line 30
|
/* */ |
/* */ |
/********************************************************************/ |
/********************************************************************/ |
|
|
|
|
/******************************************************************************/ |
/******************************************************************************/ |
/* MÓDULO: Main.c */ |
/* MÓDULO: Main.c */ |
/* */ |
/* */ |
Line 82 int **pizarra_lecturas = NULL;
|
Line 81 int **pizarra_lecturas = NULL;
|
unsigned char *vector = NULL; |
unsigned char *vector = NULL; |
|
|
struct punterosD matriz; |
struct punterosD matriz; |
unsigned char **matrizC = NULL; /* matriz de caminos de dependencias */ |
unsigned char **matrizC = NULL; /* matriz de caminos de dependencias */ |
char **OrdenParcial = NULL; /* lista de instrucciones según orden parcial de D */ |
char **OrdenParcial = NULL; /* lista de instrucciones según orden parcial de D */ |
|
|
/* parámetros asociados a las matrices */ |
/* parámetros asociados a las matrices */ |
parametromatriz *pasos = NULL; |
parametromatriz *pasos = NULL; |
Line 98 parametromatriz *mediaacoplo = NULL;
|
Line 97 parametromatriz *mediaacoplo = NULL;
|
|
|
void ProcesarInstruccion(unsigned int ins, unsigned char secuencia[12], fichainstruccion *tarjetaoperandos) |
void ProcesarInstruccion(unsigned int ins, unsigned char secuencia[12], fichainstruccion *tarjetaoperandos) |
{ |
{ |
AnalizarOperandosIA16(secuencia, tarjetaoperandos); |
AnalizarOperandosIA16(secuencia, tarjetaoperandos); |
|
|
if(configuracion.recuentos == SI) ActualizarRecuentos(tarjetaoperandos); |
if(configuracion.recuentos == SI) ActualizarRecuentos(tarjetaoperandos); |
|
|
if(configuracion.cpi == SI) CalcularCiclosInstruccion(tarjetaoperandos); |
if(configuracion.cpi == SI) CalcularCiclosInstruccion(tarjetaoperandos); |
|
|
if(configuracion.CPImedio == SI) ActualizarCPImedio(tarjetaoperandos->ciclosALU, tarjetaoperandos->ciclosBIU); |
if(configuracion.CPImedio == SI) ActualizarCPImedio(tarjetaoperandos->ciclosALU, tarjetaoperandos->ciclosBIU); |
|
|
if(configuracion.dependencias == SI) |
if(configuracion.dependencias == SI) |
{ |
{ |
AnalizarDependencias(tarjetaoperandos, ins); |
AnalizarDependencias(tarjetaoperandos, ins); |
|
|
AnotarEscrituras(tarjetaoperandos, ins); |
AnotarEscrituras(tarjetaoperandos, ins); |
AnotarLecturas(tarjetaoperandos, ins); |
AnotarLecturas(tarjetaoperandos, ins); |
|
|
/* si tengo que calcular el tiempo de ejecución */ |
/* si tengo que calcular el tiempo de ejecución */ |
/* debo construir un array con el tipo de instrucción */ |
/* debo construir un array con el tipo de instrucción */ |
/* y su latencia en ciclos */ |
/* y su latencia en ciclos */ |
} |
} |
} |
} |
|
|
void IniciarVentana() |
void IniciarVentana() |
{ |
{ |
if(configuracion.dependencias == SI) |
if(configuracion.dependencias == SI) |
{ |
{ |
IniciarPizarras(); |
IniciarPizarras(); |
IniciarVectorDependencias(); |
IniciarVectorDependencias(); |
IniciarMatricesDependencias(); |
IniciarMatricesDependencias(); |
if(configuracion.ordenparcial == SI) IniciarListaOrdenParcial(); |
if(configuracion.ordenparcial == SI) IniciarListaOrdenParcial(); |
if(configuracion.matrizcaminos == SI) IniciarMatrizCaminos(); |
if(configuracion.matrizcaminos == SI) IniciarMatrizCaminos(); |
if(configuracion.pasoscomputacion == SI) IniciarVariableAgregada(pasos); |
if(configuracion.pasoscomputacion == SI) IniciarVariableAgregada(pasos); |
if(configuracion.gradoparalelismo == SI) IniciarVariableAgregada(grado);; |
if(configuracion.gradoparalelismo == SI) IniciarVariableAgregada(grado);; |
if(configuracion.acoplamiento == SI) IniciarVariableAgregada(acoplo); |
if(configuracion.acoplamiento == SI) IniciarVariableAgregada(acoplo); |
} |
} |
} |
} |
|
|
void ProcesarVentana() |
void ProcesarVentana() |
{ |
{ |
if(configuracion.dependencias == SI) |
if(configuracion.dependencias == SI) |
{ |
{ |
GenerarMatrizD(); /* a partir de las matrices desacopladas */ |
GenerarMatrizD(); /* a partir de las matrices desacopladas */ |
|
|
/* EXTRAIGO INFORMACIÓN DE LAS MATRICES */ |
/* EXTRAIGO INFORMACIÓN DE LAS MATRICES */ |
/* lista orden parcial (la función también puede devolver pasos) */ |
/* lista orden parcial (la función también puede devolver pasos) */ |
if(configuracion.ordenparcial == SI) ListaOrdenParcial(matriz.D, OrdenParcial); |
if(configuracion.ordenparcial == SI) ListaOrdenParcial(matriz.D, OrdenParcial); |
/* matriz de caminos (la función también puede devolver pasos) */ |
/* matriz de caminos (la función también puede devolver pasos) */ |
if(configuracion.matrizcaminos == SI) CalcularMatrizCaminos(matriz.D, matrizC); |
if(configuracion.matrizcaminos == SI) CalcularMatrizCaminos(matriz.D, matrizC); |
/* pasos de computación */ |
/* pasos de computación */ |
if(configuracion.pasoscomputacion == SI) |
if(configuracion.pasoscomputacion == SI) |
{ |
{ |
/* pasos de computación de todas las matrices de dependencias */ |
/* pasos de computación de todas las matrices de dependencias */ |
CalcularPasosComputacion(pasos); |
CalcularPasosComputacion(pasos); |
if(configuracion.distribucionpasos == SI) ActualizarHistogramaPasos(); |
if(configuracion.distribucionpasos == SI) ActualizarHistogramaPasos(); |
/* valor medio de pasos de computación */ |
/* valor medio de pasos de computación */ |
CalcularPromedioVariableAgregada(mediapasos, pasos, ventana); |
CalcularPromedioVariableAgregada(mediapasos, pasos, ventana); |
} |
} |
/* grado de paralelismo (a partir de los pasos de computación) */ |
/* grado de paralelismo (a partir de los pasos de computación) */ |
if(configuracion.gradoparalelismo == SI) |
if(configuracion.gradoparalelismo == SI) |
{ |
{ |
/* grado de paralelismo a partir de los pasos de computación */ |
/* grado de paralelismo a partir de los pasos de computación */ |
CalcularGradoParalelismoNormalizado(pasos, grado); |
CalcularGradoParalelismoNormalizado(pasos, grado); |
/* valor medio del grado de paralelismo */ |
/* valor medio del grado de paralelismo */ |
CalcularPromedioVariableAgregada(mediagrado, grado, ventana); |
CalcularPromedioVariableAgregada(mediagrado, grado, ventana); |
} |
} |
/* acoplamiento */ |
/* acoplamiento */ |
if(configuracion.acoplamiento == SI); |
if(configuracion.acoplamiento == SI); |
{ |
{ |
/* grado de paralelismo a partir de los pasos de computación */ |
/* grado de paralelismo a partir de los pasos de computación */ |
CalcularAcoplamiento(acoplo); |
CalcularAcoplamiento(acoplo); |
/* valor medio del grado de paralelismo */ |
/* valor medio del grado de paralelismo */ |
CalcularPromedioVariableAgregada(mediaacoplo, acoplo, ventana); |
CalcularPromedioVariableAgregada(mediaacoplo, acoplo, ventana); |
} |
} |
|
|
if(configuracion.tiempo == SI) tiempoejecucion = CalcularTiempo(); |
if(configuracion.tiempo == SI) tiempoejecucion = CalcularTiempo(); |
} |
} |
} |
} |
|
|
void ReservarMemoriaAnalisisDependencias() |
void ReservarMemoriaAnalisisDependencias() |
{ |
{ |
CrearPizarras(); |
CrearPizarras(); |
|
|
CrearVectorDependencias(); |
CrearVectorDependencias(); |
|
|
CrearMatricesDependencias(); |
CrearMatricesDependencias(); |
|
|
if(configuracion.ordenparcial == SI) CrearListaOrdenParcial(); |
if(configuracion.ordenparcial == SI) CrearListaOrdenParcial(); |
if(configuracion.matrizcaminos == SI) CrearMatrizCaminos(); |
if(configuracion.matrizcaminos == SI) CrearMatrizCaminos(); |
if(configuracion.pasoscomputacion == SI) |
if(configuracion.pasoscomputacion == SI) |
{ |
{ |
pasos = CrearVariableAgregada(); |
pasos = CrearVariableAgregada(); |
IniciarVariableAgregada(pasos); |
IniciarVariableAgregada(pasos); |
mediapasos = CrearVariableAgregada(); |
mediapasos = CrearVariableAgregada(); |
IniciarVariableAgregada(mediapasos); |
IniciarVariableAgregada(mediapasos); |
if(configuracion.distribucionpasos == SI) CrearHistogramaPasos(); |
if(configuracion.distribucionpasos == SI) CrearHistogramaPasos(); |
} |
} |
if(configuracion.gradoparalelismo == SI); |
if(configuracion.gradoparalelismo == SI); |
{ |
{ |
grado = CrearVariableAgregada(); |
grado = CrearVariableAgregada(); |
IniciarVariableAgregada(grado); |
IniciarVariableAgregada(grado); |
mediagrado = CrearVariableAgregada(); |
mediagrado = CrearVariableAgregada(); |
IniciarVariableAgregada(mediagrado); |
IniciarVariableAgregada(mediagrado); |
} |
} |
if(configuracion.acoplamiento == SI); |
if(configuracion.acoplamiento == SI); |
{ |
{ |
acoplo = CrearVariableAgregada(); |
acoplo = CrearVariableAgregada(); |
IniciarVariableAgregada(acoplo); |
IniciarVariableAgregada(acoplo); |
mediaacoplo = CrearVariableAgregada(); |
mediaacoplo = CrearVariableAgregada(); |
IniciarVariableAgregada(mediaacoplo); |
IniciarVariableAgregada(mediaacoplo); |
} |
} |
} |
} |
|
|
|
|
void LiberarMemoriaAnalisisDependencias() |
void LiberarMemoriaAnalisisDependencias() |
{ |
{ |
LiberarMemoriaPizarras(); |
LiberarMemoriaPizarras(); |
LiberarMemoriaVectorDependencias(); |
LiberarMemoriaVectorDependencias(); |
LiberarMemoriaMatricesDependencias(); |
LiberarMemoriaMatricesDependencias(); |
|
|
if(configuracion.ordenparcial == SI) LiberarMemoriaListaOrdenParcial(); |
if(configuracion.ordenparcial == SI) LiberarMemoriaListaOrdenParcial(); |
if(configuracion.matrizcaminos == SI) LiberarMemoriaMatrizCaminos(); |
if(configuracion.matrizcaminos == SI) LiberarMemoriaMatrizCaminos(); |
|
|
if(configuracion.pasoscomputacion == SI) {free(pasos); free(mediapasos);} |
if(configuracion.pasoscomputacion == SI) {free(pasos); free(mediapasos);} |
if(configuracion.gradoparalelismo == SI) {free(grado); free(mediagrado);}; |
if(configuracion.gradoparalelismo == SI) {free(grado); free(mediagrado);}; |
if(configuracion.acoplamiento == SI) {free(acoplo); free(mediaacoplo);}; |
if(configuracion.acoplamiento == SI) {free(acoplo); free(mediaacoplo);}; |
|
|
if(configuracion.distribucionpasos == SI) LiberarMemoriaHistogramaPasos(); |
if(configuracion.distribucionpasos == SI) LiberarMemoriaHistogramaPasos(); |
} |
} |
|
|
|
|
Line 233 void LiberarMemoriaAnalisisDependencias(
|
Line 232 void LiberarMemoriaAnalisisDependencias(
|
void main(int argc, char *argv[]) |
void main(int argc, char *argv[]) |
{ |
{ |
/* puntero al fichero origen de datos */ |
/* puntero al fichero origen de datos */ |
FILE *origendatos; |
FILE *origendatos; |
/* total instrucciones y ventanas a procesar */ |
/* total instrucciones y ventanas a procesar */ |
unsigned long total_ins, total_ven; |
unsigned long total_ins, total_ven; |
/* secuencia en bytes de 2 instrucciones consecutivas */ |
/* secuencia en bytes de 2 instrucciones consecutivas */ |
unsigned char secuencia[2*BYTES_POR_INSTRUCCION]; |
unsigned char secuencia[2*BYTES_POR_INSTRUCCION]; |
/* reservo espacio para una estructura de tipo ficha de instrucción */ |
/* reservo espacio para una estructura de tipo ficha de instrucción */ |
fichainstruccion tarjetaoperandos; |
fichainstruccion tarjetaoperandos; |
|
|
unsigned int i, ins; |
unsigned int i, ins; |
char cadena[MAX_LINE]; |
char cadena[MAX_LINE]; |
char mensaje[MAX_LINE]; |
char mensaje[MAX_LINE]; |
unsigned char salvarventana = NO; |
unsigned char salvarventana = NO; |
char listadoventanas[MAX_LINE]; |
char listadoventanas[MAX_LINE]; |
|
|
|
/* inicio los punteros de las matrices de dependencias a NULL */ |
/* inicio los punteros de las matrices de dependencias a NULL */ |
/* es una medida higiénica pero no necesaria ya que la reserva de memoria */ |
/* es una medida higiénica pero no necesaria ya que la reserva de memoria */ |
/* correspondiente a la declaración se hace rellenando con 0s */ |
/* correspondiente a la declaración se hace rellenando con 0s */ |
|
|
/* ver si es posible con {NULL, NULL...} */ |
/* ver si es posible con {NULL, NULL...} */ |
IniciarPunterosMatrices(); |
IniciarPunterosMatrices(); |
|
|
/* NOTIFICACIONES DE SUCESOS Y ERRORES */ |
/* NOTIFICACIONES DE SUCESOS Y ERRORES */ |
/* inicio el fichero que va a recibir las notificaciones */ |
/* inicio el fichero que va a recibir las notificaciones */ |
IniciarNotificaciones(); |
IniciarNotificaciones(); |
|
|
/* CONFIGURACIÓN */ |
/* CONFIGURACIÓN */ |
/* cargo la configuración de la aplicación por defecto */ |
/* cargo la configuración de la aplicación por defecto */ |
CargarConfiguracionInicial(); |
CargarConfiguracionInicial(); |
/* modifico la configuración de la aplicación en función de los argumentos */ |
/* modifico la configuración de la aplicación en función de los argumentos */ |
CapturarArgumentos(argc, argv); |
CapturarArgumentos(argc, argv); |
|
|
/* escribo la configuración en el fichero de notificaciones */ |
/* escribo la configuración en el fichero de notificaciones */ |
if(configuracion.nivelnotificaciones != EX_CFG) NotificarConfiguracion(); |
if(configuracion.nivelnotificaciones != EX_CFG) NotificarConfiguracion(); |
|
|
/* BASES DE DATOS */ |
/* BASES DE DATOS */ |
CargarBasesDatos(); |
CargarBasesDatos(); |
|
|
/* CALCULOS A REALIZAR */ |
/* CALCULOS A REALIZAR */ |
if(configuracion.recuentos == SI) CrearContadores(); |
if(configuracion.recuentos == SI) CrearContadores(); |
if(configuracion.dependencias == SI) ReservarMemoriaAnalisisDependencias(); |
if(configuracion.dependencias == SI) ReservarMemoriaAnalisisDependencias(); |
|
|
/* FICHEROS A CREAR */ |
/* FICHEROS A CREAR */ |
if(configuracion.volcarBD == SI) SalvarBasesDatos(); |
if(configuracion.volcarBD == SI) SalvarBasesDatos(); |
if(configuracion.crearficheroconfig == SI) CrearFicheroConfiguracion(); |
if(configuracion.crearficheroconfig == SI) CrearFicheroConfiguracion(); |
|
|
/* CABECERA EN LA PANTALLA */ |
/* PROCESAMIENTO */ |
MostrarCabecera(); |
if(configuracion.origen == TRAZA) |
|
{ |
/* PROCESAMIENTO */ |
/* determino el rango de instrucciones a analizar */ |
if(configuracion.origen == TRAZA) |
DeterminarRango(); |
{ |
/* determino el número total de instrucciones */ |
/* determino el rango de instrucciones a analizar */ |
total_ins = (unsigned long)(configuracion.ultima - configuracion.primera + 1); |
DeterminarRango(); |
/* determino el número de ventanas de instrucciones */ |
/* determino el número total de instrucciones */ |
total_ven = (unsigned long)total_ins/configuracion.ventana; |
total_ins = (unsigned long)(configuracion.ultima - configuracion.primera + 1); |
/* inicio los contadores */ |
/* determino el número de ventanas de instrucciones */ |
instruccion = 1; /* cuento las instrucciones desde el '1' */ |
total_ven = (unsigned long)total_ins/configuracion.ventana; |
ventana = 0; |
/* inicio los contadores */ |
/* listado de ventanas a volcar */ |
instruccion = 1; /* cuento las instrucciones desde el '1' */ |
strcpy(listadoventanas, configuracion.volcarventana); |
ventana = 0; |
|
/* listado de ventanas a volcar */ |
/* abro el fichero de traza */ |
strcpy(listadoventanas, configuracion.volcarventana); |
if((origendatos = fopen(configuracion.ficherodatos, "rb")) != NULL) |
|
{ |
/* abro el fichero de traza */ |
sprintf(mensaje, "[Main] El fichero '%s' se ha abierto con éxito", configuracion.ficherodatos); |
if((origendatos = fopen(configuracion.ficherodatos, "rb")) != NULL) |
Notificar(mensaje, NO_ERROR, ECO_NO); |
{ |
|
sprintf(mensaje, "[Main] El fichero '%s' se ha abierto con éxito", configuracion.ficherodatos); |
/* sitúo el puntero del fichero en la instrucción de comienzo */ |
Notificar(mensaje, NO_ERROR, ECO_NO); |
fseek(origendatos, (configuracion.primera - 1) * BYTES_POR_INSTRUCCION, SEEK_SET); |
|
|
/* sitúo el puntero del fichero en la instrucción de comienzo */ |
/* leo el formato de la primera instrucción a tratar */ |
fseek(origendatos, (configuracion.primera - 1) * BYTES_POR_INSTRUCCION, SEEK_SET); |
/* y lo coloco en la parte alta de la secuencia (2ª instrucción) */ |
|
for(i=0; i<BYTES_POR_INSTRUCCION; i++) secuencia[i+BYTES_POR_INSTRUCCION] = fgetc(origendatos); |
/* leo el formato de la primera instrucción a tratar */ |
|
/* y lo coloco en la parte alta de la secuencia (2ª instrucción) */ |
while(total_ven-ventana) |
for(i=0; i<BYTES_POR_INSTRUCCION; i++) secuencia[i+BYTES_POR_INSTRUCCION] = fgetc(origendatos); |
{ |
|
ventana++; |
while(total_ven-ventana) |
IniciarVentana(); |
{ |
|
ventana++; |
/* ¿salvar información de la ventana en curso? */ |
|
if(listadoventanas[0] != '\0') /* si el listado no es vacío */ |
/* indicar estado de procesamiento */ |
{ |
PresentarEstadoProcesamiento(total_ven, ventana); |
sprintf(cadena, "%lu", ventana); |
|
if(BuscarElementoLista(listadoventanas, cadena) != 0) |
IniciarVentana(); |
{ |
|
salvarventana = SI; |
/* ¿salvar información de la ventana en curso? */ |
EliminarElementoLista(listadoventanas, cadena); |
if(listadoventanas[0] != '\0') /* si el listado no es vacío */ |
/* construyo una planilla con resultados de la ventana en curso */ |
{ |
IniciarFicheroVentana(); |
sprintf(cadena, "%lu", ventana); |
} |
if(BuscarElementoLista(listadoventanas, cadena) != 0) |
else salvarventana = NO; |
{ |
} |
salvarventana = SI; |
|
EliminarElementoLista(listadoventanas, cadena); |
for(ins=0; ins<configuracion.ventana; ins++, instruccion++) |
/* construyo una planilla con resultados de la ventana en curso */ |
{ |
IniciarFicheroVentana(); |
/* paso el formato de la parte alta a la baja */ |
} |
for(i=0; i<BYTES_POR_INSTRUCCION; i++) secuencia[i] = secuencia[i+BYTES_POR_INSTRUCCION]; |
else salvarventana = NO; |
/* leo el formato de la instrucción siguiente desde la traza */ |
} |
for(i=0; i<BYTES_POR_INSTRUCCION; i++) secuencia[i+BYTES_POR_INSTRUCCION] = fgetc(origendatos); |
|
|
for(ins=0; ins<configuracion.ventana; ins++, instruccion++) |
ProcesarInstruccion(ins, secuencia, &tarjetaoperandos); |
{ |
|
/* paso el formato de la parte alta a la baja */ |
if(configuracion.verinstruccion == SI) MostrarTarjeta(&tarjetaoperandos); |
for(i=0; i<BYTES_POR_INSTRUCCION; i++) secuencia[i] = secuencia[i+BYTES_POR_INSTRUCCION]; |
|
/* leo el formato de la instrucción siguiente desde la traza */ |
if(salvarventana == SI) Instruccion2FicheroVentana(&tarjetaoperandos); |
for(i=0; i<BYTES_POR_INSTRUCCION; i++) secuencia[i+BYTES_POR_INSTRUCCION] = fgetc(origendatos); |
|
|
/* _getch(); */ |
ProcesarInstruccion(ins, secuencia, &tarjetaoperandos); |
} |
|
ProcesarVentana(); |
if(configuracion.verinstruccion == SI) MostrarTarjeta(&tarjetaoperandos); |
|
|
if(configuracion.verventana == SI) MostrarVentana(); |
if(salvarventana == SI) Instruccion2FicheroVentana(&tarjetaoperandos); |
|
|
/* salvo las matrices de la ventana en la planilla y sus parámetros */ |
/* _getch(); */ |
if(salvarventana == SI) Matrices2FicheroVentana(); |
} |
} |
ProcesarVentana(); |
|
|
/* cierro el fichero de traza */ |
if(configuracion.verventana == SI) MostrarVentana(); |
if(fclose(origendatos)) |
|
{ |
/* salvo las matrices de la ventana en la planilla y sus parámetros */ |
sprintf(mensaje, "[Main] El fichero '%s' no se ha podido cerrar", configuracion.ficherodatos); |
if(salvarventana == SI) Matrices2FicheroVentana(); |
Notificar(mensaje, ERROR_SEGUIR, ECO_NO); |
} |
} |
|
else |
/* cierro el fichero de traza */ |
{ |
if(fclose(origendatos)) |
sprintf(mensaje, "[Main] El fichero '%s' ha sido cerrado con éxito", configuracion.ficherodatos); |
{ |
Notificar(mensaje, NO_ERROR, ECO_NO); |
sprintf(mensaje, "[Main] El fichero '%s' no se ha podido cerrar", configuracion.ficherodatos); |
} |
Notificar(mensaje, ERROR_SEGUIR, ECO_NO); |
} |
} |
else |
else |
{ |
{ |
sprintf(mensaje, "[Main] El fichero '%s' no se ha podido abrir", configuracion.ficherodatos); |
sprintf(mensaje, "[Main] El fichero '%s' ha sido cerrado con éxito", configuracion.ficherodatos); |
Notificar(mensaje, ERROR_SALIR, ECO_NO); |
Notificar(mensaje, NO_ERROR, ECO_NO); |
} |
} |
} |
} |
|
else |
else if(configuracion.origen == SECUENCIA) |
{ |
{ |
sprintf(mensaje, "[Main] El fichero '%s' no se ha podido abrir", configuracion.ficherodatos); |
/* abro el fichero de la secuencia */ |
Notificar(mensaje, ERROR_SALIR, ECO_NO); |
if((origendatos = fopen(configuracion.ficherodatos, "r")) != NULL) |
} |
{ |
} |
sprintf(mensaje, "[Main] El fichero '%s' se ha abierto con éxito", configuracion.ficherodatos); |
|
Notificar(mensaje, NO_ERROR, ECO_NO); |
else if(configuracion.origen == SECUENCIA) |
|
{ |
/* cuento las instrucciones de la secuencia */ |
/* abro el fichero de la secuencia */ |
ins = 0; |
if((origendatos = fopen(configuracion.ficherodatos, "r")) != NULL) |
while(!feof(origendatos)) |
{ |
{ |
sprintf(mensaje, "[Main] El fichero '%s' se ha abierto con éxito", configuracion.ficherodatos); |
fgets (cadena, MAX_LINE, origendatos); |
Notificar(mensaje, NO_ERROR, ECO_NO); |
|
|
if (cadena[0]!='\n' && cadena[0]!='#') ins++; |
/* cuento las instrucciones de la secuencia */ |
} |
ins = 0; |
configuracion.primera = 1; |
while(!feof(origendatos)) |
configuracion.ultima = ins; |
{ |
|
fgets (cadena, MAX_LINE, origendatos); |
/* determino el número total de instrucciones */ |
|
total_ins = (unsigned long)(configuracion.ultima - configuracion.primera + 1); |
if (cadena[0]!='\n' && cadena[0]!='#') ins++; |
/* determino el número de ventanas de instrucciones */ |
} |
total_ven = (unsigned long)total_ins/configuracion.ventana; |
configuracion.primera = 1; |
/* inicio los contadores */ |
configuracion.ultima = ins; |
instruccion = 1; /* cuento las instrucciones desde el '1' */ |
|
ventana = 0; |
/* determino el número total de instrucciones */ |
/* listado de ventanas a volcar */ |
total_ins = (unsigned long)(configuracion.ultima - configuracion.primera + 1); |
strcpy(listadoventanas, configuracion.volcarventana); |
/* determino el número de ventanas de instrucciones */ |
|
total_ven = (unsigned long)total_ins/configuracion.ventana; |
|
/* inicio los contadores */ |
/* coloco el puntero del fichero al principio */ |
instruccion = 1; /* cuento las instrucciones desde el '1' */ |
fseek(origendatos, 0L, SEEK_SET); |
ventana = 0; |
|
/* listado de ventanas a volcar */ |
/* comienzo el análisis de la secuencia */ |
strcpy(listadoventanas, configuracion.volcarventana); |
while(total_ven-ventana) |
|
{ |
|
ventana++; |
/* coloco el puntero del fichero al principio */ |
IniciarVentana(); |
fseek(origendatos, 0L, SEEK_SET); |
|
|
/* ¿salvar información de la ventana en curso? */ |
/* comienzo el análisis de la secuencia */ |
if(listadoventanas[0] != '\0') /* si el listado no es vacío */ |
while(total_ven-ventana) |
{ |
{ |
sprintf(cadena, "%lu", ventana); |
ventana++; |
if(BuscarElementoLista(listadoventanas, cadena) != 0) |
|
{ |
/* indicar estado de procesamiento */ |
salvarventana = SI; |
PresentarEstadoProcesamiento(total_ven, ventana); |
EliminarElementoLista(listadoventanas, cadena); |
|
/* construyo una planilla con resultados de la ventana en curso */ |
IniciarVentana(); |
IniciarFicheroVentana(); |
|
} |
/* ¿salvar información de la ventana en curso? */ |
else salvarventana = NO; |
if(listadoventanas[0] != '\0') /* si el listado no es vacío */ |
} |
{ |
|
sprintf(cadena, "%lu", ventana); |
for(ins=0; ins<configuracion.ventana; ins++, instruccion++) |
if(BuscarElementoLista(listadoventanas, cadena) != 0) |
{ |
{ |
do |
salvarventana = SI; |
{ |
EliminarElementoLista(listadoventanas, cadena); |
fgets (cadena, MAX_LINE, origendatos); |
/* construyo una planilla con resultados de la ventana en curso */ |
} |
IniciarFicheroVentana(); |
while (cadena[0]=='\n' || cadena[0]=='#'); |
} |
|
else salvarventana = NO; |
/* quito el caracter '\n' (0x0A) final de la cadena correspondiente a una línea de texto */ |
} |
/* ¡OJO! si abro el fichero en modo binario el final de linea es "\r\n" (0x0D 0x0A) */ |
|
*(cadena+strlen(cadena)-1)='\0'; |
for(ins=0; ins<configuracion.ventana; ins++, instruccion++) |
|
{ |
ConvertirHex2Bin(cadena, secuencia, BYTES_POR_INSTRUCCION); |
do |
|
{ |
ProcesarInstruccion(ins, secuencia, &tarjetaoperandos); |
fgets (cadena, MAX_LINE, origendatos); |
|
} |
if(configuracion.verinstruccion == SI) MostrarTarjeta(&tarjetaoperandos); |
while (cadena[0]=='\n' || cadena[0]=='#'); |
|
|
/* salvo las instrucciones en la planilla de la ventana */ |
/* quito el caracter '\n' (0x0A) final de la cadena correspondiente a una línea de texto */ |
if(salvarventana == SI) Instruccion2FicheroVentana(&tarjetaoperandos); |
/* ¡OJO! si abro el fichero en modo binario el final de linea es "\r\n" (0x0D 0x0A) */ |
} |
*(cadena+strlen(cadena)-1)='\0'; |
|
|
ProcesarVentana(); |
ConvertirHex2Bin(cadena, secuencia, BYTES_POR_INSTRUCCION); |
|
|
if(configuracion.verventana == SI) MostrarVentana(); |
ProcesarInstruccion(ins, secuencia, &tarjetaoperandos); |
|
|
/* salvo las matrices de la ventana en la planilla y sus parámetros */ |
if(configuracion.verinstruccion == SI) MostrarTarjeta(&tarjetaoperandos); |
if(salvarventana == SI) Matrices2FicheroVentana(); |
|
} |
/* salvo las instrucciones en la planilla de la ventana */ |
|
if(salvarventana == SI) Instruccion2FicheroVentana(&tarjetaoperandos); |
/* cierro el fichero de la secuencia */ |
} |
if(fclose(origendatos)) |
|
{ |
ProcesarVentana(); |
sprintf(mensaje, "[Main] El fichero '%s' no se ha podido cerrar", configuracion.ficherodatos); |
|
Notificar(mensaje, ERROR_SEGUIR, ECO_NO); |
if(configuracion.verventana == SI) MostrarVentana(); |
} |
|
else |
/* salvo las matrices de la ventana en la planilla y sus parámetros */ |
{ |
if(salvarventana == SI) Matrices2FicheroVentana(); |
sprintf(mensaje, "[Main] El fichero '%s' ha sido cerrado con éxito", configuracion.ficherodatos); |
} |
Notificar(mensaje, NO_ERROR, ECO_NO); |
|
} |
/* cierro el fichero de la secuencia */ |
} |
if(fclose(origendatos)) |
else |
{ |
{ |
sprintf(mensaje, "[Main] El fichero '%s' no se ha podido cerrar", configuracion.ficherodatos); |
sprintf(mensaje, "[Main] El fichero '%s' no se ha podido abrir", configuracion.ficherodatos); |
Notificar(mensaje, ERROR_SEGUIR, ECO_NO); |
Notificar(mensaje, ERROR_SALIR, ECO_NO); |
} |
} |
else |
} |
{ |
|
sprintf(mensaje, "[Main] El fichero '%s' ha sido cerrado con éxito", configuracion.ficherodatos); |
else if(configuracion.origen == CADENAHEX) |
Notificar(mensaje, NO_ERROR, ECO_NO); |
{ |
} |
instruccion = 1; |
} |
ventana = 1; |
else |
|
{ |
ConvertirHex2Bin(configuracion.cadenahex, secuencia, BYTES_POR_INSTRUCCION); |
sprintf(mensaje, "[Main] El fichero '%s' no se ha podido abrir", configuracion.ficherodatos); |
|
Notificar(mensaje, ERROR_SALIR, ECO_NO); |
AnalizarOperandosIA16(secuencia, &tarjetaoperandos); |
} |
|
} |
if(configuracion.cpi == SI) CalcularCiclosInstruccion(&tarjetaoperandos); |
|
|
else if(configuracion.origen == CADENAHEX) |
/* if(configuracion.verinstruccion == SI) */ |
{ |
/* muestro en la pantalla la información siempre */ |
instruccion = 1; |
MostrarTarjeta(&tarjetaoperandos); |
ventana = 1; |
} |
|
|
ConvertirHex2Bin(configuracion.cadenahex, secuencia, BYTES_POR_INSTRUCCION); |
/* SALVAR RESULTADOS */ |
|
/* salvo los resultados en un fichero de formato EXCEL */ |
AnalizarOperandosIA16(secuencia, &tarjetaoperandos); |
if(configuracion.origen != CADENAHEX) CrearFicheroResultados(configuracion.ficheroresultados); |
|
|
if(configuracion.cpi == SI) CalcularCiclosInstruccion(&tarjetaoperandos); |
|
|
|
/* if(configuracion.verinstruccion == SI) */ |
|
/* muestro en la pantalla la información siempre */ |
|
MostrarTarjeta(&tarjetaoperandos); |
|
} |
|
|
|
/* SALVAR RESULTADOS */ |
|
/* salvo los resultados en un fichero de formato EXCEL */ |
|
if(configuracion.origen != CADENAHEX) CrearFicheroResultados(configuracion.ficheroresultados); |
|
|
/* LIBERAR MEMORIA */ |
/* LIBERAR MEMORIA */ |
/* al final hay que liberar toda la memoria reservada */ |
/* al final hay que liberar toda la memoria reservada */ |
LiberarMemoriaBasesDatos(); |
LiberarMemoriaBasesDatos(); |
if(configuracion.recuentos == SI) LiberarMemoriaContadores(); |
if(configuracion.recuentos == SI) LiberarMemoriaContadores(); |
if(configuracion.dependencias == SI) LiberarMemoriaAnalisisDependencias(); |
if(configuracion.dependencias == SI) LiberarMemoriaAnalisisDependencias(); |
} |
} |