1338 lines
48 KiB
C++
1338 lines
48 KiB
C++
//
|
||
// Diccionario sensible a las tres primeras letras de la palabra.
|
||
//
|
||
// Programado por:
|
||
// Mois‚s Virumbrales Cuenca
|
||
// Juan L¢pez Fern ndez
|
||
//
|
||
// Fecha: 04-05-1999
|
||
// éltima modificaci¢n: 13-06-1999
|
||
// Versi¢n: 1.0
|
||
//
|
||
|
||
// **************************************************************************
|
||
// **** ****
|
||
// **** Librer¡as incluidas ****
|
||
// **** ****
|
||
// **************************************************************************
|
||
|
||
#include <conio.h>
|
||
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
#include <string.h>
|
||
#include <graphics.h>
|
||
#include <dos.h>
|
||
#include <a:\gui.h>
|
||
#include <a:\libre.h>
|
||
#include <a:\iconos.h>
|
||
|
||
// **************************************************************************
|
||
// **** ****
|
||
// **** Declaraci¢n de las Estructuras ****
|
||
// **** ****
|
||
// **************************************************************************
|
||
|
||
struct def{ // Estructura en la que se guarda la palabra
|
||
char palabra[20]; // y la definici¢n de la misma.
|
||
char definicion[100];
|
||
struct def *sig;
|
||
};
|
||
|
||
struct letra3{ // Estructura que forma la tercera letra indexada
|
||
char l3; // del rbol.
|
||
struct letra3 *sig;
|
||
struct def *lista;
|
||
};
|
||
struct letra2{ // Estructura que forma la segunda letra indexada
|
||
char l2; // del rbol.
|
||
struct letra2 *sig;
|
||
struct letra3 *nivel3;
|
||
};
|
||
struct letra1{ // Estructura que forma la primera letra indexada
|
||
char l1; // del rbol.
|
||
struct letra1 *sig;
|
||
struct letra2 *nivel2;
|
||
};
|
||
struct temporal{ // Para que no de problemas a la hora de grabarlo y
|
||
char palabra[20]; // cargarlo del fichero.
|
||
char definicion[100];
|
||
};
|
||
// NO PUEDEN SER TODAS LAS ESTRUCTURAS DE LAS LETRAS IGUALES, YA QUE CUANDO
|
||
// AVANZAMOS EN PROFUNDIDAD POR EL µRBOL, LAS ESTRUCTURAS A LAS QUE
|
||
// APUNTAN SON DIFERENTES.
|
||
|
||
|
||
// **************************************************************************
|
||
// **** ****
|
||
// **** Inizializaci¢n de Funciones ****
|
||
// **** ****
|
||
// **************************************************************************
|
||
|
||
struct letra1* inicializar(); // Inicializa el rbol del diccionario.
|
||
void cargar_diccio(struct letra1 *); // Carga el diccionario del fichero.
|
||
void guardar_arbol(struct letra1 *);// Guarda el diccio en el fichero.
|
||
void nueva_palabra(struct letra1 *); // Agrega una nueva palabra al diccio.
|
||
void modif_palabra(struct letra1 *); // modif la def de una palabra del diccio
|
||
|
||
void listar(struct letra1*,int);//Lista las palabras del diccio.
|
||
void listar_sen(struct letra1*, int, char*, char [10][20]); // Lista sensible.
|
||
void imprime_def(char *);// Imprime la def con el algor¡tmo de abrir l¡neas.
|
||
|
||
void limpiar_nodo(struct def **); // limpia el nodo reservado.
|
||
void limpiar(struct temporal *); // limpia la estructura auxiliar.
|
||
|
||
struct def* buscar(struct letra1 *, struct temporal *); // busca la palabra en el diccio.
|
||
void buscar_palabra(struct letra1 *,int); // El padre de buscar con sus ventanas.
|
||
void busca_sen(struct letra1 *);// busca por las tres primeras letras.
|
||
|
||
int huge detectEGA(void); // devuelve la resoluci¢n de la pantalla.
|
||
void checkerrors(void); // mira si hay fallos al inizializar el modo gr fico.
|
||
|
||
void rectangulo(int); // dibuja el rectangulo de los botones.
|
||
void menu(); // pinta el menu general.
|
||
void base(); // pinta el fondo con t¡tulo y barra inferior.
|
||
void menu_buscar(); // pinta el menu de b£squeda.
|
||
void acerca_de(); // informaci¢n de los creadores.
|
||
|
||
void intro_letras(int, int, char[], int, int, int, int, int); // introducci¢n la palabra.
|
||
void introdef(int, int, char[], int, int, int, int, int);// intro al definici¢n.
|
||
void intro_sen(int, int, char[], int, int, int);// intro las tres 1¦ letras de la palabra.
|
||
|
||
|
||
// **************************************************************************
|
||
// **** ****
|
||
// **** Variables Globales ****
|
||
// **** ****
|
||
// **************************************************************************
|
||
|
||
struct temporal fichero; // tiene temporalmente los datos de un nodo.
|
||
|
||
|
||
// **************************************************************************
|
||
// **** ****
|
||
// **** El cuerpo del Programa ****
|
||
// **** ****
|
||
// **************************************************************************
|
||
|
||
void main(){
|
||
// **************************************************************************
|
||
// **** Variables Locales al Main ****
|
||
// **************************************************************************
|
||
// Bienvenido al mundo de los punteros :-).
|
||
struct letra1 *diccio; // Es el puntero m s grande.
|
||
int sw=1, pos=1; // el sw para saber cuando elige una opci¢n y pos la
|
||
int tecla=0; // posici¢n en el menu, tecla son los cursores.
|
||
|
||
// **************************************************************************
|
||
// **** Inizializaci¢n del modo gr fico ****
|
||
// **************************************************************************
|
||
installuserdriver("SVGA256", detectEGA); // instala el controlador de 256c.
|
||
int Gd = DETECT, Gm;
|
||
checkerrors(); // mira a ver si hay errores.
|
||
initgraph(&Gd, &Gm, "c:\\tc\\bgi");// inicializa el modo gr fico.
|
||
checkerrors(); // mira a ver si hay errores.
|
||
|
||
// **************************************************************************
|
||
// **** El programa ****
|
||
// **************************************************************************
|
||
base(); // fondo y t¡tulo.
|
||
settextstyle(2,0,5);
|
||
ventana(125,200,475,300,"Cargando...",0,0);// dibujamos una ventana.
|
||
boton(133,265,467,275,1,"",0,0);
|
||
setcolor(0);
|
||
settextstyle(2,0,5);
|
||
outtextxy(136,235,"Cargando el diccionario, espere porfavor...");// texto de la ventana.
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Cargando..."); // informaci¢n de la barra inferior.
|
||
diccio=inicializar();//Inicializamos el rbol del diccionario.
|
||
cargar_diccio(diccio);// carga el diccio del fichero.
|
||
|
||
base();// limpiamos pantalla
|
||
menu();// ponemos el menu general.
|
||
rectangulo(pos);// el recuadro de los botones
|
||
settextstyle(2,0,4);
|
||
outtextxy(30,460,"Elige una opci¢n del men£.");// informaci¢n de la barra inferior.
|
||
while (sw){ // bucle general del menu general.
|
||
tecla=getch();// a ver que pulsa
|
||
if (tecla==0){// es tecla especial.
|
||
tecla=getch();// a ver cual es
|
||
switch(tecla){ // que flecha es
|
||
case 72: // flecha arriba.
|
||
if (pos!=1){// no est en el primer boton
|
||
menu();// el menu principal
|
||
pos--;// subimos por el menu
|
||
setcolor(0);rectangulo(pos);// cambia el rectangulo
|
||
}// fin if primer boton
|
||
else{// est en el primer boton
|
||
menu();// lo dibujamos igual
|
||
pos=5;// se va al £ltimo boton
|
||
setcolor(0);rectangulo(pos);// donde esta el rectangulo
|
||
}// fin else
|
||
break;// le rompemos al switch
|
||
case 80: // flecha abajo.
|
||
if (pos!=5){// si no est en el £ltimo.
|
||
menu();// ¨qu‚ pintamos?
|
||
pos++;// bajamos por los botones
|
||
setcolor(0);rectangulo(pos);// idem
|
||
}// fin if
|
||
else{// est en el £ltimo
|
||
menu();// que pasa
|
||
pos=1;// le subimos al primero
|
||
setcolor(0);rectangulo(pos);// eeeeee
|
||
}//fin else
|
||
break;// que quiebro
|
||
}// fin del switch tecla
|
||
switch(pos){// miramos en que boton esta
|
||
case 1:// Buscar palabra.
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);// limpiamos barra inferior
|
||
settextstyle(2,0,4);setcolor(0);// informaci¢n inferior.
|
||
outtextxy(30,460,"B£squeda de una palabra mediante varios m‚todos.");
|
||
break;// le ha roto
|
||
case 2:// Introducir nueva palabra.
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);// igual no idem
|
||
settextstyle(2,0,4);setcolor(0);// parecidillo
|
||
outtextxy(30,460,"Introducci¢n de palabras nuevas para la base de datos del diccionario.");
|
||
break;// toma y van cuatro
|
||
case 3: // Modificacion de palabras
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);// lo pispo
|
||
settextstyle(2,0,4);setcolor(0);// lo que
|
||
outtextxy(30,460,"Modificaci¢n de la definici¢n de una palabra de la base de datos del diccionario.");
|
||
break;// es un poco fragil
|
||
case 4:// Acerca de...
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);// lo pispo de lo pispo
|
||
settextstyle(2,0,4);setcolor(0);// que donde trabajas
|
||
outtextxy(30,460,"Informaci¢n de los creadores del programa.");
|
||
break;// se ha hecho pedacitos
|
||
case 5:// Salir.
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);// lo pispo de lo pispo...
|
||
settextstyle(2,0,4);setcolor(0);// escribiendo comentarios
|
||
outtextxy(30,460,"Salir del programa.");// informaci¢n corta :-)
|
||
break;// no me quedan calificativos, es lo peor.
|
||
}// fin del switch de la informaci¢n inferior.
|
||
}// fin del if de la tecla especial
|
||
else{// no es especial, bua!
|
||
if (tecla==13){// se ha cansado de moverse por los botones
|
||
switch(pos){// a ver..
|
||
case 1: // buscar una palabra.
|
||
base();// limpiando...
|
||
menu_buscar();// un nuevo men£
|
||
int sw2=1, donde=1;// necesitamos ayuda
|
||
int opcion=0;// un poquito m s
|
||
rectangulo(donde);// adonde estamos en los botones
|
||
setcolor(0);
|
||
settextstyle(2,0,4);// informaci¢n inferior.
|
||
outtextxy(30,460,"Elige una opci¢n del men£ de b£squeda.");
|
||
while (sw2){// bucle del menu secundario.
|
||
opcion=getch();// aver que nos pulsa aqu¡
|
||
if (opcion==0){// es especial!
|
||
opcion=getch();// cual es?
|
||
switch(opcion){// vamos a descubrirlo
|
||
case 72: // flecha arriba.
|
||
if (donde!=1){// igual que el principal
|
||
menu_buscar();
|
||
donde--;
|
||
setcolor(0);rectangulo(donde);
|
||
}
|
||
else{
|
||
menu_buscar();
|
||
donde=4;
|
||
setcolor(0);rectangulo(donde);
|
||
}
|
||
break;
|
||
case 80: // flecha abajo.
|
||
if (donde!=4){
|
||
menu_buscar();
|
||
donde++;
|
||
setcolor(0);rectangulo(donde);
|
||
}
|
||
else{
|
||
menu_buscar();
|
||
donde=1;
|
||
setcolor(0);rectangulo(donde);
|
||
}
|
||
break;
|
||
}// fin del switch opcion
|
||
switch(donde){// a ver que informaci¢n imprimimos?
|
||
case 1:// Buscar palabra.
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);// todo igualisimo que
|
||
outtextxy(30,460,"B£squeda de una palabra mediante la introducci¢n de la misma y se muestra la definici¢n.");
|
||
break;
|
||
case 2:// Busqueda sensible
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);// el general.
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Introducci¢n de las tres primeras letras y elegir de la lista la palabra que se quiera.");
|
||
break;
|
||
case 3:// Acerca de...
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Informaci¢n de los creadores del programa. Por si en el men£ general no lo hab‚is visto.");
|
||
break;
|
||
case 4:// Volver.
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Vuelve al men£ general del programa.");
|
||
break;
|
||
}// fin del switch donde
|
||
}// fin de la tecla especial
|
||
else{// se nos cansa
|
||
if (opcion==13){// a tomado su primera decisi¢n
|
||
switch(donde){// a donde la ha tomado?
|
||
case 1: // Buscar palabra.
|
||
buscar_palabra(diccio,0);// buscamos la palabra.
|
||
getch();// e ver si le da tiempo de ver la definici¢n.
|
||
base();menu_buscar();rectangulo(donde);// repintamos la
|
||
setcolor(0);settextstyle(2,0,4);// situaci¢n anterior.
|
||
outtextxy(30,460,"Elige una opci¢n del men£ de b£squeda.");
|
||
break;
|
||
case 2: // Busqueda sensible a teclado.
|
||
busca_sen(diccio);// buscamos con mucha sensibilidad.
|
||
base();menu_buscar();rectangulo(donde);// reconstruimos
|
||
setcolor(0);settextstyle(2,0,4);
|
||
outtextxy(30,460,"Elige una opci¢n del men£ de b£squeda.");
|
||
break;
|
||
case 3: // Acerca de...
|
||
acerca_de();// LE INTERESAMOS! ¢ se a confundido?
|
||
base();menu_buscar();rectangulo(donde);// reconstructor
|
||
settextstyle(2,0,4);
|
||
outtextxy(30,460,"Elige una opci¢n del men£.");
|
||
break;
|
||
case 4: // volver.
|
||
base();// volviendo para el yeneral
|
||
menu();
|
||
rectangulo(pos);
|
||
settextstyle(2,0,4);
|
||
outtextxy(30,460,"Elige una opci¢n del men£.");
|
||
sw2=0;
|
||
break;
|
||
}// Fin del switch(donde).
|
||
}// Fon del if (opcion==13).
|
||
}// Fin del else tocho.
|
||
}// Fin del while(sw2).
|
||
break;// le rompemos que ya ha tenido bastante con est opci¢n.
|
||
case 2: // a¤adir una palabra.
|
||
nueva_palabra(diccio);// a ver que nos mete el pill¡n
|
||
base();menu();rectangulo(pos);// reconstructor 2 el retonno
|
||
settextstyle(2,0,4);
|
||
outtextxy(30,460,"Elige una opci¢n del men£.");
|
||
break;
|
||
case 3: // modificar una palabra.
|
||
modif_palabra(diccio);// esas manazas!!!!
|
||
base();menu();rectangulo(pos);// reconstructor 3 quiz s vuelva...
|
||
settextstyle(2,0,4);
|
||
outtextxy(30,460,"Elige una opci¢n del men£.");
|
||
break;
|
||
case 4: // acerca de...
|
||
acerca_de();// SIII, LE INTERESAMOS DE VERDAD!!!
|
||
base();menu();rectangulo(pos);// reconstructor 4 y continuar ...
|
||
settextstyle(2,0,4);
|
||
outtextxy(30,460,"Elige una opci¢n del men£.");
|
||
break;
|
||
case 5: // salir
|
||
guardar_arbol(diccio);// vamos a guardar los cambios.
|
||
sw=0;// nos las piramos.
|
||
break;
|
||
}// fin del switch(pos)
|
||
}// fin del if (tecla=13)
|
||
}// fin del else de tecla=0.
|
||
}// fin del while(sw)
|
||
closegraph();// se acab¢ el chiringuito.
|
||
}// fin del main.
|
||
|
||
|
||
// **************************************************************************
|
||
// **** ****
|
||
// **** Inicializar µrbol ****
|
||
// **** ****
|
||
// **************************************************************************
|
||
|
||
struct letra1* inicializar(){
|
||
// Variables locales a la funci¢n.
|
||
char letra=97;//Es la a.
|
||
struct letra1 *dic,*p1,*aux; // Un mar de punteros para ver si lo conseguimos
|
||
struct letra2 *p2,*aux2; // inicializar bien. :-/
|
||
struct letra3 *p3,*aux3; // Dic es el amago de boss, px es el que tiene
|
||
// el nuevo nodo, y aux/auxX tiene el £ltimo
|
||
// nodo insertado en cada nivel.
|
||
|
||
// Bucle de la primera letra.
|
||
for(;letra<123;letra++){//La 90 es la z.
|
||
if ((p1=(struct letra1 *) malloc(sizeof(struct letra1)))==NULL){
|
||
closegraph();
|
||
printf("No hay memoria suficiente.");getch();// Mal rollo.
|
||
exit(1);
|
||
}
|
||
else{
|
||
if (letra==97){ //Solamente la primera vez, ya que es un caso especial.
|
||
p1->l1=letra;p1->sig=NULL;
|
||
p1->nivel2=NULL;
|
||
dic=p1;aux=p1; // Hay que direcionar al boss.
|
||
}
|
||
else{ // El resto de los casos son iguales.
|
||
p1->l1=letra;p1->sig=NULL;
|
||
p1->nivel2=NULL;
|
||
aux->sig=p1;
|
||
aux=aux->sig;
|
||
}
|
||
// Bucle de la segunda letra.
|
||
for (char letra2=97;letra2<123;letra2++){
|
||
if ((p2=(struct letra2 *) malloc(sizeof(struct letra2)))==NULL){
|
||
closegraph();
|
||
printf("No hay memoria suficiente.");getch();// Mal rollito.
|
||
exit(1);
|
||
}
|
||
else{
|
||
if (letra2==97){ // Igual que el anterior.
|
||
p2->l2=letra2;p2->sig=NULL;
|
||
p2->nivel3=NULL; // Aqu¡ igual que el boss, pero con la letra
|
||
aux->nivel2=p2;aux2=p2; // correspondiente.
|
||
}
|
||
else{ // Igual que el anterior.
|
||
p2->l2=letra2;p2->sig=NULL;
|
||
p2->nivel3=NULL;
|
||
aux2->sig=p2;
|
||
aux2=aux2->sig;
|
||
}
|
||
// Bucle de la tercera letra.
|
||
for (char letra3=97;letra3<123;letra3++){
|
||
if ((p3=(struct letra3 *) malloc(sizeof(struct letra3)))==NULL){
|
||
closegraph();
|
||
printf("No hay memoria suficiente.");// De mal en peor.
|
||
getch();
|
||
exit(1);
|
||
}
|
||
else{
|
||
if (letra3==97){// Por el mismo motivo que los anteriores.
|
||
p3->l3=letra3;p3->sig=NULL;
|
||
p3->lista=NULL; // Igual que 2, pero con la letra
|
||
aux2->nivel3=p3;aux3=p3; // correspondiente.
|
||
}
|
||
else{// Idem.
|
||
p3->l3=letra3;p3->sig=NULL;
|
||
p3->lista=NULL;
|
||
aux3->sig=p3;
|
||
aux3=aux3->sig;
|
||
}
|
||
}
|
||
}//Fin del bucle de la tercera letra.
|
||
}
|
||
}// Fin del bucle de la segunda letra.
|
||
}
|
||
}// Fin del bucle de la primera letra.
|
||
return(dic); // Devolvemos el amago de boss, par aque el boss se quede con
|
||
// la direcci¢n del rbol.
|
||
}// Fin de la funci¢n inicializar el rbol.
|
||
|
||
|
||
// **************************************************************************
|
||
// **** ****
|
||
// **** Listado del µrbol ****
|
||
// **** ****
|
||
// **************************************************************************
|
||
|
||
void listar(struct letra1 *dic, int max){ // Lista las n palabras especificadas
|
||
int con=0, y=245;
|
||
setcolor(0);settextstyle(2,0,4);
|
||
for(struct letra1 *n1=dic;n1!=NULL;n1=n1->sig){
|
||
for (struct letra2 *n2=n1->nivel2;n2!=NULL;n2=n2->sig){
|
||
for (struct letra3 *n3=n2->nivel3;n3!=NULL;n3=n3->sig){
|
||
if (n3->lista!=NULL)
|
||
for (struct def *n4=n3->lista;n4!=NULL && max>con;n4=n4->sig,con++,
|
||
y+=12){
|
||
outtextxy(200,y,n4->palabra);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}// fin de la funci¢n listar.
|
||
|
||
void listar_sen(struct letra1 *dic, int max, char *letra,
|
||
char lista[10][20]){ // Lista las que sean = que las 3 1¦ letras
|
||
int con=0, y=245;
|
||
struct letra1 *n1=NULL;
|
||
struct letra2 *n2=NULL;
|
||
struct letra3 *n3=NULL;
|
||
setcolor(0);settextstyle(2,0,4);
|
||
for(n1=dic;n1!=NULL && n1->l1!=letra[0];n1=n1->sig){}// buscamos la 1¦
|
||
n2=n1->nivel2;// pasamos a la segunda
|
||
if (letra[1]!=NULL)// a ver si existe
|
||
for(;n2!=NULL && n2->l2!=letra[1];n2=n2->sig){}// la buscamos la 2¦
|
||
n3=n2->nivel3;// pasamos a la tercera
|
||
if (letra[2]!=NULL)// a ver si existe
|
||
for(;n3!=NULL && n3->l3!=letra[2];n3=n3->sig){}// buscamos la 3¦
|
||
while (max>con && n1!=NULL){// para imprimir las que entran en el cuadro.
|
||
for(;n1!=NULL;n1=n1->sig){
|
||
if (y!=245 || letra[1]==NULL)// por si se acaban los de una letra y hay que seguir.
|
||
n2=n1->nivel2;
|
||
for (;n2!=NULL;n2=n2->sig){
|
||
if (y!=245 || letra[2]==NULL)// idem
|
||
n3=n2->nivel3;
|
||
for (;n3!=NULL;n3=n3->sig){
|
||
if (n3->lista!=NULL)
|
||
for (struct def *n4=n3->lista;n4!=NULL && max>con;n4=n4->sig,con++,
|
||
y+=12){
|
||
if(y==245){// si es la primera palabra le pintamos el fondo en azul.
|
||
setcolor(1);
|
||
rectangle(195,y,400,y+11);
|
||
setfillstyle(1,1);floodfill(201,y+1,1);
|
||
setcolor(30);outtextxy(200,y,n4->palabra);
|
||
setcolor(0);
|
||
}
|
||
else// si no no tiene derecho.
|
||
outtextxy(200,y,n4->palabra);
|
||
strcpy(lista[con],n4->palabra);// la copiamos a la lista.
|
||
}
|
||
}// fines de todo lo que se a abierto alguna vez
|
||
}
|
||
}
|
||
}
|
||
}// fin de la funci¢n listar_sen.
|
||
|
||
void imprime_def(char *def){ // imprime la definici¢n con su algor¡tmo.
|
||
char aux[2];aux[1]=NULL;// la letra que se pinta
|
||
int xaux=200, yaux=245;// las posiciones
|
||
settextstyle(2,0,4);setcolor(0);
|
||
for (int pos=0;pos<=37 && def[pos]!=NULL;// primera l¡nea
|
||
pos++,xaux+=6){
|
||
aux[0]=def[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
if (def[pos]!=NULL){// si no se ha acabado
|
||
yaux=yaux+12;xaux=200;// siguiente l¡nea
|
||
for (;pos<=75 && def[pos]!=NULL;pos++,xaux+=6){// 2¦ l¡nea
|
||
aux[0]=def[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
}
|
||
if (def[pos]!=NULL){// idem
|
||
yaux=yaux+12;xaux=200;// idem
|
||
for (;pos<=100 && def[pos]!=NULL;pos++,xaux+=6){// 3¦ l¡nea
|
||
aux[0]=def[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
}
|
||
}// fin de la funci¢n imprimir definici¢n.
|
||
|
||
void limpiar_nodo(struct def **puntero){// limpia el nodo reservado por si
|
||
for(int n=0;n<20;n++)
|
||
(*puntero)->palabra[n]=NULL;
|
||
for (n=0;n<100;n++)
|
||
(*puntero)->definicion[n]=NULL;
|
||
}// fin de la funci¢n limpiar nodo.
|
||
|
||
void limpiar(struct temporal *p){// limpia la estructura multiusos.
|
||
for(int n=0;n<20;n++)
|
||
p->palabra[n]=NULL;
|
||
for (n=0;n<100;n++)
|
||
p->definicion[n]=NULL;
|
||
}// fin de la funci¢n limpiar la estructura temporal.
|
||
|
||
void cargar_diccio(struct letra1 *dic){// cargamos el diccionario.
|
||
FILE *f=NULL, *aux=NULL;// los ficheros que necesitamos.
|
||
int con=0, x=0, veces=0, numero=0, cuantos=0, conaux=0;// para el algor¡tmo de los cuadraditos del comienzo.
|
||
if ((f=fopen("k:\\files\\diccio.bsd","r+b"))!=NULL){// abriendo
|
||
aux=fopen("k:\\files\\diccio.cfg","r+b");//idem
|
||
struct def *p=NULL,*help4=NULL;// lo necesitamos
|
||
struct letra1 *help1=NULL;
|
||
struct letra2 *help2=NULL;
|
||
struct letra3 *help3=NULL;
|
||
fread(&con,2,1,aux);// leemos cuantas palabras hay en el diccio
|
||
fclose(aux);// se acab¢ con este fichero.
|
||
fseek(f,25,0);// nos saltamos el encabezado
|
||
limpiar(&fichero);// limpieza
|
||
fread(&fichero,sizeof(struct temporal),1,f);// leemos el primer registro.
|
||
if(con==1 || con==0){// si solo hay una o cero palabras
|
||
cuantos=14;
|
||
for(veces=cuantos,x=136;x+8<464 && veces>0;x+=11,veces--)
|
||
icon11(x,267);// pintamos los cuadraditos
|
||
delay(500);// espera un poquito.
|
||
}
|
||
else{// tiene m s
|
||
numero=28/con;// a ver cuantos cuadrados hay que pintar
|
||
if (numero==0){// es m s que el m ximo de los cuadrados
|
||
numero=con/28;// cuanto m s
|
||
conaux=numero;// cuantos registros tienen que pasar para pintar uno
|
||
cuantos=1;// los pintamos de uno en uno
|
||
}
|
||
else{// no es mas del m ximo
|
||
conaux=1;cuantos=numero;// tiene que pasar un registro y se pintan x
|
||
}
|
||
x=136;// la posici¢n donde empieza a pintar
|
||
}
|
||
while(!feof(f)){// mientras que no se acabe el fichero
|
||
if ((p=(struct def *) malloc(sizeof(struct def)))==NULL){
|
||
closegraph();// recogemos el chiringuito que viene la poli.
|
||
printf("No hay memoria suficiente.");getch();// Mal rollo.
|
||
exit(1);// nos vamos por patas
|
||
}
|
||
else{
|
||
limpiar_nodo(&p);// limpiamos el nuevo nodo.
|
||
strcpy(p->palabra,fichero.palabra);// copiando del temporal al nuevo
|
||
strcpy(p->definicion,fichero.definicion);// idem
|
||
p->sig=NULL;// no tienes siguiente
|
||
help1=dic;// no toquemos el diccionario
|
||
for(;help1->l1!=p->palabra[0];help1=help1->sig){}// buscamos la 1¦
|
||
help2=help1->nivel2;
|
||
for(;help2->l2!=p->palabra[1];help2=help2->sig){}// la 2¦
|
||
help3=help2->nivel3;
|
||
for(;help3->l3!=p->palabra[2];help3=help3->sig){}// la 3¦
|
||
if (help3->lista==NULL){// no hay palabras
|
||
help3->lista=p;help4=p;p->sig=NULL;// eres la primera palabra
|
||
}
|
||
else{// hay m s palabras
|
||
help4=help3->lista;
|
||
if (strcmp(p->palabra,help4->palabra)>0){// comparando...
|
||
for(;help4->sig!=NULL && strcmp(p->palabra,(help4->sig)->palabra)>0;
|
||
help4=help4->sig){}// encontrando su posici¢n...
|
||
p->sig=help4->sig;// enlazando...
|
||
help4->sig=p;help4=help4->sig;
|
||
}
|
||
else{// sitio encontrado
|
||
p->sig=help4;help3->lista=p;help4=help3->lista;// enlazando...
|
||
}
|
||
}
|
||
}
|
||
limpiar(&fichero);// limpiando la temporal
|
||
fread(&fichero,sizeof(struct temporal),1,f);// nuevo registro.
|
||
conaux--;// ya hemos le¡do uno
|
||
if (conaux==0){// nos toca pintar
|
||
for(veces=cuantos;x+8<464 && veces>0;x+=11,veces--)
|
||
icon11(x,267);// pintando...
|
||
delay(250);// esperamos
|
||
if (28/con==0)// reconstrucci¢n del contador
|
||
conaux=numero;
|
||
else
|
||
conaux=1;
|
||
}
|
||
}// fin del while final de fichero.
|
||
if (x+8<464){// si nos falta por pintar y ya hemos terminado.
|
||
for(;x+8<464;x+=11)
|
||
icon11(x,267);// lo pintamos
|
||
}
|
||
}
|
||
fclose(f);// cerramos el fichero
|
||
delay(500);// mira que binito a quedado el comienzo.
|
||
}// fin de la funci¢n cargar diccionario.
|
||
|
||
void nueva_palabra(struct letra1 *dic){// introducir nueva letra
|
||
struct letra1 *aux=NULL;//Puntero auxiliar del tipo 1, dic es el semiboss.
|
||
struct letra2 *aux2=NULL;//Puntero auxiliar del tipo 2. Y ya van 3 :-(.
|
||
struct letra3 *aux3=NULL;//Puntero auxiliar del tipo 3. Son 4 :-|.
|
||
struct def *p4=NULL, *aux4=NULL;//Punteros auxiliares del tipo 4.
|
||
if ((p4=(struct def *) malloc(sizeof(struct def)))==NULL){
|
||
closegraph();// recogiendo...
|
||
printf("No hay memoria suficiente. El programa debe terminar.");getch();
|
||
exit(1);// Mal rollo.
|
||
}
|
||
else{
|
||
limpiar_nodo(&p4);// limpiando...
|
||
limpiar(&fichero);
|
||
|
||
base(); // limpiamos pantalla
|
||
settextstyle(2,0,5);
|
||
ventana(75,125,550,390,"Nueva palabra",0,0);
|
||
setcolor(0);
|
||
outtextxy(100,190,"Palabra:");
|
||
boton(190,190,420,210,1,"",0,30);
|
||
setcolor(0);
|
||
outtextxy(100,240,"Definici¢n:");
|
||
boton(190,240,450,370,1,"",0,28);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Introduce la palabra (longitud m xima 20 letras).");
|
||
icon2(85,193);
|
||
intro_letras(200,195,fichero.palabra,19,0,2,4,30);// introduce la palabra
|
||
strlwr(fichero.palabra);
|
||
boton(190,190,420,210,1,"",0,28);
|
||
setcolor(0);
|
||
outtextxy(200,195,fichero.palabra);
|
||
if (buscar(dic,&fichero)==NULL){// si no est
|
||
boton(190,240,450,370,1,"",0,30);
|
||
icon8(85,193);
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Introduce la definici¢n de la palabra (longitud m xima 100 caracteres).");
|
||
icon2(85,243);
|
||
introdef(200,245,fichero.definicion,100,0,2,4,30);// introduce la def
|
||
icon8(85,243);
|
||
|
||
strlwr(fichero.palabra);// la copiamos en min£sculas
|
||
strcpy(p4->palabra,fichero.palabra);//copiando...
|
||
strcpy(p4->definicion,fichero.definicion);
|
||
p4->sig=NULL;
|
||
aux=dic;
|
||
for(;aux->l1!=p4->palabra[0];aux=aux->sig){}// la colocamos
|
||
aux2=aux->nivel2;
|
||
for(;aux2->l2!=p4->palabra[1];aux2=aux2->sig){}
|
||
aux3=aux2->nivel3;
|
||
for(;aux3->l3!=p4->palabra[2];aux3=aux3->sig){}
|
||
if (aux3->lista==NULL){
|
||
aux3->lista=p4;aux4=p4;p4->sig=NULL;
|
||
}
|
||
else{
|
||
aux4=aux3->lista;
|
||
if (strcmp(p4->palabra,aux4->palabra)>0){
|
||
for(;aux4->sig!=NULL && strcmp(p4->palabra,(aux4->sig)->palabra)>0;
|
||
aux4=aux4->sig){}
|
||
p4->sig=aux4->sig;
|
||
aux4->sig=p4;aux4=aux4->sig;
|
||
}
|
||
else{
|
||
p4->sig=aux4;aux3->lista=p4;aux4=aux3->lista;
|
||
}
|
||
}
|
||
}
|
||
else{// ya existe al palabra
|
||
sound(1000);delay(50);nosound();
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
icon10(5,455);
|
||
settextstyle(2,0,4);setcolor(4);
|
||
outtextxy(30,460,"La palabra introducida ya existe. Pulse ENTER para volver al men£.");
|
||
free(p4);getch();
|
||
}
|
||
}
|
||
}// fin de la funci¢n de la nueva palabra.
|
||
|
||
void modif_palabra(struct letra1 *dic){// midificamos la definici¢n.
|
||
struct letra1 *aux=NULL;//Puntero auxiliar del tipo 1, dic es el semiboss.
|
||
struct letra2 *aux2=NULL;//Puntero auxiliar del tipo 2. Y ya van 3 :-(.
|
||
struct letra3 *aux3=NULL;//Puntero auxiliar del tipo 3. Son 4 :-|.
|
||
struct def *p4=NULL, *aux4=NULL;//Punteros auxiliares del tipo 4.
|
||
buscar_palabra(dic,1);// la buscamos la palabra.
|
||
if ((p4=buscar(dic,&fichero))!=NULL){// si est la palabra
|
||
int resp=0;// la respuesta
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Pulse ENTER para modificar la definici¢n o ESC para volver al men£.");
|
||
while(resp!=27 && resp!=13)// mientra no se ESC o ENTER
|
||
resp=getch();
|
||
if (resp==13){// es enter
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Introduce la nueva definici¢n de la palabra (longitud m xima 100 caracteres).");
|
||
char tmp[20]={NULL};
|
||
boton(190,190,420,210,1,"",0,28);
|
||
boton(190,240,450,370,1,"",0,30);
|
||
setcolor(0);
|
||
outtextxy(200,195,fichero.palabra);
|
||
strcpy(tmp,fichero.palabra);// le sacamos de paseo a la palabra
|
||
limpiar(&fichero);
|
||
strcpy(fichero.palabra,tmp);// vuelve a casa
|
||
icon2(85,243);
|
||
introdef(200,245,fichero.definicion,100,0,2,4,30);// introduce la def
|
||
|
||
strlwr(fichero.palabra);// idem todo el bloque
|
||
strcpy(p4->palabra,fichero.palabra);
|
||
p4->sig=NULL;
|
||
aux=dic;
|
||
for(;aux->l1!=p4->palabra[0];aux=aux->sig){}
|
||
aux2=aux->nivel2;
|
||
for(;aux2->l2!=p4->palabra[1];aux2=aux2->sig){}
|
||
aux3=aux2->nivel3;
|
||
for(;aux3->l3!=p4->palabra[2];aux3=aux3->sig){}
|
||
if (aux3->lista==NULL){
|
||
aux3->lista=p4;aux4=p4;p4->sig=NULL;
|
||
}
|
||
else{
|
||
aux4=aux3->lista;
|
||
if (strcmp(p4->palabra,aux4->palabra)!=0){
|
||
for(;aux4!=NULL && strcmp(p4->palabra,aux4->palabra)!=0;
|
||
aux4=aux4->sig){}
|
||
strcpy(aux4->definicion,fichero.definicion);// solo copiamos la nueva def
|
||
}
|
||
else{
|
||
strcpy(aux4->definicion,fichero.definicion);// solo copiamos la nueva def
|
||
}//fin else palabra =
|
||
}// fin else lista =null
|
||
}// fin if resp=13
|
||
}// fin if busca=1
|
||
}// fin de la funci¢n modificar definici¢n
|
||
|
||
struct def* buscar(struct letra1 *dic, struct temporal *cad){// busca una palabra
|
||
|
||
struct letra1 *aux=NULL;//Puntero auxiliar del tipo 1, dic es el semiboss.
|
||
struct letra2 *aux2=NULL;//Puntero auxiliar del tipo 2. Y ya van 3 :-(.
|
||
struct letra3 *aux3=NULL;//Puntero auxiliar del tipo 3. Son 4 :-|.
|
||
struct def *aux4=NULL;//Punteros auxiliares del tipo 4.
|
||
int sw=0;
|
||
|
||
aux=dic;
|
||
for(;aux->l1!=cad->palabra[0];aux=aux->sig){}// la busca
|
||
aux2=aux->nivel2;
|
||
for(;aux2->l2!=cad->palabra[1];aux2=aux2->sig){}
|
||
aux3=aux2->nivel3;
|
||
for(;aux3->l3!=cad->palabra[2];aux3=aux3->sig){}
|
||
if (aux3->lista==NULL){// no est
|
||
sw=0;
|
||
}
|
||
else{// puede que est‚
|
||
aux4=aux3->lista;
|
||
if (strcmp(cad->palabra,aux4->palabra)!=0){
|
||
for(;aux4->sig!=NULL && strcmp(cad->palabra,aux4->palabra)!=0;
|
||
aux4=aux4->sig){}
|
||
if (strcmp(cad->palabra,aux4->palabra)==0){// est
|
||
strcpy(cad->definicion,aux4->definicion);
|
||
sw=1;
|
||
}
|
||
else// falsa alarma
|
||
sw=0;
|
||
}
|
||
else{// est
|
||
strcpy(cad->definicion,aux4->definicion);
|
||
sw=1;
|
||
}
|
||
}
|
||
if(sw)
|
||
return(aux4);// donde est
|
||
else
|
||
return(NULL);// no est
|
||
}// fin de la funci¢n buscar.
|
||
|
||
void buscar_palabra(struct letra1 *dic,int op){// funci¢n pader de buscar.
|
||
limpiar(&fichero);
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
if (op==0){// la opci¢n de buscar.
|
||
outtextxy(30,460,"Introduce la palabra a buscar (longitud m xima 20 letras).");
|
||
settextstyle(2,0,5);
|
||
ventana(75,125,550,390,"Buscar una palabra",0,0);
|
||
}
|
||
if (op==1){// la opci¢n de modificar
|
||
outtextxy(30,460,"Introduce la palabra a modificar (longitud m xima 20 letras).");
|
||
settextstyle(2,0,5);
|
||
ventana(75,125,550,390,"Modificar una palabra",0,0);
|
||
}
|
||
setcolor(0);
|
||
outtextxy(100,190,"Palabra:");
|
||
boton(190,190,420,210,1,"",0,30);
|
||
setcolor(0);
|
||
outtextxy(100,240,"Definici¢n:");
|
||
boton(190,240,450,370,1,"",0,28);
|
||
icon2(85,193);
|
||
intro_letras(200,195,fichero.palabra,19,0,2,4,30);
|
||
strlwr(fichero.palabra);
|
||
icon8(85,193);
|
||
if(buscar(dic,&fichero)!=NULL){// existe la palabra
|
||
imprime_def(fichero.definicion);
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
if (op==0)// opci¢n buscar
|
||
outtextxy(30,460,"Para volver al menu de b£squeda pulse una tecla.");
|
||
}
|
||
else{// no est la palabra
|
||
setcolor(0);settextstyle(2,0,4);
|
||
outtextxy(200,245,"La palabra introducida no est en la base");
|
||
outtextxy(200,257,"de datos del diccionario.");
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Para introducir la palabra, seleccione nueva palabra en el men£ general.");
|
||
}
|
||
}// fin de la funci¢n buscar palabra.
|
||
|
||
void busca_sen(struct letra1 *dic){// busca las tres primeras letras
|
||
char cad[2];cad[0]=NULL;cad[1]=NULL;// la letra en s¡
|
||
char lista[10][20]={NULL};// la lista de las palabras que hay en la ventana.
|
||
limpiar(&fichero);
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Introduce la palabra a buscar (longitud m xima 20 letras).");
|
||
settextstyle(2,0,5);
|
||
ventana(75,125,550,390,"Buscar una palabra (sensible al teclado)",0,0);
|
||
setcolor(0);
|
||
outtextxy(100,190,"Palabra:");
|
||
boton(190,190,420,210,1,"",0,30);
|
||
setcolor(0);
|
||
outtextxy(100,240,"Lista:");
|
||
boton(190,240,450,370,1,"",0,28);
|
||
icon2(85,193);
|
||
listar(dic,10);// lista las 10 primeras del diccionario.
|
||
intro_sen(200,195,cad,0,2,4);// introduce la letra sensiblemente
|
||
if (cad[0]!=27){// si no quiere irse
|
||
fichero.palabra[0]=cad[0];// la copiamos
|
||
fichero.palabra[1]=NULL;
|
||
strlwr(fichero.palabra);
|
||
boton(190,240,450,370,1,"",0,28);
|
||
listar_sen(dic,10,fichero.palabra,lista);// la listamos
|
||
intro_sen(206,195,cad,0,2,4);// introducimos la segunda
|
||
if (cad[0]!=27){// si no se va
|
||
fichero.palabra[1]=cad[0];// idem
|
||
fichero.palabra[2]=NULL;
|
||
strlwr(fichero.palabra);
|
||
boton(190,240,450,370,1,"",0,28);
|
||
listar_sen(dic,10,fichero.palabra,lista);
|
||
intro_sen(212,195,cad,0,2,4);
|
||
if (cad[0]!=27){// idem
|
||
fichero.palabra[2]=cad[0];
|
||
fichero.palabra[3]=NULL;
|
||
strlwr(fichero.palabra);
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Elige con los cursores la palabra para ver la definici¢n.");
|
||
settextstyle(2,0,5);
|
||
ventana(75,125,550,390,"Buscar una palabra (sensible al teclado)",0,0);
|
||
setcolor(0);
|
||
outtextxy(100,190,"Palabra:");
|
||
boton(190,190,420,210,1,"",0,28);
|
||
setcolor(0);
|
||
settextstyle(2,0,5);
|
||
outtextxy(100,240,"Lista:");
|
||
boton(190,240,450,370,1,"",0,30);
|
||
settextstyle(2,0,4);
|
||
listar_sen(dic,10,fichero.palabra,lista);// lis definitiva
|
||
icon2(85,243);
|
||
setcolor(0);settextstyle(2,0,4);
|
||
outtextxy(200,195,lista[0]);
|
||
int sw3=1, flecha=0, cual=0;// refuerzos
|
||
while (sw3){// mientras no eliga o se quiera ir
|
||
flecha=getch();// lo de siempre
|
||
if (flecha==0){
|
||
flecha=getch();
|
||
switch(flecha){// se va combiando el fondo azul de las palabras.
|
||
case 72: // flecha arriba.
|
||
if (cual>0){
|
||
boton(190,240,450,370,1,"",0,30);
|
||
cual--;
|
||
for (int n=0,y=245;n<10;n++, y+=12){
|
||
if (n==cual){
|
||
setcolor(1);
|
||
rectangle(195,y,400,y+11);
|
||
setfillstyle(1,1);
|
||
floodfill(201,y+1,1);
|
||
setcolor(30);
|
||
outtextxy(200,y,lista[n]);
|
||
boton(190,190,420,210,1,"",0,28);
|
||
setcolor(0);
|
||
outtextxy(200,195,lista[n]);
|
||
}// fin if n=cual
|
||
else{
|
||
setcolor(0);
|
||
outtextxy(200,y,lista[n]);
|
||
}// fin else n=cual
|
||
}// fin for
|
||
}//fin if cual>0
|
||
break;
|
||
case 80: // flecha abajo.
|
||
if (cual<9){
|
||
boton(190,240,450,370,1,"",0,30);
|
||
cual++;
|
||
for (int n=0,y=245;n<10;n++, y+=12){
|
||
if (n==cual){
|
||
setcolor(1);
|
||
rectangle(195,y,400,y+11);
|
||
setfillstyle(1,1);
|
||
floodfill(201,y+1,1);
|
||
setcolor(30);
|
||
outtextxy(200,y,lista[n]);
|
||
boton(190,190,420,210,1,"",0,28);
|
||
setcolor(0);
|
||
outtextxy(200,195,lista[n]);
|
||
} // fin if n==cual
|
||
else{
|
||
setcolor(0);
|
||
outtextxy(200,y,lista[n]);
|
||
}// fin else n=cual
|
||
}// fin del for
|
||
}// fin if cual<10
|
||
break;
|
||
}// fin switch flecha
|
||
}// fin if flecha 0
|
||
else{
|
||
if (flecha==13){// a elegido una
|
||
strcpy(fichero.palabra,lista[cual]);
|
||
buscar(dic,&fichero);// la buscamos
|
||
boton(190,240,450,370,1,"",0,28);
|
||
icon8(85,243);
|
||
settextstyle(2,0,5);setcolor(7);
|
||
outtextxy(100,240,"Lista:");
|
||
setcolor(0);
|
||
outtextxy(100,240,"Definici¢n:");
|
||
imprime_def(fichero.definicion);// le imprimimos la def
|
||
sw3=0;// se acab¢
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
settextstyle(2,0,4);setcolor(0);
|
||
outtextxy(30,460,"Pulse cualquier tecla para volver al men£ de b£squeda.");
|
||
getch();// mira bien la def
|
||
} // fin if flecha 13
|
||
else
|
||
if (flecha==27)// se quiere ir
|
||
sw3=0;// pues vete
|
||
}// fin else flecha 0
|
||
}// fin while sw3
|
||
}// fin de los if de control del ESC.
|
||
}// idem
|
||
}// idem
|
||
}// fin de la funci¢n buscar sen.
|
||
|
||
void guardar_arbol(struct letra1 *dic){// guarda el rbol.
|
||
struct letra1 *aux=NULL;//Puntero auxiliar del tipo 1, dic es el semiboss.
|
||
struct letra2 *aux2=NULL;//Puntero auxiliar del tipo 2. Y ya van 3 :-(.
|
||
struct letra3 *aux3=NULL;//Puntero auxiliar del tipo 3. Son 4 :-|.
|
||
struct def *aux4=NULL;//Punteros auxiliares del tipo 4.
|
||
FILE *fich=NULL, *f=NULL;// los ficheros
|
||
int con=0;// haber cuantas palabras hay.
|
||
if ((fich=fopen("k:\\files\\diccio.bsd","w+b"))==NULL){
|
||
printf ("No se puede guardar el diccionario.");getch();
|
||
}
|
||
else{
|
||
fwrite("Fichero del diccionario",23,1,fich);// encabezado
|
||
fwrite("\n",2,1,fich);
|
||
for(aux=dic;aux!=NULL;aux=aux->sig)// grabaci¢n
|
||
for (aux2=aux->nivel2;aux2!=NULL;aux2=aux2->sig)
|
||
for (aux3=aux2->nivel3;aux3!=NULL;aux3=aux3->sig){
|
||
if (aux3->lista!=NULL)
|
||
for (aux4=aux3->lista;aux4!=NULL;aux4=aux4->sig){
|
||
limpiar(&fichero);
|
||
strcpy(fichero.palabra,aux4->palabra);
|
||
strcpy(fichero.definicion,aux4->definicion);
|
||
fwrite(&fichero,sizeof(struct temporal),1,fich);// grabando...
|
||
con++;// uno m s
|
||
}
|
||
}
|
||
}
|
||
fclose(fich);// cerrando
|
||
f=fopen("k:\\files\\diccio.cfg","w+b");// abrimos el otro
|
||
fwrite(&con,sizeof(int),1,f);// metemos cuantos hay
|
||
fclose(f);// se cierra
|
||
}// fin de la funci¢n guardar el diccionario.
|
||
|
||
int huge detectEGA(void){// la resoluci¢n de la pantalla
|
||
return(2);// 640x480
|
||
}// fin de la funci¢n de la resoluci¢n.
|
||
|
||
void checkerrors(void){// comprueba los errores
|
||
int errorcode;
|
||
|
||
/* read result of last graphics operation */ // no sepo ingl‚s
|
||
errorcode = graphresult();
|
||
if (errorcode != grOk){
|
||
printf("Graphics error: %s\n", grapherrormsg(errorcode));
|
||
printf("Press any key to halt:");
|
||
getch();
|
||
exit(1);
|
||
}
|
||
}// fin de la funci¢n de los errores de la inicializaci¢n.
|
||
|
||
void menu(){// pinta el men£ general
|
||
settextstyle(2,0,6);
|
||
boton(180,150,430,175,0," Buscar una palabra",16,0);
|
||
boton(180,195,430,220,0," A¤adir una palabra",16,0);
|
||
boton(180,240,430,265,0," Modificar una palabra",16,0);
|
||
boton(180,285,430,310,0," Acerca de...",16,0);
|
||
boton(180,330,430,355,0," Salir",16,0);
|
||
}// fin de la funci¢n que pinta el men£ general.
|
||
|
||
void menu_buscar(){// pinta el men£ de buscar
|
||
settextstyle(2,0,6);
|
||
boton(180,150,430,175,0," Buscar palabra",16,0);
|
||
boton(180,195,430,220,0,"Buscar palabra con lista",16,0);
|
||
boton(180,240,430,265,0," Acerca de...",16,0);
|
||
boton(180,285,430,310,0," Volver",16,0);
|
||
}// fin de la funci¢n que pinta el men£ de buscar.
|
||
|
||
void acerca_de(){// pinta la ventana de informaci¢n de los creadores.
|
||
base();
|
||
settextstyle(2,0,5);
|
||
ventana(125,100,525,400,"Acerca de... ;-)",0,0);
|
||
setcolor(0);settextstyle(2,0,4);
|
||
outtextxy(30,460,"Creadores del Diccionario Interactivo DICSEN.");
|
||
settextstyle(7,1,6);
|
||
setcolor(26);
|
||
outtextxy(430,133,"PROSOFT");
|
||
settextstyle(2,0,5);
|
||
setcolor(0);
|
||
outtextxy(150,140,"Programadores:");
|
||
outtextxy(150,250,"Dise¤adores Gr ficos:");
|
||
setcolor(15);
|
||
line(140,158,500,158);
|
||
line(140,268,500,268);
|
||
setcolor(8);
|
||
line(140,157,500,157);
|
||
line(140,267,500,267);
|
||
icon2(150,173);
|
||
icon2(150,283);
|
||
icon2(150,213);
|
||
icon2(150,323);
|
||
setcolor(0);
|
||
outtextxy(170,170,"Mois‚s Virumbrales Cuenca");
|
||
outtextxy(170,320,"Mois‚s Virumbrales Cuenca");
|
||
outtextxy(170,210,"Juan L¢pez Fern ndez");
|
||
outtextxy(170,280,"Juan L¢pez Fern ndez");
|
||
settextstyle(2,0,4);
|
||
outtextxy(180,190,"E-mail:");
|
||
outtextxy(180,230,"E-mail:");
|
||
outtextxy(180,300,"E-mail:");
|
||
outtextxy(180,340,"E-mail:");
|
||
setcolor(1);outtextxy(230,190,"moisesvcuenca@hotmail.com");
|
||
outtextxy(230,340,"moisesvcuenca@hotmail.com");
|
||
outtextxy(230,230,"juanlf@hotmail.com");
|
||
outtextxy(230,300,"juanlf@hotmail.com");
|
||
setcolor(0);settextstyle(2,0,3);
|
||
outtextxy(150,370,"Este programa est realizado para PROSOFT Software. Esta prohibida la reproducci¢n total o");
|
||
outtextxy(150,380,"parcial del programa sin la autorizaci¢n expresa de PROSOFT Software.");
|
||
settextstyle(2,0,4);
|
||
outtextxy(435,380,"Copyright 1999");
|
||
getch();// mirala bien
|
||
}// fin de la funci¢n de la ventana de los creadores.
|
||
|
||
|
||
void rectangulo(int pos){// funci¢n que pinta el rectangulo de los botones.
|
||
setlinestyle(1,0,2);
|
||
switch (pos){// Ahora pintamos un recuadro al bot¢n seleccionado.
|
||
case 1:
|
||
rectangle(185,154,425,171);
|
||
setlinestyle(0,0,2);rectangle(180,150,430,175);
|
||
break;
|
||
case 2:
|
||
rectangle(185,199,425,216);
|
||
setlinestyle(0,0,2);rectangle(180,195,430,220);
|
||
break;
|
||
case 3:
|
||
rectangle(185,244,425,261);
|
||
setlinestyle(0,0,2);rectangle(180,240,430,265);
|
||
break;
|
||
case 4:
|
||
rectangle(185,289,425,306);
|
||
setlinestyle(0,0,2);rectangle(180,285,430,310);
|
||
break;
|
||
case 5:
|
||
rectangle(185,334,425,351);
|
||
setlinestyle(0,0,2);rectangle(180,330,430,355);
|
||
break;
|
||
} // fin del switch-case(pos).
|
||
setlinestyle(0,0,0); // volvemos a poner el estilo de l¡nea normal.
|
||
}// fin de la funci¢n que pinta el recuadro.
|
||
|
||
void base(){// pinta el fondo y el t¡tulo y la barra inferior.
|
||
line (0,0,getmaxx(),getmaxy());
|
||
setfillstyle(1,125);
|
||
bar(0,0,getmaxx(),getmaxy());
|
||
boton(0,0,getmaxx(),50,0,"",16,124);
|
||
setcolor(0);
|
||
settextstyle(5,0,4);
|
||
outtextxy(60,0,"Diccionario Interactivo");
|
||
settextstyle(7,0,5);
|
||
outtextxy(400,0,"DICSEN");
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
}// fin de la funci¢n que pinta la base.
|
||
|
||
void intro_letras(int x, int y, char cad[], int a,
|
||
int c, int s, int t, int col) {// introduce la palabra.
|
||
int i;
|
||
for (i=0;i<=a-1;) {
|
||
if (i<a-1){
|
||
cad[i]=getche();
|
||
if (cad[i]==8){
|
||
if (i>0){
|
||
setcolor(col);settextstyle(s,0,t);outtextxy(x,y,cad);
|
||
cad[i-1]=NULL;i-=2;
|
||
}
|
||
else{
|
||
sound(1000);delay(50);nosound();i--;
|
||
}
|
||
}
|
||
if ((cad[i]!=13 && cad[i]!=8) && (cad[i]<65 || (cad[i]>90 && cad[i]<97)
|
||
|| cad[i]>122)){
|
||
cad[i]=NULL;
|
||
sound(1000);delay(50);nosound();i--;
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
icon10(5,455);
|
||
settextstyle(2,0,4);setcolor(4);
|
||
outtextxy(30,460,"Solo se pueden introducir letras, no se puede introducir cualquier otro car cter (ni letras acentuadas).");
|
||
}
|
||
setcolor(c);settextstyle(s,0,t);outtextxy(x,y,cad);
|
||
}
|
||
else {
|
||
if (i==a-1 && cad[i]!=13){
|
||
cad[i]=getche();
|
||
if (cad[i]!=13 && cad[i]!=8){
|
||
sound(1000);delay(50);nosound();
|
||
}
|
||
else{
|
||
if (cad[i]==8 && i>=0){
|
||
setcolor(col);settextstyle(s,0,t);outtextxy(x,y,cad);
|
||
cad[i-1]=NULL;i--;
|
||
setcolor(c);settextstyle(s,0,t);outtextxy(x,y,cad);
|
||
}
|
||
}
|
||
i--;
|
||
}
|
||
}
|
||
if (cad[i]==13 && i>0)
|
||
break;
|
||
else
|
||
if (cad[i]==13 && i==0)
|
||
i--;
|
||
if (cad[0]!=NULL)
|
||
i++;
|
||
if (i==-1)
|
||
i++;
|
||
}
|
||
cad[i]=NULL;
|
||
}// fin de la funci¢n de introducir la palabra.
|
||
|
||
|
||
void introdef(int x, int y, char cad[], int a,
|
||
int c, int s, int t, int col) {// introduce la def.
|
||
int i, posx=x,posy=y+10;// algor¡tmo del cursor demasiado complicado.
|
||
setcolor(0);line(x,y+10,x+4,y+10);// cursor de posici¢n. Fue idea feliz.
|
||
for (i=0;i<=a-1;) {
|
||
if (i<a-1){
|
||
cad[i]=getche();
|
||
if (cad[i]==8){
|
||
if (i>0){
|
||
setcolor(30);line(posx,posy,posx+4,posy);// cursor de posici¢n.
|
||
setcolor(col);settextstyle(s,0,t);
|
||
char aux[2];aux[1]=NULL;
|
||
int xaux=x, yaux=y;
|
||
for (int pos=0;pos<=37 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
if (cad[pos]!=NULL){
|
||
yaux=yaux+12;xaux=x;
|
||
for (;pos<=75 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
}
|
||
if (cad[pos]!=NULL){
|
||
yaux=yaux+12;xaux=x;
|
||
for (;pos<=100 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
}
|
||
setcolor(0);line(xaux,yaux+10,xaux+4,yaux+10);// cursor de posici¢n.
|
||
posx=xaux;posy=yaux+10;
|
||
cad[i-1]=NULL;i-=2;
|
||
}
|
||
else{
|
||
sound(1000);delay(50);nosound();i--;
|
||
}
|
||
}
|
||
setcolor(30);line(posx,posy,posx+4,posy);// cursor de posici¢n.
|
||
char aux[2];aux[1]=NULL;
|
||
int xaux=x, yaux=y;
|
||
setcolor(c);settextstyle(s,0,t);
|
||
for (int pos=0;pos<=37 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
if (cad[pos]!=NULL){
|
||
yaux=yaux+12;xaux=x;
|
||
for (;pos<=75 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
}
|
||
if (cad[pos]!=NULL){
|
||
yaux=yaux+12;xaux=x;
|
||
for (;pos<=100 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
}
|
||
setcolor(0);line(xaux,yaux+10,xaux+4,yaux+10);// cursor de posici¢n.
|
||
posx=xaux;posy=yaux+10;
|
||
}
|
||
else {
|
||
if (i==a-1 && cad[i]!=13){
|
||
cad[i]=getche();
|
||
if (cad[i]!=13 && cad[i]!=8){
|
||
sound(1000);delay(50);nosound();
|
||
}
|
||
else{
|
||
if (cad[i]==8 && i>=0){
|
||
char aux[2];aux[1]=NULL;
|
||
int xaux=x, yaux=y;
|
||
setcolor(col);settextstyle(s,0,t);
|
||
for (int pos=0;pos<=37 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
if (cad[pos]!=NULL){
|
||
yaux=yaux+12;xaux=x;
|
||
for (;pos<=75 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
}
|
||
if (cad[pos]!=NULL){
|
||
yaux=yaux+12;xaux=x;
|
||
for (;pos<=100 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
}
|
||
cad[i-1]=NULL;i--;
|
||
setcolor(30);line(posx,posy,posx+4,posy);// cursor de posici¢n.
|
||
setcolor(c);settextstyle(s,0,t);
|
||
for (pos=0;pos<=37 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
if (cad[pos]!=NULL){
|
||
yaux=yaux+12;xaux=x;
|
||
for (;pos<=75 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
}
|
||
if (cad[pos]!=NULL){
|
||
yaux=yaux+12;xaux=x;
|
||
for (;pos<=100 && cad[pos]!=NULL;pos++,xaux+=6){
|
||
aux[0]=cad[pos];
|
||
outtextxy(xaux,yaux,aux);
|
||
}
|
||
}
|
||
setcolor(0);line(xaux,yaux+10,xaux+4,yaux+10);// cursor de posici¢n.
|
||
posx=xaux;posy=yaux+10;
|
||
}
|
||
}
|
||
i--;
|
||
}
|
||
}
|
||
if (cad[i]==13 && i>0)
|
||
break;
|
||
else
|
||
if (cad[i]==13 && i==0)
|
||
i--;
|
||
if (cad[0]!=NULL)
|
||
i++;
|
||
if (i==-1)
|
||
i++;
|
||
}
|
||
cad[i]=NULL;
|
||
}// fin de la funci¢n de introducir la definici¢n.
|
||
|
||
void intro_sen(int x, int y, char cad[], int c, int s, int t){// intro las 3 1¦
|
||
int i=0, sw=1;
|
||
while (sw){
|
||
cad[i]=getch();
|
||
if(cad[i]!=27 && (cad[i]<65 || (cad[i]>90 && cad[i]<97) || cad[i]>122)){
|
||
cad[i]=NULL;
|
||
sound(1000);delay(50);nosound();
|
||
boton(0,450,getmaxx(),getmaxy(),0,"",0,0);
|
||
icon10(5,455);
|
||
settextstyle(2,0,4);setcolor(4);
|
||
outtextxy(30,460,"Solo se pueden introducir letras, no se puede introducir cualquier otro car cter (ni letras acentuadas).");
|
||
}
|
||
else {
|
||
setcolor(c);settextstyle(s,0,t);outtextxy(x,y,cad);sw=0;
|
||
}
|
||
}
|
||
cad[i+1]=NULL;
|
||
}// fin de la funci¢n de introducci¢n de las tres 1¦
|
||
|
||
|
||
/*void borrar_arbol(struct letra1 *dic){ // Pinta el rbol.
|
||
for(struct letra1 *n1=dic;n1!=NULL;n1=n1->sig){
|
||
for (struct letra2 *n2=n1->nivel2;n2!=NULL;n2=n2->sig){
|
||
for (struct letra3 *n3=n2->nivel3;n3!=NULL;n3=n3->sig){
|
||
if (n3->lista!=NULL)
|
||
for (struct def *n4=n3->lista;n4!=NULL;n4=n4->sig){
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}*/ |