注:續網友 hua 之後,網友 Linuxhero 在討論區發布了他改進 hua 編寫的編輯器程序,並消除了文件存儲的亂碼問題,本站測試了這個程序,效果不錯,希望兩位網友再接再勵不斷地把這個編輯器完善起來,同時也謝謝兩位網友對非常空間的支持!
-----------------------------------------------------------
作者:linuxhero
我的方法是對數組逐個附值,而不是采用串連接,消除了文件存儲亂碼的問題,同時還改進了刪除的功能,下面是修改後的源代碼:
#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,i,net[2000],sizefile=0;
/* net[2000] 中的2000為文件最大行數 */
char name[200000]; /* 設置文件最大容量 */
FILE *fp;
if(argc==1 argc>2) {
printf("please input:./edit file
exit:Esc
");
}
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 '
':
++y;
x=1;
move(y,x);
insertln();
break;
case ' ':
x+=4;
break;
case KEY_BACKSPACE:
if(x>1) --x;
move(y,x);
/* 刪除的控制 */
if (x>1) {
delch();
} else {
addch(' ');
}
break;
case KEY_DC:
delch();
break;
case 27:
fwrite(&name,sizeof(name),1,fp);
endwin();
/* 顯示數組存儲的內容 */
printf("this is name:%s
",name);
exit(0);
default:
insch(ch);
/* 將輸入的字存入數組 */
if (y==1) {
name[x-1]=ch;
name[x]='