⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edit11.c

📁 用c语言写的文本编辑器
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<stdio.h>
#include<conio.h>
#include<bios.h>
#include<math.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define HOME 0x4700
#define END 0x4f00
#define SPACE 0x3920
#define ESC 0x011b
#define ENTER 0x1c0d
#define DEL 21248
#define BACK 3592
#define CL 29440
#define CR 29696
#define Cc 11779
#define Cv 12054
#define Cx 11544
#define F1 15104
#define F2 15360
#define F3 15616
#define F10 17408
int value,backup,NUM;
  typedef struct record
 {
       char ch;
       int col, line;
 }record;

record r[500];

  typedef struct node
 {
        char ch;
        struct node *next;
 }node;


  typedef struct Hnode
 {
         node *next;
         struct Hnode *nextl;
 }Hnode;




  void drawmain()
 {
          int i,j;
          gotoxy(1,1);
          textbackground(7);
          textcolor(0);
          insline();
          for(i=1;i<=24;i++)
         {
              gotoxy(1,1+i);
              cprintf("%c",179);
              gotoxy(80,1+i);
              cprintf("%c",179);
         }
          for(i=1;i<=79;i++)
         {
               gotoxy(1+i,2);
               cprintf("%c",196);
               gotoxy(1+i,25);
               cprintf("%c",196);
         }
          gotoxy(1,1);   cprintf("%c",218);
          gotoxy(1,24);  cprintf("%c",192);
          gotoxy(80,1);  cprintf("%c",191);
          gotoxy(80,24); cprintf("%c",217);
          gotoxy(7,1);
          cprintf("%c  %c File %c  %c",179,17,16,179);
          gotoxy(27,1);
          cprintf("%c  %c Edit %c  %c",179,17,16,179);
          gotoxy(47,1);
          cprintf("%c  %c Help %c  %c",179,17,16,179);
          gotoxy(5,25);
          textcolor(1);
          cprintf("Line:1         Col:1");
          gotoxy(68,25);
          cprintf("Version 1.0");
 }




  void qview(Hnode *q)
 {
       void view(Hnode *q);
       node *p;
       int i;
       window(1,1,80,25);
       clrscr();

       do{
              p=q->next;
              cprintf("#");
              while(p!=NULL)
             {
                    if(p->ch==13)  putch('*');
                    else
                    putch(p->ch);
                    p=p->next;
             }
             q=q->nextl;
             printf("\n");
         }while(q!=NULL);

       getch();
       clrscr();
       drawmain();
       window(2,2,79,23);
       textbackground(9);
       for(i=0;i<24;i++)
            insline();
       window(3,3,78,23);
       textcolor(10);
  }



  void view(Hnode *q)
 {
       node *p;
       clrscr();

       do{
              p=q->next;
              while(p!=NULL&&p->ch!=13&&p->ch!=-1)
             {
                    putch(p->ch);
                    p=p->next;
             }
             q=q->nextl;
             if((p->ch==13||p->ch==-1)&&q!=NULL)  gotoxy(1,wherey()+1);
         }while(q!=NULL);
 }



  int check(Hnode *Hhead,int m,int n)
 {
        int i;
        Hnode *q;
        node *p;
        q=Hhead;
        for(i=1;i<m;i++)
            q=q->nextl;
        p=q->next;
        for(i=1;i<n;i++)
            p=p->next;
        if(p->ch==13)  return -1;
        if(p->ch>=32&&p->ch<=127)  return p->ch;
        else return 0;
  }




   int judge(Hnode *Hhead,int m)
  {
        Hnode *q;
        node *p;
        int i,num=0;
        q=Hhead;
        for(i=1;i<m;i++)
            q=q->nextl;


        if(q==NULL)  return -1;
        p=q->next;
        while(p->next!=NULL)
       {
                p=p->next;
                num++;
       }
        if(p->ch==13&&num==0)  return 0;
        if(p->ch>=32&&p->ch<=127)  return num+1;
        if(p->ch==13&&num!=0)  return -(num+1);
        else return 1;
  }






  int del(Hnode *Hhead,int m,int n)
 {
        Hnode *q,*q1;
        node *p1,*p2,*tail;
        int i,num=0,j,flag=0;
        q=Hhead;
        if(n==0&&m==1)  return;
        if(n==0&&m>1)
       {
               n=76;
               m=m-1;
               gotoxy(n,m);
               flag=1;
       }
        for(i=1;i<m;i++)
            q=q->nextl;
        p1=q->next;
        for(i=1;i<n-1;i++)
            p1=p1->next;
        p2=p1->next;

                if(n==1)
               {
                    q->next=p1->next;
                    free(p1);
               }
                else
               {
                    p1->next=p2->next;
                    free(p2);
               }


                 while((num=judge(Hhead,m++))>0)
                {
                         p1=q->next; q1=q;
                         if(p1!=NULL)
                        {
                                while(p1->next!=NULL)
                                    p1=p1->next;
                                tail=p1;
                                q=q->nextl;   p1=p2=q->next;
                                tail->next=p1;
                         }
                          else
                         {
                                 q=q->nextl;   p1=p2=q->next;
                                 q1->next=p1;
                          }
                         for(i=0;i<76-num;i++)
                        {
                                p1=p2;
                                p2=p2->next;
                                if(p2->ch==13)  break;
                         }
                          q->next=p2;
                          p1->next=NULL;
                }



           return flag;
  }



  int test(Hnode *Hhead,int n)
 {
       int i=0,num1=1;
       node *p1,*p2,*tail,*temp1,*temp2;
       Hnode *q;
       q=Hhead;
       for(i=1;i<n;i++)
            q=q->nextl;
       tail=p1=q->next;
       if(p1==NULL) return;
       while(tail->next!=NULL)
            tail=tail->next;
       for(i=0;i<75;i++)
      {
             if(p1->ch==13||p1->next==NULL)  break;
             p1=p1->next;
      }

       p2=p1->next;
       p1->next=NULL;
       if(tail->ch!=13)
      {
             if(p1->ch==13&&q->nextl==NULL)
            {
                       q->nextl=(Hnode *)malloc(sizeof(Hnode));
                       q->nextl->nextl=NULL;
                       tail->next=(node *)malloc(sizeof(node));
                       tail->next->ch=13;   tail->next->next=NULL;
                       q->nextl->next=p2;
             }
             else
            {
                   q=q->nextl;
                   tail->next=q->next;
                   q->next=p2;
                   if(q!=NULL)  test(Hhead,++n);
            }

      }
       else
      {
            temp2=p2;
            while(q!=NULL&&p2!=NULL)
           {
                 if((q->nextl==NULL)&&(p1!=tail||p2!=NULL)&&(num1==1))
                {
                       num1++;
                       q->nextl=(Hnode *)malloc(sizeof(Hnode));
                       q->nextl->nextl=NULL;   q->nextl->next=NULL;

                }
                 q=q->nextl;
                 temp1=q->next;
                 q->next=temp2;
                 temp2=temp1;
           }
      }
 }






  void insert(Hnode *Hhead,int m,int n, char a)
 {
        int i;
        Hnode *q;
        node *p,*p1,*p2;
        q=Hhead;
        for(i=1;i<m;i++)
            q=q->nextl;
        p1=q->next;
        for(i=1;i<n-1;i++)
            p1=p1->next;
        p=(node *)malloc(sizeof(node));
        p->ch=a;
        if(n==1)
       {
               p->next=q->next;
               q->next=p;
       }
        else
       {
                 p->next=p1->next;
                 p1->next=p;
       }
        test(Hhead,m);

 }




    void control(int A, Hnode *Hhead)
   {

           void colorview(Hnode *,int,int);
           int x,y,flag=0;
           x=wherex();   y=wherey();
           if((A==CL)&&(x!=1))
                gotoxy(wherex()-1,wherey());
           if((A==CL)&&(x==1))
                gotoxy(abs(judge(Hhead,wherey()-1)),wherey()-1);
           if((A==CR)&&check(Hhead,wherey(),wherex())>0)
          {    flag=1;      gotoxy(wherex()+1,wherey()); }
           if((A==CR)&&check(Hhead,wherey()+1,1)>0&&check(Hhead,y,x)==0)
          {    flag=1;      gotoxy(1,wherey()+1);  }
           if((A==CR)&&x==76)
          {    flag=1;      gotoxy(1,wherey()+1);  }
           if(A==CR&&flag==1)
          {
             r[abs(value)].col=wherex();
             r[abs(value)].line=wherey();
             r[abs(value)].ch=check(Hhead,r[abs(value)].line,r[abs(value)].col);
             if(r[abs(value)].ch==-1)   r[abs(value)].ch=13;
             value--;

          }


           if(A==CL&&(x!=1||y!=1))
          {

             r[abs(value)].col=wherex();
             r[abs(value)].line=wherey();
             r[abs(value)].ch=check(Hhead,r[abs(value)].line,r[abs(value)].col);
             value++;
          }

           colorview(Hhead,wherex(),wherey());

  }




   void colorview(Hnode *Hhead,int x,int y)
  {

           int i;
           view(Hhead);
           for(i=0;i<abs(value);i++)
          {
                    gotoxy(r[i].col,r[i].line);
                    textbackground(7);
                    textcolor(0);
                    if(r[i].ch!=13&&r[i].ch!=-1)
                        cprintf("%c",r[i].ch);
                    if(r[i].ch==13||r[i].ch==-1)
                        cprintf(" ");
          }

           gotoxy(x,y);

  }



  void drawmenu(int m,int n)
 {
         int i;
      if(m%3==0)
     {
            window(8,2,19,9);
            textcolor(0);
            textbackground(7);
            for(i=0;i<7;i++)
           {
                gotoxy(1,1+i);
                insline();
           }
            window(1,1,80,25);
            gotoxy(7,1);
            for(i=1;i<=7;i++)
           {
                gotoxy(8,1+i);
                cprintf("%c",179);
                gotoxy(19,1+i);
                cprintf("%c",179);
            }
            for(i=1;i<=11;i++)
           {
                  gotoxy(8+i,2);
                  cprintf("%c",196);
                  gotoxy(8+i,9);
                  cprintf("%c",196);
            }
            textbackground(0);
            gotoxy(10,10); cprintf("            ");
            for(i=0;i<9;i++)
           {
                  gotoxy(20,2+i);
                  cprintf("   ");
           }
            textbackground(7);
            gotoxy(8,2);  cprintf("%c",218);
            gotoxy(8,9);  cprintf("%c",192);
            gotoxy(19,2); cprintf("%c",191);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -