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

📄 dos下的屏幕编辑器.txt

📁 这里是C语言与数据结构的课程设计与实验的程序,以及一些程序的原代码.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
    
   }
   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 + -