Annotation of ADD_ver_10/Matrices.c, revision 1.1

1.1     ! rico        1: /********************************************************************/
        !             2: /*  Matrices.c                                                      */
        !             3: /*                                                                  */
        !             4: /*  Copyright (c) 1997-2006 Rafael Rico      (rafael.rico@uah.es)   */
        !             5: /*                                                                  */
        !             6: /*  This file is part of ADD version 5.10.                          */
        !             7: /*                                                                  */
        !             8: /*  ADD is free software; you can redistribute it and/or modify     */
        !             9: /*  it under the terms of the GNU General Public License as         */
        !            10: /*  published by the Free Software Foundation; either version 2 of  */
        !            11: /*  the License, or (at your option) any later version.             */
        !            12: /*                                                                  */
        !            13: /*  ADD is distributed in the hope that it will be useful,          */
        !            14: /*  but WITHOUT ANY WARRANTY; without even the implied warranty of  */
        !            15: /*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   */
        !            16: /*  GNU General Public License for more details.                    */
        !            17: /*                                                                  */
        !            18: /*  You should have received a copy of the GNU General Public       */
        !            19: /*  License along with ADD; if not, write to the Free Software      */
        !            20: /*  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA        */
        !            21: /*  02111-1307  USA                                                 */
        !            22: /*                                                                  */
        !            23: /*  --------------------------- History --------------------------- */
        !            24: /*                                                                  */
        !            25: /*  Revision 1.2. 01/2006                                           */
        !            26: /*  Added GPL License and JavaDoc style documentation               */
        !            27: /*                                                                  */
        !            28: /*  Revision 1.1. 09/2005                                           */
        !            29: /*  Initial Revision                                                */
        !            30: /*                                                                  */
        !            31: /********************************************************************/
        !            32: 
        !            33: 
        !            34: /******************************************************************************/
        !            35: /* MÓDULO: Matrices.c                                                         */
        !            36: /*                                                                            */
        !            37: /* Este módulo contiene las funciones de manejo de las matrices de            */
        !            38: /* dependencias de datos.                                                     */
        !            39: /******************************************************************************/
        !            40: /* Fecha: 16 de septiembre de 2005                                            */
        !            41: /******************************************************************************/
        !            42: 
        !            43: #include <stdio.h>
        !            44: #include <stdlib.h>
        !            45: 
        !            46: #include "defines.h"
        !            47: #include "tipos.h"
        !            48: 
        !            49: #include "matrices.h"
        !            50: 
        !            51: /* configuracion */
        !            52: extern struct argumentos configuracion;
        !            53: 
        !            54: /* análisis de dependencias de datos */
        !            55: extern struct punterosD matriz;
        !            56: 
        !            57: 
        !            58: 
        !            59: /* inicia a NULL todos los punteros de las matrices */
        !            60: 
        !            61: void IniciarPunterosMatrices()
        !            62: {
        !            63:        matriz.Ddatoexp = NULL;
        !            64:        matriz.Ddir_exp = NULL;
        !            65:        matriz.Dpilaexp = NULL;
        !            66:        matriz.Destadoexp = NULL;
        !            67:        matriz.Ddatoimp = NULL;
        !            68:        matriz.Ddir_imp = NULL;
        !            69:        matriz.Dpilaimp = NULL;
        !            70:        matriz.Destadoimp = NULL;
        !            71: 
        !            72:        matriz.ADdatoexp = NULL;
        !            73:        matriz.ADdir_exp = NULL;
        !            74:        matriz.ADpilaexp = NULL;
        !            75:        matriz.ADestadoexp = NULL;
        !            76:        matriz.ADdatoimp = NULL;
        !            77:        matriz.ADdir_imp = NULL;
        !            78:        matriz.ADpilaimp = NULL;
        !            79:        matriz.ADestadoimp = NULL;
        !            80: 
        !            81:        matriz.Sdatoexp = NULL;
        !            82:        matriz.Sdir_exp = NULL;
        !            83:        matriz.Spilaexp = NULL;
        !            84:        matriz.Sestadoexp = NULL;
        !            85:        matriz.Sdatoimp = NULL;
        !            86:        matriz.Sdir_imp = NULL;
        !            87:        matriz.Spilaimp = NULL;
        !            88:        matriz.Sestadoimp = NULL;
        !            89: 
        !            90:        matriz.D = NULL;
        !            91: }
        !            92: 
        !            93: 
        !            94: /* reserva espacio para una matriz determinada y lo inicia a 0*/
        !            95: /* devuelve el puntero */
        !            96: 
        !            97: unsigned char ** CrearMatriz()
        !            98: {
        !            99:        char mensaje[MAX_LINE];
        !           100:        unsigned int i;
        !           101:        unsigned char **matrizD;
        !           102: 
        !           103:        /* 1º un puntero por cada fila */
        !           104:        matrizD = calloc(configuracion.ventana, sizeof(unsigned char *));
        !           105:        if (matrizD == NULL)
        !           106:        {
        !           107:                sprintf(mensaje, "[CrearMatriz] Memoria insuficiente");
        !           108:                Notificar(mensaje, ERROR_SALIR, ECO_NO);
        !           109:                /* el programa finaliza si no hay memoria suficiente */
        !           110:        }
        !           111:        /* 2º un 'char' por cada columna */
        !           112:        for(i=0; i<configuracion.ventana; i++)
        !           113:        {
        !           114:                matrizD[i] = calloc(configuracion.ventana, sizeof(unsigned char));
        !           115:                if (matrizD[i] == NULL)
        !           116:                {
        !           117:                        sprintf(mensaje, "[CrearMatriz] Memoria insuficiente");
        !           118:                        Notificar(mensaje, ERROR_SALIR, ECO_NO);
        !           119:                        /* el programa finaliza si no hay memoria suficiente */
        !           120:                }
        !           121:        }
        !           122:        return matrizD;
        !           123: }
        !           124: 
        !           125: 
        !           126: /* otro modo de hacer lo mismo */
        !           127: 
        !           128: /* llamada en main() --> CrearMatriz(&matriz.Ddatoexp); */
        !           129: 
        !           130: /* CrearMatriz(unsigned char ***matrizD)
        !           131: {
        !           132: 
        !           133: 
        !           134:        *matrizD = calloc(configuracion.ventana , sizeof(unsigned char *));
        !           135: 
        !           136: 
        !           137:        return *matrizD;
        !           138: }*/
        !           139: 
        !           140: 
        !           141: /* crea todas las matrices de dependencias necesarias en función de la configuración */
        !           142: 
        !           143: void CrearMatricesDependencias()
        !           144: {
        !           145:        /* creo las matrices de dependencias que sean necesarias */
        !           146:        /* mapa de posibles matrices por desacoplos */
        !           147:        /* fuente       origen  tipo */
        !           148:        /*   SI           SI     SI      */
        !           149:        /*   SI           SI     NO      */
        !           150:        /*   SI           NO     NO      */
        !           151:        /*   NO           NO     NO      */
        !           152: 
        !           153:        if(configuracion.desacoplartipos == SI)
        !           154:        {
        !           155:                if(configuracion.datos == SI) matriz.Ddatoexp = CrearMatriz();
        !           156:                if(configuracion.direcciones == SI) matriz.Ddir_exp = CrearMatriz();
        !           157:                if(configuracion.pila == SI) matriz.Dpilaexp = CrearMatriz();
        !           158:                if(configuracion.cc == SI) matriz.Destadoexp = CrearMatriz();
        !           159:        
        !           160:                if(configuracion.datos == SI) matriz.Ddatoimp = CrearMatriz();
        !           161:                if(configuracion.direcciones == SI) matriz.Ddir_imp = CrearMatriz();
        !           162:                if(configuracion.pila == SI) matriz.Dpilaimp = CrearMatriz();
        !           163:                if(configuracion.cc == SI) matriz.Destadoimp = CrearMatriz();
        !           164: 
        !           165:                if(configuracion.datos == SI) matriz.ADdatoexp = CrearMatriz();
        !           166:                if(configuracion.direcciones == SI) matriz.ADdir_exp = CrearMatriz();
        !           167:                if(configuracion.pila == SI) matriz.ADpilaexp = CrearMatriz();
        !           168:                if(configuracion.cc == SI) matriz.ADestadoexp = CrearMatriz();
        !           169:                
        !           170:                if(configuracion.datos == SI) matriz.ADdatoimp = CrearMatriz();
        !           171:                if(configuracion.direcciones == SI) matriz.ADdir_imp = CrearMatriz();
        !           172:                if(configuracion.pila == SI) matriz.ADpilaimp = CrearMatriz();
        !           173:                if(configuracion.cc == SI) matriz.ADestadoimp = CrearMatriz();
        !           174: 
        !           175:                if(configuracion.datos == SI) matriz.Sdatoexp = CrearMatriz();
        !           176:                if(configuracion.direcciones == SI) matriz.Sdir_exp = CrearMatriz();
        !           177:                if(configuracion.pila == SI) matriz.Spilaexp = CrearMatriz();
        !           178:                if(configuracion.cc == SI) matriz.Sestadoexp = CrearMatriz();
        !           179:                
        !           180:                if(configuracion.datos == SI) matriz.Sdatoimp = CrearMatriz();
        !           181:                if(configuracion.direcciones == SI) matriz.Sdir_imp = CrearMatriz();
        !           182:                if(configuracion.pila == SI) matriz.Spilaimp = CrearMatriz();
        !           183:                if(configuracion.cc == SI) matriz.Sestadoimp = CrearMatriz();
        !           184:        }
        !           185: 
        !           186:        else if(configuracion.desacoplarorigen == SI)
        !           187:        {
        !           188:                if(configuracion.explicitos == SI) matriz.Ddatoexp = CrearMatriz();
        !           189:                if(configuracion.implicitos == SI) matriz.Ddatoimp = CrearMatriz();
        !           190: 
        !           191:                if(configuracion.explicitos == SI) matriz.ADdatoexp = CrearMatriz();
        !           192:                if(configuracion.implicitos == SI) matriz.ADdatoimp = CrearMatriz();
        !           193: 
        !           194:                if(configuracion.explicitos == SI) matriz.Sdatoexp = CrearMatriz();
        !           195:                if(configuracion.implicitos == SI) matriz.Sdatoimp = CrearMatriz();
        !           196:        }
        !           197: 
        !           198:        else if(configuracion.desacoplarfuentes == SI)
        !           199:        {
        !           200:                if(configuracion.verdaderas == SI) matriz.Ddatoexp = CrearMatriz();
        !           201:                if(configuracion.antidependencias == SI) matriz.ADdatoexp = CrearMatriz();
        !           202:                if(configuracion.salida == SI) matriz.Sdatoexp = CrearMatriz();
        !           203:        }
        !           204: 
        !           205:        matriz.D = CrearMatriz();
        !           206: }
        !           207: 
        !           208: 
        !           209: /* inicia una matriz poniendo sus componentes a 0 */
        !           210: 
        !           211: void IniciarMatriz(unsigned char **matriz)
        !           212: {
        !           213:        unsigned int i, j;
        !           214: 
        !           215:        if(matriz != NULL) for(i=0; i<configuracion.ventana; i++) for(j=0; j<configuracion.ventana; j++) matriz[i][j] = 0; 
        !           216: }
        !           217: 
        !           218: 
        !           219: /* inicia las matrices abiertas poniendo a 0 todas sus componentes */
        !           220: /* utilizando la función anterior es más compacto aunque quizá algo más lento */
        !           221: 
        !           222: void IniciarMatricesDependencias()
        !           223: {
        !           224:        unsigned int i, j, dim;
        !           225: 
        !           226:        dim = configuracion.ventana;
        !           227:        
        !           228:        if(matriz.Ddatoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Ddatoexp[i][j] = 0; 
        !           229:        if(matriz.Ddir_exp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Ddir_exp[i][j] = 0; 
        !           230:        if(matriz.Dpilaexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Dpilaexp[i][j] = 0; 
        !           231:        if(matriz.Destadoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Destadoexp[i][j] = 0; 
        !           232:                
        !           233:        if(matriz.Ddatoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Ddatoimp[i][j] = 0; 
        !           234:        if(matriz.Ddir_imp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Ddir_imp[i][j] = 0; 
        !           235:        if(matriz.Dpilaimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Dpilaimp[i][j] = 0; 
        !           236:        if(matriz.Destadoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Destadoimp[i][j] = 0; 
        !           237: 
        !           238:        if(matriz.ADdatoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADdatoexp[i][j] = 0; 
        !           239:        if(matriz.ADdir_exp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADdir_exp[i][j] = 0; 
        !           240:        if(matriz.ADpilaexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADpilaexp[i][j] = 0; 
        !           241:        if(matriz.ADestadoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADestadoexp[i][j] = 0; 
        !           242:                
        !           243:        if(matriz.ADdatoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADdatoimp[i][j] = 0; 
        !           244:        if(matriz.ADdir_imp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADdir_imp[i][j] = 0; 
        !           245:        if(matriz.ADpilaimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADpilaimp[i][j] = 0; 
        !           246:        if(matriz.ADestadoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.ADestadoimp[i][j] = 0; 
        !           247: 
        !           248:        if(matriz.Sdatoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sdatoexp[i][j] = 0; 
        !           249:        if(matriz.Sdir_exp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sdir_exp[i][j] = 0; 
        !           250:        if(matriz.Spilaexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Spilaexp[i][j] = 0; 
        !           251:        if(matriz.Sestadoexp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sestadoexp[i][j] = 0; 
        !           252:                
        !           253:        if(matriz.Sdatoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sdatoimp[i][j] = 0; 
        !           254:        if(matriz.Sdir_imp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sdir_imp[i][j] = 0; 
        !           255:        if(matriz.Spilaimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Spilaimp[i][j] = 0; 
        !           256:        if(matriz.Sestadoimp != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.Sestadoimp[i][j] = 0; 
        !           257: 
        !           258:        if(matriz.D != NULL) for(i=0; i<dim; i++) for(j=0; j<dim; j++) matriz.D[i][j] = 0; 
        !           259: }
        !           260: 
        !           261: 
        !           262: /* libera la memoria reservada para una matriz */
        !           263: 
        !           264: void LiberarMemoriaMatriz(unsigned char **matriz)
        !           265: {
        !           266:        unsigned int i;
        !           267: 
        !           268:        if(matriz != NULL) {for(i=0; i<configuracion.ventana; i++) free(matriz[i]); free(matriz);} 
        !           269: }
        !           270: 
        !           271: 
        !           272: /* libera la memoria reservada para las matrices abiertas */
        !           273: /* utilizando la función anterior es más compacto aunque quizá algo más lento */
        !           274: 
        !           275: void LiberarMemoriaMatricesDependencias()
        !           276: {
        !           277:        unsigned int i,dim;
        !           278: 
        !           279:        dim = configuracion.ventana;
        !           280: 
        !           281:        if(matriz.Ddatoexp != NULL) {for(i=0; i<dim; i++) free(matriz.Ddatoexp[i]); free(matriz.Ddatoexp);}
        !           282:        if(matriz.Ddir_exp != NULL) {for(i=0; i<dim; i++) free(matriz.Ddir_exp[i]); free(matriz.Ddir_exp);}
        !           283:        if(matriz.Dpilaexp != NULL) {for(i=0; i<dim; i++) free(matriz.Dpilaexp[i]); free(matriz.Dpilaexp);}
        !           284:        if(matriz.Destadoexp != NULL) {for(i=0; i<dim; i++) free(matriz.Destadoexp[i]); free(matriz.Destadoexp);}
        !           285:                
        !           286:        if(matriz.Ddatoimp != NULL) {for(i=0; i<dim; i++) free(matriz.Ddatoimp[i]); free(matriz.Ddatoimp);}
        !           287:        if(matriz.Ddir_imp != NULL) {for(i=0; i<dim; i++) free(matriz.Ddir_imp[i]); free(matriz.Ddir_imp);}
        !           288:        if(matriz.Dpilaimp != NULL) {for(i=0; i<dim; i++) free(matriz.Dpilaimp[i]); free(matriz.Dpilaimp);} 
        !           289:        if(matriz.Destadoimp != NULL) {for(i=0; i<dim; i++) free(matriz.Destadoimp[i]); free(matriz.Destadoimp);}
        !           290: 
        !           291:        if(matriz.ADdatoexp != NULL) {for(i=0; i<dim; i++) free(matriz.ADdatoexp[i]); free(matriz.ADdatoexp);} 
        !           292:        if(matriz.ADdir_exp != NULL) {for(i=0; i<dim; i++) free(matriz.ADdir_exp[i]); free(matriz.ADdir_exp);} 
        !           293:        if(matriz.ADpilaexp != NULL) {for(i=0; i<dim; i++) free(matriz.ADpilaexp[i]); free(matriz.ADpilaexp);} 
        !           294:        if(matriz.ADestadoexp != NULL) {for(i=0; i<dim; i++) free(matriz.ADestadoexp[i]); free(matriz.ADestadoexp);}
        !           295:                
        !           296:        if(matriz.ADdatoimp != NULL) {for(i=0; i<dim; i++) free(matriz.ADdatoimp[i]); free(matriz.ADdatoimp);} 
        !           297:        if(matriz.ADdir_imp != NULL) {for(i=0; i<dim; i++) free(matriz.ADdir_imp[i]); free(matriz.ADdir_imp);} 
        !           298:        if(matriz.ADpilaimp != NULL) {for(i=0; i<dim; i++) free(matriz.ADpilaimp[i]); free(matriz.ADpilaimp);} 
        !           299:        if(matriz.ADestadoimp != NULL) {for(i=0; i<dim; i++) free(matriz.ADestadoimp[i]); free(matriz.ADestadoimp);}
        !           300: 
        !           301:        if(matriz.Sdatoexp != NULL) {for(i=0; i<dim; i++) free(matriz.Sdatoexp[i]); free(matriz.Sdatoexp);} 
        !           302:        if(matriz.Sdir_exp != NULL) {for(i=0; i<dim; i++) free(matriz.Sdir_exp[i]); free(matriz.Sdir_exp);} 
        !           303:        if(matriz.Spilaexp != NULL) {for(i=0; i<dim; i++) free(matriz.Spilaexp[i]); free(matriz.Spilaexp);} 
        !           304:        if(matriz.Sestadoexp != NULL) {for(i=0; i<dim; i++) free(matriz.Sestadoexp[i]); free(matriz.Sestadoexp);}
        !           305:                
        !           306:        if(matriz.Sdatoimp != NULL) {for(i=0; i<dim; i++) free(matriz.Sdatoimp[i]); free(matriz.Sdatoimp);} 
        !           307:        if(matriz.Sdir_imp != NULL) {for(i=0; i<dim; i++) free(matriz.Sdir_imp[i]); free(matriz.Sdir_imp);} 
        !           308:        if(matriz.Spilaimp != NULL) {for(i=0; i<dim; i++) free(matriz.Spilaimp[i]); free(matriz.Spilaimp);} 
        !           309:        if(matriz.Sestadoimp != NULL) {for(i=0; i<dim; i++) free(matriz.Sestadoimp[i]); free(matriz.Sestadoimp);}
        !           310: 
        !           311:        if(matriz.D != NULL) {for(i=0; i<dim; i++) free(matriz.D[i]); free(matriz.D);} 
        !           312: }
        !           313: 

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