Annotation of ADD_ver_10/Crear Ficheros.c, revision 1.1

1.1     ! rico        1: /********************************************************************/
        !             2: /*  Crear Ficheros.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: Auxiliares.c                                                       */
        !            36: /*                                                                            */
        !            37: /* Este módulo contiene funciones auxiliares:                                 */
        !            38: /*  - notificación de mensajes en fichero de log                              */
        !            39: /*  - presentación de tarjeta de instrucción                                  */
        !            40: /*  - creación de ficheros de base de datos                                   */
        !            41: /******************************************************************************/
        !            42: /* Fecha: 21 de junio de 2005                                                 */
        !            43: /******************************************************************************/
        !            44: 
        !            45: #include <stdio.h>
        !            46: #include <string.h>
        !            47: #include "tipos.h"
        !            48: #include "defines.h"
        !            49: 
        !            50: extern int num_nemonicos;
        !            51: extern operacion *nemonicos;
        !            52: extern int num_simbolos;
        !            53: extern operando *simbolos;
        !            54: extern int num_tiempos;
        !            55: extern tiempo *ciclos;
        !            56: 
        !            57: 
        !            58: void Notificar(char *mensaje, unsigned char accion, unsigned char eco)
        !            59: {
        !            60:        FILE *handle;
        !            61:        char *fichero;
        !            62: 
        !            63:        /* nombre del fichero de notificaciones */
        !            64:        strcpy(fichero, "notificaciones.log");
        !            65: 
        !            66:        /* escribo la notificación en el fichero y si no es posible aborto el programa */
        !            67:        if((handle  = fopen(fichero, "a")) != NULL)
        !            68:        {
        !            69:                fprintf(handle, "%s\n", mensaje);
        !            70:                if(fclose(handle))
        !            71:                {
        !            72:                        fprintf(handle, "El fichero %s no se ha podido cerrar\n", fichero);
        !            73:                        printf("El fichero %s no se ha podido cerrar\n", fichero);
        !            74:                }
        !            75:        }
        !            76:        else
        !            77:        {
        !            78:                printf("El fichero %s no se ha podido abrir\n", fichero);
        !            79:                printf("Pulse cualquier tecla para salir\n");
        !            80:                _getch();
        !            81:                exit(1);
        !            82:        }
        !            83: 
        !            84:        /* escribo el error en la pantalla */
        !            85:        if(eco == SI) printf("%s\n", mensaje);
        !            86: 
        !            87:        /* acción en función del parámetro */
        !            88:        switch(accion))
        !            89:        {
        !            90:                case SALIR:
        !            91:                printf("Pulse cualquier tecla para salir\n");
        !            92:                _getch();
        !            93:                exit(1);
        !            94:                break;
        !            95: 
        !            96:                case SEGUIR:
        !            97:                printf("Pulse cualquier tecla para continuar\n");
        !            98:                _getch();
        !            99:                break;
        !           100:        }
        !           101: }
        !           102: 
        !           103: 
        !           104: void MostrarTarjeta(fichainstruccion *tarjetaoperandos)
        !           105: {
        !           106:        /* imprimo la tarjeta de la instrucción para ver si funciona bien */
        !           107:     
        !           108:        int i;
        !           109: 
        !           110:     /* todo esto no funciona aquí */
        !           111:     /* printf("\x01B[2J"); */   /* código de escape ANSI para borrar la pantalla */
        !           112:     /* printf("\027[2J");  */   /* código de escape ANSI para borrar la pantalla */
        !           113:     /* printf("%c[2J", 27);*/   /* código de escape ANSI para borrar la pantalla */
        !           114:     /* printf("\033[2J");  */ 
        !           115: 
        !           116:     printf("\n");
        !           117:     for(i=0; i<80; i++) printf("-");
        !           118: 
        !           119:     printf("%-14s  ", tarjetaoperandos->hexadecimal);
        !           120: 
        !           121:     /* formato de instrucción (notación de INTEL) */
        !           122:     printf("%s%s", tarjetaoperandos->prefijo, tarjetaoperandos->prefijo[0]!='\0' ? " ":"");
        !           123: 
        !           124:     printf("%s", tarjetaoperandos->nemonico);
        !           125:     printf("%s%s", tarjetaoperandos->op1[0]!='\0' ? " ":"", tarjetaoperandos->op1);
        !           126:     printf("%s%s%s", (tarjetaoperandos->op1[0]!='\0' && tarjetaoperandos->op2[0]!='\0') ? ",":"", tarjetaoperandos->op2[0]!='\0' ? " ":"", tarjetaoperandos->op2);
        !           127: 
        !           128:     printf("   ");
        !           129:     
        !           130:     printf("(long:%d", tarjetaoperandos->longitud);
        !           131:        switch(tarjetaoperandos->salto)
        !           132:        {
        !           133:                case INCONDICIONAL:
        !           134:                printf(" salto:INCONDICIONAL");
        !           135:                break;
        !           136: 
        !           137:                case NO_SALTO:
        !           138:                printf(" salto:NO SALTO");
        !           139:                break;
        !           140: 
        !           141:                case TOMADO:
        !           142:                printf(" salto:TOMADO");
        !           143:                break;
        !           144: 
        !           145:                case NOTOMADO:
        !           146:                printf(" salto:NO TOMADO");
        !           147:                break;
        !           148:        }
        !           149: 
        !           150:        printf(" ALU=%d", tarjetaoperandos->ciclosALU);
        !           151:     printf(" BIU=%d)\n", tarjetaoperandos->ciclosBIU);
        !           152: 
        !           153:     printf("\nExpl leido datos:    %s", tarjetaoperandos->leidoexpldatos);
        !           154:     printf("\nExpl leido dir:      %s", tarjetaoperandos->leidoexpldir);
        !           155:     printf("\nExpl leido pila:     %s", tarjetaoperandos->leidoexplpila);
        !           156:     printf("\nExpl leido estado:   %s", tarjetaoperandos->leidoexplestado);
        !           157:     printf("\nExpl escrito datos:  %s", tarjetaoperandos->escritoexpldatos);
        !           158:     printf("\nExpl escrito dir:    %s", tarjetaoperandos->escritoexpldir);
        !           159:     printf("\nExpl escrito pila:   %s", tarjetaoperandos->escritoexplpila);
        !           160:     printf("\nExpl escrito estado: %s", tarjetaoperandos->escritoexplestado);
        !           161:     printf("\nImpl leido datos:    %s", tarjetaoperandos->leidoimpldatos);
        !           162:     printf("\nImpl leido dir:      %s", tarjetaoperandos->leidoimpldir);
        !           163:     printf("\nImpl leido pila:     %s", tarjetaoperandos->leidoimplpila);
        !           164:     printf("\nImpl leido estado:   %s", tarjetaoperandos->leidoimplestado);
        !           165:     printf("\nImpl escrito datos:  %s", tarjetaoperandos->escritoimpldatos);
        !           166:     printf("\nImpl escrito dir:    %s", tarjetaoperandos->escritoimpldir);
        !           167:     printf("\nImpl escrito pila:   %s", tarjetaoperandos->escritoimplpila);
        !           168:     printf("\nImpl escrito estado: %s", tarjetaoperandos->escritoimplestado);
        !           169: 
        !           170:     printf("\n");
        !           171: 
        !           172:     _getch();
        !           173: }
        !           174: 
        !           175: /* no se han programado las notificaciones ya que esta función */
        !           176: /* solamente tiene sentido mientras se depura la aplicación */
        !           177: void CrearFicheroDB (char *fichero, int idtabla)
        !           178: {
        !           179:        FILE *handle;
        !           180:        int i;
        !           181: 
        !           182:        /* los ficheros van a tener el formato de texto EXCEL */
        !           183:        /* al nombre del fichero le asigno la extensión .XLS */
        !           184: 
        !           185:        strcat(fichero, ".xls");
        !           186: 
        !           187:        switch(idtabla)
        !           188:        {
        !           189:                case TABLA_NEMONICOS:
        !           190:                /* abro el fichero */
        !           191:                if((handle  = fopen(fichero, "w")) != NULL)
        !           192:                {
        !           193:                        printf("El fichero %s se ha abierto con éxito\n", fichero);
        !           194: 
        !           195:                        /* escribo una pequeña cabecera */
        !           196:                        fprintf(handle, "BASE DE DATOS DE NEMÓNICOS\n\n");
        !           197:                        fprintf(handle, "%s\t", "índice");
        !           198:                        fprintf(handle, "%s\t", "nemónico");
        !           199:                        fprintf(handle, "%s\t", "tipo");
        !           200:                        fprintf(handle, "%s\t", "implicitos_escritos");
        !           201:                        fprintf(handle, "%s\t", "implicitos_leidos");
        !           202:                        fprintf(handle, "%s\t", "modo_op1");
        !           203:                        fprintf(handle, "%s\t", "modo_op2");
        !           204:                        fprintf(handle, "%s\n", "cuenta");
        !           205:                        
        !           206:                        /* copio la base de datos al fichero con formato EXCEL */
        !           207:                        for(i=0; i<num_nemonicos; i++)
        !           208:                        {
        !           209:                                fprintf(handle, "%d\t%s\t", i+1, nemonicos[i].nemonico);
        !           210:                                fprintf(handle, "%d\t", nemonicos[i].tipo);
        !           211:                                fprintf(handle, "%s\t", nemonicos[i].implicitos_escritos);
        !           212:                                fprintf(handle, "%s\t", nemonicos[i].implicitos_leidos);
        !           213:                                fprintf(handle, "%d\t", nemonicos[i].modo_op1);
        !           214:                                fprintf(handle, "%d\t", nemonicos[i].modo_op2);
        !           215:                                fprintf(handle, "%u\n", nemonicos[i].cuenta);
        !           216:                        }
        !           217: 
        !           218:                        /* cierro el fichero */
        !           219:                        if(fclose(handle)) printf("El fichero %s no se ha podido cerrar\n", fichero);
        !           220:                }
        !           221:                else printf("El fichero %s no se ha podido abrir\n", fichero);
        !           222:                break;
        !           223: 
        !           224:                case TABLA_SIMBOLOS:
        !           225:                /* abro el fichero */
        !           226:                if((handle  = fopen(fichero, "w")) != NULL)
        !           227:                {
        !           228:                        printf("El fichero %s se ha abierto con éxito\n", fichero);
        !           229: 
        !           230:                        /* escribo una pequeña cabecera */
        !           231:                        fprintf(handle, "BASE DE DATOS DE UBICACIONES\n\n");
        !           232:                        fprintf(handle, "%s\t", "índice");
        !           233:                        fprintf(handle, "%s\t", "símbolo");
        !           234:                        fprintf(handle, "%s\t", "tipo");
        !           235:                        fprintf(handle, "%s\t", "dependencias");
        !           236:                        fprintf(handle, "%s\t", "segmento");
        !           237:                        fprintf(handle, "%s\t", "lecturas");
        !           238:                        fprintf(handle, "%s\n", "escrituras");
        !           239:                        
        !           240:                        /* copio la base de datos al fichero con formato EXCEL */
        !           241:                        for(i=0; i<num_simbolos; i++)
        !           242:                        {
        !           243:                                fprintf(handle, "%d\t%s\t", i+1, simbolos[i].simbolo);
        !           244:                                fprintf(handle, "%d\t", simbolos[i].tipo);
        !           245:                                fprintf(handle, "%s\t", simbolos[i].dependencias);
        !           246:                                fprintf(handle, "%d\t", simbolos[i].segmento);
        !           247:                                fprintf(handle, "%u\t", simbolos[i].lecturas);
        !           248:                                fprintf(handle, "%u\n", simbolos[i].escrituras);
        !           249:                        }
        !           250: 
        !           251:                        /* cierro el fichero */
        !           252:                        if(fclose(handle)) printf("El fichero %s no se ha podido cerrar\n", fichero);
        !           253:                }
        !           254:                else printf("El fichero %s no se ha podido abrir\n", fichero);
        !           255:                break;
        !           256: 
        !           257:                case TABLA_CICLOS:
        !           258:                /* abro el fichero */
        !           259:                if((handle  = fopen(fichero, "w")) != NULL)
        !           260:                {
        !           261:                        printf("El fichero %s se ha abierto con éxito\n", fichero);
        !           262: 
        !           263:                        /* escribo una pequeña cabecera */
        !           264:                        fprintf(handle, "BASE DE DATOS DE TIEMPOS DE EJECUCIÓN\n\n");
        !           265:                        fprintf(handle, "%s\t", "índice");
        !           266:                        fprintf(handle, "%s\t", "identificador");
        !           267:                        fprintf(handle, "%s\n", "ciclos");
        !           268:                        
        !           269:                        /* copio la base de datos al fichero con formato EXCEL */
        !           270:                        for(i=0; i<num_tiempos; i++)
        !           271:                        {
        !           272:                                fprintf(handle, "%d\t%s\t", i+1, ciclos[i].identificador);
        !           273:                                fprintf(handle, "%d\n", ciclos[i].ciclos);
        !           274:                        }
        !           275: 
        !           276:                        /* cierro el fichero */
        !           277:                        if(fclose(handle)) printf("El fichero %s no se ha podido cerrar\n", fichero);
        !           278:                }
        !           279:                else printf("El fichero %s no se ha podido abrir\n", fichero);
        !           280:                break;
        !           281:        }
        !           282: }

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