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>