|
|
| version 1.1, 2006/01/19 17:16:29 | version 1.2, 2006/02/15 13:00:30 |
|---|---|
| Line 1 | Line 1 |
| /********************************************************************/ | |
| /* BasesDatos.c */ | |
| /* */ | |
| /* Copyright (c) 1997-2006 Rafael Rico (rafael.rico@uah.es) */ | |
| /* */ | |
| /* This file is part of ADD version 5.10. */ | |
| /* */ | |
| /* ADD is free software; you can redistribute it and/or modify */ | |
| /* it under the terms of the GNU General Public License as */ | |
| /* published by the Free Software Foundation; either version 2 of */ | |
| /* the License, or (at your option) any later version. */ | |
| /* */ | |
| /* ADD is distributed in the hope that it will be useful, */ | |
| /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ | |
| /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ | |
| /* GNU General Public License for more details. */ | |
| /* */ | |
| /* You should have received a copy of the GNU General Public */ | |
| /* License along with ADD; if not, write to the Free Software */ | |
| /* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA */ | |
| /* 02111-1307 USA */ | |
| /* */ | |
| /* --------------------------- History --------------------------- */ | |
| /* */ | |
| /* Revision 1.2. 01/2006 */ | |
| /* Added GPL License and JavaDoc style documentation */ | |
| /* */ | |
| /* Revision 1.1. 09/2005 */ | |
| /* Initial Revision */ | |
| /* */ | |
| /********************************************************************/ | |
| /******************************************************************************/ | /******************************************************************************/ |
| /* MÓDULO: BasesDatos.c */ | /* MÓDULO: BasesDatos.c */ |
| /* */ | /* */ |
| Line 68 void CargarArquitecturaIA16Nemonicos(FIL | Line 36 void CargarArquitecturaIA16Nemonicos(FIL |
| unsigned int i; | unsigned int i; |
| char linea[MAX_LINE]; | char linea[MAX_LINE]; |
| char *registro, *campo; | char *registro, *campo; |
| char mensaje[MAX_LINE]; | char mensaje[MAX_LINE]; |
| sprintf(mensaje, "[CargarArquitecturaIA16Nemonicos] Cargando base de datos del repertorio IA16..."); | sprintf(mensaje, "[CargarArquitecturaIA16Nemonicos] Cargando base de datos del repertorio IA16..."); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| /* salto los comentarios */ | /* salto los comentarios */ |
| do fgets (linea, MAX_LINE, f_ia16_nemos); while (linea[0]=='#'); | do fgets (linea, MAX_LINE, f_ia16_nemos); while (linea[0]=='#'); |
| Line 81 void CargarArquitecturaIA16Nemonicos(FIL | Line 49 void CargarArquitecturaIA16Nemonicos(FIL |
| num_nemonicos = atoi(linea); | num_nemonicos = atoi(linea); |
| sprintf(mensaje, "[CargarArquitecturaIA16Nemonicos] Reservo memoria para %d registros", num_nemonicos); | sprintf(mensaje, "[CargarArquitecturaIA16Nemonicos] Reservo memoria para %d registros", num_nemonicos); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| /* malloc reserva memoria; calloc reserva memoria y rellena con 0's */ | /* malloc reserva memoria; calloc reserva memoria y rellena con 0's */ |
| /* calloc es más lenta pero me asegura que los valores numéricos van */ | /* calloc es más lenta pero me asegura que los valores numéricos van */ |
| Line 90 void CargarArquitecturaIA16Nemonicos(FIL | Line 58 void CargarArquitecturaIA16Nemonicos(FIL |
| if (nemonicos == NULL) | if (nemonicos == NULL) |
| { | { |
| sprintf(mensaje, "[CargarArquitecturaIA16Nemonicos] Memoria insuficiente"); | sprintf(mensaje, "[CargarArquitecturaIA16Nemonicos] Memoria insuficiente"); |
| Notificar(mensaje, ERROR_SALIR, ECO_NO); | Notificar(mensaje, ERROR_SALIR, ECO_NO); |
| /* el programa finaliza si no hay memoria suficiente */ | /* el programa finaliza si no hay memoria suficiente */ |
| } | } |
| sprintf(mensaje, "[CargarArquitecturaIA16Nemonicos] Cargando datos de nemónicos..."); | sprintf(mensaje, "[CargarArquitecturaIA16Nemonicos] Cargando datos de nemónicos..."); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| i = 0; | i = 0; |
| while(i<num_nemonicos) | while(i<num_nemonicos) |
| Line 162 void CargarArquitecturaIA16Nemonicos(FIL | Line 130 void CargarArquitecturaIA16Nemonicos(FIL |
| } | } |
| sprintf(mensaje, "[CargarArquitecturaIA16Nemonicos] La tabla de nemónicos se ha cargado con éxito"); | sprintf(mensaje, "[CargarArquitecturaIA16Nemonicos] La tabla de nemónicos se ha cargado con éxito"); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| } | } |
| Line 171 void CargarArquitecturaIA16Simbolos(FILE | Line 139 void CargarArquitecturaIA16Simbolos(FILE |
| unsigned int i; | unsigned int i; |
| char linea[MAX_LINE]; | char linea[MAX_LINE]; |
| char *campo; | char *campo; |
| char mensaje[MAX_LINE]; | char mensaje[MAX_LINE]; |
| sprintf(mensaje, "[CargarArquitecturaIA16Simbolos] Cargando base de datos del repertorio IA16..."); | sprintf(mensaje, "[CargarArquitecturaIA16Simbolos] Cargando base de datos del repertorio IA16..."); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| /* salto los comentarios */ | /* salto los comentarios */ |
| do fgets (linea, MAX_LINE, f_ia16_ubis); while (linea[0]=='#'); | do fgets (linea, MAX_LINE, f_ia16_ubis); while (linea[0]=='#'); |
| Line 183 void CargarArquitecturaIA16Simbolos(FILE | Line 151 void CargarArquitecturaIA16Simbolos(FILE |
| num_simbolos = atoi(linea); | num_simbolos = atoi(linea); |
| sprintf(mensaje, "[CargarArquitecturaIA16Simbolos] Reservo memoria para %d registros", num_simbolos); | sprintf(mensaje, "[CargarArquitecturaIA16Simbolos] Reservo memoria para %d registros", num_simbolos); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| /* malloc reserva memoria; calloc reserva memoria y rellena con 0's */ | /* malloc reserva memoria; calloc reserva memoria y rellena con 0's */ |
| /* calloc es más lenta pero me asegura que los valores numéricos van */ | /* calloc es más lenta pero me asegura que los valores numéricos van */ |
| Line 192 void CargarArquitecturaIA16Simbolos(FILE | Line 160 void CargarArquitecturaIA16Simbolos(FILE |
| if (simbolos == NULL) | if (simbolos == NULL) |
| { | { |
| sprintf(mensaje, "[CargarArquitecturaIA16Simbolos] Memoria insuficiente"); | sprintf(mensaje, "[CargarArquitecturaIA16Simbolos] Memoria insuficiente"); |
| Notificar(mensaje, ERROR_SALIR, ECO_NO); | Notificar(mensaje, ERROR_SALIR, ECO_NO); |
| /* el programa finaliza si no hay memoria suficiente */ | /* el programa finaliza si no hay memoria suficiente */ |
| } | } |
| sprintf(mensaje, "[CargarArquitecturaIA16Simbolos] Cargando datos de símbolos..."); | sprintf(mensaje, "[CargarArquitecturaIA16Simbolos] Cargando datos de símbolos..."); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| i = 0; | i = 0; |
| while(i<num_simbolos) | while(i<num_simbolos) |
| Line 237 void CargarArquitecturaIA16Simbolos(FILE | Line 205 void CargarArquitecturaIA16Simbolos(FILE |
| /* capturo el siguiente campo */ | /* capturo el siguiente campo */ |
| campo = strtok(NULL, "\t\n"); | campo = strtok(NULL, "\t\n"); |
| } | } |
| /* echo */ | /* echo */ |
| /* printf(); */ | /* printf(); */ |
| /* _getch(); */ | /* _getch(); */ |
| i++; /* índice del siguiente registro */ | i++; /* índice del siguiente registro */ |
| } | } |
| sprintf(mensaje, "[CargarArquitecturaIA16Simbolos] La tabla de símbolos se ha cargado con éxito"); | sprintf(mensaje, "[CargarArquitecturaIA16Simbolos] La tabla de símbolos se ha cargado con éxito"); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| } | } |
| Line 255 void CargarTiemposProcesador(FILE *f_pro | Line 223 void CargarTiemposProcesador(FILE *f_pro |
| unsigned int i; | unsigned int i; |
| char linea[MAX_LINE]; | char linea[MAX_LINE]; |
| char *campo; | char *campo; |
| char mensaje[MAX_LINE]; | char mensaje[MAX_LINE]; |
| sprintf(mensaje, "[CargarTiemposProcesador] Cargando base de datos del procesador..."); | sprintf(mensaje, "[CargarTiemposProcesador] Cargando base de datos del procesador..."); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| /* salto los comentarios */ | /* salto los comentarios */ |
| do fgets (linea, MAX_LINE, f_procesador); while (linea[0]=='#'); | do fgets (linea, MAX_LINE, f_procesador); while (linea[0]=='#'); |
| Line 267 void CargarTiemposProcesador(FILE *f_pro | Line 235 void CargarTiemposProcesador(FILE *f_pro |
| num_tiempos = atoi(linea); | num_tiempos = atoi(linea); |
| sprintf(mensaje, "[CargarTiemposProcesador] Reservo memoria para %d registros", num_tiempos); | sprintf(mensaje, "[CargarTiemposProcesador] Reservo memoria para %d registros", num_tiempos); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| /* malloc reserva memoria; calloc reserva memoria y rellena con 0's */ | /* malloc reserva memoria; calloc reserva memoria y rellena con 0's */ |
| /* calloc es más lenta pero me asegura que los valores numéricos van */ | /* calloc es más lenta pero me asegura que los valores numéricos van */ |
| Line 276 void CargarTiemposProcesador(FILE *f_pro | Line 244 void CargarTiemposProcesador(FILE *f_pro |
| if (ciclos == NULL) | if (ciclos == NULL) |
| { | { |
| sprintf(mensaje, "[CargarTiemposProcesador] Memoria insuficiente"); | sprintf(mensaje, "[CargarTiemposProcesador] Memoria insuficiente"); |
| Notificar(mensaje, ERROR_SALIR, ECO_NO); | Notificar(mensaje, ERROR_SALIR, ECO_NO); |
| /* el programa finaliza si no hay memoria suficiente */ | /* el programa finaliza si no hay memoria suficiente */ |
| } | } |
| sprintf(mensaje, "[CargarTiemposProcesador] Cargando datos de tiempos..."); | sprintf(mensaje, "[CargarTiemposProcesador] Cargando datos de tiempos..."); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| i = 0; | i = 0; |
| while(i<num_tiempos) | while(i<num_tiempos) |
| Line 317 void CargarTiemposProcesador(FILE *f_pro | Line 285 void CargarTiemposProcesador(FILE *f_pro |
| /* echo */ | /* echo */ |
| /* printf(); */ | /* printf(); */ |
| /* _getch(); */ | /* _getch(); */ |
| i++; /* índice del siguiente registro */ | i++; /* índice del siguiente registro */ |
| } | } |
| sprintf(mensaje, "[CargarTiemposProcesador] La tabla de tiempos se ha cargado con éxito"); | sprintf(mensaje, "[CargarTiemposProcesador] La tabla de tiempos se ha cargado con éxito"); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| } | } |
| void CargarArquitecturaIA16() | void CargarArquitecturaIA16() |
| { | { |
| FILE *f_ia16_nemos, *f_ia16_ubis; | FILE *f_ia16_nemos, *f_ia16_ubis; |
| char mensaje[MAX_LINE]; | char mensaje[MAX_LINE]; |
| /* abro el fichero de nemónicos de la arquitectura del repertorio */ | /* abro el fichero de nemónicos de la arquitectura del repertorio */ |
| if((f_ia16_nemos = fopen(configuracion.ficheronemos, "r")) != NULL) | if((f_ia16_nemos = fopen(configuracion.ficheronemos, "r")) != NULL) |
| { | { |
| sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' se ha abierto con éxito", configuracion.ficheronemos); | sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' se ha abierto con éxito", configuracion.ficheronemos); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| CargarArquitecturaIA16Nemonicos(f_ia16_nemos); | CargarArquitecturaIA16Nemonicos(f_ia16_nemos); |
| /* cierro el fichero de nemónicos */ | /* cierro el fichero de nemónicos */ |
| if(fclose(f_ia16_nemos)) | if(fclose(f_ia16_nemos)) |
| { | { |
| sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' no se ha podido cerrar", configuracion.ficheronemos); | sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' no se ha podido cerrar", configuracion.ficheronemos); |
| Notificar(mensaje, ERROR_SEGUIR, ECO_NO); | Notificar(mensaje, ERROR_SEGUIR, ECO_NO); |
| } | } |
| } | } |
| else | else |
| { | { |
| sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' no se ha podido abrir", configuracion.ficheronemos); | sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' no se ha podido abrir", configuracion.ficheronemos); |
| Notificar(mensaje, ERROR_SALIR, ECO_NO); | Notificar(mensaje, ERROR_SALIR, ECO_NO); |
| } | } |
| /* abro el fichero de ubicaciones de la arquitectura del repertorio */ | /* abro el fichero de ubicaciones de la arquitectura del repertorio */ |
| if((f_ia16_ubis = fopen(configuracion.ficheroubis, "r")) != NULL) | if((f_ia16_ubis = fopen(configuracion.ficheroubis, "r")) != NULL) |
| { | { |
| sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' se ha abierto con éxito", configuracion.ficheroubis); | sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' se ha abierto con éxito", configuracion.ficheroubis); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| CargarArquitecturaIA16Simbolos(f_ia16_ubis); | CargarArquitecturaIA16Simbolos(f_ia16_ubis); |
| /* cierro el fichero de ubicaciones */ | /* cierro el fichero de ubicaciones */ |
| if(fclose(f_ia16_ubis)) | if(fclose(f_ia16_ubis)) |
| { | { |
| sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' no se ha podido cerrar", configuracion.ficheroubis); | sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' no se ha podido cerrar", configuracion.ficheroubis); |
| Notificar(mensaje, ERROR_SEGUIR, ECO_NO); | Notificar(mensaje, ERROR_SEGUIR, ECO_NO); |
| } | } |
| } | } |
| else | else |
| { | { |
| sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' no se ha podido abrir", configuracion.ficheroubis); | sprintf(mensaje, "[CargarArquitecturaIA16] El fichero '%s' no se ha podido abrir", configuracion.ficheroubis); |
| Notificar(mensaje, ERROR_SALIR, ECO_NO); | Notificar(mensaje, ERROR_SALIR, ECO_NO); |
| } | } |
| } | } |
| void CargarProcesador() | void CargarProcesador() |
| { | { |
| FILE *f_procesador; | FILE *f_procesador; |
| char mensaje[MAX_LINE]; | char mensaje[MAX_LINE]; |
| /* abro el fichero con la tabla de tiempos del procesador */ | /* abro el fichero con la tabla de tiempos del procesador */ |
| if((f_procesador = fopen(configuracion.ficherociclos, "r")) != NULL) | if((f_procesador = fopen(configuracion.ficherociclos, "r")) != NULL) |
| { | { |
| sprintf(mensaje, "[CargarProcesador] El fichero '%s' se ha abierto con éxito", configuracion.ficherociclos); | sprintf(mensaje, "[CargarProcesador] El fichero '%s' se ha abierto con éxito", configuracion.ficherociclos); |
| Notificar(mensaje, NO_ERROR, ECO_NO); | Notificar(mensaje, NO_ERROR, ECO_NO); |
| CargarTiemposProcesador(f_procesador); | CargarTiemposProcesador(f_procesador); |
| /* cierro el fichero del procesador */ | /* cierro el fichero del procesador */ |
| if(fclose(f_procesador)) | if(fclose(f_procesador)) |
| { | { |
| sprintf(mensaje, "[CargarProcesador] El fichero '%s' no se ha podido cerrar", configuracion.ficherociclos); | sprintf(mensaje, "[CargarProcesador] El fichero '%s' no se ha podido cerrar", configuracion.ficherociclos); |
| Notificar(mensaje, ERROR_SEGUIR, ECO_NO); | Notificar(mensaje, ERROR_SEGUIR, ECO_NO); |
| } | } |
| } | } |
| else | else |
| { | { |
| sprintf(mensaje, "[CargarProcesador] El fichero '%s' no se ha podido abrir", configuracion.ficherociclos); | sprintf(mensaje, "[CargarProcesador] El fichero '%s' no se ha podido abrir", configuracion.ficherociclos); |
| Notificar(mensaje, ERROR_SALIR, ECO_NO); | Notificar(mensaje, ERROR_SALIR, ECO_NO); |
| } | } |
| } | } |
| Line 410 void CargarProcesador() | Line 378 void CargarProcesador() |
| void CargarBasesDatos() | void CargarBasesDatos() |
| { | { |
| CargarArquitecturaIA16(); | CargarArquitecturaIA16(); |
| if(configuracion.cpi == SI) CargarProcesador(); | if(configuracion.cpi == SI) CargarProcesador(); |
| } | } |
| Line 421 void LiberarMemoriaBasesDatos() | Line 389 void LiberarMemoriaBasesDatos() |
| { | { |
| free(nemonicos); | free(nemonicos); |
| free(simbolos); | free(simbolos); |
| if(configuracion.cpi == SI) free(ciclos); | if(configuracion.cpi == SI) free(ciclos); |
| } | } |
| Line 429 void LiberarMemoriaBasesDatos() | Line 397 void LiberarMemoriaBasesDatos() |
| #if 0 | #if 0 |
| /* la función strtok de <string.h> descompone la línea en campos */ | /* la función strtok de <string.h> descompone la línea en campos */ |
| /* OJO: modifica la cadena de caracteres de la línea que se le pasa */ | /* OJO: modifica la cadena de caracteres de la línea que se le pasa */ |
| /* capturo el primer campo */ | /* capturo el primer campo */ |
| campo = strtok(linea, "\t"); | campo = strtok(linea, "\t"); |