Evento Docente Universida del Mar

Editor de Texto

/*
-----------------------------------------------------------------------------
-------------------- --------------------
-------------------- E D I T O R D E T E X T O --------------------
-------------------- --------------------
-----------------------------------------------------------------------------

UNIVERSIDAD DEL MAR. CAMPUS PUERTO ESCONDIDO..

MATERIA : Estructura de Datos.

CARRERA : Lic. Inform tica.

PROFESOR : Freddy Juarez P‚rez.


EQUIPO: # 2
Alma Alheli Pedro P‚rez.
Zulima Silva Santos.
Jasiel Hassan Toscano Mart¡nez.
Emilio Nicolas Lavariega.
Darwin Sosa G¢mez.

*/

#include
#include
#include
#include

#define constcodeAscii 1
#define constcodeExtended 0

/* DECLARANDO LA LISTA */
typedef struct Lista{
char *linea;
struct Lista *Siguiente;
struct Lista *Anterior;
}LISTA;

LISTA *BUSCAR;
LISTA *ROOT=NULL;

/* Funciones Usadas */
int editar(LISTA *R,int ncol, int nlin);
void Cre_archivo_NVO();
void Abre_archivo_NVO();
void fondo();
void crea_recuadr_();
void nombres();
void error();
void encabezado();
void analizar();
void limpiar(char);
void meterlista(char);
void imprimelista(void);
void fondo_blanco();
void fondo_Nombres();
void main1();

/* Vectores auxiliares */
char todo_el_archivo[3000];
char auxiliar[80];
char Archivo_name[10];
char unidad[1];
char nombre1[10];
char opcion;

/* Banderas auxiliar en los textos de las pantallas */
int c=0,m=0,a=0,An=0,contador=0;
int bandera=0;
void fondo_blanco(int color)
{
textmode(C4350);
window(1,1,80,50);
textbackground(color);
clrscr();
textcolor(BLACK);
}

/*--------------------------------------------------------------------------------
------------ ---------------------------------
------------ LLENANDO LA LISTA CON EL ARCHIVO ---------------------------------
------------ --------------------------------
--------------------------------------------------------------------------------*/
void meterlista()
{
int len=80;
LISTA *NUEVO=new(LISTA);

if(ROOT==NULL)
{
ROOT=NUEVO;
NUEVO->Siguiente=NULL;
NUEVO->Anterior=NULL;
NUEVO->linea=(char*)malloc(sizeof(char)*len);
strcpy(NUEVO->linea,auxiliar);
}
else
{
LISTA *R=ROOT;
while(R->Siguiente!=NULL)R=R->Siguiente;
R->Siguiente=NUEVO;
NUEVO->Siguiente=NULL;
NUEVO->Anterior=R;
NUEVO->linea=(char*)malloc(sizeof(char)*len);
strcpy(NUEVO->linea,auxiliar);
}
}

/*----------------------------------------------------------------------------------
------------ ---------------
------------ LIMPIANDO EL VECTOR AUXILIAR QUE GUARDA EN LA LISTA ---------------
------------ ---------------
----------------------------------------------------------------------------------*/
void limpiar()
{
for(int g=0;g<=79;g++)
{
auxiliar[g]=NULL;
}
}

/*----------------------------------------------------------------------------------
------------ ------------------------------
------------ IMPRIMIENDO LA LISTA Y GUARDANDO ------------------------------
------------ ------------------------------
----------------------------------------------------------------------------------*/
void imprimelista(void)
{
fondo_blanco(1);
_setcursortype(_NORMALCURSOR);
int ncontrol=80;
int naccion=0;
int x=3,y=6;

LISTA *R=ROOT;
clrscr();
fondo();


/* ENCABEZADO Y PIE DE LA PANTALLA ACTUAL */
textcolor(10);gotoxy(5,1);cprintf(" EDITANDO ARCHIVO ");textcolor(15);
for(int i=46;i<79;i++){gotoxy(i,4);cprintf("-");}
textcolor(12);gotoxy(50,3);cprintf("%s",unidad);textcolor(15);
for(i=2;i<80;i++){gotoxy(i,46);cprintf("_");}
textcolor(12);gotoxy(20,48);cprintf(" Para Guardar y Volver Presione 'ESC'");textcolor(15);

/* Imprimiendo en pantalla la lista (esta contiene el archivo) */


do{
if(bandera==1)
return;//main1();
else
{
textcolor(YELLOW);
gotoxy(3,y++);
cprintf("%s", R->linea);
}
R=R->Siguiente;
}while(R!=NULL);

R=ROOT;
x=3;y=6;

/* Segun la tecla presionada, se llama a la funcion que edita archivo */
while(naccion!=27)
{
switch(ncontrol)
{
case 80:
R=R->Siguiente;
if(y<=43)y++;
naccion=editar(R,x,y);
break;
case 72:
R=R->Anterior;
if(y>=8)y--;
naccion=editar(R,x,y);
break;
}
switch(naccion)
{
case 80:ncontrol=80;break;
case 72:ncontrol=72;break;
}
}

}

/*----------------------------------------------------------------------------------
------------ ------------------------------
------------ EDITANDO LA LISTA CON EL ARCHIVO ------------------------------
------------ ------------------------------
----------------------------------------------------------------------------------*/
int editar( LISTA *R,int ncol, int nlin)
{
int ntypecode=0;
int x=ncol;
int y=nlin;
FILE *fp;

char *lineas;
lineas=R->linea;/* Guardando toda la linea en un vector */

int nmaxcol=79;/* Ancho de la pantalla */
int w=strlen(lineas)+1;/* Calculando el tama¤o de la linea */

/* Limpiando los espacion no usados del vector linea (Evita imprimir basura)*/
for(int w1=w+1;w1<=nmaxcol;w1++)
lineas[w1]='\x0';

int acharacter=0;
int bexit=0;

gotoxy(ncol,nlin);
while(acharacter!=27 && !bexit)
{
acharacter=getch();
ntypecode=constcodeAscii;

if(acharacter==0)
{
acharacter=getch();
ntypecode=constcodeExtended;
}
if(ntypecode==constcodeAscii && acharacter!=27)
{
cprintf("%c",acharacter);
*(lineas+(x-ncol))=acharacter;
acharacter=77;
}

switch(acharacter)
{
case 80:bexit=1;break;
case 72:bexit=1;break;
case 75:if(x>ncol)x--;break;
case 77:if(x }
gotoxy(x,y);
}/* Cerrando While */
if (acharacter==27)
{
R=ROOT;
fp=fopen(unidad,"w");
if(fp==NULL)/*En caso que no se pueda crear el archivo*/
{
error();
getch();
}
_setcursortype(_NORMALCURSOR);/*Cursor Nomral*/
while(R!=NULL)/*Insertando Datos en el archivo*/
{
for(int b=0;b<=strlen(R->linea);b++)
{
fputc(R->linea[b],fp);
}
R=R->Siguiente;
}
fclose(fp);
} /* Cerrando IF */
return(acharacter);/*Rotornando el Caracter que se oprimi¢*/
}
/*------------------------------------------------------------------------------------
------------- --------------
------------- IMPRIMIENDO ENCABEZADO DE PORTADA (pantalla inicial) --------------
------------- --------------
-------------------------------------------------------------------------------------*/
void encabezado()
{
textcolor(10);
gotoxy(28,9);cprintf(" EDITOR DE TEXTO ");
gotoxy(22,11);cprintf(" SISTEMA MANEJADOR DE ARCHIVOS ");
for(int i=18;i<59;i++){textcolor(14);gotoxy(i,13);cprintf("Ü");}
textcolor(15);
}
/*------------------------------------------------------------------------------------
------------- --------------
------------- CAPTURANDO NOMBRE DEL ARCHIVO, crear, apertura o analisis --------------
------------- --------------
-------------------------------------------------------------------------------------*/
void nombres()
{
int i;
textcolor(14);
_setcursortype(_NOCURSOR);/*Imprimir sin ver el Cursor*/
for(i=21;i<35;i++)
{
gotoxy(15,i);cprintf("º");
gotoxy(55,i);cprintf("º");
}
for(i=16;i<55;i++)
{
gotoxy(i,20);cprintf("Í");
gotoxy(i,35);cprintf("Í");
}

gotoxy(15,20);cprintf("É");gotoxy(55,20);cprintf("»");
gotoxy(15,35);cprintf("È");gotoxy(55,35);cprintf("¼");

/* ENCABEZADO DE LAS VENTANAS QUE CAPTURAN NOMBRE Y UNIDAD DEL ARCHIVO */
do
{
textcolor(10);
if(c==1&&m==0&&a==0&&An==0){gotoxy(18,20);cprintf(" NOMBRAR ARCHIVO ");}
if(c==0&&m==0&&a==1&&An==0){gotoxy(18,20);cprintf(" EDITAR ARCHIVO ");}
if(c==0&&m==0&&a==0&&An==1){gotoxy(18,20);cprintf(" EDITAR ARCHIVO ");}
textcolor(15);

textcolor(12);gotoxy(17,24);cprintf("Maximo 10 caracteres");textcolor(15);
gotoxy(17,29);cprintf("Nombre del Archivo: ");gets(Archivo_name);
gotoxy(17,33);cprintf("Unidad De DISCO: ");gets(unidad);
clrscr();fondo();
if(strlen(Archivo_name)>10){clrscr();fondo();nombres();}

}while(strlen(Archivo_name)>10);
}
/*------------------------------------------------------------------------------------
------------------- ---------------------------------------
------------------- ENVIANDO MENSAJES DE ERROR ---------------------------------------
------------------- ---------------------------------------
------------------------------------------------------------------------------------*/
void error()
{
int i;
textcolor(14);
_setcursortype(_NOCURSOR);/*Desaparece Cursor*/
for(i=19;i<24;i++)
{
gotoxy(23,i);cprintf("º");
gotoxy(70,i);cprintf("º");
}
for(i=24;i<70;i++)
{
gotoxy(i,18);cprintf("Í");
gotoxy(i,24);cprintf("Í");
}
gotoxy(23,18);cprintf("É");gotoxy(70,18);cprintf("»");
gotoxy(23,24);cprintf("È");gotoxy(70,24);cprintf("¼");

/* MENSAJE DE ERROR, POR SI NO SE CREA O CARGA BIEN EL ARCHIVO */

textcolor(10);gotoxy(26,18);cprintf(" UPPSS..ERROR... ");textcolor(15);
textcolor(12);

if(c==1&&m==0&&a==0&&An==0){gotoxy(27,22);cprintf(" ERROR, NO SE CREO EL ARCHIVO");}
if(c==0&&m==1&&a==0&&An==0){gotoxy(27,22);cprintf(" ERROR, NO SE PUEDE CARGAR EL ARCHIVO");}
if(c==0&&m==0&&a==1&&An==0){gotoxy(27,22);cprintf(" ERROR, NO SE PUEDE CARGAR EL ARCHIVO");}
if(c==0&&m==0&&a==0&&An==1){gotoxy(27,22);cprintf(" ERROR, NO SE PUEDE EDITAR EL ARCHIVO ");}

textcolor(15);
}

/* CREANDO MARGEN DE CAPTURA DE OPCION EN PANTALLA INICIAL */
void crea_recuadro_()
{
textcolor(12);
gotoxy(37,35);cprintf("É");gotoxy(59,35);cprintf("»");
gotoxy(37,41);cprintf("È");gotoxy(59,41);cprintf("¼");

for(int i=38;i<59;i++)
{
gotoxy(i,35);cprintf("Í");
gotoxy(i,41);cprintf("Í");
}
textcolor(15);
}
/*----------------------------------------------------------------------------------
------------------- --------------------------------
------------------- FUNCION MAIN, menu de opciones --------------------------------
------------------- --------------------------------
----------------------------------------------------------------------------------*/
void main()
{
textmode(C4350);/* Definiendo tama¤o de ventana */

main1();
getch();
}

void main1()
{
do{
_setcursortype(_NORMALCURSOR);/*Cursor normal*/
clrscr();
fondo_blanco(0);
fondo();
encabezado();

/* MENU DE ACCIONES */
textcolor(11);
gotoxy(24,20);cprintf(" F9 ÍÍ%c Nombrar Archivo.",16);
gotoxy(24,24);cprintf(" F3 ÍÍ%c Editar Archivo.",16);
gotoxy(24,28);cprintf("Esc ÍÍ%c SALIR\n",16);

crea_recuadro_();

textcolor(10);
gotoxy(40,38);cprintf("ELIJA OPCION : ");opcion=getche();
textcolor(15);

switch(opcion)
{
case 67:Cre_archivo_NVO();break; /* F9 */
case 61:analizar();break; /* F3 */
case 27:exit(1);break; /* ESC */
}
}while(opcion!=27);
}

/*---------------------------------------------------------------------------------
------------- ----------------------------------
------------- CREANDO UN ARCHIVO NUEVO ----------------------------------
------------- ----------------------------------
---------------------------------------------------------------------------------*/
void Cre_archivo_NVO()
{
c=1;m=a=An=0;
int ren=5,col=5;

FILE *fp;/* Puntero para maniobrar Archivos */

char caracter;
char Extension_de_archivo[]=".txt";
char diagonal[]=":\\";
int columna;
int renglon;
clrscr();
fondo();
nombres();
clrscr();
fondo();

fflush(stdin);

/* CONCATENANDO RUTA PARA GUARDAR EL ARCHIVO */
strncat(unidad,diagonal,3);
strncat(unidad,Archivo_name,strlen(Archivo_name));
strncat(unidad,Extension_de_archivo,4);/*Concatenando Extension*/

/* Se esta creando el archivo */
fp=fopen(unidad,"w+t");

/*En caso que no se pueda crear el archivo*/
if(fp==NULL)
{
error();
getch();
return;
}

gotoxy(col,ren);
_setcursortype(_NORMALCURSOR);/*Cursor Nomral*/


columna=3;
renglon=9;
while(columna<79&&renglon<44)
{
caracter=32;
if(columna==78)
{
caracter='\x0';
columna=3;renglon++;
}
fputc(caracter,fp);
columna++;
}

fclose(fp);/*Cerrando Puntero del archivo*/
return;
}

/*------------------------------------------------------------------------------------------
-------------- -----------------------------------------------
-------------- ABRIENDO EL ARCHIVO YA CREADO -----------------------------------------------
-------------- -----------------------------------------------
------------------------------------------------------------------------------------------*/
void Abre_archivo_NVO()
{
ROOT=NULL;
a=1;c=m=An=0;
_setcursortype(_NOCURSOR);/*Desaparece Cursor*/

limpiar();
int ren=5,col=5,i;

FILE *fp;/* Puntero para maniobrar Archivos */

char caracter;
char diagonal[]=":\\";
char *Extension_de_archivo=".txt";

clrscr();
fondo();
nombres();
clrscr();
fondo();

fflush(stdin);

/* CONCATENANDO RUTA PARA GUARDAR EL ARCHIVO */
strncat(unidad,diagonal,3);
strncat(unidad,Archivo_name,strlen(Archivo_name));
strncat(unidad,Extension_de_archivo,4);/*Concatenando Extension*/

/*Se esta abriendo el Archivo para editarlo */
fp=fopen(unidad,"r+t");

textcolor(11);gotoxy(5,1);cprintf(" EDITANDO ARCHIVO ");textcolor(15);
textcolor(12);gotoxy(50,3);cprintf("%s",unidad);textcolor(15);
for(i=46;i<79;i++){gotoxy(i,4);cprintf("-");}
for(i=2;i<80;i++){gotoxy(i,46);cprintf("_");}
textcolor(12);gotoxy(20,48);cprintf(" Para Salir del Editor Presione 'ESC'");textcolor(15);

/*En caso que no se pueda cargar el archivo*/
if(fp==NULL)
{
error();
getch();
bandera=1;
return;
}
gotoxy(col,ren);
contador=0;
bandera=0;
/* Leyendo Archivo caracter a caracter y mandando datos a la lista */
while((caracter=fgetc(fp))!=EOF)
{
auxiliar[contador++]=caracter;
if(caracter==NULL||caracter=='\x0'||caracter=='\n')
{
contador=0;meterlista();limpiar();
}
}
fclose(fp);/*Cerrando el puntero del archivo*/
meterlista();
clrscr();
}

/*-------------------------------------------------------------------------------------------
---------------- --------------------------------
---------------- ENLAZANDO PARA ABRIR Y EDITAR ARCHIVO --------------------------------
---------------- --------------------------------
-------------------------------------------------------------------------------------------*/
void analizar()
{
c=m=a=0; An=1;
clrscr();
fondo();
Abre_archivo_NVO();
_setcursortype(_NORMALCURSOR);
imprimelista();
}

/*------------------------------------------------------------------------------
-------------- --------------------------------
-------------- IMPRIMIENDO FONDO DE PANTALLA --------------------------------
-------------- --------------------------------
------------------------------------------------------------------------------*/
void fondo(void)
{
int l;
textcolor(15);
cprintf("É");

for(l=0;l<78;l++)cprintf("Í");gotoxy(78,0);cprintf("»");
for(l=2;l<49;l++){gotoxy(80,l);cprintf("º\n");}
for(l=2;l<49;l++){gotoxy(1,l);cprintf("º\n");}gotoxy(1,49);cprintf("È");
for(l=1;l<79;l++)cprintf("Í");gotoxy(80,49);cprintf("¼");
textcolor(15);
}

Tags:

0 comentarios: