Chinaunix首页 | 论坛 | 博客
  • 博客访问: 846973
  • 博文数量: 180
  • 博客积分: 10029
  • 博客等级: 上将
  • 技术积分: 2185
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-06 09:15
文章存档

2010年(133)

2009年(47)

我的朋友

分类: C/C++

2009-11-16 10:15:32

    学习C语言是很早以前的事了,以下的代码也是我很早以前积累的,贴出来,我觉得会比较实用的啦!
 
    HUST编辑器基本上可以看作是Linux下 VI 编辑器的超简化版本!
    大三下学期上的编译原理,这学期开学时,我在做好简化C语言的编译器时,直接将代码插入到HUST编辑器中,组成了一个“简化语言的简化集成开发环境” (我做成了IDE啊,哈哈哈,自嘲!!)
 
    HUST编辑器的实现会让你很惊讶的啦,短短30行左右的代码,居然实现了这么复杂的功能,让我感叹C语言的强大和灵活性啊!
 
    以下我直接贴出代码:
   (可能不能直接运行,但是熟悉C语言语法的读者拷贝之后只要稍稍调整,肯定没问题的啦!)
    有问题E-mail:
 
    还有,我以后把自己的编译器做个分析,贴出来,叫“HUST C IDE” (哈哈!)
 
   HUST编辑器:
  

#include
#include

char buffer[MAXLEN],fname[120];
char *lineptr[MAXLINE];
FILE *fp;

void edit(),replace(),insert(),delete(),quit(),go();
char comch[]="EeRrIiDdQqGg";                             /*命令符*/
void(*comfun[])()={edit,replace,insert,delete,quit,go};  /*对应处理函数*/
int modified=0,          /*正文被修改标志*/
int last;                /*当前正文行数*/
char *chpt;              /*输入命令行字符指针*/

main()
{
 int j;

 last=0;
 while(1)
 {
  clrscr();
  printf("\nInput a command:[e,r,i,d,q,g].\n");
  gets(buffer);                                        /*读入命令行*/
  for(chpt=buffer;*chpt==''||*chpt=='\t';chpt++);      /*掠过空白符*/
  if(*chpt=='\0') continue;                            /*空行重新输入*/
  for(j=0;comch[j]!='\0'&&comch[j]!=*chpt;j++);        /*查命令符*/
  if(comch[j]=='\0') continue;                         /*非法命令符*/
  chpt++;                                              /*掠过命令符,指向参数*/
  (*comfun[j/2])();                                    /*执行对应函数*/
  fprintf(stdout,"The text is:\n");
  for(j=0;j          {
              printf("L%3d->: ", j+1);
              fputs(lineptr[j],stdout);
          }
          getch();
 }
}

 
  代码是不是很精简,编写的很美妙,让人叹为观止啊! 实际上,不是我写的啦! 但是我实在觉得是写得太让人自卑,也太让人激动、神往!    哈哈, 夸张了!
 
  以下是该编辑器的使用Manual!
 
HUST编辑命令列表:
E: edit     Q: Quit    R: Replace   I: Insert   D: Delete  
命令格式和执行动作:
1. E
   E|e test.txt
   将显示test.txt文件的内容,并且在行首添加了行号;
2. Q
   Q|q
   首先提示 Save (y/n)?
   选择之后,即退出;
3. R
   R|r K M N
   K 行正文
   R命令后继的K行正文代替原始正文的M行到N行的正文内容;
4. I
   I|i K M
   K 行正文
   I命令后继的K行正文插入到原始正文的第M行之后;
5. D
   D|d M N
   将原始正文中第M行到第N行的正文内容删去;
 
   好啦,废话不多说,一个词: NB!
阅读(1411) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-12-17 13:55:00

界面代码基本上要1000行啊,哈哈

chinaunix网友2009-11-20 09:25:15

有界面么? 类似以TurboC的也行呀,貌似没有哦