文字编辑器c 代码
文字编辑器C++代码
仅供参考
部分代码可能调试错误,原因自己看看吧,应该知道的,缺少部分头文件编码
#define Esc 27
#define Enter 13
#define LeftArrow 75
#define RightArrow 77
#define DnArrow 80
#define UpArrow 72
#define ON 1
#define OFF 0
#define FALSE 0
#define TRUE 1
#include
#include
#include
#include
#include
#include
#include
#include
#include
int p,qjs=15,bjs=3,gdq=14,gdb=4,y;
char menu[11][11],sub_menu[31][11];
char data[601][80],unit[80],filename[41];
int key1,i,y,kh1,kl1,end;
int insert,x,y,xstart,ystart,flag,flage,flagf;
int MaxLines,page_line,xcount,st,mst,mx,my,mfrow,med;
int
ed,qjys,bjys,pmqj,pmbj,ckqj,ckbj,zcd_num,zp,cdqj,cdbj,tmp1,tmp2;
int zfgbqj,zfgbbj,lines,frow,Max_length,end;
char fas[41],tf[41];
char *ks,*kw,memy1,memy,memy2,kqj,kbj;
union inkey
{
unsigned char ch[2];
int ii;
}cc;
int cur_x,cur_y, str_ith,ins,input_char;
char MainDir[40];
#include "function.c"
#include "myhzk16.c"
#include "myline.c"
#include "myucdos.c"
void file_save(void);
void main(int pn,char *ps[])
{
void display_one(int x,int y,char *s,int on2off);
void menu_event(void);
void read_parameter(void);
void print_hh(void);
void fuzhi(void);
void get_new_filename(void);
void get_exist_filename(void);
void edit_file(void);
void RESET_CURSOR(void);
void DEL_CURSOR(void);
void display_kj(void);
void edit_key_event(void);
if (!CheckUCDOS())
{
clrscr();
printf("\n ucdos not run! please run ucdos
7.0 first!");
exit(0);
}
Max_length=11;
cdqj=15;
qjys=15;
bjys=1;
cdbj=YELLOW;
p=1;
zp=1;
zcd_num=zp;
tmp1=p;
tmp2=zp;
ckbj=3;
pmbj=1;
pmqj=15;
qjys=15;
bjys=1;
cdqj=RED;
cdbj=YELLOW;
CLSXY(0,1,1,80,25);
read_parameter();
if (pn>1) strcpy(filename,ps[1]);
fuzhi(); /*菜单付值*/
display_kj();
if (filename[0]==0)
{
strcpy(filename,"noname");
file_save();
}
display_one(4+13*(p-1),3,menu[p],OFF);
edit_file();
while(1)
{
menu_event(); /*显示菜单*/
}
}
/*编辑*/
void edit_file(void)
{
void display_unit(int cursor);
int load_file(char d[][80]);
void page_up(void);
void display_cursor(int cursor);
void page_down(void);
void cursor_left(void);
void display_page(void);
void cursor_up(void);
void receive_data(int code);
void cursor_right(void);
void cursor_down(void);
void cursor_home(void);
void cursor_end(void);
void cursor_del(void);
void cursor_backspace(void);
void cursor_enter(void);
void del_flag(void);
void file_save(void);
void file_save_as(void);
void define_ks(void);
void define_kw(void);
void del_ks_kw(void);
void del_line(void);
void del_block(void);
void copy_block(void);
void edit_help(void);
void write_ks_kw(void);
void display_ctrl(char *s);
lines=load_file(data);
if(!flage)
{
st=1;
ed=page_line;
insert=ON;
med=ed;
display_cursor(OFF);
frow=1;
x=1;
y=1;
flage++;
}
else
{
st=mst;
insert=ON;
display_cursor(OFF);
frow=mfrow;
x=mx;
y=my;
}
if(ed>lines) ed=lines;
strcpy(unit,data[1]);
display_page();
pmqj=15;
pmbj=1;
display_cursor(ON);
edit_key_event();
}
/*读取参数*/
void read_parameter(void)
{
flag=0;
flage=0;
flagf=0;
kqj=15;
kbj=4;
zfgbqj=6;
zfgbbj=3;
pmqj=15;
x=1;
pmbj=1;
qjys=15;
bjys=1;
page_line=16;
ckqj=1;
ckbj=7;
xcount=74;
xstart=3;
ystart=6;
MaxLines=600;
lines=0;
data[0][0]=0;
}
/*获得文件名*/
void get_new_filename(void)
{
char buffer[4096];
char jx;
gettext(10,8,10+50,8+3,buffer);
RESET:filename[0]=0;
CLSXY(7,10,8,50,3);
COLOR(15,4);
gotoxy(12,9);
DISPLAY("请输入文件名:");
COLOR(15,1);
line_edit(9,25,filename);
CUT_ALL_SPC(filename);
if (filename[0]==0)
{
puttext(10,8,10+50,8+3,buffer);
return;
}
if (!access(filename,0))
{
gotoxy(12,9);
DISPLAY("该文件已经存在,覆盖吗?(y/n)");
gotoxy(44,9);
jx=getch();
if (jx=='N' ||jx=='n') goto RESET;
}
puttext(10,8,10+50,8+3,buffer);
}
/* 打开已经存在的文件 */
void get_exist_filename(void)
{
char buffer[4096];
gettext(10,8,10+50,8+3,buffer);
RESET:filename[0]=0;
CLSXY(7,10,8,50,3);
COLOR(15,4);
gotoxy(12,9);
DISPLAY("请输入文件名:");
COLOR(15,1);
line_edit(9,25,filename);
CUT_ALL_SPC(filename);
if (filename[0]==0)
{
puttext(10,8,10+50,8+3,buffer);
return;
}
if (access(filename,0))
{
gotoxy(12,9);
DISPLAY("该文件不存在,请重新输入!");
getch();
goto RESET;
}
puttext(10,8,10+50,8+3,buffer);
}
/*装入文件*/
int load_file(char d[][80])
{
FILE *fp;
char s[200];
char s1[300];
char s2[10];
int n,j,l;
n=1;
d[1][0]=0;
fp=fopen(filename,"r");
if (!fp)
{
warn_message("打开文件错误!","");
return n;
}
n=0;
SPACE(s2,2);
while(READ_STR(s,fp))
{
n++;
s1[0]=0;
l=strlen(s);
for(j=0;jl) strcpy(s," ");
else MID(unit,s,x,1);
gotoxy(xstart+x-1,ystart+y-1);
if(cursor) COLOR(zfgbqj,zfgbbj);
else COLOR(pmqj,pmbj);
DISPLAY(s);
}
/*接收字符 */
void receive_data(int code)
{
char s[100];
int l;
l=strlen(unit);
if(x>l||insert) /*光标在行尾或插入*/
{
if(l==xcount) return;
MID(unit,s,x,l-x+1);
unit[x-1]=code;
unit[x]=0;
strcat(unit,s);
}
else
{
unit[x-1]=code;
}
strcpy(data[frow],unit);
display_cursor(OFF);
x++;
display_unit(ON);
}
/*向下翻页*/
void page_down(void)
{
if(st+page_line>lines) return;
st+=page_line;
frow+=page_line;
ed=st+page_line-1;
if(ed>lines) ed=lines;
CLSXY(1,3,6,74,16);
display_page();
}
/*向上翻页*/
void page_up(void)
{
frow-=page_line;
st-=page_line;
if(st<1) st=1;
ed=page_line+st-1;
if(ed<1) ed=1;
if (frow<1) frow=y;
CLSXY(1,3,6,74,16);
display_page();
}
/*光标右移*/
void cursor_right(void)
{
int l;
l=strlen(unit);
if(x>l) return;
strcpy(unit,data[st+y-1]);
display_cursor(OFF);
x++;
display_cursor(ON);
}
回答人的补充 2009-06-08 09:30 /* 光标左移 */
void cursor_left(void)
{
if(x<2) return;
strcpy(unit,data[st+y-1]);
display_cursor(OFF);
x--;
display_cursor(ON);
}
/*光标下移*/
void cursor_down(void)
{
int l;
if(y==page_line&&edstrlen(unit)+1) x=strlen(unit)+1;
display_unit(ON);
st++;
ed++;
strcpy(data[frow],unit);
return;
}
if(y==page_line) return;
if(frow==ed&&lines>=MaxLines) return;
strcpy(unit,data[st+y-1]);
display_cursor(OFF);
strcpy(data[frow],unit);
y++;
frow++;
if(frow>lines)
{
ed++;
lines++;
if(lines>MaxLines) return;
strcpy(data[frow],"");
}
strcpy(unit,data[frow]);
l=strlen(unit)+1;
if(x>l) x=l;
display_cursor(ON);
}
/*光标上移*/
void cursor_up(void)
{
int l;
if(y==1&&st==1) return;
if(frow-1<1)
{
frow=st;
return;
}
if(y==1&&st>1)
{
display_cursor(OFF);
WINDOW_ROLL(ystart,xstart,page_line,xcount,2);
frow--;
strcpy(unit,data[frow]);
if(x>strlen(unit)+1) x=strlen(unit)+1;
display_unit(ON);
st--;
ed--;
strcpy(data[frow],unit);
return;
}
if(y==1) return;
if(frow==st&&lines==1) return;
strcpy(unit,data[st+y-1]);
display_cursor(OFF);
strcpy(data[frow],unit);
y--;
frow--;
strcpy(unit,data[frow]);
l=strlen(unit)+1;
if(x>l) x=l;
display_cursor(ON);
}
/*按del键*/
void cursor_del(void)
{
char s[100];
int l,y0,i,x0;
y0=y;
x0=x;
l=strlen(unit);
if(y==page_line&&x==l) return;
if(x>=l)
{
strcpy(s,"");
l=strlen(data[frow]);
LEFT(s,data[frow+1],xcount-l);
strcat(data[frow],s);
strcpy(unit,data[frow]);
display_cursor(OFF);
if (strlen(data[frow+1])<=xcount-l)
{
for(i=frow+1;il)
{
display_cursor(OFF);
x=1;
cursor_down();
return;
}
y0=y;
strcpy(s," ");
MID(unit,s,x,l-x+1);
unit[x-1]=0;
display_cursor(OFF);
if(lines+1>MaxLines) return;
strcpy(data[lines+1],data[lines]);
strcpy(data[st+y-1],unit);
for(i=lines;i>frow;i--)
strcpy(data[i],data[i-1]);
strcpy(data[i+1],s);
lines++;
CLSXY(1,3,6,74,16);
display_page();
x=1;
y=y0;
display_cursor(ON);
cursor_down();
}
回答人的补充 2009-06-08 09:35
/*保存文件*/
void file_save(void)
{
FILE *fp1;
int i;
i=1;
if((fp1=fopen(filename,"w"))==NULL)
{
warn_message("存文件出错!!!","");
return;
}
while(i40) display_ctrl("文件名错!") ;
strcpy(fas,filename);
if((fp1=fopen(fas,"w"))==NULL)
{
gotoxy(30,10);
DISPLAY("不能块写入!!!");
}
for(i=memy;imemy2) return;
strcpy(unit,data[memy2+1]);
display_cursor(OFF);
lines-=memy2-memy+1;
for(i=memy;ifrow-1;i--)
strcpy(data[i],data[i-(memy2-memy+1)]);
for(i=0;i=memy&&frow<=memy2)
{
pmbj=kbj;
zfgbqj=7;
zfgbbj=3;
}
else
{
zfgbqj=1;
zfgbbj=3;
pmqj=15;
pmbj=1;
}
mx=x;
my=y;
med=ed;
mst=st;
mfrow=frow;
if(i>31)
{
receive_data(code);
continue;
}
switch(code)
{
case 59:
edit_help();
edit_file();
break;
case 3:
display_ctrl("考贝块^C");
copy_block();
break;
case 4:
display_ctrl("删除块^D");
del_block();
break;
case 23:
display_ctrl("写块 ^W");
write_ks_kw();
break;
case 25:
display_ctrl("删除行^Y");
del_line();
break;
case 11:
display_ctrl("块首 ^K");
/* Ctrl+K 定义块首 */
define_ks();
break;
case 14:
display_ctrl("块尾 ^N");
define_kw();
break; /* Ctrl+N定义块尾 */
case 60: /* F2 存盘 */
file_save();
break;
case 61:
file_save_as();
break;
case 13:
cursor_enter();
break;
case '\b':
cursor_backspace();
break;
case 71:
cursor_home();
break;
case 79:
cursor_end();
break;
case 83:
cursor_del();
break;
case 73:
page_up();
break;
case 81:
page_down();
break;
case 27:
if(memy)
{
del_ks_kw();
del_flag();
break;
}
break;
case 77:
cursor_right();
break;
case 75:
cursor_left();
break;
case 80:
cursor_down();
break;
case 72:
cursor_up();
break;
case 82: /*切换插入*/
insert=1-insert;
break;
case -4:
display_one(4+13*(p-1),3,menu[p],ON);
menu_event();
break;
}
}
}
-----------------------
#include
#pragma hdrstop
#include “Unit1.h”
#pragma resource “,.dfm”
Tform1 ,Form1;
_fastcall Tform1::Tform1(Tcomponent , Owner)
:Tform(Owner)
{
}
//,,,,,,,以上由电脑自动生成,,,
void _fastcall Tform1::FormCreate(Tobject ,Sender)
{
bsave,>Enabled=false; //将“SAVE”键设置为无效
edit,>Lines,>Clear(); //清除ED99v中的
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
edit,>Enabled=false; //将ED99v设为无效
}
//,,,,,,以上是窗体建立时初始内容,,,,
void _fastcall Tform1::bopenClick(Tobject ,Sender)
{
if(edit,>Modified)//若ED99v中的文本已被改变,但未保存,则弹出对话框,询问是否保存
{yn=Application,>MessageBox(“文件已经修改,是否保存?”,“打开”,MB_YESNO|MB_ICONQUESTION);
if(yn==IDYES)edit,>Lines,>SaveToFile(savedialog
,>FileName);
}
edit,>Enabled=true;
if(opendialog,>Execute())edit,>Lines,>LoadFromFile(opendialog,>FileName);
edit,>Modified=false;
bsave,>Enabled=false;
}
//,,,,,,以上是打开文件按钮的过程,,,,,,
void _fastcall TForm1::bsaveClick(Tobject ,Sender)
{
if(savedialog,>Execute())edit,>Lines,>SaveToFile(savedialog
,>FileName);
edit,>Modified=false;
bsave,>Enabled=false;
}
//,,,,以上是保存文件按钮的过程,,,,
void _fastcall TForm1::editChange(TObject ,Sender)
{
bsave,>Enabled=true;
}
//,,,,,,,,,,,,,,,,,,,,,
void _fastcall TForm1::bexitClick(Tobject ,Sender)
{
Close();
}