📄 te_file.c
字号:
#include "te.h"
int NewFile(void) /*重新编辑*/
{
TEXTLINE *ptx,*ptx1;
if(ptext)ptx=ptext->pnext;
else ptx=NULL;
while(ptx)
{
ptx1=ptx->pnext;
if(ptx->str)farfree(ptx->str);
farfree(ptx);
ptx=ptx1;
}
if(ptext)
{
if(ptext->str)
farfree(ptext->str);
}
else
ptext=(TEXTLINE *)farmalloc(sizeof(TEXTLINE));
if(ptext==NULL)
NeedMem(1);
memset(ptext,0,sizeof(TEXTLINE));
pcurtx=ptext;
pindex=ptext;
cur_x=0;
cur_y=0;
offset_x=0;
offset_y=0;
isModify=0;
scpy(szFilePath,"NONAME");
return 0;
}
int LoadFile(void) /*载入文件*/
{char szTemp[1024],*pTemp,c,is_save,szFileName[15];
int len,i,j;
unsigned long l;
FILE *pfile;
pcurtx=ptext;
SetFileName(szFileName);
pfile=(FILE *)fopen(szFilePath,"rb+");
if(pfile==NULL)
{
isReadOnly=0;
pfile=(FILE *)fopen(szFilePath,"r");
if(pfile==NULL)
{
sprintf(szTemp,"\t\x2 Not exist File:\r\t\x8%s\r\t\x2 Create it? ~Y=Yes ~N=No",szFileName);
i=MsgBox(szTemp," \xfe Error",2,35,0x3e34,1,"\x1\x15\x31\0");
if(i==KEY_Y)
{
pfile=(FILE *)fopen(szFilePath,"w");
if(pfile==NULL)
{
sprintf(szTemp,"\t\x2 Create file %s error\r\r\t\x5 \vAny key to continue...",szFileName);
MsgBox(szTemp," \xfe Error",2,40,0x3F34,0,NULL);
scpy(szFileName,"NONAME");
scpy(szFilePath,"NONAME");
return 1;
}
}
else
{
scpy(szFileName,"NONAME");
scpy(szFilePath,"NONAME");
return 1;
}
}
else
{
sprintf(szTemp,"\r\t\x5 file %s is ReadOnly \r\t\x5 \vPress any key continue...",szFileName);
isReadOnly=1;
MsgBox(szTemp," \xfe WARNNING",2,40,0x3F34,0,NULL);
}
}
is_save=0;
len=0;
fseek(pfile,0,SEEK_END);
l=ftell(pfile);
if(l==0)return 0;
if(l>500000l)
{
NeedMem(0);
return 0;
}
fseek(pfile,0,SEEK_SET);
while(!feof(pfile))
{
szTemp[len]=fgetc(pfile);
if(szTemp[len]=='\t')
{j=8-len%8;
for(i=0;i<j;i++)
{
if(len==1000)break;
szTemp[len]=' ';
len++;
}
len--;
}
if(szTemp[len]=='\xa')
{
if(szTemp[len-1]=='\xd')len--;
is_save=1;
}
else len++;
if(len>=1000)is_save=1;
if(is_save)
{
if(len)
{
pcurtx->str=(char *)farmalloc(len+1);
if(pcurtx->str==NULL)
NeedMem(1);
sncpy(pcurtx->str,szTemp,len);
}
else pcurtx->str=NULL;
pcurtx->pnext=(TEXTLINE *)farmalloc(sizeof(TEXTLINE));
if(pcurtx->pnext==NULL)
NeedMem(1);
memset(pcurtx->pnext,0,sizeof(TEXTLINE));
pcurtx->pnext->plast=pcurtx;
pcurtx=pcurtx->pnext;
len=0;
is_save=0;
memset(szTemp,0,1024);
}
}
fclose(pfile);
ptext->plast=NULL;
pcurtx=ptext;
pindex=ptext;
offset_x=0;
offset_x=0;
return 0;
}
int SetFileName(char *filename)
{
char szTemp[MAXPATH],szTemp1[10];
if(filename==NULL)return 1;
fnsplit(szFilePath,NULL,NULL,szTemp,szTemp1);
if(szTemp1[0])
{
scat(szTemp,szTemp1);
}
scpy(filename,szTemp);
return 0;
}
int SaveFile(int is_ask) /*存文件*/
{
FILE *pfile;
TEXTLINE *ptx;
char szTemp[100],filename[20];
int len,i;
if(is_ask)
{
i=MsgBox("\t\x2 File has not been saved? Save it?\r\r\t\x8 ~Y=Yes ~N=No ~C=Cancel\0",
" \xfe WARNNIG! ",2,40,0x3F34,1,"\x1\x15\x31\x2e\x0");
switch(i)
{
case ESC:
case KEY_C:
case KEY_N:
return i;
}
}
pfile=fopen(szFilePath,"wb+");
if(pfile==NULL)
{
SetFileName(filename);
sprintf(szTemp,"\t\x2 Cannot create file:\r\t\x5 \v%s\v\r\t\x2 Any key to return...",filename);
MsgBox(szTemp," \xfe Error",2,30,0x5F5e,0,NULL);
return 1;
}
ptx=ptext;
while(ptx)
{len=slen(ptx->str);
if(len)
{
i=fwrite(ptx->str,1,len,pfile);
while(i!=len)
{
i=MsgBox("\t\x2 Write file error\t\x5 ~R=Retry ~C=Cancel"," \xfe Error",
2,30,0x5F5e,1,"\x1\x13\x2e\0");
if(i!=KEY_R)
{i=0;break;}
i=fwrite(ptx->str,1,len,pfile);
}
if(i!=len)
{fclose(pfile);
return 1;
}
}
if(ptx->str)
fwrite("\xd\xa",1,2,pfile);
else if(ptx->pnext)
fwrite("\xd\xa",1,2,pfile);
ptx=ptx->pnext;
}
fclose(pfile);
isModify=0;
return 0;
}
int AskFileName(char *pFileName,char *szTitle,int mode) /*得到文件名*/
{
char *buff,szTemp[MAXPATH];
int x0=10,y0=8,x1=70,y1=12,i,cur_x=0,len=0,offset=0,ret=1;
struct text_info tf;
KEYCODE kc;
buff=(char *)farmalloc((x1-x0+2)*(y1-y0+2)*2);
if(buff==NULL)
{NeedMem(0);
return 0;
}
gettextinfo(&tf);
gettext(x0,y0,x1+1,y1+1,buff);
box(x0,y0,x1,y1,3,0x5e,1);
outs(x0+2,y0+1,0x5F,0,szTitle);
outs(x0+2,y0+3,0x5F,0x5b,"\vEnter\v=OK \vESC\v=Cancel");
window(x0+2,y0+2,x1-2,y0+2);
textattr(0x0f);
clr();
for(i=0;i<MAXPATH;i++)szTemp[i]=0;
if(mode)
{
strcpy(szTemp,pFileName);
len=slen(szTemp);
}
do
{
gotoxy(cur_x+1,1);
for(i=0;i<x1-x0-4;i++)
{
if(i<len)
outxy(i+x0+2,y0+2,0x0F,szTemp[offset+i]);
else outxy(i+x0+2,y0+2,0x0F,' ');
}
getkey(&kc);
switch(kc.code)
{
case ESC:
ret=1;
break;
case RIGHT:
if(offset+cur_x>=len)break;
if(cur_x==x1-x0-4)
offset++;
else cur_x++;
break;
case LEFT:
if(cur_x==0&&offset==0)break;
if(cur_x)cur_x--;
else offset--;
break;
case HOME:
cur_x=0;
offset=0;
break;
case END:
if(len>x1-x0-4)cur_x=x1-x0-4;
else cur_x=len;
offset=len-cur_x;
offset=len-cur_x;
break;
case DEL:
if(cur_x+offset==len)break;
cur_x++;
case BACKSPACE:
if(cur_x==0&&offset==0)break;
scpy(szTemp+offset+cur_x-1,szTemp+offset+cur_x);
if(cur_x)cur_x--;
else offset--;
len--;
break;
case ENTER:
scpy(pFileName,szTemp);
ret=0;
kc.code=ESC;
break;
case UP:
case DOWN:
case PAGEUP:
case INSERT:
case PAGEDOWN:
break;
default:
if(kc.c==NULL||len==MAXPATH)break;
szTemp[offset+cur_x]=kc.c;
if(cur_x+offset==len)
len++;
if(cur_x<x1-x0-4)cur_x++;
else offset++;
break;
}
}
while(kc.code!=ESC);
puttext(x0,y0,x1+1,y1+1,buff);
farfree(buff);
window(tf.winleft,tf.wintop,tf.winright,tf.winbottom);
textattr(tf.attribute);
clrkey();
gotoxy(tf.curx,tf.cury);
cur(cur_type);
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -