/////////////////////// /// JD. /// /// /// /// ùFuTuRe ViSiOnù /// ////////////////////////////////////////////////////////////////////////////// /// Nombre: Eprom-II.CPP /// /// Modulo: Principal /// /// Descripci¢n: Programador de Eprom's con ampliaci¢n del numero /// /// disponible de las mismas sin necesidad de /// /// recompilar nada. /// /// /// /// Autor: Jos‚ David Guill‚n Dominguez /// /// Fecha: XX - XX - 1995 /// /// /// /// Comentario: -- Primera utilizaci¢n de mi libreria ( v. BETA ) /// /// con proposito de aplicaci¢n final. /// /// /// /// Compilador Borland C++ 3.0 /// ////////////////////////////////////////////////////////////////////////////// //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Librerias ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ #include #include #include #include #include #include #include #include #include #include #include "..\..\jd_lib\make_bot.h" // Fuciones de MAKE_BOTON #include "EPROM-ii.h" //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Main ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û ( Sin comentario ) Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ int main(void){ if( carga_botones("Eprom.JDf") != 1 ) // Carga botones del fichero "botones.p1" return 1; FILE *fichero; if( Lee_Eproms(fichero) != 1 ) // Carga las Eproms disponibles. return 1; InicializaPc(); // No tengo ni idea de lo que estaba // inicializando aqui. // Ya lo he mirado: // Inicializo los Campos... Initialize( 9, 2 ); // Inicializa el Modo Gr fico Menu_de_Edicion(); // Inicializa la Edici¢n farfree(S_Eprom); // Liberamos la memoria de los restorecrtmode(); // distintos tipos de Eprom. return 0; } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Menu de Edicion ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Editar y llevar el control de los ficheros para Eprom Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void Menu_de_Edicion(void){ CurrRowEprom1 = 1; CurrColEprom1 = 3; CurrTopLineEprom = 1; int ok = 0; Imprime_Estaticos( 1, "Eprom.JDf" ); // Imprime botones estaticos 'Seccion 1' Imprime_Secuencia(1); // Imprime secuencia 1. Imprime_Estaticos( 2, "Eprom.JDf" ); // Imprime Textos ( 1 ), secuencia 1 Imprime_Eprom_Actual(); Fuente( 2, 6 ); Abre_Ficha_Eprom(); PrintWholeScreenEprom(); GetLineEprom(); EditCursorEprom(0); do{ // Bucle infinito switch( Comprueba_Secuencia( 1 ) ) { // Iniciamos comprobacion case 0: // No se pulso ningun BOTON while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER CompruebaLineasEprom(); EditCursorEprom(0); break; case -2: // No se pulso ningun BOTON // pero hay una tecla disponible... key = getch(); if ( isprint(key) || isspace(key) ){ EditCursorEprom(0); if(key!=13) ungetch(key); Edit_Item_Eprom(); EditCursorEprom(0); } break; case -1: // Hay una tecla especial en BUFFER EditCursorEprom(1); key = getch(); switch( key ){ // Flecha Arriba case 72: Mueve_Arriba_Eprom(); break; // Flecha Izquierda case 75: case 15: CurrColEprom1--; if ( CurrColEprom1<1 ) CurrColEprom1=4; break; // Flecha Derecha case 77: case 9: CurrColEprom1++; if ( CurrColEprom1>4 ) CurrColEprom1=1; break; // Flecha Abajo case 80: Mueve_Abajo_Eprom(); break; // Buscar F2 case 60: // BuscarEprom(); break; // Imprimir Compras F5 case 63: // Imprimir_Eprom(); break; // F9 --> A¥ADIR case 67: case 82: AddRecordEprom(); Eprom1.Direccion = 0; PutLineEprom(); PrintWholeScreenEprom(); GetLineEprom(); EditCursorEprom(0); break; // F10 -> BORRAR case 68: case 83: DeleteRecordEprom(); break; // INICIO case 71: CurrColEprom1 = 1; break; // FIN case 79: CurrColEprom1 = 4; break; // ReP g case 73: // CurrRow = 1; if( CurrTopLineEprom > /*28*/25 ) { CurrTopLineEprom -= /*28*/25; } else { CurrTopLineEprom = 1; } if( CurrTopLineEprom < 1 ) { CurrTopLineEprom = 1; } PrintWholeScreenEprom(); GetLineEprom(); EditCursorEprom(0); break; // AvP g case 81: // CurrRow = 1; CurrTopLineEprom += /*28*/25; if ( (CurrTopLineEprom+CurrRowEprom1) > Eprom1_inx.Fin) { CurrTopLineEprom = Eprom1_inx.Fin; CurrRowEprom1 = 1; } if (CurrTopLineEprom==0) CurrTopLineEprom = 1; PrintWholeScreenEprom(); GetLineEprom(); EditCursorEprom(0); break; default: BEEP(); break; } EditCursorEprom(0); break; // Escoger EPROM case 1: Escoge_Eprom(); break; // Direcci¢n incial a continuar case 2: if ( Modifica_Direccion == 1 ){ Modifica_Direccion = 0; setcolor(0); setfillstyle(SOLID_FILL, 0); bar(617, 103, 628, 112); }else{ Modifica_Direccion = 1; setcolor(4/*58*/); setfillstyle(SOLID_FILL, 4/*58*/); bar(617, 103, 628, 112); } break; // Imprimir Datos de Eprom case 3: Imprimir_Eprom(0,0); break; // Cargar Fichero case 4: Salvar_Cargar(2); break; // Salvar Fichero case 5: Salvar_Cargar(1); break; // Leer Datos de Eprom case 6: break; // Cargar Datos en Eprom case 7: break; // Salir case 8: ok = 1; break; } }while(!ok); fclose(Eprom); } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Inicializa las estructructuras Û //Û internas de boton... Û //Û ---------------------------------- Û //Û Como las de *.JDF pero INTERNAS Û //Û ---------------------------------- Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void InicializaPc(void){ PC[0].up = 50; PC[0].down = 440; PC[0].left = 10; PC[0].right = 122; PC[1].up = 50; PC[1].down = 440; PC[1].left = 132; PC[1].right = 295; PC[2].up = 50; PC[2].down = 440; PC[2].left = 315; PC[2].right = 398; PC[3].up = 50; PC[3].down = 440; PC[3].left = 408; PC[3].right = 535; } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û CARGA LAS EPROM'S DEL DISCO... Û //Û Û //Û FORMATO *.DAT dise¤ado por J.D. Û //Û ---------------------------------- Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ int Lee_Eproms(FILE *fichero) { char ch, buffer[15]; int temp_num, temp_b; long numero; /* int SiZe_BoToN = 0, inc_Botones = -1; */ int EpromActual = 0; if ( (fichero=fopen("Eprom.Dat","r"))==NULL ) exit(1); ch=fgetc(fichero); //Lee el primer caracter while (ch!=EOF) { //Lee hasta fin de fichero if (ch=='*') //Linea con comentario while (ch!=EOL && ch!=EOF) ch=fgetc(fichero); if (ch=='N') { //Numero de secuencias numero=0; ch=fgetc(fichero); while (ch!=EOL && ch!=EOF) { if (ch>='0' && ch<='9') numero=numero*10+ch-48; ch=fgetc(fichero); } N_Eprom = numero; if ( (S_Eprom = (struct Eprom_Structura far *)farrealloc(S_Eprom, sizeof( struct Eprom_Structura )*N_Eprom )) == NULL) { restorecrtmode(); printf("\nNo Hay suficiente Memoria, para cargar los tipos de Eprom\n\n"); exit (1); } } if (ch=='%') { //Numero de Botones en la secuencia numero=0; ch=fgetc(fichero); while (ch!=EOL && ch!=EOF && ch!=',') { if (ch>='0' && ch<='9') numero=numero*10+ch-48; ch=fgetc(fichero); } S_Eprom[EpromActual].TP = numero; numero=0; ch=fgetc(fichero); while (ch!=EOL && ch!=EOF && ch!=',') { if (ch>='0' && ch<='9') numero=numero*10+ch-48; ch=fgetc(fichero); } S_Eprom[EpromActual].FI = numero; numero=0; ch=fgetc(fichero); while (ch!=EOL && ch!=EOF && ch!=',') { if (ch>='0' && ch<='9') numero=numero*10+ch-48; ch=fgetc(fichero); } S_Eprom[EpromActual].NP = numero; numero=0; ch=fgetc(fichero); while (ch!=EOL && ch!=EOF && ch!=',') { if (ch>='0' && ch<='9') numero=numero*10+ch-48; ch=fgetc(fichero); } S_Eprom[EpromActual].DM = numero; numero=0; ch=fgetc(fichero); while (ch!=EOL && ch!=EOF && ch!=',') { if (ch>='0' && ch<='9') numero=numero*10+ch-48; ch=fgetc(fichero); } S_Eprom[EpromActual].BD = numero; numero=0; ch=fgetc(fichero); while (ch!=EOL && ch!=EOF && ch!=',') { if (ch>='0' && ch<='9') numero=numero*10+ch-48; ch=fgetc(fichero); } S_Eprom[EpromActual].ID = numero; numero=0; ch=fgetc(fichero); strcpy(buffer, "\0"); while (ch!=EOL && ch!=EOF && ch!='.' && (numero+1)<12+1) { ch=fgetc(fichero); if(ch!='.') { buffer[numero] = ch; numero++; } } buffer[numero] = '\0'; _fstrcpy(S_Eprom[EpromActual].ID_TEXT, (char near *)buffer); EpromActual++; } if (ch!=EOF) ch=fgetc(fichero); } return OK; } void BEEP(void){ sound(440); delay(50); nosound(); } //////// Funcion dise¤ada para la introducion lineal de caracteres Gr ficos //////// para el programa CATALOGO 4.0, por Jos‚ David Guill‚n int InputCadenaG_l(char *s, int numalp, int lmax, int cc, int cf, struct boton Campo, int RoW) { char buf[81]; // Buffer de linea int ls; // longitud cadena char *s1; // puntero a cadena inicial int i, c, ok; s1 = s; // inicio cadena setcolor(cf); // pone color a 0 para borrar setfillstyle(SOLID_FILL, cf); bar(Campo.left+4, Campo.up+5+RoW*15, Campo.right-4, Campo.up+4+RoW*15 + 16); setcolor(cc); // devuelve el color a su estado outtextxy( Campo.left+4, Campo.up+/*3*/3+RoW*/*9*//*14*/15, s ); ls = strlen ( s ); // Longitud de actual if ( ls < lmax ) { setcolor(4); outtextxy( Campo.left+4+textwidth( s1 ), Campo.up+3+RoW*/*9*//*14*/15, "þ"); } s += ls; // se coloca en el final do{ c = getch(); // obtiene tecla ok = ( c == 13 || c == 0); // 13 = INTRO || Especiales if ( c == 8 && ls > 0 && !ok ) { // 8 = Back Space ls--; s--; *s = '\0'; setcolor(cf); setfillstyle(SOLID_FILL, cf); bar(Campo.left+4, Campo.up+5+RoW*15, Campo.right-4, Campo.up+4+RoW*15 + 16); setcolor(cc); outtextxy( Campo.left+4, Campo.up+3+RoW*/*9*//*14*/15, s1 ); setcolor(4); outtextxy( Campo.left+4+textwidth( s1 ), Campo.up+/*3*/2+RoW*/*9*//*14*/15, "þ"); setcolor(cc); } else { if ( !numalp && c >= 32 && c <= 254 /* isprint(c) */ && ls < lmax) { *s++ = c; ls++; *s = '\0'; setcolor(cf); setfillstyle(SOLID_FILL, cf); bar(Campo.left+4, Campo.up+5+RoW*15, Campo.right-4, Campo.up+4+RoW*/*9*//*14*/15 + /*9*/16); setcolor(cc); outtextxy( Campo.left+4, Campo.up+3+RoW*/*9*//*14*/15, s1 ); if ( ls < lmax ) { setcolor(4); outtextxy( Campo.left+4+textwidth( s1 ), Campo.up+3+RoW*/*9*//*14*/15, "þ"); setcolor(cc); } } else { if ( numalp && isdigit(c) && ls < lmax) { *s++ = c; ls++; *s = '\0'; // Cero final setcolor(cf); setfillstyle(SOLID_FILL, cf); bar(Campo.left+4, Campo.up+5+RoW*15, Campo.right-4, Campo.up+4+RoW*/*9*//*14*/15 + /*9*/16); setcolor(cc); outtextxy( Campo.left+4, Campo.up+3+RoW*/*9*//*14*/15, s1 ); if ( ls < lmax ) { setcolor(4); outtextxy( Campo.left+4+textwidth( s1 ), Campo.up+3+RoW*/*9*//*14*/15, "þ"); setcolor(cc); } } else BEEP(); } } }while(!ok); ok = 1; *s = ' '; while( ok ) { if(*s==' ') { *s = '\0'; s--; } else { s++; ok = 0; } } *s = '\0'; while(kbhit()) getch(); // Vacia Buffer impidiendo falsas // pulsaciones... return ls; } //////// Funcion dise¤ada para la introducion lineal de caracteres Gr ficos //////// para el programa CATALOGO 4.0, por Jos‚ David Guill‚n //////// readactada para la introducion dependiente de la fuente en el //////// programa EPROM_II. int InputCadenaG_l2(char *s, int numalp, int lmax, int cc, int cf, struct boton Campo, int RoW) { char buf[81]; // Buffer de linea int ls; // longitud cadena char *s1; // puntero a cadena inicial int i, c, ok; s1 = s; // inicio cadena setcolor(cf); // pone color a 0 para borrar setfillstyle(SOLID_FILL, cf); bar(Campo.left+3, Campo.up+3+(RoW-1)*10+2, Campo.right-3, Campo.up+3+(RoW-1)*10/*14*//*15*/ + /*9*/10); setcolor(cc); // devuelve el color a su estado outtextxy( Campo.left+4, Campo.up+2+(RoW-1)*10, s ); ls = strlen ( s ); // Longitud de actual if ( ls < lmax ) { setcolor(4); outtextxy( Campo.left+4, Campo.up+/*3*/2+(RoW-1)*10/*14*//*15*/, s1 ); } s += ls; // se coloca en el final do{ c = getch(); // obtiene tecla ok = ( c == 13 || c == 0); // 13 = INTRO || Especiales if ( c == 8 && ls > 0 && !ok ) { // 8 = Back Space ls--; s--; *s = '\0'; setcolor(cf); setfillstyle(SOLID_FILL, cf); // bar(Campo.left+3, Campo.up+3+(RoW-1)*12/*14*//*12*/+2, Campo.right-3, Campo.up+3+(RoW-1)*10/*14*//*15*/ + /*9*/10); bar(Campo.left+3, Campo.up+3+(RoW-1)*10+2, Campo.right-3, Campo.up+3+(RoW-1)*10/*14*//*15*/ + /*9*/10); setcolor(cc); outtextxy( Campo.left+4, Campo.up+/*3*/2+(RoW-1)*10/*14*//*15*/, s1 ); setcolor(4); outtextxy( Campo.left+4+textwidth( s1 ), Campo.up+/*3*/2+(RoW-1)*/*9*//*14*/10, "þ"); setcolor(cc); } else { if ( !numalp && c >= 32 && c <= 254 /* isprint(c) */ && ls < lmax) { *s++ = c; ls++; *s = '\0'; setcolor(cf); setfillstyle(SOLID_FILL, cf); bar(Campo.left+3, Campo.up+3+(RoW-1)*10+2, Campo.right-3, Campo.up+3+(RoW-1)*10/*14*//*15*/ + /*9*/10); // bar(Campo.left+3, Campo.up+3+(RoW-1)*12/*14*//*15*/+2, Campo.right-3, Campo.up+3+(RoW-1)*10/*14*//*15*/ + /*9*/10); setcolor(cc); outtextxy( Campo.left+4, Campo.up+/*3*/2+(RoW-1)*10/*14*//*15*/, s1 ); if ( ls < lmax ) { setcolor(4); // outtextxy( Campo.left+2, Campo.up+/*3*/2+(RoW-1)*12/*14*//*15*/, s ); outtextxy( Campo.left+4+textwidth( s1 ), Campo.up+/*3*/2+(RoW-1)*/*9*//*14*/10, "þ"); setcolor(cc); } } else { if ( numalp && isdigit(c) && ls < lmax) { *s++ = c; ls++; *s = '\0'; // Cero final setcolor(cf); setfillstyle(SOLID_FILL, cf); // bar(Campo.left+3, Campo.up+3+(RoW-1)*10/*14*//*15*/+2, Campo.right-3, Campo.up+3+(RoW-1)*10/*14*//*15*/ + /*9*/10); bar(Campo.left+3, Campo.up+3+(RoW-1)*10+2, Campo.right-3, Campo.up+3+(RoW-1)*10/*14*//*15*/ + /*9*/10); // bar(Campo.left+2, Campo.up+3+RoW*/*9*/14+2, Campo.right-2, Campo.up+3+RoW*/*9*/14 + /*9*/16); setcolor(cc); outtextxy( Campo.left+4, Campo.up+/*3*/2+(RoW-1)*10/*14*//*15*/, s1 ); // outtextxy( Campo.left+2, Campo.up+/*3*/2+RoW*/*9*//*14*/15, s1 ); if ( ls < lmax ) { setcolor(4); outtextxy( Campo.left+4, Campo.up+/*3*/2+(RoW-1)*10/*14*//*15*/, s1 ); // outtextxy( Campo.left+2+textwidth( s1 ), Campo.up+/*3*/+RoW*/*9*//*14*/15, "þ"); setcolor(cc); } } else BEEP(); } } }while(!ok); ok = 1; *s = ' '; while( ok ) { if(*s==' ') { *s = '\0'; s--; } else { s++; ok = 0; } } *s = '\0'; while(kbhit()) getch(); // Vacia Buffer impidiendo falsas // pulsaciones... return ls; } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Imprime la Emprom dentro del Boton Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void Imprime_Eprom_Actual(void){ setcolor(0); setfillstyle(SOLID_FILL, 0); bar(552, 42, 628, 53); Fuente( 2, 4 ); setcolor(63); outtextxy(555, 42, S_Eprom[CurrEprom].ID_TEXT); } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Cambia de Fuente y tama¤o Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void Fuente( int Font, int size){ /* select the registered font */ settextstyle( Font, HORIZ_DIR, size); settextjustify(LEFT_TEXT, RIGHT_TEXT); } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Escoge una de las eproms del Archivo Û //Û E P R O M . D A T Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void Escoge_Eprom(void){ char buffer[80]; int acabar = 0, key; int CurrRowCE=1, CurrTopLineCE = 0; Imprime_Estaticos( 3, "Eprom.JDf" ); // Imprime Textos ( 1 ), secuencia 1 sprintf(buffer, " % 3d", N_Eprom); setcolor(2); outtextxy(175, 157, buffer); setcolor(0); outtextxy(176, 158, buffer); setcolor(63); PrintEprom_CE_WholeScreen(CurrTopLineCE); do{ EditCursorEprom_CE(0, CurrRowCE, CurrTopLineCE); while(!kbhit()); key = getch(); if(key == 13 ) { CurrEprom = CurrRowCE + CurrTopLineCE - 1; acabar = 1; } else if(key == 0 ) { EditCursorEprom_CE(1, CurrRowCE, CurrTopLineCE); switch(getch()){ // Flecha ARRIBA case 72: if( (CurrRowCE+CurrTopLineCE)!=1 ){ if(CurrRowCE == 1) { CurrTopLineCE--; PrintEprom_CE_WholeScreen(CurrTopLineCE); } else CurrRowCE--; } break; // Flecha ABAJO case 80: if( (CurrRowCE+CurrTopLineCE) EPROM Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ int Escribe_Eprom(void){ char buffer[80]; struct Eprom_s *Eprom2; struct byte_de_long { unsigned char P3; unsigned char P2; unsigned char P1; unsigned char P0; }; union lngchr{ long Numero; struct byte_de_long Byte; } Division; ////////////////////////////// // long --> FF FF FF FF --> 3 34 65 59 // P0 P1 P2 P3 Dec.89 101 52 3 ////////////////////////////// Hex.59 65 34 3 int TP, cont; if( (Eprom2 = (struct Eprom_s *)farmalloc( sizeof(struct Eprom_s) * 100 )) == NULL ) { return Operacion_Fallida; } //////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////// //////// TP --> case, escoge la tension de la eprom actual a la que le //////// corresponde un c¢digo en Hex. a enviar a la placa. ( TP ) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////// switch( S_Eprom[CurrEprom].TP ){ case 250: TP = 0x1; break; case 215: TP = 0x0; break; case 125: TP = 0x4; break; default: return Operacion_Fallida; // Si la tensi¢n es incorrecta, no programa } cont = 0; longitud = 0; Carga_Cien_Elementos(Eprom2); for(int i=0; i100) { cont=0; Carga_Cien_Elementos(Eprom2); } } // Termina operacion outportb( 0x303, (0) ); /* char TP; char FI; char NP; char DM; char BD; long ID; char ID_TEXT[15]; }; struct Eprom_Structura far *S_Eprom; */ // struct Eprom_s { long Direccion; long Dato; }; return 1; } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Manda el programa de Û //Û EPROM ---> DISCO Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ int Leer_en_Eprom(void){ int LSJ = sizeof(struct JD); int LSI = sizeof(struct Eprom_inx); int LSC = sizeof(struct Eprom_s); char buffer[80]; struct Eprom_s *Eprom2; struct byte_de_long { unsigned char P3; unsigned char P2; unsigned char P1; unsigned char P0; }; union lngchr{ long Numero; struct byte_de_long Byte; } Division; ////////////////////////////// // long --> FF FF FF FF --> 3 34 65 59 // P0 P1 P2 P3 Dec.89 101 52 3 ////////////////////////////// Hex.59 65 34 3 int TP, cont; ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// fclose(Eprom); // Cerramos el archivo para poder borrarlo remove("Eprom_JD.TMP"); // Y lo borramos, para reiniciarlo | Abre_Ficha_Eprom(); // <<<<---<<<---<<--<---------------Ù ////////////////////////////////////////////////////////////////////////////// CurrRowEprom1 = 1; // Inicializamos todo, para asegurar total CurrColEprom1 = 3; // capacidad de correccion de errores, sobre CurrTopLineEprom = 1; // la marcha... ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// outport( 0x303, 0x19 ); for(int i=0; i< pow(2, ( (S_Eprom[CurrEprom].DM)) ); i++) { // Tension outport( 0x303, TP ); // Direcci¢n Division.Numero = Eprom2[cont].Direccion; outportb( 0x300, Division.Byte.P1 ); outportb( 0x301, Division.Byte.P0 ); // Dato Division.Numero = Eprom2[cont].Dato; outportb( 0x302, Division.Byte.P0 ); // Impulso outportb( 0x303, (TP + 16) ); //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //ÛÛ Retardo_____----_____ ÛÛ //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ // Barra_de_estado(); delay(S_Eprom[CurrEprom].FI); // while( ( clock() - Retrazo ) / CLK_TCK) / 1000) <= 50 ); fseek(Eprom, (long)LSJ + LSI + ( LSC * i ), SEEK_SET); fwrite(&Eprom1, LSC, 1, Eprom); } // Termina operacion outportb( 0x303, (1) ); ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// PrintWholeScreenEprom(); // Imprimimos el contenido de la EPROM leida GetLineEprom(); // Obtenemos la primera Linea EditCursorEprom(0); // Y la marcamos... ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// return 1; // Todo ha ido bien... } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Carga 100 datos a memoria y los Û //Û indexa a un puntero a la estructura..Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void Carga_Cien_Elementos(struct Eprom_s *Datos){ int LSJ = sizeof(struct JD); int LSI = sizeof(struct Eprom_inx); int LSC = sizeof(struct Eprom_s); int contador; contador = 0; do{ fseek(Eprom, (long)LSJ + LSI + ( LSC * longitud ), SEEK_SET); fread(&Datos[contador], LSC, 1, Eprom); longitud++; }while(contador<100 && longitud <= Eprom1_inx.Fin); } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Men£ SALVAR <---> CARGAR Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void Salvar_Cargar(int S_C){ int ok = 0, open_file = 1, cont = 0; int LSJ = sizeof(struct JD); CurrRowFile=1; CurrTopFile = 0; CurrColFile=1; CurrRowCom = 1; strcpy(Archivo, ArchivoDatos); PC[1].up =/*155*/153; PC[1].down = 170; PC[1].left = 270; PC[1].right = 465; PC[2].up = 201; PC[2].down = 249; PC[2].left = 270; PC[2].right = 465; //******* Salvar ---> 1 //******* Cargar ---> 2 Imprime_Estaticos( 4, "Eprom.JDf" ); // Imprime botones estaticos 'Seccion 1' Lee_Archivos_Presentes(S_C); setcolor(63); Fuente( 2, 4 ); PrintWholeScreenFile(); CurrColFile=2; EditCursorFile(1); CurrColFile=3; if(S_C==2) { LeeCabecera(&Archivo_list[0]); PrintWholeScreenCabecera(); } else PrintWholeScreenFile(); CurrColFile=1; EditCursorFile(0); do{ // Bucle infinito switch( Comprueba_Secuencia( 2 ) ) { // Iniciamos comprobacion case 0: // No se pulso ningun BOTON while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER break; case -2: // No se pulso ningun BOTON // pero hay una tecla disponible... key = getch(); if ( isprint(key) || isspace(key) ){ EditCursorFile(0); if(CurrColFile == 1 ) { strcpy(Archivo, &Archivo_list[13*(CurrRowFile + CurrTopFile - 1)] ); cont = 0; while( Archivo[cont] != '.' ) cont++; Archivo[cont] = '\0'; CurrColFile=2; EditCursorFile(1); CurrColFile=1; } else { if(key!=13) ungetch(key); Edit_Item_File(); } EditCursorFile(0); } break; case -1: // Hay una tecla especial en BUFFER EditCursorFile(1); key = getch(); switch( key ){ // Flecha Arriba case 72: if(CurrColFile == 1) { if( (CurrRowFile + CurrTopFile) != 1 ) if(CurrRowFile == 1) { CurrTopFile--; PrintWholeScreenFile(); } else CurrRowFile--; if(S_C==2) { LeeCabecera(&Archivo_list[13*(CurrRowFile + CurrTopFile - 1)]); CurrColFile=3; PrintWholeScreenCabecera(); CurrColFile=1; } } else if(CurrColFile == 3) { CurrRowCom--; if(CurrRowCom<1) CurrRowCom = 4; } break; // Flecha Izquierda case 75: case 15: CurrColFile--; if ( CurrColFile<1 ) CurrColFile=3; break; // Flecha Derecha case 77: case 9: CurrColFile++; if ( CurrColFile>3 ) CurrColFile=1; break; // Flecha Abajo case 80: if(CurrColFile == 1) { if( (CurrRowFile + CurrTopFile) < N_Files ) if(CurrRowFile == 12) { CurrTopFile++; PrintWholeScreenFile(); } else CurrRowFile++; if(S_C==2) { LeeCabecera(&Archivo_list[13*(CurrRowFile + CurrTopFile - 1)]); CurrColFile=3; PrintWholeScreenCabecera(); CurrColFile=1; } } else if(CurrColFile == 3) { CurrRowCom++; if(CurrRowCom>4) CurrRowCom = 1; } break; } EditCursorFile(0); break; // Aceptar case 1: // ******* Salvar ---> 1 // ******* Cargar ---> 2 if(S_C==1) { if(open_file == 1){ rewind(Eprom); fwrite(&cabecera, LSJ, 1, Eprom); fclose(Eprom); open_file = 0; } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ // Copia el fichero *.TMP a *.PDE //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ strcat(Archivo, ".PDE"); fcopy( "Eprom_JD.TMP", Archivo ); if ( Abre_Ficha_Eprom() == 1 ) { open_file = 1; ok = 1; } } else { if(open_file == 1){ fclose(Eprom); open_file = 0; } if( strcmp( Archivo, " < NUEVO > ") == 0 ){ remove("Eprom_JD.TMP"); CurrRowEprom1 = 1; } else { //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ // Copia el fichero *.PDE a *.TMP //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ strcat(Archivo, ".PDE"); fcopy( Archivo, "Eprom_JD.TMP"); } if ( Abre_Ficha_Eprom() == 1 ) ok = 1; } break; // Direcci¢n incial a continuar case 2: if(open_file == 0 ){ // remove("Eprom_JD.TMP"); CurrRowEprom1 = 1; } ok = 1; break; default: BEEP(); break; } }while(!ok); free(Archivo_list); InicializaPc(); Imprime_Estaticos( 2, "Eprom.JDf" ); // Imprime Textos ( 1 ), secuencia 1 Imprime_Eprom_Actual(); Fuente( 2, 6 ); PrintWholeScreenEprom(); GetLineEprom(); EditCursorEprom(0); } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Busca en el disco, archivos con el Û //Û formato *.PDE >>Programador de Eprom Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void Lee_Archivos_Presentes(int add_new){ struct ffblk ffblk; int done; N_Files=0; if(add_new==2) { N_Files++; if( ( Archivo_list = (char *)realloc( Archivo_list, ( (sizeof(char) )*N_Files ) ) ) == NULL) return; strcpy( &Archivo_list[ 13*(N_Files - 1)], " < NUEVO > "); }else { N_Files++; if( ( Archivo_list = (char *)realloc( Archivo_list, ( (sizeof(char) )*N_Files ) ) ) == NULL) return; strcpy( &Archivo_list[ 13*(N_Files - 1)], ""); } done = findfirst("*.PDE",&ffblk,0); while (!done) { N_Files++; if( (Archivo_list = (char *)realloc( Archivo_list, ((sizeof(char)*13)*N_Files) ) ) == NULL ) return; if(done==0) strcpy( &Archivo_list[ 13*(N_Files - 1)], ffblk.ff_name); done = findnext(&ffblk); } } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Imprime en Pantalla mientras quede Û //Û datos en el DISCO, o Espacio en Û //Û Pantalla.n Pantalla mientras quede Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void PrintWholeScreenFile(void){ char buffer[80]; //int TP, FI, NP, DM, BD; int CurrRowCE; if(CurrColFile==1) { setcolor(0); setfillstyle(SOLID_FILL, 0); bar( 177, 177, 263, 323); setcolor(63); for(CurrRowCE = 1; CurrRowCE < (12+1); CurrRowCE++) if ( (CurrTopFile + CurrRowCE ) <= N_Files ) { sprintf(buffer, "%13s", &Archivo_list[13*(CurrTopFile + CurrRowCE - 1)] ); outtextxy( 177, ( 178 + (CurrRowCE - 1)*10), buffer); } } else if(CurrColFile==3){ setcolor(0); setfillstyle(SOLID_FILL, 0); bar( 272, 202, 463, 248); setcolor(63); for(CurrRowCE = 1; CurrRowCE < (4+1); CurrRowCE++) { sprintf(buffer, "%s", cabecera.Comentario[(CurrRowCE-1)] ); outtextxy( 275, ( 204 + (CurrRowCE - 1)*10), buffer); } } } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Imprime en Pantalla mientras quede Û //Û datos en el DISCO, o Espacio en Û //Û Pantalla.n Pantalla mientras quede Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void PrintWholeScreenCabecera(void){ char buffer[80]; //int TP, FI, NP, DM, BD; int CurrRowCE; setcolor(0); setfillstyle(SOLID_FILL, 0); bar( 272, 202, 463, 248); setcolor(63); for(CurrRowCE = 1; CurrRowCE < (4+1); CurrRowCE++) { sprintf(buffer, "%s", cabecera2.Comentario[(CurrRowCE-1)] ); outtextxy( 275, ( 204 + (CurrRowCE - 1)*10), buffer); } } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Realza los datos de EPROMS a ser Û //Û editados cuando sean se¤alados por Û //Û el cursor. Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void EditCursorFile(int SH){ char buffer[80]; if (!SH) { setcolor(63); setfillstyle(SOLID_FILL, 63); } else { setcolor(0); setfillstyle(SOLID_FILL, 0); } if(CurrColFile==1) { bar( 177, 178+ ( CurrRowFile-1 )*10 + 2, 263, 178 + ( CurrRowFile - 1 )*10+10 ); if(!SH) setcolor(0); else Texto_Normal sprintf(buffer, "%13s", &Archivo_list[13*(CurrTopFile + CurrRowFile - 1)] ); outtextxy( 177, ( 178 + (CurrRowFile - 1)*10), buffer); } else if(CurrColFile==2){ bar(272, 157, 463, 168); if(!SH) setcolor(0); else Texto_Normal if(strlen(Archivo)<11) sprintf(buffer, " %8s.PDE", Archivo ); else sprintf(buffer, " %13s", Archivo ); outtextxy( 280, 156, buffer); // & 155, 270, 465, 170, 0, 56, 63, 1, 2 } else if(CurrColFile==3) { bar( 273, 204+ ( CurrRowCom-1 )*10 + 2, 462, 204 + ( CurrRowCom - 1 )*10+10 ); if(!SH) setcolor(0); else Texto_Normal sprintf(buffer, "%s", cabecera.Comentario[(CurrRowCom-1)] ); outtextxy( 275, ( 204 + (CurrRowCom - 1)*10), buffer); } } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Edita el Dato seleccionado por el Û //Û cursor, en carga y descarga de FILE Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void Edit_Item_File(void){ char buffer[80]; switch (CurrColFile) { case 2: // sprintf( buffer, "%s", Archivo); InputCadenaG_l2( Archivo, 0, 8, 63, 57, PC[1], 1); break; case 3: // sprintf( buffer, "%s", cabecera.Comentario[(CurrRowCom-1)]); InputCadenaG_l2( cabecera.Comentario[(CurrRowCom-1)], 0, 30, 63, 57, PC[2], CurrRowCom); break; default: return; } } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Abre_Ficha_Eprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Abre el archivo contenido en ArchivoDatos, y comprueba que sea Û //Û del formato adecuado y la versi¢n 1.1 Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ int LeeCabecera(char *fichero){ //ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ// //Û Comprueba apertura correcta de Indice, y Datos y creaci¢n... Û// //ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß// int LSJ = sizeof(struct JD); fclose(EpromC); if ( (EpromC = fopen( fichero, "rb"))==NULL) { strcpy(cabecera2.Comentario[0], "\0"); strcpy(cabecera2.Comentario[1], "Fichero no se puede abrir"); strcpy(cabecera2.Comentario[2], "\0"); strcpy(cabecera2.Comentario[3], "\0"); return (-1); } if ( fread(&cabecera2, LSJ, 1, EpromC) != 1 ) { restorecrtmode(); printf("NO SE PUDO LEER EN EL FICHERO: INDICE, temporal"); exit(1); } if(cabecera2.esc != 27 || cabecera2.pt != 7 || cabecera2.ef != 26 ) { strcpy(cabecera2.Comentario[0], "\0"); strcpy(cabecera2.Comentario[1], "Fichero no compatible"); strcpy(cabecera2.Comentario[2], "\0"); strcpy(cabecera2.Comentario[3], "\0"); return (-1); // Cabecera no valida ((ERROR LEYENDO ESTRUCTURAS)) } return 1; } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// //Û Û// //Û ÜÜÜ ÜÜ Ü Ü ÜÜÜÜÜ ÜÜ Ü Ü ÜÜ Û// //Û Û Û Û Û ÛÛ Û Û Û Û Û Û Û Û Û// //Û Ûßß ÛßßÛ Û ÛÛ Û ÛßßÛ Û Û ÛßßÛ Û// //Û Û Û Û Û Û Û Û Û ÛÜÜ ÛÜÜ Û Û Û// //Û Û// //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Mueve Abajo Eprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// //Û Û// //Û Realizar el Scroll Vertical hacia abajo y la gesti¢n de la Û// //Û rectificaci¢n al paso. ( Direcci¢n --> ON ) Û// //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ// void Mueve_Abajo_Eprom(void){ int CurrRecord = CurrTopLineEprom + CurrRowEprom1 - 1; int OldDir = Eprom1.Direccion; if (CurrRowEprom1==25) { if ( (CurrRecord - 1) >= Eprom1_inx.Fin) { BEEP(); EditCursorEprom(0); } else { // CurrTopLineEprom++; CurrRowEprom1=1; CurrTopLineEprom += /*28*/25; if ( (CurrTopLineEprom+CurrRowEprom1) > Eprom1_inx.Fin) { CurrTopLineEprom = Eprom1_inx.Fin; CurrRowEprom1 = 1; } if (CurrTopLineEprom==0) CurrTopLineEprom = 1; if ( Modifica_Direccion == 1 ) { Eprom1.Direccion = OldDir+1; PutLineEprom(); // PrintLineEprom(); } PrintWholeScreenEprom(); GetLineEprom(); } } else { if( (CurrRecord - 1) >= Eprom1_inx.Fin) { BEEP(); EditCursorEprom(0); } else { CurrRowEprom1++; GetLineEprom(); if ( Modifica_Direccion == 1 ) { Eprom1.Direccion = OldDir+1; PutLineEprom(); PrintLineEprom(); } } } } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Mueve Arriba Eprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Realizar el Scroll Vertical hacia arriba y la gesti¢n de la Û //Û rectificaci¢n al paso. ( Direcci¢n --> ON ) Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void Mueve_Arriba_Eprom(void){ int CurrRecord = CurrTopLineEprom + CurrRowEprom1 - 1; int OldDir = Eprom1.Direccion; if (CurrRowEprom1==1) { if ((CurrRecord - 1) <= 0) { BEEP(); EditCursorEprom(0); } else { // CurrTopLineEprom--; CurrRowEprom1=25; if( CurrTopLineEprom > /*28*/25 ) { CurrTopLineEprom -= /*28*/25; } else { CurrTopLineEprom = 1; } if( CurrTopLineEprom < 1 ) { CurrTopLineEprom = 1; } if ( Modifica_Direccion == 1 ) { Eprom1.Direccion = OldDir-1; PutLineEprom(); // PrintLineEprom(); } PrintWholeScreenEprom(); GetLineEprom(); } } else { if( (CurrRecord - 1) <= 0) BEEP(); else { CurrRowEprom1--; GetLineEprom(); if ( Modifica_Direccion == 1 ) { Eprom1.Direccion = OldDir-1; PutLineEprom(); PrintLineEprom(); } } } } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ EditCursorEprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Edita, (resalta o no), el cursor, (Barra situada sobre el campo) Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void EditCursorEprom(int ShowHide) { char Buffer[80]; int x, x2, y = 50; setcolor(7); setfillstyle(SOLID_FILL, 7); bar(12, 457, 545, 470); if (!ShowHide) { setcolor(63); setfillstyle(SOLID_FILL, 63); } else { setcolor(0); setfillstyle(SOLID_FILL, 0); } switch( CurrColEprom1 ){ case 1: x = 10; x2 = 122; break; case 2: x = 132; x2 = 295; break; case 3: x = 315; x2 = 398; break; case 4: x = 408; x2 = 535; break; default: break; } bar( (x+4), y+2+(CurrRowEprom1-1)*15+4, x2-4, y+4+((CurrRowEprom1)-1)*15+16); if(!ShowHide) setcolor(0); else Texto_Normal switch(CurrColEprom1){ case 1: sprintf(Buffer, "% 10lX", Eprom1.Direccion); outtextxy( x+4, (y+2)+(CurrRowEprom1-1)*15, Buffer ); outtextxy( 15, 455, "Direcci¢n ( HEXADECIMAL ) "); break; case 2: sprintf(Buffer, "% 15lu", Eprom1.Direccion); outtextxy( x+4, (y+2)+(CurrRowEprom1-1)*15, Buffer ); outtextxy( 15, 455, "Direcci¢n ( DECIMAL ) "); break; case 3: sprintf(Buffer, "% 7X", Eprom1.Dato); outtextxy( x+4, (y+2)+(CurrRowEprom1-1)*15, Buffer ); outtextxy( 15, 455, "Dato ( HEXADECIMAL ) "); break; case 4: sprintf(Buffer, "% 12u", Eprom1.Dato); outtextxy( x+4, (y+2)+(CurrRowEprom1-1)*15, Buffer ); outtextxy( 15, 455, "Dato ( DECIMAL ) "); break; } } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ PrintLineEprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Imprime una linea con todos los datos de la Eprom. Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void PrintLineEprom(void){ char Buffer[80]; int x, x2, y = 50; setcolor(0); setfillstyle(SOLID_FILL, 0); for(int i=1; i<=4; i++){ switch( i ){ case 1: x = 10; x2 = 122; break; case 2: x = 132; x2 = 295; break; case 3: x = 315; x2 = 398; break; case 4: x = 408; x2 = 535; break; default: break; } bar( (x+4), y+2+(CurrRowEprom1-1)*15+2, x2-4, y+4+((CurrRowEprom1)-1)*15+16); } Texto_Normal sprintf(Buffer, "% 10lX", Eprom1.Direccion); sprintf(Buffer, "% 10lX", Eprom1.Direccion); outtextxy( 10+4, (y+2)+(CurrRowEprom1-1)*15, Buffer ); sprintf(Buffer, "% 15lu", Eprom1.Direccion); outtextxy(132+4, (y+2)+(CurrRowEprom1-1)*15, Buffer ); sprintf(Buffer, "% 7X", Eprom1.Dato); outtextxy(315+4, (y+2)+(CurrRowEprom1-1)*15, Buffer ); sprintf(Buffer, "% 12u", Eprom1.Dato); outtextxy(408+4, (y+2)+(CurrRowEprom1-1)*15, Buffer ); } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ PrintWholeScreen ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Imprime Datos solo si caben en la pantalla de visualizaci¢n. Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void PrintWholeScreenEprom(void){ int tmp = CurrRowEprom1; int x, x2, y=50, y2=440; setcolor(0); setfillstyle(SOLID_FILL, 0); for(int i=1; i<=4; i++){ switch( i ){ case 1: x = 10; x2 = 122; break; case 2: x = 132; x2 = 295; break; case 3: x = 315; x2 = 398; break; case 4: x = 408; x2 = 535; break; default: break; } bar( x+4, y+3, x2-4, y2-3); } for(CurrRowEprom1 = 1; CurrRowEprom1 < (/*28*/25+1); CurrRowEprom1++) if ( (CurrTopLineEprom + CurrRowEprom1 - 1) <= (Eprom1_inx.Fin + 1) ) { GetLineEprom(); PrintLineEprom(); } CurrRowEprom1 = tmp; } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Edit_Item_Eprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Edita, el campo actual. (Modifica borrando lo anterior.) Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void Edit_Item_Eprom(void){ char buffer[80], *endptr; long Fecha; struct Eprom_Structura { char TP; char FI; char NP; long DM; char BD; long ID; char ID_TEXT[15]; }; switch (CurrColEprom1) { case 1: // sprintf(buffer, "%lX", Eprom1.Direccion); do{ strcpy( buffer, "\0"); InputCadenaG_l( buffer, 0, 6, 63, 57, PC[0], CurrRowEprom1-1); Eprom1.Direccion = strtol(buffer, &endptr, 16); }while(*endptr!=NULL || Eprom1.Direccion > pow(2, ( (S_Eprom[CurrEprom].DM)) ) ); // pow(2, ( (S_Eprom[CurrEprom].DM)/8) ) PutLineEprom(); PrintLineEprom(); break; case 2: // sprintf( buffer, "%lu", Eprom1.Direccion); do{ strcpy( buffer, "\0"); InputCadenaG_l( buffer, 1, 9/*( ( (S_Eprom[CurrEprom].BD)/8) * 3)*/, 63, 57, PC[1], CurrRowEprom1-1); Eprom1.Direccion = atol(buffer); }while( Eprom1.Direccion > pow(2, ( (S_Eprom[CurrEprom].DM) ) ) ); PutLineEprom(); PrintLineEprom(); break; case 3: // sprintf( buffer, "%X", Eprom1.Dato); strcpy( buffer, "\0"); do{ InputCadenaG_l( buffer, 0, ( ( (S_Eprom[CurrEprom].BD)/8) * 2), 63, 57, PC[2], CurrRowEprom1-1); Eprom1.Dato = strtol(buffer, &endptr, 16); }while(*endptr!=NULL || Eprom1.Dato > pow(2, S_Eprom[CurrEprom].BD ) ); PutLineEprom(); PrintLineEprom(); if ( (CurrTopLineEprom + CurrRowEprom1 - 2) >= Eprom1_inx.Fin) AddRecordEprom(); else Mueve_Abajo_Eprom(); break; case 4: sprintf( buffer, "%u", Eprom1.Dato); { strcpy( buffer, "\0"); InputCadenaG_l( buffer, 1, ( ( (S_Eprom[CurrEprom].BD)/8) * 3), 63, 57, PC[3], CurrRowEprom1-1); Eprom1.Dato = atoi(buffer); }while(Eprom1.Dato > pow(2, S_Eprom[CurrEprom].BD )); PutLineEprom(); PrintLineEprom(); if ( (CurrTopLineEprom + CurrRowEprom1 - 2) >= Eprom1_inx.Fin) AddRecordEprom(); else Mueve_Abajo_Eprom(); break; default: return; } PrintLineEprom(); } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û ÜÜÜ Ü Ü ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜÜ ÜÜÜ ÜÜ Û //Û Û ÛßÜßÛ Û Û Û Û Û Û Û Û Û Û Û Û Û //Û Û Û Û Ûßß ÛßÛ Ûß ßßÜ Û Û ÛßÛ ÛßßÛ Û //Û ÜÛÜ Û Û Û Û Û ÛÜÜ ÜÜÜß ÛÜÜÛ Û Û Û Û Û //Û Û //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Imprimir_Eprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ// //Û Û// //Û Imprime el programa completo. Û// //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ// void Imprimir_Eprom(int desde, int hasta){ int LSJ = sizeof(struct JD); int LSI = sizeof(struct Eprom_inx); int LSC = sizeof(struct Eprom_s); int lprint = 3, Curr_Eprom = 0; if( Comprueba_Impresora()==0 ) return; fprintf( stdprn, "\n\r"); fprintf( stdprn, " Direccion Dato \n\r"); fprintf( stdprn, "ùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùù\n\r"); while( (Curr_Eprom <= Eprom1_inx.Fin) ){ fseek(Eprom, (long)LSJ + LSI + ( LSC * Curr_Eprom ), SEEK_SET); // Se coloca fread(&Eprom1, LSC, 1, Eprom); // Y lee fprintf( stdprn, " %10lX %15lu %7X %12u", Eprom1.Direccion, Eprom1.Direccion, Eprom1.Dato, Eprom1.Dato); lprint++; if (lprint==55) { lprint = 3; fprintf( stdprn, " Direccion Dato \n\r"); fprintf( stdprn, "ùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùù\n\r"); } Curr_Eprom++; } fprintf( stdprn, "ùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùù\n\r"); fprintf( stdprn, " Registrese y obtengan la ultima y mas novedosa versi¢n del software y hardware."); fprintf( stdprn, "ùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùùù\n\r"); fputc(12, stdprn); } //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Comprueba a nivel de BIOS si hay una Û //Û impresora conectada en LPT1 -> DX = 0Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ int Comprueba_Impresora(void){ unsigned int tmp; union REGS Impresora_in, Impresora_out; struct byte { int a : 1; int b : 1; int c : 1; int d : 1; int e : 1; int f : 1; int g : 1; int h : 1; }; union bits { char ch; struct byte bit; } Imp_out; Impresora_in.h.ah = 0x02; Impresora_in.x.dx = 0x0; int86(0x17, &Impresora_in, &Impresora_out); return ( Impresora_out.h.ah ? 1 : 0 ); } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û ÜÜ ÜÜÜ ÜÜÜ Ü Ü ÜÜÜ Ü Ü ÜÜÜÜ Û //Û Û Û Û Û Û Û Û Û Û Û Û Û Û //Û ÛßßÛ ÛßÛ Û ÛßßÛ Û Û Û Û Û Û //Û Û Û Û Û ÛÜÜ Û Û ÜÛÜ ßÜß ÛÜÜÛ Û //Û Û //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Abre_Ficha_Eprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Abre el archivo contenido en ArchivoDatos, y comprueba que sea Û //Û del formato adecuado y la versi¢n 1.1 Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ int Abre_Ficha_Eprom(void){ CurrRowEprom1 = 1; CurrTopLineEprom = 1; //ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ// //Û Comprueba apertura correcta de Indice, y Datos y creaci¢n... Û// //ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß// int LSJ = sizeof(struct JD); int LSI = sizeof(struct Eprom_inx); int LSC = sizeof(struct Eprom_s); if ( (Eprom = fopen( ArchivoDatos, "r+b"))==NULL) { FILE *fa; int i; if ( (fa = fopen( ArchivoDatos, "wb" ) )!=NULL ) { Poner_a_cero_estructura_actual_Eprom(); Eprom1_inx.Fin = 0; rewind(fa); fwrite(&cabecera, LSJ, 1, fa); fseek(fa, (long)LSJ, SEEK_SET); fwrite(&Eprom1_inx, LSI, 1, fa); fseek(fa, (long)LSJ+LSI, SEEK_SET); fwrite(&Eprom1, LSC, 1, fa); if (fclose(fa) == EOF ) exit(1); } if ( (Eprom = fopen( ArchivoDatos, "r+b"))==NULL) { restorecrtmode(); printf("NO SE PUDO ABRIR EL FICHERO INDICE EN LA 2§ PASADA"); exit(1); } } rewind(Eprom); if ( fread(&cabecera, LSJ, 1, Eprom) != 1 ) { restorecrtmode(); printf("NO SE PUDO LEER EN EL FICHERO: INDICE"); exit(1); } if(cabecera.esc != 27 || cabecera.pt != 7 || cabecera.ef != 26 ) { return -1; // Cabecera no valida ((ERROR LEYENDO ESTRUCTURAS)) } fseek(Eprom, (long)LSJ, SEEK_SET); if ( fread(&Eprom1_inx, LSI, 1, Eprom) != 1 ) { restorecrtmode(); printf("NO SE PUDO LEER EN EL FICHERO: INDICE"); exit(1); } fseek(Eprom, (long)LSJ+LSI, SEEK_SET); if ( fread(&Eprom1, LSC, 1, Eprom) != 1 ) { restorecrtmode(); printf("NO SE PUDO LEER EN EL FICHERO: DATOS"); exit(1); } return 1; } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ DeleteRecordEprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Borra una linea de datos del fichero. Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void DeleteRecordEprom(void) { unsigned int CurrRecord; int LSJ = sizeof(struct JD); int LSI = sizeof(struct Eprom_inx); int LSC = sizeof(struct Eprom_s); CurrRecord = CurrTopLineEprom + CurrRowEprom1 - 1; if ( (Eprom1_inx.Fin == 0) ) BEEP(); else { Eprom1_inx.Fin -= 1; unsigned int p = CurrRecord - 1; while( p <= Eprom1_inx.Fin ) { fseek(Eprom, (long)LSJ + LSI + ( LSC * ( p + 1 ) ), SEEK_SET); // Se coloca fread(&Eprom1, LSC, 1, Eprom); // Y lee fseek(Eprom, (long)LSJ + LSI + ( LSC * p ), SEEK_SET); // Se coloca fwrite(&Eprom1, LSC, 1, Eprom); // Y escribe p++; }; fseek(Eprom, (long)LSJ, SEEK_SET); fwrite(&Eprom1_inx, LSI, 1, Eprom); // Acualiza n§ de registros /* Û */ if ((CurrRecord - 1) == Eprom1_inx.Fin + 1) CurrRowEprom1--; /* Û */ /* ßßßÛ */ PrintWholeScreenEprom(); /* ß */ GetLineEprom(); EditCursorEprom(0); // PrintLineEprom(); } } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ AddRecordEprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û A¤ade una linea de datos del fichero. Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void AddRecordEprom(void){ unsigned int CurrRecord= CurrTopLineEprom + CurrRowEprom1 - 1; int LSJ = sizeof(struct JD); int LSI = sizeof(struct Eprom_inx); int LSC = sizeof(struct Eprom_s); double long ExP = 1; for(int i=1; i <= ((S_Eprom[CurrEprom].DM)/8); i++ ) ExP = ExP * 256; if(CurrRecord < ExP ) { long avance = Eprom1_inx.Fin /*+ 1*/; while( avance >= (CurrRecord-1) ) { fseek(Eprom, (long)LSJ + LSI + ( LSC * avance ), SEEK_SET); // Se coloca fread(&Eprom1, LSC, 1, Eprom); // Y lee fseek(Eprom, (long)LSJ + LSI + ( LSC * (avance + 1) ), SEEK_SET); // Se coloca fwrite(&Eprom1, LSC, 1, Eprom); // Y escribe avance--; }; Eprom1_inx.Fin++; fseek(Eprom, (long)LSJ, SEEK_SET); fwrite(&Eprom1_inx, LSI, 1, Eprom); // Acualiza n§ de registros Eprom1.Direccion ++; Eprom1.Dato = 0; fseek(Eprom, (long)LSJ + LSI + ( LSC * ( CurrTopLineEprom + CurrRowEprom1 - 1) ), SEEK_SET); // Se coloca fwrite(&Eprom1, LSC, 1, Eprom); // Y escribe CurrRowEprom1++; if (CurrRowEprom1>25) { CurrTopLineEprom += /*28*/25; if ( (CurrTopLineEprom+CurrRowEprom1) > Eprom1_inx.Fin) { CurrTopLineEprom = Eprom1_inx.Fin; CurrRowEprom1 = 2; } if (CurrTopLineEprom==0) CurrTopLineEprom = 1; PrintWholeScreenEprom(); GetLineEprom(); EditCursorEprom(0); } else { GetLineEprom(); PrintLineEprom(); } EditCursorEprom(0); } } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ PutLineEprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Guarda la actual linea de datos. Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void PutLineEprom(void){ int LSJ = sizeof(struct JD); int LSI = sizeof(struct Eprom_inx); int LSC = sizeof(struct Eprom_s); int CurrRecord = CurrTopLineEprom + CurrRowEprom1 - 1; fseek(Eprom, (long)LSJ + LSI + ( LSC * CurrRecord ) - LSC, SEEK_SET); // Se coloca fwrite(&Eprom1, LSC, 1, Eprom); // Y escribe } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ GetLineEprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Obtiene la actual linea de datos. Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void GetLineEprom(void){ int LSJ = sizeof(struct JD); int LSI = sizeof(struct Eprom_inx); int LSC = sizeof(struct Eprom_s); int CurrRecord = CurrTopLineEprom + CurrRowEprom1 - 1; fseek(Eprom, (long)LSJ + LSI + ( LSC * CurrRecord ) - LSC, SEEK_SET); // Se coloca fread(&Eprom1, LSC, 1, Eprom); // Y lee } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Ü Ü ÜÜÜÜÜ ÜÜÜ Ü ÜÜÜ ÜÜ ÜÜ ÜÜ ÜÜÜ ÜÜÜ Û //Û Û Û Û Û Û Û Û ßÜ Û Û Û ßÜ Û Û Û //Û Û Û Û Û Û Û Û Û ÛßßÛ Û Û Ûß ßßÜ Û //Û ÛÜÜÛ Û ÜÛÜ ÛÜÜ ÜÛÜ ÛÜß Û Û ÛÜß ÛÜÜ ÜÜÜß Û //Û Û //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //ÛßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßÛ //Û Copia un archivo Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ int fcopy(char *origen, char *destino) { FILE *in, *out; char ch; if((in=fopen(origen, "rb"))==NULL){ return (-1); } if((out=fopen(destino, "wb"))==NULL) { return (-1); } while(!feof(in)) putc(getc(in),out); fclose(in); fclose(out); return 1; } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Poner_a_cero_es... ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Inizializa las estructuras de datos de la cabecera y siguientes. Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void Poner_a_cero_estructura_actual_Eprom(void){ cabecera.esc = 27; strcpy(cabecera.color, "[31;40m"); strcpy(cabecera.prog, "Jos‚ David Guill‚n Dominguez"); cabecera.nl = 13; cabecera.rt = 10; // strcpy(cabecera.autor, " 6 / Mayo / 1995 "); cabecera.pt = 7; cabecera.ef = 26; strcpy(cabecera.Comentario[0], "\0"); strcpy(cabecera.Comentario[1], "\0"); strcpy(cabecera.Comentario[2], "\0"); strcpy(cabecera.Comentario[3], "\0"); Eprom1.Direccion = 0; Eprom1.Dato = 0; } //ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ CompruebaLineasEprom ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ //Û Û //Û Comprueba la pulsaci¢n del raton sobre una linea y se posiciona. Û //ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ void CompruebaLineasEprom(void){ // Check una pulsacion sobre un campo, y se situa, si es posible int ok_p=0, inc=0, md=0; int oldr, oldc; // Anclar_Raton(); do{ inc++; if(x_raton >= (PC[(inc)-1].left+2) && x_raton <= (PC[inc-1].right-2) ) { ok_p=1; md = 1; oldc=inc; } if(inc==4) ok_p=1; }while(!ok_p); if(md==1){ inc=0; ok_p=0; md = 0; do{ inc++; if( (y_raton >= (PC[(oldc)-1].up+4+(inc-1)*15+2)) && (y_raton <= (PC[oldc-1].up+4+(inc-1)*15+16)) ) { ok_p=1; oldr=inc; md = 1;} if(inc==25) ok_p=1; }while(!ok_p); } int newc; if( (md==1) && ((CurrColEprom1!=newc) || (CurrRowEprom1!=oldr)) ) { if( (CurrTopLineEprom + oldr - 2 )<= Eprom1_inx.Fin ){ EditCursorEprom(1); if(oldc!=CurrColEprom1 || oldr!=CurrRowEprom1){ CurrColEprom1 = oldc; CurrRowEprom1 = oldr; GetLineEprom(); } else EditCursorEprom(0); } } }