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

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

📁 全屏幕编辑软件
💻 TXT
📖 第 1 页 / 共 2 页
字号:
                                     /* 输入替代的字符串,如为空串或按 ESC 键 */
    free(ddd);                       /* 释放 ddd 占用的内存空间 */
    clear_ques();                    /* 清提问区 */
    return;                          /* 退出本功能 */
  }
  g=strlen(hsz);                     /* 计算搜索的字符串长 */
  k=strlen(ddd);                     /* 计算替代的字符串长 */
  while(1)  {                        /* 为连续找设的循环 */
    if(find(hsz)) {                  /* 如到文末 */
      comp_disp();                   /* 计算参数,显示一屏 */
      break;                         /* 退出本功能 */
    }
    xh();                            /* 在 H1 行重显当前行、列、序号 */
    comp_disp();                     /* 计算参数,显示一屏 */
    if((j=key_yn(59))==-1) {         /* 回答是否替换,如按 ESC */
      clear_ques();                  /* 清提问区 */
      break;                         /* 退出本功能 */
    }
    if(j) {                          /* 如按 Y,进行替换操作 */
      chg=1;                         /* 文件已修改标志置为真 */
      i=yy-g;                        /* 删除原字符串后光标处列号 */
      while(yy>i)  delc();           /* 删除原字符串 */
      if(xx==ksx && yy<ksy) ksy+=k;  /* 计算字块坐标变化 */
      if(xx==kwx && yy<kwy) kwy+=k;
      write_block(xx);               /* ddd 中字符串拷入 */
      ddd=dd;                        /* ddd 返回指针头 */
    }
  }
  free(ddd);                         /* 释放 ddd 占用的内存空间 */
}
F7()                                 /* 定义块首行、列号 */
{
  ksx=xx;                            /* 块首标志行号等于当前光标行号 */
  ksy=yy;                            /* 块首标志列号等于当前光标列号 */
  if(blck==0) {                      /* 如尚未定义块 */
    blck=1;                          /* 块标志置 1 */
    kwx=ksx;                         /* 块尾标志同块首重合 */
    kwy=ksy;
    disp(ss_x,x);                    /* 重显当前行 */
    return;                          /* 返回 */
  }
  if(kwx<ksx||(kwx==ksx && kwy<=ksy)) { /* 如当前光标在原块尾后 */
    kwx=ksx;                         /* 块尾行号移至块首行 */
    kwy=ksy;                         /* 块尾列号移至块首列 */
    blck=1;                          /* 块标志置 1 */
  }
  else blck=2;
  disp_t();                          /* 重显一屏 */
}

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

Shift_F7()                           /* 清除块定义 */
{
  blck=0;                            /* 块标志置 0 */
  ksx=kwx=-1;                        /* 块标行号置初值 */
  ksy=kwy=-1;                        /* 块标列号置初值 */
  comp_disp();                       /* 重显一屏 */
}

F8()                                 /* 定义块尾 */
{
  kwx=xx;                            /* 定块尾行号 */
  kwy=yy;                            /* 定块尾列号 */
  if(blck>=1)  {                     /* 如块标志为 1 或 2 */
    if(kwx<ksx||(kwx==ksx && kwy<=ksy)){    /* 如在块首前 */
      ksx=kwx;                       /* 块首行号同块尾 */
      ksy=kwy;                       /* 块首列号同块尾 */
      blck=1;                        /* 块标志置 1 */
    }
    else   blck=2;                   /* 否则,块标志置 2 */
    disp_t();                        /* 重显一屏 */
  }
  else  F7();                        /* 如未定义块,设块首 */
}

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

F9()                                 /* 移到文首 */
{
  upto(0x0L);                        /* 移至 0 行 */
  Home();                            /* 移至行首 */
  comp_disp();                       /* 计算显示参数,显示文首屏幕 */
}

Shift_F9()                           /* 移至文末 */
{
  if(xx<ttl_x)  dnto(ttl_x);         /* 如不在文末行,下翻到文末行 */
  End();                             /* 移至行末 */
  comp_disp();                       /* 计算参数,重显一屏 */
}

F10()                                /* 表格线状态转换开关 */
{
  if(tab) {                          /* 如 tab 为真 */
    tab=0;                           /* 转置 tab 为 0 */
    write_space(H1,4,4,TEXT_COLOR);  /* 盖掉屏幕信息行“表线”提示 */
  }
  else  {                            /* 如 tab 为假 */
    tab=1;                           /* 转置 tab 为 1 */
    write_string(H1,4,"表线",0x1E);  /* 在屏幕信息行显示“表线”二字 */
  }
}

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

upto(long a)                         /* 上移到 a 行 */
{
  ser-=yy;                           /* 计算当前行首字序数 */ 
  while(oa && a<=xx-ss_x+x) {
                           /* fp1 中尚有记录,目标行小于数组 x 行,则循环 */
    while((ss_x-1)>x) {              /* 数组当前行号大于屏幕行坐标,则循环 */
      --xx;     --ss_x;              /* 上移一行 */
      ser-=string_lingth()+2;        /* 计算字序数 */
    }
    st();                  /* 如编辑数组当前行号不足屏幕行坐标,从 fp1 读入 */
  }
  while((xx-1)>=a) {                 /* 目标行在当前行前,则循环 */
    --xx;   --ss_x;                  /* 上移一行 */
    ser-=string_lingth()+2;          /* 计算字序数 */
  }
  orien();                           /* 确定列号 */
  ser+=yy;                           /* 计算字序数 */
}


dnto(long a)                         /* 下移到第 a 行 */
{
  int i;
  ser+=string_lingth()-yy+2;         /* 计算下行首字序数 */
  ss_x++;    xx++;                   /* 当前行下移一行 */
  while(a>=xx-ss_x+(i=ss_max+x-H3) && (ob||!fp_end))  {
                /* 目标行超出,屏幕最下行超出数组,fp2 或 fp 中尚有记录则循环 */
    while(ss_x<i)  {                 /* 当前行下移不会引起屏底超出数组则循环 */
      ser+=string_lingth()+2;        /* 计算下行首字序数 */
      ss_x++;      xx++;             /* 当前行移至下行 */
    }
    tj();                            /* 屏底要超出数组时,从 fp2 或 fp 读入 */
    if(fp_end && a>ttl_x)  a=ttl_x;  /* 如目标行大于文末行时,目标行取文末行 */
  }
  while(xx<a) {                      /* 目标行在当前行后则循环 */
    ser+=string_lingth()+2;          /* 计算下行首字序数 */
    ss_x++;    xx++;                 /* 当前行移至下行 */
  }
  orien();                           /* 定光标位置 */
  ser+=yy;                           /* 计算字序数 */
}

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

wfp1()                               /* 将编辑数组上部 Q3 行写入 fp1 */
{
  fseek(fp1,wra[oa],SEEK_SET);       /* 指针移到写入起始位置 */
  write_to(0,Q3,fp1);                /* 写 Q3 行到 fp1 */
  wra[++oa]=ftell(fp1);              /* 记录下一次写入起始位置 */
  movbk(0,Q3);                       /* 剩下的数组前移 Q3 行 */
  ss_x-=Q3;                          /* 计算编辑数组当前行行号 */
  ss_max-=Q3;                        /* 计算数组行实用最大行号 */
}

movbk(int s,int a)                   /* 编辑数组 s+a 行起前移 a 行 */
{
  int i;
  for(i=s;i<QB-a;i++)
    strcpy(ss[i],ss[i+a]);           /* 前移 a 行,复盖原行 */
  while(i<QB)   *ss[i++]=0;          /* 移走各行清 0 */
} 

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

mov(int s,int a)                     /* 编辑数组 s 行起后移 a 行 */
{
  int i;
  for(i=QB-1;i>=s+a;i--)  strcpy(ss[i],ss[i-a]);
}

tj()       /* 当前行大于 Q1 时,上部 Q3 行存入 fp1,从 fp2 或 fp 再读入 Q3 行 */
{
  int j=0;
  if(ss_x>Q1-H3)  wfp1();            /* 当前行大于 Q1 时,上部 Q3 行存入 fp1 */
  if(ss_max<=Q1) {                   /* 如编辑数组实用最大行在数组前半部 */
    if(ob)  {                        /* 如 fp2 中有记录 */
      fseek(fp2,wrb[--ob],SEEK_SET); /* 指针前移至读起始位置 */
      j=read_from(ss_max+1,Q3,fp2);  /* 从 fp2 读 Q3 行写入编辑数组最大行后,
                                            j 为实际读写数 */
      ss_max+=j;                     /* 数组扩大 j 行 */
    }
    else  if(!fp_end)  {             /* 如 fp2 已无记录,如 fp 中未读完 */
      j=read_from(ss_max+1,Q3,fp);   /* 从 fp 读 Q3 行写入数组最大行后,
                                            j 为实际读写数 */
      if(j<Q3)  {                    /* 如读写数不足 Q3 行 */
        fp_rd+=j;                    /* fp 已读出最大行行号增加 j */
        ttl_x=fp_rd;                 /* 确定文末行行号 */
        fp_end=1;                    /* fp 已读完标志置 1 *

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

      }
      else  fp_rd+=Q3;               /* 否则,fp已读出行最大行号加 Q3 */
      ss_max+=j;                     /* 数组扩大 j 行 */
    }

⌨️ 快捷键说明

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