0

پروژه LINE EDITOR

 
rezahashemian1374
rezahashemian1374
کاربر برنزی
تاریخ عضویت : مهر 1391 
تعداد پست ها : 254
محل سکونت : تهران

پروژه LINE EDITOR
جمعه 29 شهریور 1392  7:45 AM

با این LINE EDITOR می تونید کارهایی مانند ویرایش کلمات حذف insert و یا هر کاری که مربوط به ویرایش است انجام بدید.این برنامه فقط در محیط tc قابل اجراست

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define  LEN       10
#define  SCAPE     27
#define  RIGHT     77
#define  LEFT      75
#define  BACKSPACE 8
#define  DELETE    83
#define  END       79
#define  HOME      71
#define  INSERT    82
#define  ISCONTROL 0
#define  CtrL     12
#define  CtrR     18
#define  CtrY     25
#define  CtrO     15
#define  CtrS     19
#define  TAB       9
//***********************************************

class LineEditor{
private:

int X,Y,Index,IsInsert,Numchar;
char ch,A[1000],S[12];
void Updatescreen(void){
 
int i,savepos=wherex()-X;
 
Peykan();
 
gotoxy(X,Y);
 for(
i=Index-savepos;i<Index-savepos+LEN;i++)
  if(
Numchar>i)
         
cprintf("%c",A[i]);
  else
         
cprintf(" ");
 
gotoxy(X+savepos,Y);
}

/************************************************/
void Home (void){
 
Index=0;
 
gotoxy(X,Y);
}

/************************************************/
void End (void){
  
Index=Numchar-1;
  if(
Numchar<LEN-1){
  
gotoxy(X+Numchar-1,Y);
  }
  else{
  
gotoxy(X+LEN-1,Y);
 }
}

/************************************************/
int Left (void){
 if(
Index==0)
  return 
0;
 
Index--;
 if(
wherex()>X)
  
gotoxy(wherex()-1,Y);
 return 
1;
}

/***********************************************/
int Right(void){
 if(
Index>Numchar-2)
  return 
0;
 
Index++;
 
int k=wherex();
 if(
k<X+LEN-1)
  
gotoxy(k+1,Y);
 return 
1;
}

/************************************************/
void Delete (void){
 if(
Index<Numchar-1){
  for(
int i=Index;i<Numchar;i++)
   
A[i]=A[i+1];
  
Numchar--;
 }
}

/************************************************/
void Insert(char ch){
 for(
int i=Numchar-1;i>=Index;i--)
  
A[i+1]=A[i];
 
A[Index]=ch;
 
Numchar++;
 
Right();
}

/************************************************/
void Backspace(void){
 if (
Left())
  
Delete();
}

/************************************************/
void Overwrite(char ch){
 if(
Index==Numchar-1)
  
Insert(ch);
 else{
  
A[Index]=ch;
  
Right();
 }
}

/************************************************/
void clearleft(void){
 
int i,savepos=wherex()-X;
 for(
i=savepos;i>=0;i++)
  
Backspace();
 
gotoxy(X,Y);
}

/***********************************************/
void clearright(void){
 
Index++;
 
int c=Numchar-Index,i;
 for(
i=0;i<=c;i++)
  
Delete();
 
Index--;
}

/************************************************/
void clear(void){
 
clearright();
 
clearleft();
 if(
Numchar!=1)
   
Delete();
}

/************************************************/
void save(char S[]){
 
FILE *fp;
 if ((
fp=fopen(S,"wb"))==NULL){
  
gotoxy(X-30,Y+3);
  
printf("\ncannot open fill...");
  
getch();
  exit(
1);
 }
 
fwrite(&A,2*strlen(A),1,fp);
 
gotoxy(X,Y);
 
clear();
 
fclose(fp);
 
open(S);
}

/************************************************/
void open (char S[]){
 
FILE *fp;
 if ((
fp=fopen(S,"rb"))==NULL){
  
gotoxy(X-30,Y+3);
  
gotoxy(X,Y);
 }
 
fread(A,sizeof(A),1,fp);
 
Numchar=strlen(A)+1;
 
End();
 
fclose(fp);
}

//**********************************************
void Peykan (void){
  
int b=wherex();
  
int a=X+LEN-wherex();
  if(
Index==0){
    
gotoxy(X-1,Y);
    
cprintf(" ");
    
gotoxy(X,Y);
 }
  if(
Numchar-Index-1>a){
    
gotoxy(X+LEN,Y);
    
cprintf("%c",16);
    
gotoxy(b,Y);
  }
  else{
    
gotoxy(X+LEN,Y);
    
cprintf(" ");
    
gotoxy(b,Y);
  }
  if(
Index>LEN-1){
    
gotoxy(X-1,Y);
    
cprintf("%c",17);
    
gotoxy(b,Y);
  }
  if(
wherex()-X<Index){
   
gotoxy(X-1,Y);
   
cprintf("%c",17);
   
gotoxy(b,Y);
  }
}

//***********************************************
public:
LineEditor(int x,int y,char *s){
 
X=x;
 
Y=y;
 
Numchar=1;
 
IsInsert=0;
 
Index=0;
 
A[Numchar-1]='\0';
 
strcpy(S,s);
}

//***********************************************
void DetectKeyGo(void){
 
End();
 
Updatescreen();
 while((
ch=getch())!=SCAPE){
  if (
ch=='\r')
   continue;
  if((
ch==ISCONTROL) || (ch==BACKSPACE) || (ch==CtrL) || (ch==CtrR) || (ch==CtrY) || (ch==CtrS) || (ch==CtrO) || (ch==TAB)){
   if(
ch==ISCONTROL)
    
ch=getch();
   switch(
ch){
    case 
TABEnd();
       if(
Y<29gotoxy(X,Y+5);
       else 
gotoxy(X,Y-10);
      return;
    case 
END:End(); break;
    case 
LEFT:Left(); break;
    case 
HOME:Home(); break;
    case 
CtrY:clear(); break;
    case 
CtrS:save(S); break;
    case 
CtrO:open(S); break;
    case 
RIGHT:Right(); break;
    case 
DELETE:Delete(); break;
    case 
CtrL:clearleft(); break;
    case 
CtrR:clearright(); break;
    case 
BACKSPACE:Backspace(); break;
    case 
INSERT:IsInsert++;
   }}
  else if (
IsInsert%2==0)
   
Insert(ch);
  else
   
Overwrite(ch);
  
Updatescreen();
  } exit(
0);
}

//************************************************
void Drawline (void){
 
textbackground(1);
 
textcolor(4);
 
gotoxy(X-1,Y);
 for(
int i=1;i<=LEN+2;i++)
  
cprintf(" ");
 
gotoxy(X,Y);
    }
};

//***********************************************
void MYNAME(void){
 
textcolor(7);
 
gotoxy(26,5);
 
printf(" <<   In The Name Of God   >>");
 
gotoxy(25,10);
 
printf(" << Seyyed Reza Hashemian >>");
}

//***********************************************
int main(){
 
LineEditor L1(33,20,"LineE1.txt"),L2(33,25,"LineE2.txt"),L3(33,30,"LineE3.txt");
 
textbackground(0);
 
clrscr();
 
MYNAME();
 
L3.Drawline();
 
L2.Drawline();
 
L1.Drawline();
 while(
1){
  
L1.DetectKeyGo();
  
L2.DetectKeyGo();
  
L3.DetectKeyGo();
      }
 return 
0;
}

Seyyed.Reza.Hashemian@Gmail.Com

دوستانی که سوالی دارند یا مایل به تماس هستند می توانند از اطلاعات بالا استفاده نمایند.

اگر هم تایپکی زدید و احتیاج به پاسخگویی سریع داشتید اطلاع دهید

تشکرات از این پست
دسترسی سریع به انجمن ها