Diff for /ADD_ver_10/Attic/Recuentos.c between versions 1.1 and 1.2

version 1.1, 2006/01/19 17:16:29 version 1.2, 2006/02/15 13:00:30
Line 1 Line 1
 /********************************************************************/  
 /*  Recuentos.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: Recuentos.c                                                        */  /* MÓDULO: Recuentos.c                                                        */
 /*                                                                            */  /*                                                                            */
Line 68  extern unsigned long int *contadorescrit Line 35  extern unsigned long int *contadorescrit
   
 void CrearContadores()  void CrearContadores()
 {  {
         char mensaje[MAX_LINE];      char mensaje[MAX_LINE];
   
     /* reservo memoria para los contadores de nemónicos */      /* reservo memoria para los contadores de nemónicos */
         contadornemonicos = calloc(num_nemonicos, sizeof(unsigned long int));      contadornemonicos = calloc(num_nemonicos, sizeof(unsigned long int));
     if (contadornemonicos == NULL)      if (contadornemonicos == NULL)
     {      {
         sprintf(mensaje, "[CrearContadores] Memoria insuficiente");          sprintf(mensaje, "[CrearContadores] 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 */
     }      }
   
   
     /* reservo memoria para los contadores de accesos a operandos */      /* reservo memoria para los contadores de accesos a operandos */
         /* lecturas */      /* lecturas */
     contadorlecturas = calloc(num_simbolos, sizeof(unsigned long int));      contadorlecturas = calloc(num_simbolos, sizeof(unsigned long int));
     if (contadorlecturas == NULL)      if (contadorlecturas == NULL)
     {      {
         sprintf(mensaje, "[CrearContadores] Memoria insuficiente");          sprintf(mensaje, "[CrearContadores] 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 */
     }      }
         /* escrituras */      /* escrituras */
     contadorescrituras = calloc(num_simbolos, sizeof(unsigned long int));      contadorescrituras = calloc(num_simbolos, sizeof(unsigned long int));
     if (contadorlecturas == NULL)      if (contadorlecturas == NULL)
     {      {
         sprintf(mensaje, "[CrearContadores] Memoria insuficiente");          sprintf(mensaje, "[CrearContadores] 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 */
     }      }
 }  }
   
Line 107  void CrearContadores() Line 74  void CrearContadores()
 void ActualizarRecuentos(fichainstruccion *tarjetaoperandos)  void ActualizarRecuentos(fichainstruccion *tarjetaoperandos)
 {  {
     int id_nemo, id_simb;      int id_nemo, id_simb;
         char mensaje[MAX_LINE], cadena[MAX_LINE];      char mensaje[MAX_LINE], cadena[MAX_LINE];
               
         /* PREFIJO (si lo hay) */      /* PREFIJO (si lo hay) */
         if(tarjetaoperandos->prefijo[0]!='\0')      if(tarjetaoperandos->prefijo[0]!='\0')
         {      {
                 id_nemo = BDBuscarCadena(TABLA_NEMONICOS, CAMPO_NEMONICO, tarjetaoperandos->prefijo);          id_nemo = BDBuscarCadena(TABLA_NEMONICOS, CAMPO_NEMONICO, tarjetaoperandos->prefijo);
   
                 if(id_nemo == -1)  
                 {  
                         /* emito un error al fichero de log */   
                         sprintf(mensaje, "[ActualizarRecuentos] La cadena '%s' no se ha encontrado en Tabla Nemónicos", tarjetaoperandos->prefijo);  
                         Notificar(mensaje, ERROR_SALIR, ECO_NO);  
                 }  
   
                 /* incremento el contador para el nemónico en cuestión */  
                 contadornemonicos[id_nemo]++;  
         }  
   
         /* NEMÓNICO */          if(id_nemo == -1)
         id_nemo = BDBuscarCadena(TABLA_NEMONICOS, CAMPO_NEMONICO, tarjetaoperandos->nemonico);          {
               /* emito un error al fichero de log */ 
               sprintf(mensaje, "[ActualizarRecuentos] La cadena '%s' no se ha encontrado en Tabla Nemónicos", tarjetaoperandos->prefijo);
               Notificar(mensaje, ERROR_SALIR, ECO_NO);
           }
   
           /* incremento el contador para el nemónico en cuestión */
           contadornemonicos[id_nemo]++;
       }
   
       /* NEMÓNICO */
       id_nemo = BDBuscarCadena(TABLA_NEMONICOS, CAMPO_NEMONICO, tarjetaoperandos->nemonico);
   
     if(id_nemo == -1)      if(id_nemo == -1)
     {      {
         /* emito un error al fichero de log */           /* emito un error al fichero de log */ 
                 sprintf(mensaje, "[ActualizarRecuentos] La cadena '%s' no se ha encontrado en Tabla Nemónicos", tarjetaoperandos->nemonico);          sprintf(mensaje, "[ActualizarRecuentos] La cadena '%s' no se ha encontrado en Tabla Nemónicos", tarjetaoperandos->nemonico);
                 Notificar(mensaje, ERROR_SALIR, ECO_NO);          Notificar(mensaje, ERROR_SALIR, ECO_NO);
     }      }
   
         /* incremento el contador para el nemónico en cuestión */      /* incremento el contador para el nemónico en cuestión */
         contadornemonicos[id_nemo]++;      contadornemonicos[id_nemo]++;
   
   
         /* OP2 (FUENTE) si lo hay */      /* OP2 (FUENTE) si lo hay */
         if(tarjetaoperandos->op2[0]!='\0')      if(tarjetaoperandos->op2[0]!='\0')
         {      {
         strcpy(cadena, tarjetaoperandos->op2);          strcpy(cadena, tarjetaoperandos->op2);
         NormalizarUbicacion(cadena);          NormalizarUbicacion(cadena);
   
                 id_simb = BDBuscarCadena(TABLA_SIMBOLOS, CAMPO_SIMBOLO, cadena);          id_simb = BDBuscarCadena(TABLA_SIMBOLOS, CAMPO_SIMBOLO, cadena);
   
                 if(id_simb == -1)          if(id_simb == -1)
                 {          {
                         /* emito un error al fichero de log */               /* emito un error al fichero de log */ 
                         sprintf(mensaje, "[ActualizarRecuentos] La cadena '%s' no se ha encontrado en Tabla Símbolos", cadena);              sprintf(mensaje, "[ActualizarRecuentos] La cadena '%s' no se ha encontrado en Tabla Símbolos", cadena);
                         Notificar(mensaje, ERROR_SALIR, ECO_NO);              Notificar(mensaje, ERROR_SALIR, ECO_NO);
                 }          }
   
                 /* incremento el contador para el símbolo en cuestión según el tipo de acceso */          /* incremento el contador para el símbolo en cuestión según el tipo de acceso */
         switch(nemonicos[id_nemo].modo_op2)          switch(nemonicos[id_nemo].modo_op2)
         {          {
                         case LEIDOYESCRITO:             /* leido y escrito */              case LEIDOYESCRITO:        /* leido y escrito */
                         contadorlecturas[id_simb]++;              contadorlecturas[id_simb]++;
             case ESCRITO:                       /* escrito */              case ESCRITO:            /* escrito */
                         contadorescrituras[id_simb]++;              contadorescrituras[id_simb]++;
             break;              break;
   
             case LEIDO:                         /* leido */              case LEIDO:                /* leido */
                         contadorlecturas[id_simb]++;              contadorlecturas[id_simb]++;
             break;              break;
   
                         case NO_EXISTE:    /* no existe */              case NO_EXISTE:    /* no existe */
                         /* emitir un error al fichero de log */              /* emitir un error al fichero de log */
                         sprintf(mensaje, "[ActualizarRecuentos] El operando no existe");              sprintf(mensaje, "[ActualizarRecuentos] El operando no existe");
                         Notificar(mensaje, ERROR_SALIR, ECO_NO);              Notificar(mensaje, ERROR_SALIR, ECO_NO);
             break;              break;
         }          }
         }      }
   
         /* aquí se puede hacer una función ya que el código es igual al anterior */      /* aquí se puede hacer una función ya que el código es igual al anterior */
         /* OP1 (DESTINO) si lo hay */      /* OP1 (DESTINO) si lo hay */
         if(tarjetaoperandos->op1[0]!='\0')      if(tarjetaoperandos->op1[0]!='\0')
         {      {
         strcpy(cadena, tarjetaoperandos->op1);          strcpy(cadena, tarjetaoperandos->op1);
         NormalizarUbicacion(cadena);          NormalizarUbicacion(cadena);
   
                 id_simb = BDBuscarCadena(TABLA_SIMBOLOS, CAMPO_SIMBOLO, cadena);          id_simb = BDBuscarCadena(TABLA_SIMBOLOS, CAMPO_SIMBOLO, cadena);
   
                 if(id_simb == -1)          if(id_simb == -1)
                 {          {
                         /* emito un error al fichero de log */               /* emito un error al fichero de log */ 
                         sprintf(mensaje, "[ActualizarRecuentos] La cadena '%s' no se ha encontrado en Tabla Símbolos", cadena);              sprintf(mensaje, "[ActualizarRecuentos] La cadena '%s' no se ha encontrado en Tabla Símbolos", cadena);
                         Notificar(mensaje, ERROR_SALIR, ECO_NO);              Notificar(mensaje, ERROR_SALIR, ECO_NO);
                 }          }
   
                 /* incremento el contador para el símbolo en cuestión según el tipo de acceso */          /* incremento el contador para el símbolo en cuestión según el tipo de acceso */
         switch(nemonicos[id_nemo].modo_op1)          switch(nemonicos[id_nemo].modo_op1)
         {          {
                         case LEIDOYESCRITO:             /* leido y escrito */              case LEIDOYESCRITO:        /* leido y escrito */
                         contadorlecturas[id_simb]++;              contadorlecturas[id_simb]++;
             case ESCRITO:                       /* escrito */              case ESCRITO:            /* escrito */
                         contadorescrituras[id_simb]++;              contadorescrituras[id_simb]++;
             break;              break;
   
             case LEIDO:                         /* leido */              case LEIDO:                /* leido */
                         contadorlecturas[id_simb]++;              contadorlecturas[id_simb]++;
             break;              break;
   
                         case NO_EXISTE:    /* no existe */              case NO_EXISTE:    /* no existe */
                         /* emitir un error al fichero de log */              /* emitir un error al fichero de log */
                         sprintf(mensaje, "[ActualizarRecuentos] El operando no existe");              sprintf(mensaje, "[ActualizarRecuentos] El operando no existe");
                         Notificar(mensaje, ERROR_SALIR, ECO_NO);              Notificar(mensaje, ERROR_SALIR, ECO_NO);
             break;              break;
         }          }
         }      }
         /* los accesos a memoria se pueden contabilizar también bajo el nombre 'MEM' */      /* los accesos a memoria se pueden contabilizar también bajo el nombre 'MEM' */
 }  }
   
   
Line 219  void ActualizarRecuentos(fichainstruccio Line 186  void ActualizarRecuentos(fichainstruccio
   
 void LiberarMemoriaContadores()  void LiberarMemoriaContadores()
 {  {
         free(contadornemonicos);  
         free(contadorlecturas);  
         free(contadorescrituras);  
 }  
   
       free(contadornemonicos);
       free(contadorlecturas);
       free(contadorescrituras);
   }

Removed from v.1.1  
changed lines
  Added in v.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>