📄 te.c
字号:
#include "te.h"
/***********************************************
The program Compiled by Turbo C 2.0
Large Mode
程序必须在 Large模式下编译
*************************************************/
/* define each text line attribute */
/* 编辑工作窗口的大小 */
int screen_max_x=78;
int screen_max_y=22;
char isInsert=1,cur_type,isReadOnly=0;
char isModify=0;
char szFilePath[MAXPATH];
/* 每一行的数据,TEXTLINE的定义在 te.h中*/
TEXTLINE *ptext,*pcurtx,*pindex,*pseltx;
/*当前光标的位置*/
int cur_x=0,cur_y=0;
unsigned long offset_x=0,offset_y=0;
void quit( int mode) /*程序出口 mode是退出时的提示信息*/
{
int i;
window(1,1,80,25);
textattr(0x07);
clr();
gotoxy(1,24);
cur(1);
switch(mode)
{
case 1:
printf("\r\nNot enough memory! Program Terminate!\r\n");
break;
case 2:
printf("\r\nToo mamy parameters!\r\n");
case 3:
printf("\r\nText Editor usage: te [filename]\r\n");
break;
case 4:
printf("\r\nCannot open File: %s",szFilePath);
break;
}
SetInt(0); /*恢复DOS错误中断入口 */
exit(0);
}
void NeedMem(int is_quit) /*处理DOS内存不够的情况*/
{
char szTemp[100],szFileName[15];
SetFileName(szFileName);
sprintf(szTemp,"\t\x2 Not enough memory to edit file:\r\t\xa \v%s\v\r\t\x2 Any key to continue...",szFileName);
MsgBox(szTemp," \xfe Error",2,40,0x3e34,0,NULL);
scpy(szFileName,"NONAME");
scpy(szFilePath,".\\NONAME");
if(is_quit)quit(0);
}
int init(int argc,char *argv[]) /*初始化数据函数*/
{
int i;
SetInt(1);
if(argc>2)
quit(2);
NewFile();
mainmenu(2);
if(argc==2) /*处理命令行的参数*/
{scpy(szFilePath,argv[1]);
LoadFile();
}
else
NewFile(); /*新建一个文件*/
mainmenu(0); /*画主窗口*/
return 0;
}
void main(int argc,char *argv[])
{
int is_show=1,i;
char szTemp[100];
TEXTLINE *ptx;
KEYCODE kc;
if(init(argc,argv))return; /*若初始化数据失败就退出*/
do
{
gotoxy(cur_x+1,cur_y+1); /*设置当前光标位置*/
sprintf(szTemp,"\xb3 ASCII:\v%02X\v \xb3 Col:\v%-4ld\vLine:\v%-4ld\v",
slen(pcurtx->str)<offset_x+cur_x?0:(unsigned char)(pcurtx->str[offset_x+cur_x]),cur_x+1+offset_x,offset_y+cur_y+1);
outs(50,25,0x70,0x7e,szTemp);
if(is_show) /* is_show=1 时在窗口上显示文件数据*/
{ptx=pindex;
textattr(wincolor);
clr();
for(i=0;i<screen_max_y;i++)
{
if(ptx==NULL)break;
if(ptx->str&&offset_x<slen(ptx->str))
outsn(2,i+3,wincolor,ptx->str+offset_x,screen_max_x);
ptx=ptx->pnext;
}
is_show=0;
}
getkey(&kc); /*读按键函数 在te_fun.c中申明*/
if(!DealAltKey(&kc,&is_show))continue; /*处理快捷键,在 te_key.c中申明*/
if(!DealCtrlKey(&kc,&is_show))continue;
if(!DealOtherKey(&kc,&is_show))continue;
switch(kc.code)
{
/************************************
下列的 0x100+'X' 是选择中菜单选项的返回值,
0x100是下拉菜单编号,0x100为第一个,0x200为第二个...
'X'是菜单中选项的热键
*************************************/
case 0x100+'X':
if(isModify)
{
i=SaveFile(1);
if(i==KEY_C||i==ESC)break;
}
quit(0);
break;
case 0x100+'D':
DosShell(); /*暂回DOS,打Exit返回编辑器,在 te_fun.c 中申明*/
is_show=1;
break;
case HOME:
is_show=GoHome(); /*在 Go开头的函数是光标控制函数 在te_key.c 中申明*/
break;
case END:
is_show=GoEnd();
break;
case INSERT:
isInsert=!isInsert;
cur_type=isInsert?1:2;
cur(cur_type);
break;
case PAGEUP:
is_show=GoPageUp();
break;
case PAGEDOWN:
is_show=GoPageDown();
break;
case DOWN:
is_show=GoDown();
break;
case UP:
is_show=GoUp();
break;
case RIGHT:
is_show=GoRight();
break;
case LEFT:
is_show=GoLeft();
break;
case ESC:
break;
default:
if(kc.code>0xff)break; /*大于0xff的是菜单选项 */
is_show=DealInput(&kc); /*处理键盘输入*/
break;
}
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -