📄 dos下的屏幕编辑器.txt
字号:
}
DisplayChar(' ');
SetCursorXY(MaxSize-1,y-1);
DisplayChar(rowp->String[MaxSize]);
SetCursorXY(MaxSize-1,y-1);
rowp->next->String[0]--;
return 1;
}
}//else
}//else if
else if(y==1)
{
ScrollScreen(DIR_DOWN,1,0,1,MaxSize-1,MaxLine-2);
SetCursorXY(0,1);
for(i=0;i<rowp->prior->String[0];i++)
DisplayChar(rowp->prior->String[i+1]);
SetCursorXY(0,2);
backspace();
}//else if
}//else
return 1;
}//backspace
int downrow(void)
{
int x=0,y=0;
int i;
GetCursorXY(&x,&y);
if(!rowp->next)
return -1;
rowp=rowp->next;
if(y!=MaxLine-1&&x>rowp->String[0])
SetCursorXY(rowp->String[0],y+1);
else if(y!=MaxLine-1)
SetCursorXY(x,y+1);
else
{
ScrollScreen(DIR_UP,1,0,2,MaxSize-1,MaxLine-1);
SetCursorXY(0,MaxLine-1);
for(i=1;i<=rowp->String[0];i++)
DisplayChar(rowp->String[i]);
if(x>rowp->String[0])
SetCursorXY(rowp->String[0],MaxLine-1);
else
SetCursorXY(x,MaxLine-1);
return 0;
}
return 1;
}//downrow
int uprow(void)
{
int x=0,y=0;
int i;
GetCursorXY(&x,&y);
if(!rowp)
{
i=0;
if(!(TailNode->next=rowp=(SNode *)malloc(sizeof(SNode))))
exit(0);
TailNode->next->prior=TailNode;
TailNode->next->next=NULL;
TailNode->next->String[0]=0;
TailNode=TailNode->next;
}
if(!rowp->prior)
return -1;
rowp=rowp->prior;
if(y!=1&&x>rowp->String[0])
SetCursorXY(rowp->String[0],y-1);
else if(y!=1)
SetCursorXY(x,y-1);
else
{
ScrollScreen(DIR_DOWN,1,0,1,MaxSize-1,MaxLine-2);
SetCursorXY(0,1);
for(i=0;i<rowp->String[0];i++)
DisplayChar(rowp->String[i+1]);
if(x>rowp->String[0])
SetCursorXY(rowp->String[0],1);
else
SetCursorXY(x,1);
return 0;
}
return 1;
}//uprow
int downpage(void)
{
int x=0,y=0,i,j,k;
SNode *pp=rowp;
GetCursorXY(&x,&y);
for(i=y;i<=MaxLine-1;i++,rowp=rowp->next)
if(!rowp->next)
{
rowp=pp;
return 0;
}
pp=0;
SetCursorXY(0,1);
for(i=1;i<MaxLine&&rowp;rowp=rowp->next,i++)
{
for(j=0;j<rowp->String[0];j++)
DisplayChar(rowp->String[j+1]);
for(;j<MaxSize;j++)
DisplayChar(' ');
SetCursorXY(0,i+1);
if(i==y)
pp=rowp;
}
if(pp)
rowp=pp;
else
rowp=TailNode;
for(j=i;j<MaxLine;j++)
{
for(k=0;k<MaxSize;k++)
DisplayChar(' ');
SetCursorXY(0,j+1);
}
if(y<i)
if(rowp->String[0]>x)
SetCursorXY(x,y);
else
SetCursorXY(rowp->String[0],y);
else
SetCursorXY(rowp->String[0],i-1);
return 1;
}//downpage
int uppage()
{
int x=0,y=0,i;
SNode *pp=rowp;
GetCursorXY(&x,&y);
for(i=1;i<=y;i++)
{
if(!rowp->prior)
{
rowp=pp;
return 1;
}
rowp=rowp->prior;
}
for(i=1;i<MaxLine-1&&rowp->prior;i++)
rowp=rowp->prior;
pp=rowp;
SetCursorXY(0,1);
for(i=1;i<MaxLine;i++)
{ int j;
for(j=1;j<=rowp->String[0];j++)
DisplayChar(rowp->String[j]);
while(j++<=MaxSize)
DisplayChar(' ');
rowp=rowp->next;
SetCursorXY(0,i+1);
if(i==y-1)
pp=rowp;
}
rowp=pp;
if(x<rowp->String[0])
SetCursorXY(x,y);
else
SetCursorXY(rowp->String[0],y);
return 1;
}
int deletechar()
{
int x=0,y=0,i;
GetCursorXY(&x,&y);
if(!rowp)
return 1;
if(x==0&&rowp->String[0]==0&&rowp->next&&y<MaxLine-1)
{
SetCursorXY(0,y+1);
rowp=rowp->next;
backspace();
}
else if(x==rowp->String[0]&&!rowp->next)
return 1;
else if(x==rowp->String[0]&&y<MaxLine-1)
{
rowp=rowp->next;
SetCursorXY(0,y+1);
backspace();
}
else if(x==0&&rowp->String[0]==0&&!rowp->next)
return 1;
else if(x==0&&rowp->String[0]==0&&rowp->next&&y==MaxLine-1)
{
rowp=rowp->next;
for(i=1;i<=rowp->String[0];i++)
DisplayChar(rowp->String[i]);
SetCursorXY(0,MaxLine-1);
}
else if(x<MaxSize)
{
SetCursorXY(x+1,y);
backspace();
return 1;
}
else if(y<MaxLine-1)
{
SetCursorXY(0,y+1);
rowp=rowp->next;
backspace();
return 1;
}
else
{
ScrollScreen(DIR_UP,1,0,2,MaxSize-1,MaxLine-1);
SetCursorXY(0,MaxLine-1);
rowp=rowp->next;
backspace();
return 1;
}
return 1;
}
int nextrow()
{
int x=0,y=0,i;
SNode *pp;
GetCursorXY(&x,&y);
if(!rowp)
{
if(!(pp=(SNode *)malloc(sizeof(SNode))))
exit(0);
pp->String[0]=0;
pp->prior=TailNode;
pp->next=0;
TailNode->next=pp;
rowp=pp;
}
if(x==rowp->String[0])
{
if(rowp->next)
{
if(!(pp=(SNode *)malloc(sizeof(SNode))))
exit(0);
pp->String[0]=0;
pp->prior=rowp;
pp->next=rowp->next;
rowp->next->prior=pp;
rowp->next=pp;
if(y==MaxLine-2)
{
SetCursorXY(0,MaxLine-1);
for(i=1;i<=MaxSize;i++)
DisplayChar(' ');
SetCursorXY(0,MaxLine-1);
rowp=rowp->next;
return 1;
}
else if(y<MaxLine-2)
ScrollScreen(DIR_DOWN,1,0,y+1,MaxSize-1,MaxLine-2);
else if(y=MaxLine-1)
ScrollScreen(DIR_UP,1,0,2,MaxSize-1,y-1);
if(y<MaxLine-2)
{
SetCursorXY(0,y+1);
rowp=rowp->next;
return 1;
}
else
{
SetCursorXY(0,MaxLine-1);
rowp=rowp->next;
return 1;
}
}//if
else if(!rowp->next)
{
if(!(pp=TailNode=(SNode *)malloc(sizeof(SNode))))
exit(0);
pp->String[0]=0;
pp->prior=rowp;
pp->next=rowp->next;
rowp->next=pp;
if(y<MaxLine-1)
{
SetCursorXY(0,y+1);
rowp=pp;
return 1;
}
else
{
ScrollScreen(DIR_UP,1,0,2,MaxSize-1,y);
SetCursorXY(0,y);
rowp=pp;
return 1;
}
}//else if
}//if
else
{
for(i=x;i<rowp->String[0];i++)
DisplayChar(' ');
if(rowp->next)
{
if(!(pp=(SNode *)malloc(sizeof(SNode))))
exit(0);
pp->String[0]=rowp->String[0]-x;
rowp->String[0]=(int)(x);
for(i=1;i<=pp->String[0];i++)
pp->String[i]=rowp->String[i+x];
pp->prior=rowp;
pp->next=rowp->next;
rowp->next->prior=pp;
rowp->next=pp;
rowp=pp;
if(y==MaxLine-2)
{
SetCursorXY(0,MaxLine-1);
for(i=1;i<=pp->String[0];i++)
DisplayChar(pp->String[i]);
while(i++<MaxSize-1)
DisplayChar(' ');
SetCursorXY(0,MaxLine-1);
}
else if(y<MaxLine-1)
{
ScrollScreen(DIR_DOWN,1,0,y+1,MaxSize-1,MaxLine-2);
SetCursorXY(0,y+1);
for(i=1;i<=pp->String[0];i++)
DisplayChar(pp->String[i]);
while(i++<MaxSize-1)
DisplayChar(' ');
SetCursorXY(0,y+1);
}
else if(y=MaxLine-1)
{
ScrollScreen(DIR_UP,1,0,2,MaxSize-1,y-1);
SetCursorXY(0,MaxLine-1);
for(i=1;i<=pp->String[0];i++)
DisplayChar(pp->String[i]);
while(i++<MaxSize-1)
DisplayChar(' ');
SetCursorXY(0,MaxLine-1);
}
}//if
else if(!rowp->next)
{
if(!(pp=TailNode=(SNode *)malloc(sizeof(SNode))))
exit(0);
pp->String[0]=rowp->String[0]-x;
rowp->String[0]=(int)(x);
for(i=1;i<=pp->String[0];i++)
pp->String[i]=rowp->String[i+x];
pp->prior=rowp;
pp->next=rowp->next;
rowp->next=pp;
if(y<MaxLine-1)
{
SetCursorXY(0,y+1);
rowp=pp;
for(i=1;i<=pp->String[0];i++)
DisplayChar(pp->String[i]);
while(i++<MaxSize-1)
DisplayChar(' ');
SetCursorXY(0,y+1);
return 1;
}
else
{
ScrollScreen(DIR_UP,1,0,2,MaxSize-1,y);
SetCursorXY(0,y);
for(i=1;i<=pp->String[0];i++)
DisplayChar(pp->String[i]);
while(i++<MaxSize-1)
DisplayChar(' ');
SetCursorXY(0,y);
rowp=pp;
return 1;
}
}//else if
}//else
return 1;
}
void openfile(void)
{
int i=1,x=0,y=0,count=0,j,t;
char ch,c;
strcpy(filename1,filename);
GetCursorXY(&x,&y);
SetCursorXY(0,0);
SetTextBackColor(BACK_BLUE);
printf("Save this file?Y for yes,N for no.C for cancel. ");
scanf("%c",&c);
getchar();
SetTextBackColor(BACK_BLACK);
if(c=='C'||c=='c')
{
SetTextBackColor(BACK_BLUE);
SetCursorXY(0,0);
for(i=0;i<MaxSize;i++)
printf(" ");
SetCursorXY(0,0);
printf("%s",filename);
SetTextBackColor(BACK_BLACK);
SetCursorXY(x,y);
return;
}
if(c=='Y'||c=='y')
savefile();
SetCursorXY(0,0);
SetTextBackColor(BACK_BLUE);
for(i=0;i<MaxSize;i++)
printf(" ");
SetCursorXY(0,0);
SetTextBackColor(BACK_BLUE);
printf("Open what? ");
scanf("%s",filename);
getchar();
if((fp=fopen(filename,"r"))==0)
{
SetCursorXY(MaxSize-50,0);
printf("No such file.Press enter to go on.");
getchar();
SetCursorXY(0,0);
for(i=0;i<MaxSize;i++)
printf(" ");
SetCursorXY(0,0);
printf("%s",filename1);
SetCursorXY(x,y);
SetTextBackColor(BACK_BLACK);
return;
}
SetTextBackColor(BACK_BLACK);
if(!(HeadNode=rowp=(SNode*)malloc(sizeof(SNode))))
exit(0);
HeadNode->String[0]=0;
HeadNode->next=HeadNode->prior=NULL;
SetCursorXY(0,1);
for(i=1;i<MaxLine;i++)
{
for(j=1;j<=MaxSize;j++)
DisplayChar(' ');
SetCursorXY(0,i+1);
}
SetCursorXY(0,1);
i=1;
while(!feof(fp))
{
fscanf(fp,"%c",&ch);
if(ch=='\n')
{
rowp->String[0]=i-1;
i=1;
rowp->next=(SNode*)malloc(sizeof(SNode));
rowp->next->prior=rowp;
rowp->next->next=NULL;
rowp=rowp->next;
count++;
}
else
{
rowp->String[i]=ch;
i++;
}
}
rowp=rowp->prior->prior;
TailNode=rowp;
rowp->next=NULL;
SetCursorXY(0,1);
t=count;
if(count<=MaxLine-1)
{
for(rowp=HeadNode,count=1;rowp;rowp=rowp->next,count++)
{
for(i=1;i<=rowp->String[0];i++)
DisplayChar(rowp->String[i]);
SetCursorXY(0,count+1);
}
}
else
{
for(rowp=TailNode,count=1;count<MaxLine-1;rowp=rowp->prior,count++);
for(count=1;count<MaxLine;rowp=rowp->next,count++)
{
for(i=1;i<=rowp->String[0];i++)
DisplayChar(rowp->String[i]);
SetCursorXY(0,count+1);
}
t=MaxLine;
}
SetCursorXY(0,0);
SetTextBackColor(BACK_BLUE);
for(i=0;i<MaxSize;i++)
printf(" ");
SetCursorXY(0,0);
printf("%s",filename);
if(TailNode->String[0]<=MaxSize)
SetCursorXY(TailNode->String[0],t-1);
else
SetCursorXY(MaxSize,t-1);
rowp=TailNode;
SetTextBackColor(BACK_BLACK);
fclose(fp);
}
void savefile(void)
{
int i,x,y;
char ch;
SNode *pp;
GetCursorXY(&x,&y);
SetTextBackColor(BACK_BLUE);
pp:;
SetCursorXY(0,0);
for(i=0;i<MaxSize;i++)
printf(" ");
SetCursorXY(0,0);
printf("Save as :");
scanf("%s",filename);
getchar();
strcpy(filename1,filename);
while((fp=fopen(filename,"r"))!=0)
{
SetCursorXY(17+strlen(filename),0);
printf("Overwrite?Y for yes,N for no.");
scanf("%c",&ch);
getchar();
fclose(fp);
if(ch=='Y'||ch=='y')
break;
goto pp;
}
if((fp=fopen(filename,"w"))==0)
return;
for(pp=HeadNode;pp;pp=pp->next)
{
for(i=1;i<=pp->String[0];i++)
fprintf(fp,"%c",pp->String[i]);
fprintf(fp,"\n");
}
fclose(fp);
SetCursorXY(0,0);
SetTextBackColor(BACK_BLUE);
for(i=0;i<MaxSize;i++)
printf(" ");
SetCursorXY(0,0);
printf("%s",filename);
SetTextBackColor(BACK_BLACK);
SetCursorXY(x,y);
}
void newfile(void)
{
int x=0,y=0,i,j;
char c;
SNode *pp;
GetCursorXY(&x,&y);
SetCursorXY(0,0);
SetTextBackColor(BACK_BLUE);
printf("Save this file?Y for yes,N for no.C for cancel. ");
scanf("%c",&c);
getchar();
SetTextBackColor(BACK_BLACK);
if(c=='C'||c=='c')
{
SetTextBackColor(BACK_BLUE);
SetCursorXY(0,0);
for(i=0;i<MaxSize;i++)
printf(" ");
SetCursorXY(0,0);
printf("%s",filename);
SetTextBackColor(BACK_BLACK);
SetCursorXY(x,y);
return;
}
if(c=='Y'||c=='y')
savefile();
SetCursorXY(0,1);
for(i=1;i<MaxLine;i++)
{
for(j=1;j<=MaxSize;j++)
printf(" ");
SetCursorXY(0,i+1);
}
SetCursorXY(0,1);
for(rowp=TailNode;rowp;free(pp))
{
pp=rowp;
rowp=rowp->prior;
}
if(!(HeadNode=rowp=(SNode*)malloc(sizeof(SNode))))
exit(0);
HeadNode->String[0]=0;
HeadNode->next=HeadNode->prior=NULL;
SetCursorXY(0,0);
SetTextBackColor(BACK_BLUE);
for(j=1;j<=MaxSize;j++)
DisplayChar(' ');
SetCursorXY(0,0);
printf("newfile");
SetCursorXY(0,1);
SetTextBackColor(BACK_BLACK);
}
void quit()
{
char ch;
int x,y,i;
SetTextBackColor(BACK_BLUE);
GetCursorXY(&x,&y);
SetCursorXY(0,0);
printf("Do you want to save it?'Y' for yes ,'N' for no,'C' for cancel. ");
scanf("%c",&ch);
getchar();
if(ch=='C'||ch=='c')
{
SetCursorXY(0,0);
for(i=0;i<MaxSize;i++)
printf(" ");
SetCursorXY(0,0);
printf("%s",filename);
SetCursorXY(x,y);
SetTextBackColor(BACK_BLACK);
return;
}
SetTextBackColor(BACK_BLACK);
if(ch=='Y'||ch=='y')
savefile();
flag1=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -