简单行编辑程序例
更新时间:2024-05-22 04:50:01 阅读量: 综合文库 文档下载
数据结构源码--串操作应用举例 简单行编辑程序例
#include
struct line{ int charnum; char *base; };
typedef struct line SequListElemType;
#include \
#define MAXLINES 1000
int key;
int cureditline=0; int curscrtopline=0; int cureditcol=0; int funckey; int editwinx=2; int editwiny=3;
int editwinlines=20; int mainover=0; FILE *curfile;
char filename[255]=\
SequList *Document;
char ascii(int k);
printdoc(int startfileline,int startscrline); readdoc(FILE *fp);
editline(int curline,int maxcolnum) {
char s[2000];
setscrcolor(BLUE,YELLOW);
strcpy(s,Document->elem[curline].base);
getstring(editwinx,editwiny+curline-curscrtopline,s,maxcolnum);
free(Document->elem[curline].base);
Document->elem[curline].base=(char *)malloc(strlen(s)+1); strcpy(Document->elem[curline].base,s); }
printdoc(int startfileline,int startscrline) {
int i; int j;
cursor_hide(); i=startscrline; j=startfileline;
setscrcolor(BLUE,YELLOW);
gotoxy(editwinx,editwiny+startscrline);
while(i<=editwinlines && i
clearscrline(editwinx,editwiny+i,78);
putsxy(editwinx,editwiny+i++,Document->elem[j++ -1].base); }
while(i<=editwinlines)
clearscrline(editwinx,editwiny+i++,78); cursor_show(); }
getline(FILE *fp,char *l) {
int i=0;
while(!feof(fp))
if((l[i++]=fgetc(fp))=='\\n') break; l[i-1]='\\0'; }
closedoc(FILE *fp) {
int i;
fclose(fp);
for(i=0;i
readdoc(FILE *fp)
{
char *newline; char s[20000]; int linenum=0;
struct line curline; if(!fp) return; while(!feof(fp)) {
getline(fp,s); linenum++;
newline=(char *)malloc(strlen(s)+1); strcpy(newline,s); curline.base=newline;
curline.charnum=strlen(newline);
SequListInsert(Document,linenum,curline); } }
char ascii(int k) {
char c;
c=(k<<8)>>8; if(c>=32&&c<127) return c; else
return 0; }
insertchar(char *s,char c,int pos) {
int i;
for(i=strlen(s)+1;i>pos;i--) s[i]=s[i-1]; s[i]=c; }
deletechar(char *s,int pos) {
int i; int j;
j=strlen(s);
for(i=pos;i<=j;i++) s[i]=s[i+1]; }
clearscrline(int x,int y,int num)
{
int i;
for(i=0;i getsindiag(int x,int y,int w,char *title,char *s) { char buf[2000]; gettext(x,y,x+w+2,y+2,buf); setscrcolor(LIGHTGRAY,BLACK); box(x,y,w+2,3); putsxy(x+3,y,title); getstring(x+1,y+1,s,w); puttext(x,y,x+w+2,y+2,buf); } insertnewline(int linenum) { struct line l; l.base=(char *)malloc(80); l.charnum=0; l.base[0]='\\0'; SequListInsert(Document,linenum,l); } deleteline(int linenum) { SequListDelete(Document,linenum); } getstring(int x,int y,char *s,int num) { int k; int n; char c; int curpos=0; int thisover=0; cursor_show(); /* putsxy(x,y,s); */ gotoxy(x,y); while(!thisover) { if(k=bioskey(1)) { switch(k){ case KEYEsc: case KEYReturn: case KEYUp: case KEYDown: case KEYAlt_x: case KEYCtrl_y: return; break; default: bioskey(0); } } else continue; switch(k){ case KEYHome: curpos=0; gotoxy(x+curpos,y); break; case KEYEnd: curpos=strlen(s); gotoxy(x+curpos,y); break; case KEYReturn: thisover=1; break; case KEYLeft: if(curpos) curpos--; gotoxy(x+curpos,y); break; case KEYRight: if(curpos case KEYBackspace: if(curpos) { deletechar(s,curpos-1); curpos--; cursor_hide(); clearscrline(x,y,num); putsxy(x,y,s); gotoxy(x+curpos,y); cursor_show(); } break; case KEYEsc: return; default: c=ascii(k); if (c&&strlen(s) dofunc(int itemno) { switch(itemno) { case 0: break; case 1: /*Open file*/ getsindiag(3,4,50,\ if(curfile=fopen(filename,\ { readdoc(curfile); printdoc(1,0); } break; case 3: mainover=1; break; case 21: showmessagew(); default: break; } } main() { int i; char c; char *mainmenuitem[10]={\ char *submenu1[10]={\ char *submenu2[10]={\ char *submenu3[20]={\ initmenu(MAINMENU_V,3,&mainmenu,mainmenuitem); initmenu(SUBMENU_H,4,&submenu[0],submenu1); initmenu(SUBMENU_H,3,&submenu[1],submenu2); initmenu(SUBMENU_H,2,&submenu[2],submenu3); for(i=0;i<3;i++) addsubmenu(&mainmenu,i,&submenu[i]); definemenupos(3,1,&mainmenu); cursor_hide(); showmenu(&mainmenu); showmainw(1,2,80,23); showmessagew(); SequListInit(&Document,MAXLINES); insertnewline(1); setscrcolor(BLUE,YELLOW); while(!mainover) { if(key=bioskey(1)) {if(!ascii(key)) bioskey(0); } else continue; switch(key){ case KEYBackspace: case KEYDelete: case KEYHome: case KEYEnd: case KEYReturn: if(cureditline-curscrtopline case KEYLeft: case KEYRight: break; case KEYCtrl_s: break; case ESC: cursor_hide(); dofunc(getmenuitem()); break; case KEYAlt_x: mainover=1; break; default: gotoxy(editwinx,editwiny+cureditline-curscrtopline); editline(cureditline,78); break; } } closedoc(curfile); setscrcolor(BLACK,WHITE); clrscr(); cursor_show(); }
正在阅读:
简单行编辑程序例05-22
德育教学案例:把爱种在你心底11-07
新闻职业道德之论文作业03-28
最新2020小升初数学专项题-第十八讲 速算与巧算(除法与乘除混合运算)通用版05-09
七年级道德与法治下册第四单元走进法治天地单元综合测试新人教版01-16
DWDM题及答案12-06
控制理论实验报告线性定常系统的串联校正10-14
听奶奶讲我的故事作文350字07-12
地铁详勘大纲 - 图文10-24
2004年中国企业人力资源管理现状05-19
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 单行
- 编辑
- 程序
- 高考生物重难点突破强化练第23练准确解答光合作用细胞呼吸的实验
- xxxx分公司2012年网络建设实施和保障措施方案
- 初三上册化学第四单元自然界的水练习题(带答案)
- 建筑空间环境的“自然光”视觉设计分析
- 2019七年级音乐下册 第八单元《乡间的小路》教案2 湘艺版
- 《局解》复习重点(答案版)
- 实训案例2010
- 五年级音乐上册教学计划
- 某65孔焦炉筑炉工程施工组织设计 - secret
- 瓦西干渠施工组织设计 - 图文
- 注重细节,养成好习惯
- 高校思想政治课堂教学有效性的思考
- 2 除数是一位数的除法 1、口算除法 - 图文
- 北师大版八年级上册数学参考例题和练习
- 泰山版小学四年级上册综合实践教案
- 建筑节能社会实践调研报告 - 图文
- 外籍教师聘用合同中英文
- 房县风险管理制度
- 2014年自考马克思主义基本原理概论重点笔记
- 旅游景点网络营销的现状与对策