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

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

📁 全屏幕编辑软件
💻 TXT
📖 第 1 页 / 共 2 页
字号:
  g=string_lingth();                /* 测当前列长(不包括回车换行符) */
  if(yy>g)  yy=g;                   /* 如光标在字符串尾后,定光标于串尾 */
  if(vs(yy-1))  yy--;               /* 如光标在后半汉字,前移一字节 */
  y=yy-m*BP;                        /* 计算屏幕 y 坐标 */
  if(y<0) comput();                 /* 如 y 为负数,重算各参数 */
}

Ctrl_N()                            /* 插入一空行 */
{
  chg=1;                            /* 文件已修改标志置为真 */
  fp_rd++;                          /* fp 已读出最大行号加 1 */
  ttl_x++;                          /* 文末行行号加 1 */
  if(xx<=ksx)  {                    /* 如插入行在块首行或之前 */
    ksx++;    kwx++;                /* 块首、块尾行号加 1 */
  }
  else {                            /* 如插入行在块首行后 */
    if(xx>ksx && xx<=kwx) kwx++;    /* 如插入行在字块中,块尾行号加 1 */
  }
  ser-=yy;                          /* 计算字序数 */
  if(ss_max>=QB-1) {                /* 如超出缓冲区数组可容行数 */
     ss_x>Q1 ? wfp1() : wfp2();     /* 数组行数在 Q1 后时,上部 Q3 行存入 fp1,
                                     行数小于 Q1 时,下部 Q3 行存入 fp2 */
  }
  ss_max++;                         /* 编辑数组实用最大行号加 1 */
  mov(ss_x,1);                      /* 当前行起各行后移 */
  strcpy(ss[ss_x],da);              /* 插入行加硬回车换行符 */
  if(m)  {                          /* 如不在 0 屏,显示 0 屏 */
    m=0;
    disp_t();
  }
  else  roll_scr_down(x,H3);        /* 如在 0 屏,当前行以下各行下滚 */
  yy=0;                             /* 光标至行首 */
}
Ctrl_E(int a)                       /* 删至行首,a=1 显示,a=0 不显示 */
{
  int g;
  chg=1;                            /* 文件已修改标志置为真 */
  g=m;                              /* 保存原屏号 */
  if(xx==ksx)  {                    /* 如在块首行 */
    if(yy<=ksy)  ksy-=yy;           /* 如在块首前, 计算块首列号 */
    else  ksy=0;                    /* 如在块首后,块首列号置 0 */
  }
  if(xx==kwx)  {                    /* 如在块尾行 */
    if(yy<=kwy)  kwy-=yy;           /* 如在块尾前,计算块尾列号 */
    else  kwy=0;                    /* 如在块尾后,块尾列号置 0 */
  }
  dks();                            /* 如块首、块尾重合, 块标志置 1 */
  strcpy(ss[ss_x],ss[ss_x]+yy);     /* 光标后字符前移至行首起 */
  ser-=yy;                          /* 计算字序数 */
  m=0;                              /* 至 0 屏 */
  yy=0;                             /* 至行首 */
  if(a) {                           /* 如为按 Ctrl+E 键时,重显屏幕 */
    if(!g) disp(ss_x,x);            /* 如原在 0 屏,重显当前行 */
    else   disp_t();                /* 否则显示 0 屏 */
  }
}

Ctrl_Y(int a)                       /* 删行,a=1 显示,a=0 不显示 */
{
  int g,i;
  chg=1;                            /* 文件已修改标志置为真 */
  g=m;                              /* 保存原屏号 */
  if((ss_x+(i=H3-x))>=ss_max && xx+i<ttl_x)   tj();
                    /* 如屏幕最下行超出数组,但在总行数内,从fp2或fp读入Q3行 */
  if(xx<ksx) ksx--;                 /* 如被删行在块首行前,块首行号减 1 */
  else  if(xx==ksx) ksy=0;          /* 如被删行为块首行,块首列号置 0 */ 
  if(xx<kwx) kwx--;                 /* 如被删行在块尾行前,块尾行号减 1 */
  else  if(xx==kwx)  kwy=0;         /* 如被删行为块尾行,块尾列号置 0 */ 
  dks();                            /* 如块首、块尾重合,块标志 blck 置 1 */
  ser-=yy;                          /* 计算字序数 */
  if(xx<ttl_x) {                    /* 当删除最后一行时 */
    fp_rd--;                        /* fp 已读出最大行行号减 1 */
    ttl_x--;                        /* 文末行行号减 1 */
    ss_max--;                       /* 编辑数组实用最大行号减 1 */
  }
  movbk(ss_x,1);                    /* ss_x 后各行前移一行 */
  m=0;                              /* 至 0 屏 */
  yy=0;                             /* 至行首 */
  if(a) {                           /* 如参数 a 为真 */
    if(!g) {                        /* 如原在 0 屏 */
      roll_scr_up(x,H3);            /* 自当前行起滚屏 */
      if(xx+i<=ttl_x) disp(ss_x+i,H3);  /* 如最下行还有,显示此行 */
    }
    else  disp_t();                 /* 如原不在 0 屏,则显示 0 屏 */
  }
}
Ctrl_T(int a)                       /* 删至行尾,a=1 显示,a=0 不显示 */
{
  int g;
  chg=1;                            /* 置文件已修改标志为真 */
  g=string_lingth();                /* 测行长 */
  if(xx==ksx && yy<=ksy) ksy=yy;    /* 如在块首行,并在块首列前,计算块首列号 */
  if(xx==kwx && yy<=kwy) kwy=yy;    /* 如在块尾行,并在块尾列前,计算块尾列号 */
  dks();                            /* 如块首、块尾重合, 块标志置 1 */
  strcpy(ss[ss_x]+yy,ss[ss_x]+g);   /* 原行尾回车换行符前移至当前光标处 */
  if(a) disp(ss_x,x);               /* 在按 Ctrl+T 时,重显本行 */
}

Ctrl_F(int a)                       /* 光标移至块首,a=1 显示,a=0 不显示 */
{
  if(blck) {                        /* 如块标志为真,移至块首 */
    if(ksx<=xx)  upto(ksx);         /* 如目标行在当前行或之前,上移至目标行 */
    else dnto(ksx);                 /* 如目标行在当前行后,下移至目标行 */
    ser-=yy-ksy;                    /* 计算字序数 */
    yy=ksy;                         /* 至块首列 */
    if(a)   comp_disp();            /* 如 a 为真,计算参数,重显当前屏幕 */
  }
  else  write_prompt(1);            /* 否则,提示:请先定义块 */
}

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

Ctrl_D()                           /* 删除块 */
{
  if(blck==2)  {                   /* 如已建立块 */
    chg=1;                         /* 文件已修改标志置为真 */
    txx=xx;                        /* 保存行号 */
    tyy=yy;                        /* 保存列号 */
    del_block();                   /* 删块操作 */
    Shift_F7();                    /* 清除块定义,重显当前屏幕 */
  }
  else  write_prompt(1);           /* 否则,提示: 请先定义块 */
}

dks()                              /* 如块首、块尾重合, 块标志置 1 */
{
   if(ksx==kwx && ksy==kwy)  blck=1;
}

Ctrl_K()                           /* 拷贝块 */
{
  int j,g;
  long i;
  if(blck==2)  {                   /* 如已定义块 */
    i=ser;                         /* 保存原字序号 */
    if(read_block() || over(string_lingth())) {
             /* 读块到ddd,并检查拷贝块后与移入处串相加行是否超长,如失败退回 */
      ser=i;                       /* 恢复原字序号 */
      return;                      /* 返回 */
    }
    i=kwx-ksx;                     /* 保存原块标记有用参数 */
    j=kwy;
    g=kwy-ksy;
    ser+=tyy-yy;                   /* 计算字序数 */
    mvto(txx);                     /* 重返原坐标,即块拷贝目的位置 */
    kwy=(i==0)?yy+g:j;             /* 计算块坐标变化 */
    ksx=xx;
    ksy=yy;
    kwx=ksx+i;
    write_block(kwx);              /* 将 ddd 中的内容拷到目的位置 */
    chg=1;                         /* 文件已修改标志置为真 */
    comp_disp();                   /* 计算有关参数,显示当前屏幕 */
    ddd=dd;                        /* 指针返回缓冲区头 */
    free(ddd);                     /* 释放 ddd 占用的内存空间 */
  }
  else  write_prompt(1);           /* 否则,提示:请先定义块 */
}

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

Ctrl_V()                           /* 移动块 */
{
  int k,g;
  long j;
  if(blck==2)  {                   /* 如已定义块 */
    j=ser;                         /* 保存原字序数 */
    if(read_block() || over(string_lingth())) {
             /* 读块到ddd,并检查拷贝块后与移入处串相加行是否超长,如溢出退回 */
      ser=j;                       /* 恢复原参数 */
      return;                      /* 返回 */
    }
    j=kwx-ksx;                     /* 保存原块标记有用参数 *

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

    k=kwy;
    g=kwy-ksy;
    del_block();                   /* 删除原块 */
    kwy=(j==0)?yy+g:k;             /* 计算新位置块标记 */
    ksx=xx;
    ksy=yy;
    kwx=ksx+j;
    write_block(kwx);              /* ddd 中块拷至当前光标处 */
    blck=2;                        /* 置为:已定义块 */
    chg=1;                         /* 文件已修改标志置为真 */
    comp_disp();                   /* 计算显示参数, 显示本屏 */
    ddd=dd;                        /* 指针返回缓冲区头 */
    free(ddd);                     /* 释放 ddd 占用的内存空间 */
  }
  else  write_prompt(1);           /* 否则,提示“请先定义块!” */
}

⌨️ 快捷键说明

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