📄 全屏幕编辑软件的编写(c语言)05.txt
字号:
Shift_F1() /* 存盘,不退出编辑 */
{
int i,j;
if(chg) { /* 如果文件已修改过 */
F1(0); /* 存盘 */
old=1; /* 有老文件标志置 1 */
fp=fopen(mfile,"rb"); /* 重新打开正文文件 */
fseek(fp,vw,SEEK_SET); /* fp 读写指针复原 */
}
clear_prompt(); /* 清提示区 */
chg=0; /* 文件已修改标志置 0 */
}
F2() /* 移动当前行至指定行 */
{
long i;
write_ques(6); /* 提问要移到的行号 */
if((i=key_digit(19))<=0) { /* 输入行号,如为空串或按 ESC 键 */
clear_ques(); /* 清提问区 */
return; /* 退出本功能 */
}
i--; /* 输入行号转换为数组行号 */
if(fp_end && i>ttl_x) i=ttl_x;
/* 如 fp 已读完,目标行大于文末行号,移到文末行 */
tyy=yy; /* 保存列号 */
mvto(i); /* 移到目标行 */
comp_disp(); /* 重显一屏 */
clear_ques(); /* 清提问区 */
}
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
F3() /* 输入排版行宽 */
{
int i;
write_ques(4); /* 提问排版行宽 */
if((i=key_digit(16))<=0) { /* 在提问行输入行宽,如为空串或按 ESC 键 */
clear_ques(); /* 清提问区 */
return; /* 退出本功能 */
}
enq=i; /* 行宽值赋给全局变量 enq */
if(enq>HC-4) { /* 行宽值如超过允许字节数 */
enq=HC-4; /* 取最大允许字节数为排版行宽 */
itoa(enq,hsz,10); /* 变数值为字符串 */
write_prompt(7); /* 提示:排版超宽 */
write_space(HH,16,30,PROM_COLOR); /* 清输入区 */
write_string(HH,16,hsz,PROM_COLOR); /* 重显行宽 */
}
}
F4() /* 排版至段末 */
{
if(enq<HC-4) { /* 如已设置排版宽度 */
chg=1; /* 文件已修改标志置为真 */
reform(); /* 排版至段末 */
comp_disp(); /* 计算参数并重显一页 */
}
else write_prompt(8); /* 否则,提示:未设置排版宽度 */
}
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
Shift_F4() /* 连续排版至文末 */
{
if(enq<HC-4) { /* 如已设置排版宽度 */
chg=1; /* 文件已修改标志置为真 */
while(reform()); /* 从当前光标行排版至文末 */
comp_disp(); /* 计算参数并重显一页 */
}
else write_prompt(8); /* 否则,提示:未设置排版宽度 */
}
int reform() /* 从当前位置排版至本段末 */
{
int k,g;
write_prompt(0); /* 提示“请稍候...” */
for(;;) { /* 为段排版设置的循环 */
g=string_lingth(); /* 计算字符串长(不包括回车换行符) */
if(g>enq) { /* 如串尾在排版宽后 */
if(vs(enq-1)==0) { /* 如排版宽度处不为全角字符前半字 */
if(ss[ss_x][enq]<0xA0) { /* 如排版宽度后一字节为半角字符 */
if(punc1(ss[ss_x][enq])) /* 如为指定半角标点 */
k=enq+1; /* 折断处后移 1 字节 */
else k=enq; /* 否则原处折断 */
}
else { /* 如排版宽度处字符为全角 */
if(punc2(ss[ss_x][enq],ss[ss_x][enq+1])) /* 如为指定全角标点 */
k=enq+2; /* 折断处后移 2 字节 */
else k=enq; /* 否则原处折断 */
}
}
else { /* 如排版宽度处为全角字符前半字 */
if(punc2(ss[ss_x][enq-1],ss[ss_x][enq])) /* 如为指定的全角标点 */
k=enq+1; /* 折断处后移一字节 */
else k=enq-1; /* 否则, 折断处前移一字节 */
}
ser+=k-yy; /* 计算字序数 */
if(ss[ss_x][k]!=0x0D) { /* 如折断处不在段末 */
intercept(k); /* 在 k 处折断行 */
strcpy(ss[ss_x-1]+k,ra); /* 折断处加软回车 */
}
else { /* 如折断处已到串尾 */
xx++; ss_x++; /* 到下一行 */
ser+=2; /* 计算字序数 */
yy=0; /* 到行首 */
break; /* 退出循环 */
}
yy=0; /* 到行首 */
}
else { /* 如串尾在排版宽前 */
if(xx<ttl_x) { /* 如未到文末 */
ser+=g-yy+2; /* 计算字序数 */
ss_x++; xx++; /* 到下行 */
yy=0; y=0; /* 到行首 */
if(ss_x>ss_max) tj(); /* 如超出缓冲区数组,读入一部分 */
if(ss[ss_x-1][g]==0x8D) { /* 如上行末为软回车 */
if(delc()==-1) return 0; /* 本行接至上行末,行超长返回 */
}
else break; /* 否则退出 */
}
else { /* 如已到文末行 */
clear_prompt(); /* 清提示区 */
return 0; /* 返回 0 */
}
}
}
clear_prompt(); /* 清提示区 */
return 1; /* 返回 1 */
}
F5() /* 搜索字符串 */
{
write_ques(5); /* 提问要找的字符串 */
*fnd=0; /* fnd 清为空串 */
if(key_string(HH,19,fnd,PROM_COLOR)<=0) {
/* 输入字符串,如为空串或按 ESC 键 */
clear_ques(); /* 清提问区 */
return; /* 退出本功能 */
}
Shift_F5(); /* 进行搜索 */
}
Shift_F5() /* 进行搜索 */
{
if(*fnd) { /* 如搜索字符串不为空串 */
if(find(fnd)) *fnd=0; /* 搜索,如到文末,字符串 fnd 清为空串 */
comp_disp(); /* 计算参数并重显一屏 */
}
}
int find(char *a) /* 寻找字符串 */
{
int i,j,b;
j=strlen(a); /* 计算要找的字符串长 */
while(xx<=ttl_x) { /* 在总行数范围内找 */
if(ss_x+H3-x>=ss_max) tj(); /* 本屏最下行如超出缓冲区最大行,数组
上部存 Q3 行到 fp1,下部读入 Q3 行 */
b=string_lingth(); /* 计算本行除行末回车换行符外的字符数 */
for(i=0;i<j;i++) { /* 对比 j 个字符 */
if(b-yy+1<j) { /* 如本串剩下已不足要找的串长 */
if(xx<ttl_x) { /* 如未到文末行 */
ss_x++; xx++; /* 下移一行 */
ser+=b-yy+2; /* 计算字序数 */
yy=0; /* 至行首 */
break; /* 退出 for 循环 */
}
else { /* 如到文末行 */
ser+=b-yy; /* 计算字序数 */
yy=b; /* 至行末列 */
clear_ques(); /* 清提问区 */
return 1; /* 返回 1 */
}
}
if(ss[ss_x][yy+i]!=*(a+i)) { /* 如有一个字符对不上 */
yy++; ser++; /* 后移一字符 */
i=-1; /* i 加步长进入循环后变为初值 1,重新对比 */
}
else if(i==j-1) { /* 如 j 个字符都对上 */
if(!vs(yy+j-1)) { /* 如找到的串尾不在前半个汉字 */
yy+=j; /* 当前位置移至对上的最后一字符后 */
ser+=j; /* 计算字序数 */
return 0; /* 返回 0 */
}
else { /* 否则后移一字节 */
yy++; ser++;
i=-1; /* i 加步长进入循环后变为初值 1,重新对比 */
}
}
}
}
}
F6() /* 字符串替代 */
{
int i,j,g,k;
write_ques(7); /* 提问搜索和替代的字符串 */
if(key_string(HH,6,hsz,PROM_COLOR)<=0) {
/* 输入要找的字符串,如为空串或按 ESC 键 */
clear_ques(); /* 清提问区 */
return; /* 退出本功能 */
}
ddd=malloc(HC); /* 给 ddd 分配内存 */
dd=ddd; /* 保存 ddd 的首指针 */
if(key_string(HH,32,ddd,PROM_COLOR)<=0) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -