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

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

📁 全屏幕编辑软件
💻 TXT
📖 第 1 页 / 共 2 页
字号:
write_block(long v)                /* 将 ddd 中内容拷至当前行指定位置 */
{                                  /* 参数 v 为拷贝后块尾行号 */
  int i,g;
  char *b;
  b=malloc(HC);                    /* 为 b 分配内存空间 */
  strcpy(b,ss[ss_x]+yy);           /* 将当前行光标后字符串暂放入 b 中 */
  if(ss_max-ss_x>Q3+H3) wfp2();    /* 如编辑数组当前行后较多,存一些到 fp2 */
  for(;;)  {                       /* 建一个无限循环 */
    write_prompt(0);               /* 提示“请稍候...” */
    if((g=v-xx)<QB-1-ss_max) {     /* 如块移入后编辑数组不会溢出 */
      mov(ss_x+1,g);               /* 将目标行后的编辑数组后移 */
      ss_max+=g;                   /* 编辑数组已用最大行号增加 */
      fp_rd+=g;                    /* fp 已读出最大行号增加 */
      ttl_x+=g;                    /* 文末行行号增加 */
      while(*ddd)  {               /* *ddd 为真则循环 */
        ss[ss_x][yy]=*ddd++;       /* ddd 中字符读入当前行 yy 处 */
        ser++;                     /* 字序数加 1 */
        if(ss[ss_x][yy++]==0x0A) { /* 如读到一换行符后 */
          ss[ss_x][yy]=0;          /* 串尾加 '\0' 定界 */
          ss_x++;   xx++;          /* 下移一行 */
          yy=0;                    /* 至行首列 */
        }
      }
      strcpy(ss[ss_x]+yy,b);       /* b 中字串接到行尾 */
      break;                       /* 跳出 for 循环 */
    }
    else  {                        /* 如编辑数组装不下 */
      if(ss_x>Q1)  wfp1();         /* 如当前行在后半数组,写一部分到 fp1 */
      else {                       /* 如当前行在前半数组 */
        mov(ss_x+1,(g=QB-1-ss_max));    /* 将当前行后的编辑数组后移 */
        ss_max=QB-1;               /* 定数组已用最大行行号 */
        for(i=0;i<g;i++) {         /* ddd 中字块读入编辑数组共 g 行 */
          while(*ddd)  {           /* *ddd 为真则循环 */
            ss[ss_x][yy]=*ddd++;   /* ddd 中内容读入数组行当前列 */
            ser++;                 /* 字序号加 1 */
            if(ss[ss_x][yy++]==0x0A)  {  /*  如遇到换行符 */
              ss[ss_x][yy]=0;      /* 以'\0'结束本行 */
              ss_x++;    xx++;     /* 行号增 1 */
              yy=0;                /* 至行首列 */
              fp_rd++;             /* fp 已读出最大行号增 1 */
              ttl_x++;             /* 文末行行号加 1 */
              break;               /* 填完一行,跳出 while 循环 */
            }
          }
        }
      }
    }
  }
  free(b);                         /* 释放内存 */
  clear_prompt();                  /* 清提示区 */
}

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

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

del_block()                        /* 删除块 */
{
  int j;
  write_prompt(0);                 /* 提示“请稍候...” */
  /* 以下计算删除原块后,原光标位置的变化 */
  if(!(txx<ksx||(txx==ksx && tyy<=ksy))) {
    if(txx>kwx)  txx-=kwx-ksx;
    else {
      if(txx==kwx && tyy>kwy)  tyy-=kwy-ksy;
      else  tyy=ksy;
      txx=ksx;
    }
  }
  Ctrl_F(0);                       /* 移到块首,不显示 */
  if(ksx==kwx)   strcpy(ss[ss_x]+yy,ss[ss_x]+kwy);
                         /* 如块首块尾在同一行,将块尾后的字符串拷至块首起 */
  else  {                          /* 如块首块尾不在同一行 */
    Ctrl_T(0);                     /* 块首行删至行末,不显示 */
    ser+=2;                        /* 计算字序数 */
    xx++;    ss_x++;               /* 至下行 */
    y=0;   yy=0;                   /* 至行首 */
    while(xx<kwx)  Ctrl_Y(0);      /* 逐行删除,不显示 */
    yy=kwy;                        /* 当前行已移至块尾行,列号定为块尾列号 */
    ser+=yy;                       /* 计算块尾列的字序号 */
    Ctrl_E(0);                     /* 删至行首,不显示 */
    delc();                        /* 本行剩余部分接至块前 */
  }
  ser+=tyy-yy;                     /* 计算字序数 */
  if((j=ss_x+H3-x)>ss_max && j<ttl_x)  tj();
                  /* 屏幕文本区底行超出数组,且未到文末,从 fp 或 fp2 读入 */
  mvto(txx);                       /* 重返原坐标 */
  clear_prompt();                  /* 清提示区 */
}
int read_block()                   /* 字块读入缓冲区 ddd */
{
  int i,j;
  write_prompt(0);                 /* 提示“请稍候...” */
  txx=xx;                          /* 保存原文本行号 */
  tyy=yy;                          /* 保存原文本列号 */
  Ctrl_F(0);                       /* 移到块首,不显示 */
  if(ksx==kwx) {                   /* 如块首块尾在同一行 */
    j=kwy-ksy;                     /* 计算块串长 */
    ddd=malloc(j+2);               /* 给 ddd 分配内存空间 */
    dd=ddd;                        /* 保存 ddd 指针首址 */
    for(i=0;i<j;i++)  *ddd++=ss[ss_x][ksy+i];    /* 块读入 ddd */
    *ddd++=0;                      /* ddd 以 '\0' 结尾 */
    vv=i;                          /* 统计块长字节数 */
    yy+=i;                         /* 移至块尾 */
  }
  else  {                          /* 如块首块尾不在同一行 */
    ddd=malloc(KK);                /* 给 ddd 分配内存空间 */
    dd=ddd;                        /* 保存 ddd 首指针 */
    first=strlen(ss[ss_x])-ksy;    /* 计算块首行中块串长 */
    vv=first;                      /* 计算读入字节数 */
    for(i=0;i<first;i++)  *ddd++=ss[ss_x][ksy+i];  /* 首行中块串读入 ddd */
    xx++;    ss_x++;               /* 至下行 */
    yy=0;                          /* 至行首 */
    for(;;)  {                     /* 为读入字块建的循环 */
      tj();                        /* 如当前行在数组后半部,写 Q3 行到 fp1,
                                   数组行数不足数组一半,从 fp1 或 fp2 补充之 */
      if(kwx-xx<=ss_max-ss_x) {    /* 如块尾在当前编辑数组中 */
        while(xx<kwx)              /* 当前行在块尾行前则循环 */
          if(hb())  return 1;      /* 读入 ddd 中,如块太大返回 1 */
        break;                     /* 退出 for 循环 */
      }
      else                         /* 如块尾不在编辑数组中 */
        while(ss_x<ss_max)         /* 数组中的字块部分读入ddd */
          if(hb())  return 1;      /* 计算字节数,读入 ddd,如块太大返回 1 */
    }
    for(i=0;i<kwy;i++)  *ddd++=ss[ss_x][i];  /* 读入块末行的块串 */
    vv+=i;                         /* 计算读入的字节数 */
    yy=kwy;                        /* 到块尾 */
    *ddd=0;                        /* ddd 以 '\0' 结尾 */
  }
  ser+=vv;                         /* 计算字序数 */
  ddd=dd;                          /* 返回指针头 */
  clear_prompt();                  /* 清提示区 */
  return 0;                        /* 正常读完,返回 0 */
}

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

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

int hb()                           /* 计算块的字节数,读入 ddd 中 */
{
  int i=0;
  vv+=strlen(ss[ss_x]);            /* 计算读入的字节数 */
  if(vv>=KK-255)   {               /* 如字节数超出 ddd 最大空间 */
    mvto(txx);                     /* 重返原坐标 */
    comp_disp();                   /* 重显原屏幕 */
    write_prompt(2);               /* 提示“块太大!” */
    clear_ques();                  /* 清提问区 */
    ddd=dd;                        /* 返回首指针 */
    free(ddd);                     /* 释放 ddd 占用内存空间 */
    return 1;                      /* 返回 1 */
  }
  while(ss[ss_x][i])  *ddd++=ss[ss_x][i++];  /* 读一行至 ddd */
  ss_x++;    xx++;                 /* 至下一行 */
  return 0;                        /* 返回 0 */
}
int over(int g)                    /* 行超长处理,g 为当前行长度 */
{
  if((kwx==ksx && vv+g>HC-4)||
       (kwx!=ksx &&(tyy+first>HC-4 || g-tyy+kwy>HC-4))) {
    mvto(txx);                     /* 重返原坐标 */
    comp_disp();                   /* 重显原屏幕 */
    ddd=dd;                        /* 返回指针头 */
    free(ddd);                     /* 释放 ddd 占用的内存空间 */
    write_prompt(3);               /* 提示:行超长 */
    return 1;                      /* 发生超长返回 1 */
  }
  return 0;                        /* 未发生行超长返回 0 */
}

Ctrl_W()                           /* 字块存盘 */
{
  long g;
  if(blck==2)  {                   /* 如已定义块 */
    g=ser;                         /* 保存字序号 */
    write_ques(1);                 /* 提问存盘文件名 */
    if(key_string(HH,25,hsz,PROM_COLOR)<=0) {  /* 如为空串或按 ESC */
      clear_ques();                /* 清提问区 */
      return;                      /* 退出本功能 */
    }
    if(findfirst(hsz,pt,0)==0){    /* 如当前目录中已有此文件 */
      write_ques(2);               /* 提问是否复盖 */
      if(key_yn(30)<1)  {          /* 输入 Y 或 N,如按 ESC 键或输入 N */
        clear_ques();              /* 清提问区 */
        return;                    /* 退出本功能 */
      }
    }
    fp3=fopen(hsz,"wb+");          /* 以写方式打开文件 hsz,文件指针放入 fp3 */
    if(read_block()) {             /* 读块到 ddd ,如失败,跳出开关语句 */
      ser=g;                       /* 恢复原参数 */
      return;                      /* 退出本功能 */
    }
    write_prompt(0);               /* 提示“请稍候...” */
    fwrite(ddd,sizeof(char),vv,fp3);     /* ddd 中内容写入文件 fp3 */
    fputc(0x1A,fp3);               /* 加文件结束符 */
    fclose(fp3);                   /* 关闭文件 fp3 */
    free(ddd);                     /* 释放 ddd 占用的内存 */
    mvto(txx);                     /* 重返原坐标 */
    ser=g;                         /* 恢复原参数 */
    comp_disp();                   /* 重显屏幕 */
    clear_prompt();                /* 清提示区 */
    clear_ques();                  /* 清提问区 */
  }
  else write_prompt(1);            /* 提示:请先定义块 */
}

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

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

Ctrl_R()                           /* 外部文件读入光标处 */
{
  int i,j,g,v;
  write_ques(3);                   /* 提问外部文件名 */
  if(key_string(HH,23,hsz,PROM_COLOR)<=0) { /* 输入字符串,如为空串或按 ESC */
    clear_ques();                  /* 清提问区 */
    return;                        /* 退出本功能 */
  }
  if((fp3=fopen(hsz,"rb"))==NULL){ /* 如文件不存在 */

⌨️ 快捷键说明

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