完善编辑器雏形

王朝other·作者佚名  2008-06-01
宽屏版  字体: |||超大  

注:这是本站网友 hua 在非常论坛发布的,看完后我们非常感动,在这个网友身上我们看到了自由软件的精神,他在本站发布的编辑器雏形的基础上扩展了源代码,并加入了文件存储功能,本站把这篇文章在文章区发布出来,希望有更多有爱好的网友共同研究扩展这个还不完善的编辑器.

源程序没加注释,本站在扩展的部分加上了注释.

-----------------------------------------------------------

作者:hua

完成这个程序的时候,心里有些激动,但是在存档文件中的开头总是有乱码存在,我想可能是数组设置的问题,不过并不影响文件的存储,下面是我扩展的源代码:

edit.c:

#include<unistd.h>

#include<stdio.h>

#include<curses.h>

#define STARTX 1

#define STARTY 1

void initial()

{

initscr();

cbreak();

nonl();

noecho();

intrflush(stdscr,FALSE);

keypad(stdscr,TRUE);

refresh();

}

int main(int argc,char *argv[])

{

int x=STARTX;

int y=STARTY;

int ch;

char name[200],eput,net[1]; /* 设置字符变量 */

FILE *fp; /* 设置文件指针 */

if(argc==1 argc>2) {

printf("please input:./edit file\nexit:Esc\n");

}

}

/* 上面是判定输入情况的,当输入参数为 1 或大于 2 时,打印 "please input:./edit file\nexit:Esc\n" */

if(argc==2) {

fp=fopen(argv[1],"w"); /* 写文件 */

initial();

//box(stdscr,ACS_VLINE,ACS_HLINE);

move(0,30);

printw("edit:%s",argv[1]);

refresh();

move(x,y);

do{

ch=getch();

switch(ch){

case KEY_UP:

if(y>1) --y;

move(y,x);

break;

case KEY_DOWN:

++y;

break;

case KEY_RIGHT:

++x;

break;

case KEY_LEFT:

if(x>1) --x;

break;

case 'r':

++y;

x=1;

move(y,x);

insertln();

break;

case 't':

x+=4;

break;

case KEY_BACKSPACE:

if(x>1) --x;

move(y,x);

addch(' ');

break;

case KEY_DC:

delch();

break;

case 27:

/* 当按 Esc 时,存储文件并退出程序 */

fwrite(&name,sizeof(name),1,fp);

endwin();

exit(0);

default:

insch(ch);

eput=ch;

/* 这里作者用了些技巧,将整型的变量附值给字符变量,在这应该理解为直接获取字符的 ASCII 码 */

sprintf(net,"%c",eput);

/* 将字符放入 net[1] 内 */

strcat(name,net);

/* 连接 name 和 net 的内容,并把内容放入 name 数组中 */

x++;

break;

}

move(y,x);

}while(1);

}

}

上面用的代码是在贵站非常文章上发表的编辑器雏型的基础上扩展的,其中结合从贵站学到的文件存取知识发展而来的,虽然漏洞很多,但是我相信它经过不停的改进,最终会成为一个出色的功能强大的编辑器.

同时想到一个人的能力有限,只有集合大家力量才能使功能更加的完善,所以在这儿把源代码贴出,希望各路好手共同完善这个程序.

也非常感谢非常空间,让我学到了很多的知识,谢谢!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有