自制操作系统Antz day11——实现shell(下)命令响应

 我已经规范了系统代码风格,类似于按照linux分包,把各部分功能区分开了

一 . 如何实现命令缓存

在之前已经完成了键盘的响应工作,但这种响应却是有很大的问题,比如说对于一次按键的两次中断处理。后来我把两种中断都加入了响应判断中,这样就不会有之前第10天所提到的bug了。

* 在替换函数中完成识别。修改如下

char* replace_char(char s[40]){     char *chr = "$" ;     if((strcmp(s,"1E")==0)||(strcmp(s,"9E")==0)){             chr = "a" ;     }else if((strcmp(s,"30")==0)||(strcmp(s,"B0")==0)){             chr = "b" ;     }     ... // 省略     return chr ;

* 这里是一些功能按键的识别修改

    // Enter  -> 回车键 响应之前缓存的命令 换行     if((strcmp(s,"1C")==0)||(strcmp(s,"9C")==0)){             action_command(binfo);  //响应命令             write_x = 58 ;   //下面是换行             write_y += 19 ;             putfonts8_asc(binfo->vram, binfo->scrnx, 4, write_y, COL8_FFFFFF, "AntzOS>");     }      // F1 -> 终端刷新  类似于clear命令     else if((strcmp(s,"3B")==0)||(strcmp(s,"BB")==0)){  //关于F1的响应中断             sprintf(command,"%s","");  // 命令缓存清空             flag = 0 ;  // 按键模式回复默认,这个看第10天,本质目的是为了处理一次按键的两次终端             new_pe(binfo);  // 通过操作显存直接刷新当前终端             putfonts8_asc(binfo->vram, binfo->scrnx, 4, write_y, COL8_FFFFFF, "AntzOS>");     }     //  Backspace -> 删格键     else if(strcmp(s,"0E")==0){             // 回退             write_x -= 8 ;             boxfill8(binfo->vram, binfo->scrnx , COL8_000000,  write_x,     write_y,     write_x+19, write_y+19);             if(write_x<=58){                 write_x = 146 ;                 write_y -= 19 ;             }     } 

这些就是按键识别上目前修改的内容了。

接下来我们要添加一个功能,在每次按键之后,不但在屏幕上显示这个键,而且将他缓存在缓冲区,在下次回车的时候进行识别,并清空。

先来看一个简单的demo

// command数组就是命令缓存区 char  command[100]  = "";  void add_command(char *s)  {      sprintf(command,"%s%s",command,s);  }  void action_command(){     // 响应 } 

二 . 实现

command就是一个命令缓存数组,每次按键之后调用add_command()命令将这次的按键保存。

关键字:

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信