📄 全屏幕编辑软件的编写(c语言)04.txt
字号:
yy=string_lingth(); /* 至行末 */
if(x>0) { /* 如不在本屏首行 */
x--; /* 到屏幕上一行 */
comput(); /* 计算参数 */
if(m) disp_t(); /* 如不为 0 屏,重显一屏 */
}
else { /* 如在本屏首行 */
if(ss_x==0) st(); /* 如已到数组首行,从fp1补充Q3行至数组上部 */
comput(); /* 计算参数 */
if(!m) roll_scr_down(0,H3); /* 如上移行尾在 0 屏,下滚一屏 */
else disp_t(); /* 否则重显所在屏 */
}
}
}
if(vs(yy-1)==0) break; /* 如不在全角前半字,退出循环 */
}
}
Up() /* 上移一行 */
{
int k;
if(xx) { /* 如不在文首行 */
if(!ss_x) st(); /* 如到编辑数组第一行,从 fp1 读入 Q3 行 */
xx--; /* 上移一行 */
ss_x--; /* 编辑数组行号减 1 */
ser-=yy+2; /* 计算上行末字序数 */
k=m; /* 保存原屏号 */
if(x>0) { /* 如不在本屏起始行 */
x--; /* 屏幕光标上移一行 */
orien(); /* 判断上移后光标是否在串尾后,如在串尾后,光标定于串尾 */
if(m!=k) disp_t(); /* 如不在原屏,重显一屏 */
}
else { /* 如在本屏起始行 */
orien(); /* 判断光标是否在串尾后,如在串尾后,定光标于串尾 */
if(m==k) roll_scr_down(0,H3);/* 如仍在原屏,向下滚屏 */
else disp_t(); /* 否则显示串尾所在屏 */
}
ser-=string_lingth()-yy; /* 计算字序数 */
}
}
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
Down() /* 下移一行 */
{
int k,l;
l=string_lingth(); /* 计算行长(不包括回车换行符) */
if(xx<ttl_x) { /* 如不在文末行 */
ss_x++; xx++; /* 下移一行 */
ser+=l-yy+2; /* 计算下行首字序数 */
if(ss_x>=ss_max) tj(); /* 如超出编辑数组,从 fp2 或 fp 补充 */
k=m; /* 保存原屏号 */
if(x<H3) { /* 如不在屏幕文本区最下一行 */
x++; /* 屏幕光标下移一行 */
orien(); /* 判断光标是否在串尾后,如在串尾后,定光标于串尾 */
if(m!=k) disp_t(); /* 如不在原屏,重显一屏 */
}
else { /* 如光标在屏幕文本区最后一行 */
orien(); /* 重定列号 */
if(m==k) { /* 如在原屏 */
roll_scr_up(0,H3); /* 向上滚屏 */
disp(ss_x,x); /* 屏幕最下行补显一行 */
}
else disp_t(); /* 如不在原屏,重显一屏 */
}
ser+=yy; /* 计算字序数 */
}
}
Ins() /* 插入/非插入状态切换 */
{
if(!ins) { /* 如 ins 为假 */
ins=1; /* 转置 ins 为 1 */
write_string(H1,0,"插入",0x4E); /* 在信息行显示“插入”二字 */
}
else { /* 如 ins 为真 */
ins=0; /* 转置 ins 为 0 */
write_space(H1,0,4,0x0E); /* 用空格盖掉“插入”二字 */
}
}
Home() /* 移至行首 */
{
ser-=yy; /* 计算字序数 */
yy=0; /* 到行首列 */
if(m) { /* 如不是 0 屏 */
m=0;
disp_t(); /* 显示 0 屏各行 */
}
}
End() /* 到行末 */
{
int i,g;
i=m; /* 保存屏号 */
g=string_lingth(); /* 计算字符串长(不包括回车换行符) */
ser+=g-yy; /* 计算字序数 */
yy=g; /* 当前位置移至行末 */
comput(); /* 计算各参数 */
if(i!=m) disp_t(); /* 如不在原屏,重显一屏 */
}
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
comp_disp() /* 计算参数,重显一屏 */
{
comput(); /* 计算各参数 */
disp_t(); /* 显示一屏 */
}
comput() /* 根据 yy 计算屏号 m、y 等参数 */
{
m=yy/BP; /* 计算屏号 */
if(m) m--; /* 如不为 0 屏,屏号减 1 */
y=yy-m*BP; /* 计算屏幕显示列坐标 y */
if(xx-x<0) x=xx; /* 如 xx-x 小于屏幕行坐标,行坐标取内存数组当前行号 */
}
mvto(long a) /* 移到指定行 a */
{
yy=tyy; /* 恢复原列号 */
if(a<=xx) upto(a); /* 如目标行在当前行或之前,前移至目标行 */
else dnto(a); /* 如目标行在当前行后,后移至目标行 */
}
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
F1(int a) /* 文本存盘,a=1 退出,a=0 不退出 */
{
unsigned int i,j;
long b;
if(chg) { /* 如文件已修改过 */
write_prompt(0); /* 提示“请稍候...” */
if(!findfirst(bfile,pt,0)) /* 如有后备文件 */
remove(bfile); /* 删除原后备文件 */
if(old) { /* 如原有老文件 */
b=ftell(fp); /* 测出老文件当前读写指针位置 */
fclose(fp); /* 关闭老文件 */
rename(mfile,bfile); /* 改为带扩展名 BAK 的后备文件 */
}
fp3=fopen(bfile,"rb"); /* 打开后备文件,文件指针赋于 fp3 */
fp=fopen(mfile,"wb+"); /* 重建正文文件,文件指针仍放 fp 中 */
ddd=malloc(KK); /* 为 ddd 分配内存 */
i=0; /* i 置初值 0 */
while(i<oa) { /* fp1 中记录并入 fp */
fseek(fp1,wra[i++],SEEK_SET);/* fp1 指针移到读写起始处 */
j=wra[i]-wra[i-1]; /* 计算读入字节数 */
fread(ddd,sizeof(char),j,fp1); /* 从 fp1 读入 j 字节至 ddd */
fwrite(ddd,sizeof(char),j,fp); /* 将 ddd 中内容写入 fp */
}
write_to(0,ss_max+1,fp); /* 缓冲区数组的记录写入 fp */
write_prompt(0); /* 提示“请稍候...” */
i=ob; /* ob 为 fp2 中最后一次读写指针数组序号 *
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
while(i) { /* fp2 中记录并入 fp */
fseek(fp2,wrb[--i],SEEK_SET);/* fp2 指针移到前一读写起始处 */
j=wrb[i+1]-wrb[i]; /* 计算读入字节数 */
fread(ddd,sizeof(char),j,fp2); /* 从 fp2 读入 j 字节至 ddd */
if(*(ddd+j-1)==0) j--; /* 消除 wfp2() 读入文末部分时加的 '\0' */
fwrite(ddd,sizeof(char),j,fp); /* 将 ddd 中内容写入 fp */
}
vw=ftell(fp); /* 保存 fp 指针位置 */
if(!fp_end) { /* 如原文件未全部读完,剩余部分拷入 fp */
fseek(fp3,b,SEEK_SET); /* 移至原老文件当前读写位置 */
for(;;) {
j=fread(ddd,sizeof(char),KK,fp3); /* 每次从 fp3 读入 KK 字节到 ddd */
fwrite(ddd,sizeof(char),j,fp); /* 将 ddd 中内容写入 fp */
if(j<KK) break; /* 如读出字节数不足 KK,文件已读完,退出 */
}
}
else fputc(0x1A,fp); /* 否则加文件结束标志 */
fclose(fp3); /* 关闭 fp3 */
fclose(fp); /* 关闭 fp */
free(ddd); /* 释放 ddd 占用的内存空间 */
}
if(a) bk(); /* 如 a 为真,退出运行 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -