rendered paste body
#include "lib1.h"
#include <iostream>
using namespace std;
void Guardar(string texto[],string nombre,int nlineas) //problema con el string texto y fstream fichero
{
if( nombre.length()> 200) || nombre.length()< 1) )
{
return;
}
fstream fichero;
fichero.open(nombre,ios::in);
int i;
for(i = 1;i<=nlineas;i++)
{
while(!fichero.eof()){
getline(texto[i],fichero);
}
fichero.close();
}
}
int LeerFichero (string nombre, string texto[])
{
int retorno;
i=0;
string basura;
fsrream fic;
fic.open(nombre, ios::in);
if(!fic)
{
cout<<E2<<endl;
retorno=-1;
}
else
{
getline(fic, texto[i]);
while(!fic.eof());
{
i++;
if(i<1000)
{
retorno=i;
getline(fic,texto[i]);
}
else
getline(fic,basura);
}
if(i>1000)
{
cout<<E3<<endl;
retorno=-1;
}
}
fic.close();
return(retorno);
}
void Arriba(string texto[],int &linea, int &columna)
{
if(linea == 1)
{
return;
}
if(columna > texto[linea-1].length())
{
columna = texto[linea-1].length();
}
linea=linea-1;
}
void Abajo(string texto[],int &linea, int &columna,int nlineas)
{
if(linea == nlineas) //mirar el nlineas q seria el maximo valor d lineas d texto[]
{
return;
}
if(columna > texto[linea+1].length())
{
columna = texto[linea+1].length();
if(columna == 0)
{
columna=1; //correjimos que si la linea es la linea virtual
//la primera direccion no es 0, sino 1
}
}
linea=linea+1;
}
void Izquierda(string texto[],int &linea, int &columna)
{
if((linea == 1) && (columna == 1))
{
return;
}
if(columna == 1)
{
linea=linea-1;
columna=texto[linea].length();
}
else
{
columna=columna-1;
}
}
void Derecha(string texto[],int &linea, int &columna,int nlineas)
{
if( (linea > nlineas) && (columna = texto[linea].length())
{
return;
}
if(columna == texto[linea].length())
{
linea=linea+1;
columna=1;
}
else
{
if(linea == nlineas)
{
return;
}
columna=columna+1;
}
}
void PaginaArriba(string texto[],int &linea, int &columna)
{
//bien, primero comprobaremos si hemos de ir a 1 o a x -24
//moriremos si directamente estamos en 1, y regresaremos si fuese asi
//finalmente, reajustaremos y si es necesario, pero solo 1 vez.
if(linea == 1)
{
return;
}
int destino;
if(((linea-24) == 1) || ((linea-24) < 1))
{
destino = 1;
}
else
{
destino = linea - 24;
}
if(columna > texto[destino].length())
{
columna = texto[destino].length());
}
linea = destino;
}
void PaginaAbajo(char texto[],int &linea, int &columna,int nlineas)
{
int destino;
if(linea == nlineas)
{
return;
}
if(((linea+24) == nlineas) || ((linea+24) > nlineas))
{
destino = nlineas; //proxima parada: linea virtual
}
else
{
destino = linea+24;
}
//corregimos y
if(columna > texto[destino].length())
{
columna = texto[destino].length());
if(columna == 0)
{
columna = 1;
}
}
linea = destino;
}
void Posicion(string texto[],int &linea, int &columna,int nlineas, int lineapos)
{
if((lineapos < 1) || (lineapos > nlineas) || (lineapos == linea))
{
return;
}
if(columna > texto[lineapos].length())
{
columna = texto[lineapos].length();
if(columna == 0)
{
columna = 1;
}
}
linea = lineapos;
}
void Mostrar(string texto[], int nlineas){
int cont;
cout<<"---- PRINCIPIO ----"<<endl;
for(cont=1;cont<nlineas+1;cont++)
{
cout<<texto[cont]<<endl;
}
cout<<"---- FINAL ----"<<endl;
}
void InsertarNuevaLinea(string texto[], int &linea, int &columna, int &nlineas)
{
string aux1, aux2;
int i, KLINEAS=1000, k;
if(nlineas!=KLINEAS)
{
for(i=nlineas; i>=linea+1; i--)
texto[i]=texto[i-1];
aux1="";
aux2="";
for(k=0; k<=columna-2; k++)
aux1+=texto[linea-1][k];
for(k=columna-1; k<=texto[linea-1].length(); k++)
aux2+=texto[linea-1][k];
texto[linea-1]=aux1;
texto[linea]=aux2;
linea++; nlineas++;
columna=1;
}
}
void InsertarCaracter(string texto[], char caracter, int &linea, int &columna, int &nlineas)
{
int i;
if (linea==nlineas)
{
if(nlineas<MAXLIN)
{
texto[nlineas]=texto[nlineas]+" ";
texto[nlineas][0]=caracter;
columna++;
nlineas++;
}
else
{
cout << endl << E6 << endl;
}
}
else
{
texto[linea]=texto[linea]+" ";
for (i=texto[linea].length();i>=columna;i--)
{
texto[linea][i]=texto[linea][i-1];
}
texto[linea][columna]=caracter;
columna++;
}
}
void BorraAtras(string texto[], int &linea, int &columna, int &nlineas)
{
string aux="";
int i;
if(columna>1)
{
for(i=0; i<texto[linea-1].length(); i++)
if(i!=columna-2)
aux+=texto[linea-1][i];
columna--;
}
else
{
if(linea>1)
{
columna=texto[linea-2].length();
texto[linea-2]=texto[linea-1];
for(i=linea-1; i<=nlineas-2; i++)
texto[i]=texto[i+1];
nlineas--;
columna--;
}
}
}
int Buscar(string lineaActual, string palabra, int in)
{
int tam1, tam2, i, k;
bool enc;
string aux;
tam1=lineaActual.length();
tam2=palabra.length();
enc=false;
i=ini;
while(!enc && i<tam1-tam2)
{
aux=" ";
for(k=i, k<=tam2+i, k++)
aux+=lineaActual[k];
if(aux==palabra)
enc=true;
else
i++;
}
if(enc) return 1;
else return -1;
}
void BorrarPalabra(string texto[], int linea, int &columna, int nlineas)
{
string aux1="";
string aux2="";
int i,k;
k=columna;
if(linea<nlineas && linea!='')
{
while (texto[linea][columna]!=' ')
columna++;
for (i=columna; i=texto[linea].length(); i++)
aux2+=texto[linea][i];
while (texto[linea][k]!=' ')
k--;
for (i=0; i=k; i++)
aux1+=texto[linea][i];
texto[linea]=aux1+aux2;
}
}
void Borrar(string texto[], int &linea, int &columna, int &nlineas)
{
int i;
char cad[texto[linea].length()];
for(i=0;i<texto[linea].length();i++)
{
cad[i]=texto[linea][i];
}
if((linea==nlineas-1)&&(texto[linea].length()==0))
{
nlineas--;
}
else
{
if(columna==texto[linea].length()&&linea<nlineas-1)
{
texto[linea]=texto[linea]+texto[linea+1];
for(i=linea+1;i<nlineas;i++)
{
texto[i]=texto[i+1];
}
nlineas--;
}
else if(linea<nlineas&&columna!=texto[linea].length())
{
for(i=columna;i<texto[linea].length();i++)
{
cad[i]=cad[i+1];
}
cad[texto[linea].length()-1]='\0';
texto[linea]=cad;
}
}
}
void BorrarLinea(string texto[], int &linea, int &columna, int &nlineas)
{
int i,k;
if(linea<nlineas)
{
if(columna> (texto[linea+1].length()) )
{
for(k=0; k<=texto[linea+1].length(); k++)
columna=texto[linea+1][k+1];
}
for(i=linea-1; i<=nlineas-2; i++)
texto[i]=texto[i+1];
nlineas--;
}
else
{
if(linea==nlineas)
{
linea+=1;
columna=1;
}
}
}
void BorrarResto(string texto[], int linea, int &columna, int nlineas)
{
string aux="";
int i;
if(linea<=nlineas)
{
if(columna>1 && columna<texto[linea].length())
{
for(i=0; i<columna-1; i++)
aux+=texto[linea][i];
texto[linea]=aux;
}
}
}
void InsertarCadena(string texto[], int linea, int &columna, int &nlineas, string cadena[])
{
string aux1="";
string aux2="";
int i,k;
for (k=columna; k=0;k--;
aux1-=texto[linea][k];
for (i=columna; i=texto[linea].length(); i++)
aux2+=texto[linea][i];
if (linea==nlineas)
{
if(nlineas<MAXLIN)
{
texto[nlineas]=aux1+cadena+aux2;
nlineas++;
}
else
{
cout << endl << E6 << endl;
}
}
else
{
texto[linea]=aux1+cadena+aux2;
}
}