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

📄 editor.c

📁 一个c语言开发的文本编辑器
💻 C
📖 第 1 页 / 共 3 页
字号:
                gotoxy(wherex()-1,wherey());

           if((A==CL)&&(x==1)) /*ctrl+←,在行首*/
                gotoxy(abs(judge(Hhead,wherey()-1)),wherey()-1); /*judge(Hhead,wherey()-1)上一行的字符个数作为x值,光标移动*/

           if((A==CR)&&check(Hhead,wherey(),wherex())>0) /*ctrl+→,当前光标的右边有字符,光标移动*/
          {    flag=1;  gotoxy(wherex()+1,wherey()); }

           if((A==CR)&&check(Hhead,wherey()+1,1)>0&&check(Hhead,y,x)==0) /*ctrl+→,当前光标处没有字符但下一行的第一列有字符,光标移动*/
          {    flag=1;  gotoxy(1,wherey()+1);  }

           if((A==CR)&&x==76) /*ctrl+→,当前光标在当前行的行尾,光标移动*/
          {    flag=1;      gotoxy(1,wherey()+1);  }

           if(A==CR&&flag==1) /*ctrl+→,光标已经跳至新处,将当前光标所在位置的字符的坐标和值保存在r数组中*/
          {
             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; /*若第line行,第col列的字符为回车键,则返回-1*/
             value--;

          }

           if(A==CL&&(x!=1||y!=1))   /*ctrl+←,当前光标并不在窗口左上角,将当前光标所在位置的字符的坐标和值保存在r数组中*/
          {

             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++)   /*value为数组下标*/
          {
                    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) /*画菜单,m:第几项菜单,n:第m项的第n个子菜单*/
 {
       int i;
      if(m%3==0) /*画File菜单项*/
     {
            window(8,2,19,9);
            textcolor(0);
            textbackground(7);
            for(i=0;i<7;i++) /*在上面定义的文本窗口中先输出7个空行*/
           {
                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);
            gotoxy(19,9); cprintf("%c",217);
            gotoxy(9,3);  cprintf(" New    ");
            gotoxy(9,4);  cprintf(" Open   ");
            gotoxy(9,5);  cprintf(" Save   ");
            gotoxy(9,6);  cprintf(" Save as");
            for(i=1;i<=10;i++)
           {
                  gotoxy(8+i,7);
                  cprintf("%c",196); /*在Save as下输出一行分隔符*/
           }
            gotoxy(9,8);  cprintf(" Exit");
            textcolor(15);  textbackground(0);
            gotoxy(7,1);
            cprintf("%c  %c File %c  %c",179,17,16,179);
            switch(n%5)
           {
                case 0:gotoxy(9,3);  cprintf(" New      "); break;
                case 1:gotoxy(9,4);  cprintf(" Open     "); break;
                case 2:gotoxy(9,5);  cprintf(" Save     "); break;
                case 3:gotoxy(9,6);  cprintf(" Save as  "); break;
                case 4:gotoxy(9,8);  cprintf(" Exit     "); break;
           }
      }

     /********************************************************/
     if(m%3==1) /*画Edit菜单项*/
    {
            window(28,2,38,7);
            textcolor(0);
            textbackground(7);
            for(i=0;i<5;i++)
           {
                gotoxy(1,1+i);
                insline();
            }
            window(1,1,80,25);
            gotoxy(27,1);
            for(i=1;i<=5;i++)
           {
                gotoxy(28,1+i);
                cprintf("%c",179);
                gotoxy(39,1+i);
                cprintf("%c",179);
            }
            for(i=1;i<=11;i++)
           {
                  gotoxy(28+i,2);
                  cprintf("%c",196);
                  gotoxy(28+i,7);
                  cprintf("%c",196);
            }

            textbackground(0);
            gotoxy(30,8); cprintf("            ");
            for(i=0;i<7;i++)
           {
                  gotoxy(40,2+i);
                  cprintf("   ");
           }
            textbackground(7);
            gotoxy(28,2);  cprintf("%c",218);
            gotoxy(28,7);  cprintf("%c",192);
            gotoxy(39,2);  cprintf("%c",191);
            gotoxy(39,7);  cprintf("%c",217);
            gotoxy(29,3);  cprintf("  Cut     ");
            gotoxy(29,4);  cprintf("  Copy    ");
            gotoxy(29,5);  cprintf("  Paste   ");
            gotoxy(29,6);  cprintf("  Clear   ");
            textcolor(15);  textbackground(0);
            gotoxy(27,1);
            cprintf("%c  %c Edit %c  %c",179,17,16,179);
            switch(n%4)
            {
                    case 0:gotoxy(29,3);  cprintf("  Cut     "); break;
                    case 1:gotoxy(29,4);  cprintf("  Copy    "); break;
                    case 2:gotoxy(29,5);  cprintf("  Paste   "); break;
                    case 3:gotoxy(29,6);  cprintf("  Clear   "); break;
            }
      }

    /*********************************************************/
     if(m%3==2) /*画Help菜单项3*/
    {
            window(48,2,48,6);
            textcolor(0);
            textbackground(7);
            for(i=0;i<3;i++)
            {
                    gotoxy(1,1+i);
                    insline();
            }
            window(1,1,80,25);
            gotoxy(47,1);
            for(i=1;i<=5;i++)
            {
                    gotoxy(48,1+i);
                    cprintf("%c",179);
                    gotoxy(59,1+i);
                    cprintf("%c",179);
            }
            for(i=1;i<=11;i++)
            {
                    gotoxy(48+i,2);
                    cprintf("%c",196);
                    gotoxy(48+i,6);
                    cprintf("%c",196);
            }

            textbackground(0);
            gotoxy(50,7); cprintf("            ");
            for(i=0;i<6;i++)
           {
                  gotoxy(60,2+i);
                  cprintf("   ");
           }
            textbackground(7);
            gotoxy(48,2);   cprintf("%c",218);
            gotoxy(48,6);   cprintf("%c",192);
            gotoxy(59,2);   cprintf("%c",191);
            gotoxy(59,6);   cprintf("%c",217);
            gotoxy(49,3);   cprintf("Help...   ");
            gotoxy(49,5);   cprintf("About...  ");
            for(i=1;i<=10;i++)
            {
                    gotoxy(48+i,4);
                    cprintf("%c",196);
            }
            textcolor(15);  textbackground(0);
            gotoxy(47,1);
            cprintf("%c  %c Help %c  %c",179,17,16,179);
            switch(n%2)
            {
                    case 0:gotoxy(49,3);  cprintf("Help...   "); break;
                    case 1:gotoxy(49,5);  cprintf("About...  "); break;
            }
    }
 }

int menuctrl(Hnode *Hhead,int A) /*菜单控制*/
  {
        int x,y,i,B,value,flag=100,a,b;
        x=wherex();  y=wherey();
        if(A==F1) {  drawmenu(0,flag);   value=300;  } /*显示File及其子菜单,并将光带显示在第一个子菜单上*/
        if(A==F2) {  drawmenu(1,flag);   value=301;  } /*显示Edit及其子菜单,并将光带显示在第一个子菜单上*/
        if(A==F3) {  drawmenu(2,flag);   value=302;  } /*显示Help及其子菜单,并将光带显示在第一个子菜单上*/

        if(A==F1||A==F2||A==F3)
       {
                while((B=bioskey(0))!=ESC) /*选择用户按键*/
               {
                      if(flag==0)   flag=100;
                      if(value==0)  value=300;  /*此value为局部变量*/

                      if(B==UP)     drawmenu(value,--flag); /*循环上下移*/
                      if(B==DOWN)   drawmenu(value,++flag); /*循环上下移*/

                      if(B==LEFT) /*菜单项之间循环选择(左移)*/
                     {
                            flag=100;
                            drawmain();
                            window(2,2,79,23);
                            textbackground(9);
                            for(i=0;i<24;i++)
                                insline();
                            window(3,3,78,23);
                            textcolor(10);
                            view(Hhead);
                            drawmenu(--value,flag);

                      }
                       if(B==RIGHT)/*菜单项之间循环选择(右移)*/
                     {
                            flag=100;
                            drawmain();
                            window(2,2,79,23);
                            textbackground(9);
                            for(i=0;i<24;i++)
                                insline();
                            window(3,3,78,23);
                            textcolor(10);
                            view(Hhead);
                            drawmenu(++value,flag);

                     }
                       if(B==ENTER) /*选中某主菜单项的子菜单项(选中某项)*/
                      {
                            if(value%3==0)  b=5; /*File下有5个子菜单项*/
                            if(value%3==1)  b=4; /*Edit下有4个子菜单项*/
                            if(value%3==2)  b=2; /*Help下有2个子菜单项*/
                            a=(value%3)*10+flag%b;/*a表示选择子菜单的编号*/
                            drawmain();
                            window(2,2,79,23);
                            textbackground(9);
                            for(i=0;i<24;i++)
                                   insline();
                            window(3,3,78,23);
                            textcolor(10);
                            view(Hhead);
                            gotoxy(x,y);
                            if(a==0)   return 100; /*New*/
                            if(a==1)   return 101; /*Open*/
                            if(a==2)   return 102; /*Save*/
                            if(a==3)   return 103; /*Save As*/
                            if(a==4)   exit(0);    /*Exit*/

                            if(a==10)  return Cx; /*Cut*/
                            if(a==11)  return Cc; /*Copy*/
                            if(a==12)  return Cv; /*Paste*/
                            if(a==13)  return DEL;/*Clear*/

                            if(a==20)  return 120; /*Help... */
                            if(a==21)  return 121; /*About...*/
                      }

                       gotoxy(x+2,y+2);

              }
              /*若按键非F1、F2、F3*/
                drawmain();
                window(2,2,79,23);
                textbackground(9);
                for(i=0;i<24;i++)
                     insline();
                window(3,3,78,23);
                textcolor(10);
                view(Hhead);
                gotoxy(x,y);



       }
        return A;


  }


/*将head所指的行单链表中所指的各个列单链表中的数据域的值写入文件,文件路径和文件名由用户指定*/
void save(Hnode *head)
{
FILE* fp;
Hnode *q;
node *p;
int count=0,x,y;
char filename[10]; /*保存文件名*/
q=head;
clrscr();/*清屏*/
printf("Enter infile name,for example [c:\\wb.txt]:");/*输入文件名格式*/

⌨️ 快捷键说明

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