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"); |