/*文本编辑器editor源代码*/
#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);
}
/*删除掉第m行第n列的元素后,处理�
没有合适的资源?快使用搜索试试~ 我知道了~
EDITOR(CPP).rar_文本控制器
共3个文件
obj:1个
exe:1个
c:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 93 浏览量
2022-09-24
20:02:43
上传
评论
收藏 26KB RAR 举报
温馨提示
实现了一个企业内部的文本编辑器系统,能够实现文件的新建和保存,能够在编辑器内实现文字的复制粘贴功能。该系统由五个功能模块组成,分别是文件操作模块、文本编辑模块、剪切操作模块、菜单控制模块、和帮助及其他模块。
资源推荐
资源详情
资源评论
收起资源包目录
EDITOR(CPP).rar (3个子文件)
EDITOR(C++)
editor.c 38KB
EDITOR.OBJ 13KB
EDITOR.EXE 25KB
共 3 条
- 1
资源评论
林当时
- 粉丝: 113
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 纯 Java git 解决方案.zip
- (源码)基于Spring Boot和Vue的后台管理系统.zip
- 用于将 Power BI 嵌入到您的应用中的 JavaScript 库 查看文档网站和 Wiki 了解更多信息 .zip
- (源码)基于Arduino、Python和Web技术的太阳能监控数据管理系统.zip
- (源码)基于Arduino的CAN总线传感器与执行器通信系统.zip
- (源码)基于C++的智能电力系统通信协议实现.zip
- 用于 Java 的 JSON-RPC.zip
- 用 JavaScript 重新实现计算机科学.zip
- (源码)基于PythonOpenCVYOLOv5DeepSort的猕猴桃自动计数系统.zip
- 用 JavaScript 编写的贪吃蛇游戏 .zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功