📄 全屏幕编辑软件的编写(c语言)05.txt
字号:
/* 输入替代的字符串,如为空串或按 ESC 键 */
free(ddd); /* 释放 ddd 占用的内存空间 */
clear_ques(); /* 清提问区 */
return; /* 退出本功能 */
}
g=strlen(hsz); /* 计算搜索的字符串长 */
k=strlen(ddd); /* 计算替代的字符串长 */
while(1) { /* 为连续找设的循环 */
if(find(hsz)) { /* 如到文末 */
comp_disp(); /* 计算参数,显示一屏 */
break; /* 退出本功能 */
}
xh(); /* 在 H1 行重显当前行、列、序号 */
comp_disp(); /* 计算参数,显示一屏 */
if((j=key_yn(59))==-1) { /* 回答是否替换,如按 ESC */
clear_ques(); /* 清提问区 */
break; /* 退出本功能 */
}
if(j) { /* 如按 Y,进行替换操作 */
chg=1; /* 文件已修改标志置为真 */
i=yy-g; /* 删除原字符串后光标处列号 */
while(yy>i) delc(); /* 删除原字符串 */
if(xx==ksx && yy<ksy) ksy+=k; /* 计算字块坐标变化 */
if(xx==kwx && yy<kwy) kwy+=k;
write_block(xx); /* ddd 中字符串拷入 */
ddd=dd; /* ddd 返回指针头 */
}
}
free(ddd); /* 释放 ddd 占用的内存空间 */
}
F7() /* 定义块首行、列号 */
{
ksx=xx; /* 块首标志行号等于当前光标行号 */
ksy=yy; /* 块首标志列号等于当前光标列号 */
if(blck==0) { /* 如尚未定义块 */
blck=1; /* 块标志置 1 */
kwx=ksx; /* 块尾标志同块首重合 */
kwy=ksy;
disp(ss_x,x); /* 重显当前行 */
return; /* 返回 */
}
if(kwx<ksx||(kwx==ksx && kwy<=ksy)) { /* 如当前光标在原块尾后 */
kwx=ksx; /* 块尾行号移至块首行 */
kwy=ksy; /* 块尾列号移至块首列 */
blck=1; /* 块标志置 1 */
}
else blck=2;
disp_t(); /* 重显一屏 */
}
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
Shift_F7() /* 清除块定义 */
{
blck=0; /* 块标志置 0 */
ksx=kwx=-1; /* 块标行号置初值 */
ksy=kwy=-1; /* 块标列号置初值 */
comp_disp(); /* 重显一屏 */
}
F8() /* 定义块尾 */
{
kwx=xx; /* 定块尾行号 */
kwy=yy; /* 定块尾列号 */
if(blck>=1) { /* 如块标志为 1 或 2 */
if(kwx<ksx||(kwx==ksx && kwy<=ksy)){ /* 如在块首前 */
ksx=kwx; /* 块首行号同块尾 */
ksy=kwy; /* 块首列号同块尾 */
blck=1; /* 块标志置 1 */
}
else blck=2; /* 否则,块标志置 2 */
disp_t(); /* 重显一屏 */
}
else F7(); /* 如未定义块,设块首 */
}
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
F9() /* 移到文首 */
{
upto(0x0L); /* 移至 0 行 */
Home(); /* 移至行首 */
comp_disp(); /* 计算显示参数,显示文首屏幕 */
}
Shift_F9() /* 移至文末 */
{
if(xx<ttl_x) dnto(ttl_x); /* 如不在文末行,下翻到文末行 */
End(); /* 移至行末 */
comp_disp(); /* 计算参数,重显一屏 */
}
F10() /* 表格线状态转换开关 */
{
if(tab) { /* 如 tab 为真 */
tab=0; /* 转置 tab 为 0 */
write_space(H1,4,4,TEXT_COLOR); /* 盖掉屏幕信息行“表线”提示 */
}
else { /* 如 tab 为假 */
tab=1; /* 转置 tab 为 1 */
write_string(H1,4,"表线",0x1E); /* 在屏幕信息行显示“表线”二字 */
}
}
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
upto(long a) /* 上移到 a 行 */
{
ser-=yy; /* 计算当前行首字序数 */
while(oa && a<=xx-ss_x+x) {
/* fp1 中尚有记录,目标行小于数组 x 行,则循环 */
while((ss_x-1)>x) { /* 数组当前行号大于屏幕行坐标,则循环 */
--xx; --ss_x; /* 上移一行 */
ser-=string_lingth()+2; /* 计算字序数 */
}
st(); /* 如编辑数组当前行号不足屏幕行坐标,从 fp1 读入 */
}
while((xx-1)>=a) { /* 目标行在当前行前,则循环 */
--xx; --ss_x; /* 上移一行 */
ser-=string_lingth()+2; /* 计算字序数 */
}
orien(); /* 确定列号 */
ser+=yy; /* 计算字序数 */
}
dnto(long a) /* 下移到第 a 行 */
{
int i;
ser+=string_lingth()-yy+2; /* 计算下行首字序数 */
ss_x++; xx++; /* 当前行下移一行 */
while(a>=xx-ss_x+(i=ss_max+x-H3) && (ob||!fp_end)) {
/* 目标行超出,屏幕最下行超出数组,fp2 或 fp 中尚有记录则循环 */
while(ss_x<i) { /* 当前行下移不会引起屏底超出数组则循环 */
ser+=string_lingth()+2; /* 计算下行首字序数 */
ss_x++; xx++; /* 当前行移至下行 */
}
tj(); /* 屏底要超出数组时,从 fp2 或 fp 读入 */
if(fp_end && a>ttl_x) a=ttl_x; /* 如目标行大于文末行时,目标行取文末行 */
}
while(xx<a) { /* 目标行在当前行后则循环 */
ser+=string_lingth()+2; /* 计算下行首字序数 */
ss_x++; xx++; /* 当前行移至下行 */
}
orien(); /* 定光标位置 */
ser+=yy; /* 计算字序数 */
}
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
wfp1() /* 将编辑数组上部 Q3 行写入 fp1 */
{
fseek(fp1,wra[oa],SEEK_SET); /* 指针移到写入起始位置 */
write_to(0,Q3,fp1); /* 写 Q3 行到 fp1 */
wra[++oa]=ftell(fp1); /* 记录下一次写入起始位置 */
movbk(0,Q3); /* 剩下的数组前移 Q3 行 */
ss_x-=Q3; /* 计算编辑数组当前行行号 */
ss_max-=Q3; /* 计算数组行实用最大行号 */
}
movbk(int s,int a) /* 编辑数组 s+a 行起前移 a 行 */
{
int i;
for(i=s;i<QB-a;i++)
strcpy(ss[i],ss[i+a]); /* 前移 a 行,复盖原行 */
while(i<QB) *ss[i++]=0; /* 移走各行清 0 */
}
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
mov(int s,int a) /* 编辑数组 s 行起后移 a 行 */
{
int i;
for(i=QB-1;i>=s+a;i--) strcpy(ss[i],ss[i-a]);
}
tj() /* 当前行大于 Q1 时,上部 Q3 行存入 fp1,从 fp2 或 fp 再读入 Q3 行 */
{
int j=0;
if(ss_x>Q1-H3) wfp1(); /* 当前行大于 Q1 时,上部 Q3 行存入 fp1 */
if(ss_max<=Q1) { /* 如编辑数组实用最大行在数组前半部 */
if(ob) { /* 如 fp2 中有记录 */
fseek(fp2,wrb[--ob],SEEK_SET); /* 指针前移至读起始位置 */
j=read_from(ss_max+1,Q3,fp2); /* 从 fp2 读 Q3 行写入编辑数组最大行后,
j 为实际读写数 */
ss_max+=j; /* 数组扩大 j 行 */
}
else if(!fp_end) { /* 如 fp2 已无记录,如 fp 中未读完 */
j=read_from(ss_max+1,Q3,fp); /* 从 fp 读 Q3 行写入数组最大行后,
j 为实际读写数 */
if(j<Q3) { /* 如读写数不足 Q3 行 */
fp_rd+=j; /* fp 已读出最大行行号增加 j */
ttl_x=fp_rd; /* 确定文末行行号 */
fp_end=1; /* fp 已读完标志置 1 *
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
}
else fp_rd+=Q3; /* 否则,fp已读出行最大行号加 Q3 */
ss_max+=j; /* 数组扩大 j 行 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -