📄 editor.c
字号:
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 + -