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

📄 全屏幕编辑软件的编写(c语言)04.txt

📁 全屏幕编辑软件
💻 TXT
📖 第 1 页 / 共 2 页
字号:
        yy=string_lingth();        /* 至行末 */
        if(x>0)  {                 /* 如不在本屏首行 */
          x--;                     /* 到屏幕上一行 */
          comput();                /* 计算参数 */
          if(m) disp_t();          /* 如不为 0 屏,重显一屏 */
        }
        else  {                    /* 如在本屏首行 */
          if(ss_x==0)  st();       /* 如已到数组首行,从fp1补充Q3行至数组上部 */
          comput();                /* 计算参数 */
          if(!m) roll_scr_down(0,H3);   /* 如上移行尾在 0 屏,下滚一屏 */
          else   disp_t();         /* 否则重显所在屏  */
        }
      }
    }
    if(vs(yy-1)==0)   break;       /* 如不在全角前半字,退出循环 */
  }
}
Up()                               /* 上移一行 */
{
  int k;
  if(xx) {                         /* 如不在文首行 */
    if(!ss_x) st();                /* 如到编辑数组第一行,从 fp1 读入 Q3 行 */
    xx--;                          /* 上移一行 */
    ss_x--;                        /* 编辑数组行号减 1 */
    ser-=yy+2;                     /* 计算上行末字序数 */
    k=m;                           /* 保存原屏号 */
    if(x>0)  {                     /* 如不在本屏起始行 */
      x--;                         /* 屏幕光标上移一行 */
      orien();        /* 判断上移后光标是否在串尾后,如在串尾后,光标定于串尾 */
      if(m!=k)  disp_t();          /* 如不在原屏,重显一屏 */
    }
    else  {                        /* 如在本屏起始行 */
      orien();        /* 判断光标是否在串尾后,如在串尾后,定光标于串尾 */
      if(m==k) roll_scr_down(0,H3);/* 如仍在原屏,向下滚屏 */
      else  disp_t();              /* 否则显示串尾所在屏 */
    }
    ser-=string_lingth()-yy;       /* 计算字序数 */
  }
}

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页  

Down()                             /* 下移一行 */
{
  int k,l;
  l=string_lingth();               /* 计算行长(不包括回车换行符) */
  if(xx<ttl_x)  {                  /* 如不在文末行 */
    ss_x++;   xx++;                /* 下移一行 */
    ser+=l-yy+2;                   /* 计算下行首字序数 */
    if(ss_x>=ss_max) tj();         /* 如超出编辑数组,从 fp2 或 fp 补充 */
    k=m;                           /* 保存原屏号 */
    if(x<H3)  {                    /* 如不在屏幕文本区最下一行 */
      x++;                         /* 屏幕光标下移一行 */
      orien();           /* 判断光标是否在串尾后,如在串尾后,定光标于串尾 */
      if(m!=k) disp_t();           /* 如不在原屏,重显一屏 */
    }
    else  {                        /* 如光标在屏幕文本区最后一行 */
      orien();                     /* 重定列号 */
      if(m==k) {                   /* 如在原屏 */
        roll_scr_up(0,H3);         /* 向上滚屏 */
        disp(ss_x,x);              /* 屏幕最下行补显一行 */
      }
      else  disp_t();              /* 如不在原屏,重显一屏 */
    }
    ser+=yy;                       /* 计算字序数 */
  }
}
Ins()                                  /* 插入/非插入状态切换 */
{
  if(!ins)  {                          /* 如 ins 为假 */
    ins=1;                             /* 转置 ins 为 1 */
    write_string(H1,0,"插入",0x4E);    /* 在信息行显示“插入”二字 */
  }
  else  {                              /* 如 ins 为真 */
    ins=0;                             /* 转置 ins 为 0 */
    write_space(H1,0,4,0x0E);          /* 用空格盖掉“插入”二字 */
  }
}

Home()                             /* 移至行首 */
{
  ser-=yy;                         /* 计算字序数 */
  yy=0;                            /* 到行首列 */
  if(m)  {                         /* 如不是 0 屏 */
    m=0;
    disp_t();                      /* 显示 0 屏各行 */
  }
}

End()                              /* 到行末 */
{
  int i,g;
  i=m;                             /* 保存屏号 */
  g=string_lingth();               /* 计算字符串长(不包括回车换行符) */
  ser+=g-yy;                       /* 计算字序数 */
  yy=g;                            /* 当前位置移至行末 */
  comput();                        /* 计算各参数 */
  if(i!=m)  disp_t();              /* 如不在原屏,重显一屏 */
}

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页  

comp_disp()                        /* 计算参数,重显一屏 */
{
  comput();                        /* 计算各参数 */
  disp_t();                        /* 显示一屏 */
}

comput()                           /* 根据 yy 计算屏号 m、y 等参数 */
{
  m=yy/BP;                         /* 计算屏号 */
  if(m)  m--;                      /* 如不为 0 屏,屏号减 1 */
  y=yy-m*BP;                       /* 计算屏幕显示列坐标 y */
  if(xx-x<0) x=xx;       /* 如 xx-x 小于屏幕行坐标,行坐标取内存数组当前行号 */
}

mvto(long a)                       /* 移到指定行 a */
{
  yy=tyy;                          /* 恢复原列号 */
  if(a<=xx)  upto(a);              /* 如目标行在当前行或之前,前移至目标行 */
  else  dnto(a);                   /* 如目标行在当前行后,后移至目标行 */
}

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页  

F1(int a)                          /* 文本存盘,a=1 退出,a=0 不退出 */
{
  unsigned int i,j;
  long b;
  if(chg) {                        /* 如文件已修改过 */
    write_prompt(0);               /* 提示“请稍候...” */
    if(!findfirst(bfile,pt,0))     /* 如有后备文件 */
      remove(bfile);               /* 删除原后备文件 */
    if(old) {                      /* 如原有老文件 */
      b=ftell(fp);                 /* 测出老文件当前读写指针位置 */
      fclose(fp);                  /* 关闭老文件 */
      rename(mfile,bfile);         /* 改为带扩展名 BAK 的后备文件 */
    }
    fp3=fopen(bfile,"rb");         /* 打开后备文件,文件指针赋于 fp3 */
    fp=fopen(mfile,"wb+");         /* 重建正文文件,文件指针仍放 fp 中 */
    ddd=malloc(KK);                /* 为 ddd 分配内存 */
    i=0;                           /* i 置初值 0 */
    while(i<oa)  {                 /* fp1 中记录并入 fp */
      fseek(fp1,wra[i++],SEEK_SET);/* fp1 指针移到读写起始处 */
      j=wra[i]-wra[i-1];           /* 计算读入字节数 */
      fread(ddd,sizeof(char),j,fp1);  /* 从 fp1 读入 j 字节至 ddd */
      fwrite(ddd,sizeof(char),j,fp);  /* 将 ddd 中内容写入 fp */
    }
    write_to(0,ss_max+1,fp);       /* 缓冲区数组的记录写入 fp */
    write_prompt(0);               /* 提示“请稍候...” */
    i=ob;                          /* ob 为 fp2 中最后一次读写指针数组序号 *

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页  

    while(i)  {                    /* fp2 中记录并入 fp */
      fseek(fp2,wrb[--i],SEEK_SET);/* fp2 指针移到前一读写起始处 */
      j=wrb[i+1]-wrb[i];           /* 计算读入字节数 */
      fread(ddd,sizeof(char),j,fp2);   /* 从 fp2 读入 j 字节至 ddd */
      if(*(ddd+j-1)==0)  j--;          /* 消除 wfp2() 读入文末部分时加的 '\0' */
      fwrite(ddd,sizeof(char),j,fp);   /* 将 ddd 中内容写入 fp */
    }
    vw=ftell(fp);                  /* 保存 fp 指针位置 */
    if(!fp_end) {                  /* 如原文件未全部读完,剩余部分拷入 fp */
      fseek(fp3,b,SEEK_SET);       /* 移至原老文件当前读写位置 */
      for(;;)  {
        j=fread(ddd,sizeof(char),KK,fp3);  /* 每次从 fp3 读入 KK 字节到 ddd */
        fwrite(ddd,sizeof(char),j,fp);     /* 将 ddd 中内容写入 fp */
        if(j<KK)  break;           /* 如读出字节数不足 KK,文件已读完,退出 */
      }
    }
    else   fputc(0x1A,fp);         /* 否则加文件结束标志 */
    fclose(fp3);                   /* 关闭 fp3 */
    fclose(fp);                    /* 关闭 fp */
    free(ddd);                     /* 释放 ddd 占用的内存空间 */
  }
  if(a)  bk();                     /* 如 a 为真,退出运行 */
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -