⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 te.c

📁 用BC++3.1编的C语言文本编辑器
💻 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 + -