开发工具:
文件大小: 38kb
下载次数: 0
上传时间: 2013-03-19
详细说明:
用c语言编写的文本编辑器源代码 void main() { char a; int i,A,x,y,flag=0,b; Hnode *Hhead,*q; node *p1,*p2; Hhead=(Hnode *)malloc(sizeof(Hnode)); /*为行单链表中首节点分配内存空间*/ q=Hhead; Hhead->nextl=NULL; p1=p2=q->next=(node *)malloc(sizeof(node)); /*为列单链表中首节点分配内存空间*/ p1->ch=13; p1->next=NULL; drawmain(); /*显示主窗口*/ window(2,2,79,23); textbackground(9); for(i=0;i<24;i++) insline(); window( 3,3,78,23); textcolor(10); while(1) { while(bioskey(1)==0) continue; /*等待用户按键*/ a=A=bioskey(0); /*返回输入的字符的键值*/ if(a>=32&&a<127) /*若输入为常规字符或回车键*/ { if(check(Hhead,wherey(),wherex())<=0)/*当前位置没有字符且输入是常规字符,则执行添加字符操作*/ { NUM++; p2->ch=a; putch(a); if(NUM==76) /*连续输入满行,分别生成一个新的行单链表和列单链表节点*/ { p2->next=NULL; q->nextl=(Hnode *)malloc(sizeof(Hnode)); q=q->nextl; q->nextl=NULL; q->next=NULL; p1=p2=q->next=(node *)malloc(sizeof(node)); p1->ch=13; p1->next=NULL; NUM=0; } else /*连续输入未满一行,生成一个新的列单链表节点*/ { p2->next=(node *)malloc(sizeof(node)); p2=p2->next; p2->ch=13; p2->next=NULL; } } else /*当前位置有字符且输入是常规字符,则执行插入字符操作*/ { x=wherex(); y=wherey(); insert(Hhead,wherey(),wherex(),a); NUM++; view(Hhead); gotoxy(x,y); } } /*若输入为回车键*/ if(a==13) { gotoxy(1,wherey()+1); q->nextl=(Hnode *)malloc(sizeof(Hnode)); q=q->nextl; q->nextl=NULL; q->next=NULL; p1=p2=q->next=(node *)malloc(sizeof(node)); p1->ch=13; p1->next=NULL; NUM=0; } x=wherex(); y=wherey(); /*文本窗口中左移,当前光标不在窗口的第1列*/ if((A==LEFT)&&(x!=1)) gotoxy(wherex()-1,wherey()); /*文本窗口中左移,当前光标在窗口的第1列*/ if((A==LEFT)&&(x==1)) gotoxy(abs(judge(Hhead,wherey()-1)),wherey()-1); /*文本窗口中右移,若当前光标的右边一位有字符*/ if((A==RIGHT)&✓(Hhead,wherey(),wherex())>0) gotoxy(wherex()+1,wherey()); /*文本窗口中右移至下行的第1列,若当前光标位置没有字符且下行的第1列有字符*/ if((A==RIGHT)&✓(Hhead,wherey()+1,1)!=0&✓(Hhead,y,x)<=0) gotoxy(1,wherey()+1); /*右移*/ if((A==RIGHT)&&x==76) gotoxy(1,wherey()+1); /*上移*/ if((A==UP)&✓(Hhead,wherey()-1,wherex())!=0) gotoxy(wherex(),wherey()-1); /*上移*/ if((A==UP)&✓(Hhead,wherey()-1,wherex())<=0) { if(judge(Hhead,wherey()-1)==0) gotoxy(-judge(Hhead,wherey()-1)+1,wherey()-1); else gotoxy(-judge(Hhead,wherey()-1),wherey()-1); } /*下移*/ if((A==DOWN)&✓(Hhead,wherey()+1,wherex())!=0) gotoxy(wherex(),wherey()+1); /*处理BackSpace键*/ if(A==BACK) /*处理BackSpace键*/ { flag=del(Hhead,wherey(),wherex()-1); x=wherex()-1; y=wherey(); view(Hhead); if(flag==0) { if(x!=0) gotoxy(x,y); else gotoxy(x+1,y); } if(flag==1) { gotoxy(x+1,y); flag=0; } } /*处理菜单按键F1 F2 F3*/ if((A==F1)||(A==F2)||(A==F3)||(a<32||a>127)) { A=menuctrl(Hhead,A); if(A==100){main();} /*新建文件*/ if(A==101){ /*打开文件*/ Hhead=(Hnode *)malloc(sizeof(Hnode)); opens(Hhead); getchar();clrscr();gotoxy(3,3);view(Hhead); } /*保存文件*/ if(A==102){save(Hhead);clrscr();cprintf("save successfully!");getch();gotoxy(3,3);view(Hhead);} /*文件另存为*/ if(A==103){saveas(Hhead);clrscr();cprintf("save as successfully!");getch();gotoxy(3,3);view(Hhead);} /*帮助*/ if(A==120){clrscr();cprintf(" F1:File F2:Edit F3:Help "); getch();gotoxy(3,3);view(Hhead);} if(A==121){clrscr();cprintf("Abort:Version 2.0 Tel:XXXXXXXXXX");getch();gotoxy(3,3);view(Hhead);} } /*处理DEL键,删除当前位置的单个字符*/ if(A==DEL) { x=wherex(); y=wherey(); del(Hhead,wherey(),wherex()); view(Hhead); gotoxy(x,y); } /*处理已经选定文本字符后,按DEL键的情况*/ if(A==DEL&&value;!=0) { if(value>0) x=wherex(), y=wherey(); else x=r[0].col, y=r[0].line; for(i=0;i0) del(Hhead,r[i].line,r[i].col); if(value<0) del(Hhead,r[abs(value)-1-i].line,r[abs(value)-1-i].col); } value=0; /*此value为全局变量*/ view(Hhead); gotoxy(x,y); } /*处理Ctrl+x按键*/ if(A==Cx&&value;!=0) { if(value>0) x=wherex(), y=wherey(); else x=r[0].col, y=r[i].line; for(i=0;i0) del(Hhead,r[i].line,r[i].col); if(value<0) del(Hhead,r[abs(value)-1-i].line,r[abs(value)-1-i].col); } backup=value; /*保存r数组的有值元素的最大下标值*/ value=0; /*此value为全局变量*/ view(Hhead); gotoxy(x,y); } /*处理Ctrl+c按键*/ if(A==Cc&&value;!=0) { x=wherex(); y=wherey(); backup=value; value=0; /*此value为全局变量*/ view(Hhead); gotoxy(x,y); } /*处理Ctrl+v按键*/ if(A==Cv&&backup;!=0) { x=wherex(); y=wherey(); if(backup<0) /*Ctrl+右移键选定的文本,贴切此当前位置*/ for(i=0;i0) /*Ctrl+左移键选定的文本,贴切此当前位置*/ for(i=0;i
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.