/*文本编辑器editor源代码*/
/* 【自学去】网站收集 http://www.zixue7.com */
#include <stdio.h>
#include <conio.h>
#include <bios.h>
#include <math.h>
#define LEFT 0x4b00 /*←:光标左移*/
#define RIGHT 0x4d00 /*→:光标右移*/
#define DOWN 0x5000 /*↓键:光标下移*/
#define UP 0x4800 /*↑键:光标上移*/
#define ESC 0x011b /*ESC键:取消菜单打开操作*/
#define ENTER 0x1c0d /*回车键:换行*/
#define DEL 21248 /*DEL键:删除当前字符*/
#define BACK 3592 /*BackSpace键:删除当前光标位置前一个字符*/
#define CL 29440 /*ctrl+←键:从右至左,选定文本*/
#define CR 29696 /*ctrl+→键:从左到右,选定文本*/
#define Cc 11779 /*ctrl+c键:将选定文本,复制一份到剪贴板中*/
#define Cv 12054 /*ctrl+v键:将剪贴板中的内容复制到当前位置*/
#define Cx 11544 /*ctrl+x键:对选定文本,执行剪切操作*/
#define F1 15104 /*F1键:打开文件菜单*/
#define F2 15360 /*F2键:打开编辑菜单*/
#define F3 15616 /*F3键:打开帮助菜单*/
#define F10 17408 /*F10键:进入文本快速预览模式*/
int value,backup,NUM;
/*value保存有值数组元素的最大下标值,backup保存value的副本,NUM保存当前行中的用户输入的字符个数*/
typedef struct record
{
char ch; /*保存一字符*/
int col, line; /*x轴和y轴坐标*/
}record;
record r[500]; /*定义一个有500个元素的结构体数组,保存选定的文本字符的属性*/
typedef struct node /*定义保存行中的单个字符的结构*/
{
char ch; /*数据域:保存一字符*/
struct node *next; /*指针域:指向下一个结点的指针*/
}node;/*由此类型节点构成的单链表,命名为:列单链表*/
typedef struct Hnode /*定义保存所有列单链表首节点的指针的结构*/
{
node *next; /*指向列单链表的首节点的地址*/
struct Hnode *nextl; /*指向下一个节点的指针*/
}Hnode;/*由此类型节点构成的单链表,命名为:行单链表*/
void drawmain() /*画主窗口函数*/
{
int i,j;
gotoxy(1,1); /*在文本窗口中设置光标至(1,1)处*/
textbackground(7); /*选择新的文本背景颜色,7为LIGHTGRAY淡灰色*/
textcolor(0); /*在文本模式中选择新的字符颜色0为BLACK黑*/
insline(); /*在文本窗口的(1,1)位置处中插入一个空行*/
for(i=1;i<=24;i++)
{
gotoxy(1,1+i); /*(x,y)中x不变,y++*/
cprintf("%c",196); /*在窗口左边输出-,即画出主窗口的左边界 */
gotoxy(80,1+i);
cprintf("%c",196); /*在窗口右边,输出-,即画出主窗口的右边界*/
}
for(i=1;i<=79;i++)
{
gotoxy(1+i,2); /*在第2行,第2列开始*/
cprintf("%c",196); /*在窗口顶端,输出-*/
gotoxy(1+i,25); /*在第25行,第2列开始*/
cprintf("%c",196); /*在窗口底端,输出-*/
}
gotoxy(1,1); cprintf("%c",196); /*在窗口左上角,输出-*/
gotoxy(1,24); cprintf("%c",196); /*在窗口左下角,输出-*/
gotoxy(80,1); cprintf("%c",196); /*在窗口右上角,输出-*/
gotoxy(80,24); cprintf("%c",196); /*在窗口右下角,输出-*/
gotoxy(7,1); cprintf("%c %c File %c %c",179,17,16,179); /* | < > |*/
gotoxy(27,1); cprintf("%c %c Edit %c %c",179,17,16,179); /* | < > |*/
gotoxy(47,1); cprintf("%c %c Help %c %c",179,17,16,179); /* | < > |*/
gotoxy(5,25); /*跳至窗口底端*/
textcolor(1);
cprintf(" Row:1 Col:1");
gotoxy(68,25);
cprintf("Version 2.0");
}
void qview(Hnode *q) /*快速预览文本:开头:#,回车:* */
{
void view(Hnode *q); /*view()函数声明*/
node *p;
int i;
window(1,1,80,25); /*定义文本窗口大小*/
clrscr(); /*清屏*/
/*循环读取两个单链表中的值:q是一个指向行单链表首节点的指针,
此单链表数据域的值为实际保存各行字符的列单链表p中的首节点地址*/
do{
p=q->next; /*p指向保存行数据的列单链表的首节点的地址*/
cprintf("#"); /*每行开头,打印此字符,不管前面是否有回车符*/
while(p!=NULL) /*循环读取单链表p中的值*/
{
if(p->ch==13) putch('*'); /*若为回车键,打印出*号*/
else
putch(p->ch); /*输出各行中的字符到预览窗口*/
p=p->next; /*指向下一个节点*/
}
q=q->nextl; /*指向下一个节点*/
printf("\n");/*输出一个回车*/
}while(q!=NULL);
getch();
clrscr();
drawmain();/*按任意键后,回到主窗口界面*/
window(2,2,79,23);
textbackground(9);
for(i=0;i<24;i++)
insline(); /*插入24个空行*/
window(3,3,78,23);
textcolor(10);
}
void view(Hnode *q) /*按行显示保存在单链表中的文本字符,q为指向行单链表中第一个节点的指针*/
{
node *p; /*p为保存列单链表节点元素地址的指针*/
clrscr(); /*清屏*/
/*双重循环,读取并显示保存在单链表中字符*/
do{
p=q->next;
while(p!=NULL&&p->ch>=32&&p->ch<127&&p->ch!=13&&p->ch!=-1) /*指针p不能为空,且数据域必须为常规字符*/
{
putch(p->ch);/*在文本窗口中输出该字符*/
p=p->next; /*指向下一个节点*/
}
q=q->nextl; /*指向下一个节点*/
if((p->ch==13||p->ch==-1)&&q!=NULL) gotoxy(1,wherey()+1); /*若ch为回车或EOF标记,光标跳至下行的开始处*/
}while(q!=NULL); /*逐行逐列显示文本字符*/
}
int check(Hnode *Hhead,int m,int n) /*check():在单链表中检查第m行第n列位置的字符,若为常规字符,则返回该字符*/
{
int i;
Hnode *q;
node *p;
q=Hhead;
for(i=1;i<m;i++) /*定位至行单链表中的第m个元素*/
q=q->nextl;
p=q->next;/*获取第m个节点的数据域*/
for(i=1;i<n;i++) /*定位至列单链表中的第n个元素*/
p=p->next;
if(p->ch==13) return -1; /*若第m行,第n列的字符为回车键,则返回-1*/
if(p->ch>=32&&p->ch<127) return p->ch; /*若第m行,第n列的字符为常规字符,则返回该字符*/
else return 0; /*若第m行,第n列的字符既非回车符又非常规字符,则返回0*/
}
int judge(Hnode *Hhead,int m) /*judge():返回第m行中的常规字符总的个数,不包括回车符*/
{
Hnode *q;
node *p;
int i,num=0;
q=Hhead;
for(i=1;i<m;i++) /*定位至行单链表中的第m个元素*/
q=q->nextl;
if(q==NULL) return -1; /*返回-1,表示第m行不存在*/
p=q->next;
while(p->next!=NULL)
{
p=p->next;
num++; /*统计第m行的字符个数*/
}
/*行尾字符还没有判断,接下来判断行尾字符*/
if(p->ch==13&&num==0) return 0; /*返回0,表示当前行只有一个回车字符*/
if(p->ch>=32&&p->ch<127) return num+1; /*返回num+1,表示当前行的最后一个字符为常规字符*/
if(p->ch==13&&num!=0) return num; /*返回num,表示当前行的最后一个字符为回车符,不计算在内*/
else return 1;/*返回num,表示当前行中只有一个字符,且没有回车符*/
}
int del(Hnode *Hhead,int m,int n) /*del():删除第m行,第n列位置的字符*/
{
Hnode *q,*q1;
node *p1,*p2,*tail;
int i,num=0,j,flag=0;
q=Hhead;
if(n==0&&m==1) return; /*第1行,第0列不存在*/
if(n==0&&m>1) /*若为第0列字符,但行必须大于1,执行向上行移处理*/
{
n=76;
m=m-1;
gotoxy(n,m);/*移至第m-1行,第76列*/
flag=1; /*移位的标志置1*/
}
for(i=1;i<m;i++) /*定位至行单链表中的第m个元素*/
q=q->nextl;
p1=q->next;
for(i=1;i<n-1;i++) /*定位至列单链表中的第n-1个元素*/
p1=p1->next;
p2=p1->next; /*p2指向列单链表中的第n个元素*/
if(n==1) /*若是删除第m行第1列的字符*/
{
q->next=p1->next;
free(p1);
}
else
{
p1->next=p2->next; /*在单链表中删除第m行第n列的元素*/
free(p2);
}
华画花
- 粉丝: 488
- 资源: 24
最新资源
- 奥迪A8 L2级别智能驾驶模型详解:直弯路控制、制动油门安全距离计算(Simulink与PreScan联合仿真应用),ACC自适应巡航控制模型 直 弯路控制 制动油门 安全距离计算(Simulink与
- 基于AD9361软件无线电平台的DPSK调制解调器:位同步、误码率测试与零中频架构Vivado工程演示,基于AD9361的DPSK调制解调器、位同步、误码率测试demo 零中频架构,适用于AD936
- "深入探讨:COMSOL计算光子晶体平带合并BIC的过程,复现二维与三维能带结构及品质因子,远场偏振计算的全面解析",comsol计算光子晶体平带合并BIC,复现包含二维能带,三维能带,品质因子和远场
- C#运动控制框架源码,基于凌华板卡与总线IO模块,附简洁说明文档,C#开发的运动控制框架源码,用的凌华板卡加总线IO模块,有简单说明文档 ,核心关键词:C#开发;运动控制框架源码;凌华板卡;总线I
- 三维电介质介电击穿模型与电树枝相场模拟:基于COMSOL探究电场、电势分布与纯聚合物电树枝生长过程,三维电介质介电击穿模型 comsol相场模拟电树枝 采用三维模型模拟电介质在电场作用下介电击穿电树枝
- Simpack轨道车辆动力学建模与磨耗计算:联合仿真、变参分析与远程指导,simpack轨道车辆建模 动力学模型 直线和曲线的动力学评价 simpack批处理变参分析,全自动preload,后台计算
- "晶体塑性有限元后处理技术:相关脚本文件的全面解析与应用",晶体塑性有限元后处理相关脚本文件 ,核心关键词:晶体塑性;有限元;后处理;相关脚本文件;分号分隔 ,晶体塑性有限元后处理脚本文件:关键应用与
- FRFT,DFRFT,FRFT-SVD 代码
- 适合delphi 使用的三方插件MyDAC-10.0.1-Pro,包含从D7到D10.3版本
- "Matlab三维多晶模型构建及黄永刚晶体塑性模型理论研究与实施",1.采用matlab代码构建三维多晶模型 2.赋予模型中不同晶粒相应的取向 3.批量化输入材料参数 4.生成对应inp文件 另外,还
- 武林绝学.docx,计算及网路,好好学习天天向上
- 周期性金属阵列在基板上的手性散射与光谱多极分解探究,Comsol散射体手性 基板上的周期性金属阵列 散射光谱多极分解 ,核心关键词:Comsol散射体; 手性; 基板; 周期性金属阵列; 散射光谱;
- 毕业设计,微信小程序+Django+Vue+MySql开发的医院挂号系统小程序,内含完整源代码,数据库脚本,毕业论文,视频教程
- 多领导者平均一致包容分布式优化:使用cvx工具包实现策略,具有多个领导者的平均一致包容分布式优化(需要安装cvx工具包) ,核心关键词:多个领导者; 平均一致; 包容性; 分布式优化; cvx工具包
- 个用Python代码打印出一条蛇的示例,你可以根据自己的需求进行修改和优化:
- 医院挂号小程序-毕业设计,基于微信小程序+Python+Django+Vue+MySql开发,源码+数据库+毕业论文+视频演示
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈