pilnie potrzebny kod zrodłowy do prostego edytora tekstu w c... pomoze ktos?
0
0
moj stary program sprzed lat, pamietam ze mialme problemy z zachowaniem strzalek, aby zachowywaly sie jak te w notatniku..
ktos zyczliwy moze podlubie, moze sam podlubiesz i cos z tego bedzie :D
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<ctype.h>
#include<string.h>
const int porcja=100;
const int dl_wiersza=20;
const int dl_kol=20;
const int txt_y=3;
const int txt_x=3;
char schowek[400];
int schowek_poz=1; //indexownik schowka
int mark_lock=3; //czy wcisniety F3 (markowanie zanzaczenia)
int bufor_lim;
int n=0; //zmienna do schowka
int kop[400]; //tablica w ktorej sa zapisane miejsca do kopiowania
char new1[400];
char *bufor;
int bufor_poz=0;
int rozmiar;
int koniec; //koniec textu do rilokuf
int dl_schowka;
int cur_line=0;
int cur_poz=0;
char nazwa[]="beznazwy.txt";
void zapisz(char nazwa[]);
void zaznaczenie();
//void wyswietl();
//-------------------------------------------------------
void menu() {
textbackground(0);
textcolor(RED);
gotoxy(1,3);
cprintf("Ú");
textcolor(GREEN);
for(int q=2;q<=33;q++) {gotoxy(q,3); cprintf("Ä"); }
gotoxy(33,3);
textcolor(YELLOW);
cprintf("ż");
gotoxy(47,3);
cprintf("Ú");
textcolor(GREEN);
for (int p=48; p<=79; p++) { gotoxy(p,3); cprintf("Ä"); }
textcolor(RED);
gotoxy(80,3);
cprintf("ż");
textcolor(GREEN);
for (int l=4; l<=21; l++) { gotoxy(1,l); cprintf("ł"); }
textcolor(RED);
gotoxy(1,22);
cprintf("Ŕ");
textcolor(GREEN);
for (int m=2; m<=79; m++) { gotoxy(m,22); cprintf("Ä"); }
textcolor(RED);
gotoxy(80,22);
cprintf("Ů");
textcolor(GREEN);
for (int n=4; n<=21; n++) { gotoxy(80,n); cprintf("ł"); }
textcolor(RED);
gotoxy(1,23);
cprintf("Ú");
gotoxy(1,24);
textcolor(GREEN);
cprintf("ł");
gotoxy(1,25);
textcolor(RED);
cprintf("Ŕ");
textcolor(GREEN);
for(int dd=2;dd<=79;dd++) {gotoxy(dd,25); cprintf("Ä"); }//dd
gotoxy(80,25);
textcolor(RED);
cprintf("Ů");
gotoxy(80,23);
textcolor(GREEN);
cprintf("ł");
gotoxy(80,22);
textcolor(RED);
cprintf("ż");
textcolor(GREEN);
for(int dg=2;dg<=79;dg++) {gotoxy(dg,22); cprintf("Ä"); } //dg
gotoxy(1,1);
textbackground(7);
textcolor(0);
cprintf("F1-Zapis F2-Odczyt F3-Zaznaczenie F4-Kopiuj F5-Wklej F6-Kasuj F10-Wyjscie \n");
textbackground(0);
textcolor(WHITE);
} // menu
void sort_kop(){
//uzywam sortowania bombelkowego modyfikowanego
//chodzi tak dlugo az nie ma przestawien i nie sprawdza posortowanej czesci :-)
int z=0,i=0,pom,x=0;
do{
i=0;
z=0;
while(i!=n-1-x){
if(kop[i]<kop[i+1]);
else
{
pom=kop[i];
kop[i]=kop[i+1];
kop[i+1]=pom;
z++;
}
i++;
}
//else
if(x!=n-2)x++;
}while(z!=0);
}
void pokaz()
{
textbackground(0);
textcolor(GREEN);
int t,y;
gotoxy(3,3);
y=3;
for(t=0;t<=bufor_lim;t++)
{
if(bufor[t]==NULL)break;
//if((t==19)||(t==38)||(t==57)||(t==76)||(t==95)||(t==114)||(t==133)||(t==152)||(t==)||(t==95)||(t==114)||(t==38)||(t==57)||(t==76)||(t==95)||(t==114)||(t==38)||(t==57)||(t==76)||(t==95)||(t==114)){gotoxy(3,y);y++;}
if(t%19==0){gotoxy(3,y);y++;}
cprintf("%c",bufor[t]);
}
}
void kasuj()
{
mark_lock=3; //w<ort>ylancza</ort> zaznaczanie
int b=0,c=0,g=0;
sort_kop();
for(int a=0;a<=bufor_lim;a++)
{
if(c==kop[b]){b++;c++;}
else
{new1[g]=bufor[c];c++;g++;}
}
strcpy(bufor,new1);
bufor_lim=bufor_lim-n;
n=0;
textcolor(0);
textbackground(0);
clrscr();
menu();
pokaz();
}
void kopiuj()
{
mark_lock=3;//w<ort>ylancza</ort> zaznaczanie
sort_kop();
for(int a=0;a<n;a++)
schowek[a]=bufor[kop[a]];
dl_schowka=n;
n=0;
}
void wklej(){
int a,b=0,c,x;
textbackground(0);
for(a=0;a<cur_poz+cur_line*19;a++){new1[a]=bufor[a];}
new1[cur_poz+cur_line*19]='';
a=cur_poz+cur_line*19;
for(b=0;b!=dl_schowka;b++){new1[a]=schowek[b];a++;}
new1[cur_poz+cur_line*19+dl_schowka]='';
c=cur_poz+cur_line*19;
while(bufor[c]!=NULL){ new1[a]=bufor[c];a++;c++;}
strcpy(bufor,new1);
bufor_lim=bufor_lim+dl_schowka;
pokaz();
//*************************************************************************************
}
void dodaj_znak(char c) {
/* //przepisac prawa storone o 1 w prawo od buf_poz
koniec++;
if(koniec>rozmiar-1) realloc(bufor, rozmiar+porcja);
rozmiar+=porcja; */
bufor_poz=cur_poz+19*cur_line;
if(bufor_lim<bufor_poz)bufor_lim=bufor_poz;
bufor[bufor_poz]=c;
bufor[bufor_poz+1]=' ';
bufor[bufor_poz+2]='';
// bufor[bufor_poz++];
textcolor(GREEN);
//putchar(c);
cprintf("%c",c);
cur_poz++;
if ((cur_poz>dl_wiersza-2))
{
cur_line++;
cur_poz=0;
} //if
} //dodaj
//-------------------------------------------------------
void zapisz(char nazwa[]) {
gotoxy(txt_x,23);
FILE *plik;
printf("Podaj nazwe: ");
cin>>nazwa;
plik=fopen(nazwa,"wt");
if(plik!=NULL) {
fprintf(plik,"%s",bufor);
fclose(plik);
gotoxy(35,2);
printf(nazwa);
gotoxy(3,23);
for (int lo=2;lo<=78;lo++)
printf(" ");
gotoxy(cur_poz+2,cur_line);
}//if
else
printf("\n\n\tOperacja nie powiodla sie...");
} //zapisz
//-------------------------------------------------------
void otworz(char nazwa[]) {
FILE *plik;
gotoxy(3,23);
printf("Podaj nazwe: ");
cin>>nazwa;
plik=fopen(nazwa,"rt") ;
if(plik!=NULL) {
fscanf(plik,"%s",bufor);
// fread(bufor,sizeof(bufor),1,plik);
bufor_poz=strlen(bufor);
fclose(plik);
gotoxy(35,2);
printf(nazwa);
gotoxy(3,23);
for (int ll=2;ll<=78;ll++)
printf(" ");
gotoxy(cur_poz,cur_line);
}//if
else
gotoxy(51,23);
textcolor(RED+128);
cprintf("Operacja nie powiodla sie...") ;
gotoxy(cur_poz,cur_line);
}//otworz
//-------------------------------------------------------
/* void wyswietl() {
gotoxy(txt_x,txt_y);
for (int x=0; x<=strlen(bufor); x++)
putchar(bufor[x]);
}//wyswietl */
//-------------------------------------------------------
void enter() {
dodaj_znak('\n');
cur_poz=0;
cur_line++;
}//enter
//-------------------------------------------------------
void bekspejs() {
/*if (cur_poz==3 || cur_line==3) gotoxy(cur_poz,cur_line);
else
if (cur_poz==1) { gotoxy(76,cur_line-1); printf(" "); gotoxy(cur_poz-1,cur_line); }
else { gotoxy(cur_poz+1,cur_line); printf(" "); gotoxy(cur_poz+1,cur_line); } */
if (cur_poz==3 && cur_line==3) { cur_poz=3; cur_line=3; gotoxy(cur_poz,cur_line); }
else if (cur_poz==3 && cur_line>=2) { cur_poz=dl_wiersza,cur_line--; gotoxy(cur_poz,cur_line); }
else {
gotoxy(cur_poz-1,cur_line);
printf(" ");
gotoxy(cur_poz-1,cur_line);
cur_poz--;
}//ostatni els
}//bekspejs
//-------------------------------------------------------
void lewo() {
if(mark_lock%2==0){textbackground(YELLOW);bufor_poz=(cur_poz+19*cur_line);cprintf("%c",bufor[bufor_poz]);kop[n]=bufor_poz;n++;}
if (cur_poz+txt_x>txt_x-1 && cur_line+txt_y>txt_y-1){
if(cur_poz<1) {if(cur_line+2>=txt_y) {
cur_poz=18; cur_line--; }}
else {
cur_poz--;
} //1st els
}
}//lewo
//-------------------------------------------------------
void prawo() {
if(mark_lock%2==0){textbackground(YELLOW);bufor_poz=(cur_poz+19*cur_line);cprintf("%c",bufor[bufor_poz]);kop[n]=bufor_poz;n++;}
if(cur_poz+19*cur_line<=bufor_lim){
if(cur_poz==dl_wiersza-2) {gotoxy(3,cur_line+1); cur_poz=0; cur_line++; }
else { gotoxy(cur_poz+1,cur_line); cur_poz++;
} //1st els
}
}//prawo
//-------------------------------------------------------
void gora() {
if (cur_line-1>0){gotoxy(cur_poz,cur_line-1); cur_line--; }//1st els
if (cur_line-1==0){gotoxy(0,0); cur_poz=0;cur_line=0; }//1st els
}//gora
//-------------------------------------------------------
void dol() {
if(cur_poz+(cur_line+1)*19<=bufor_lim){gotoxy(cur_poz,cur_line+1);cur_line++;}
else{
int aa,bb;
aa=bufor_lim/19;
bb=bufor_lim-aa*19;
gotoxy(bb,aa);
cur_poz=bb;
cur_line=aa;
}
}//dol
//------------------------------------------------------
//------------------------------------------------------
main() {
textbackground(0);
clrscr();
char c;
bufor=(char*)malloc(porcja);
rozmiar=porcja;
koniec=0;
menu();
//-------------------------------------------------------
/************/ while(1) { /************/
gotoxy((cur_poz+txt_x),(cur_line+txt_y));
c=getch();
if(isprint(c)) {
dodaj_znak(c);
continue;
}
switch(c) {
case 13: { enter(); break; } //enter
case 8: { bekspejs(); break; } //bekspejs
} //slicz enterow
if(!c) {
char nazwa[8];
c=getch();
switch(c) {
case 68: exit(1);
case 59: { zapisz(nazwa); break; }
case 60: { otworz(nazwa); break; }
case 61: { mark_lock++; break; }
case 62: { kopiuj(); break; }
case 63: { wklej(); break; }
case 64: { kasuj(); break; }
case 75: { lewo(); break; }
case 77: { prawo(); break; }
case 72: { gora(); break; }
case 80: { dol(); break; }
} //slicz efow
} //if
}//while
clrscr();
} //main
//-------------------------------------------------------
//-----------------------------------FINE----------------