notatnik w c

0

pilnie potrzebny kod zrodłowy do prostego edytora tekstu w c... pomoze ktos?

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----------------

1 użytkowników online, w tym zalogowanych: 0, gości: 1