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

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

📁 全屏幕编辑软件
💻 TXT
📖 第 1 页 / 共 2 页
字号:
coord()                                    /* 显示标尺行 */
{
  int i,j,k,g;
  g=m*BP;                                  /* 本屏行首列号 */
  y=yy-g;                                  /* 计算 y */
  k=(enq-g>ZS+1)?ZS+1:enq-g;               /* 排版宽度处列坐标 */
  for(i=1;i<=ZS+1;i++)  {                  /* 自左至右显示标尺 */
    j=(i<=k)?0x04:0x01;                    /* 排版行宽度内用红色,否则用蓝色 */
    ((i+g)%5==0)?write_char(H2,i-1,'|',j):write_char(H2,i-1,'-',j);
                                           /* 逢 5 显示“|”,其余显示“-” */
  }
  g=(y<k) ? 0x50 : 0x30;                   /* 确定标尺光标色彩 */
  ((yy+1)%5==0)?write_char(H2,y,'|',g):write_char(H2,y,'-',g);
                                           /* 显示标尺光标 */
}

xh()                                   /* 在信息行显示当前行序、列、行数值 */
{
  char sl[8],sh[8],sz[8];
  itoa(yy+1,sl,10);                        /* 变列号数值为字符串 */
  ltoa(xx+1,sh,10);                        /* 变行号数值为字符串 */
  ltoa(ser+1,sz,10);                       /* 变字序号数值为字符串 */
  write_string(H1,8,"序:         行:        列:    ",0x05);
  write_string(H1,12,sz,0x07);             /* 显示字序号 */
  write_string(H1,24,sh,0x07);             /* 显示行号 */
  write_string(H1,35,sl,0x07);             /* 显示列号 */
}

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

int string_lingth()                        /* 计算除回车换行符外的当前行长 */
{
  int g;
  g=strlen(ss[ss_x]);                      /* 测当前行字符串总长 */
  if(ss[ss_x][g-1]==0x0A) g-=2;            /* 去除回车换行符的长度 */
  return g;                                /* 返回计算值 */
}

Enter()                                    /* 输入回车 */
{
  int g,k;
  chg=1;                                   /* 文件已修改标志置为真 */
  if(!ins) {                               /* 如为非插入状态 */
    g=string_lingth();                     /* 计算当前行长(不包括回车换行符) */
    strcpy(ss[ss_x]+g,da);                 /* 字符串以硬回车换行符结尾 */
    if(xx==ttl_x)   {                      /* 如是文末行,下移一行 */
      fp_rd++;                             /* fp 已读出行最大行号加 1 */
      ttl_x++;                             /* 文末行行号加 1 */
      ss_max++;                            /* 编辑数组实用最大行号加 1 */
    }
    if(m==0 && g<ZS)  write_char(x,FH,'<',CHAR_COLOR);
                                           /* 如行尾在 0 屏,显示硬回车标志 */
    ss_x++;   xx++;                        /* 数组行号和文本行号均加 1 */
    ser+=g-yy+2;                           /* 计算字序数 */
    if(ss_x>ss_max)  tj();                 /* 如下行超出编辑数组最大行号,
                                              从 fp2 或 fp 读入一部分 */
    if(x<H3)  {                            /* 如不是屏幕底行 */
      if(m)  {                             /* 如不是 0 屏 */
        m=0;
        disp_t();                          /* 显示 0 屏各行 */
      }
      x++;                                 /* 屏幕光标下移一行 */
    }
    else  {                                /* 如是屏幕最下行 */
      if(!m) {                             /* 如原在 0 屏,则滚屏 */
        roll_scr_up(0,H3);                 /* 向上滚屏 */
        disp(ss_x,x);                      /* 当前坐标补显一行 */
      }
      else  {                              /* 如原不在 0 屏 */
        m=0;                               /* 显示 0 屏 */
        disp_t();
      }
    }
  }
  else  {                                  /* 如为插入状态 */
    g=m;                                   /* 保存原屏号 */
    k=x;                                   /* 保存原屏幕行坐标 */
    intercept(yy);                         /* 从当前光标处折断字符串 */
    strcpy(ss[ss_x-1]+yy,da);              /* 折断处加硬回车换行符 */
    if(!g) {                               /* 如原在 0 屏 */
      if(k<H3)  roll_scr_down(x,H3);       /* 不在屏底行,本行起下滚 */
      else   roll_scr_up(0,H3);            /* 在屏底行,全屏上滚 */
      disp(ss_x-1,x-1);                    /* 重显原行(上一行) */
      disp(ss_x,x);                        /* 显示当前行 */
    }
    else  disp_t();                        /* 如原不在 0 屏,重显一屏 */
  }
  yy=0;                                    /* 光标至行首 */ 
}
Del()                                      /* 退格键、删字键处理 */
{
  int i,k;
  k=x;                                     /* 保存原行坐标 */
  chg=1;                                   /* 文件已修改标志置为真 */
  switch(delc()) {                         /* 删字,根据返回值判断 */
    case 0:                                /* 如返回 0 */
      disp(ss_x,x);                        /* 重显当前行 */
      break;                               /* 跳出开关语句 */
    case 1:                                /* 如返回 1 */
      disp_t();                            /* 重显一屏 */
      break;                               /* 跳出开关语句 */
    case 2:                                /* 如返回 2 */
      if(x>0)  --x;                        /* 如不在屏幕最上行,光标上移一行 */
      comput();                            /* 计算参数 */
      if(m) disp_t();                      /* 如不在 0 屏,重显一屏 */
      else  {                              /* 如在 0 屏 */
        if(k) {                            /* 如原不在屏顶行 */
          roll_scr_up(k,H3);               /* 自当前行起滚屏 */
          i=H3-x;                          /* 屏幕最下行与当前行间行数 */
          if(xx+i<=ttl_x)                  /* 如最下行还有,显示此行 */
            disp(ss_x+i,H3);
        }
        disp(ss_x,x);                      /* 显示当前行 */
      }
      break;                               /* 跳出开关语句 */
  }
}

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

int delc()                          /* 删字,如在行首,将本行接在上行尾 */
{
  int i,g,k=0;
  for(;;)  {                        /* 为全角字符设的循环 */
    if(y>0)  {                      /* 如不在本屏行首 */
      if(xx==ksx && yy<=ksy) ksy--; /* 如在块首行,并在块首前,计算块首列号 */
      if(xx==kwx && yy<=kwy) kwy--; /* 如在块尾行,并在块尾前,计算块尾列号 */
      dks();                        /* 如块首、块尾重合, 块标志置 1 */
      strcpy(ss[ss_x]+yy-1,ss[ss_x]+yy);
                                /* 光标处起字符串前移一格,覆盖光标前一字符 */
      y--;    yy--;                 /* 前移一字节 */
      ser--;                        /* 字序号减 1 */
      if(vs(yy-1)==0)  {            /* 如不在全角前半字 */
        if(!k) return 0;            /* 如在屏幕最左列,返回 0 */
        else return 1;              /* 否则返回 1 */
      }
    }
    else  {                         /* 如在屏幕最左列 */
      if(m)  {                      /* 如不为 0 屏 */
        m--;                        /* 退到前一屏 */
        y=yy-m*BP;                  /* 光标到屏中,并前移一字 */
        k=1;                        /* 标志置 1 */
      }
      else  {                       /* 如为 0 屏 */
        if(ss_x+(i=H3-x)>=ss_max && xx+i<ttl_x)
          tj();      /* 如屏幕最下行超出数组,但未到文末,从fp2或fp读入Q3行 */
        if(xx)  {                   /* 如不在文首行 */
          g=strlen(ss[ss_x]);       /* 测行长 */
          ss_x--;                   /* 至上一行 */
          yy=string_lingth();       /* 定光标于上行尾处 */
          if(g+yy>HC-4)  {          /* 如两行相接后超长 */
            write_prompt(3);        /* 提示超长 */
            yy=0;                   /* 恢复原行列号 */
            ss_x++;                 /* 回原行 */
            return -1;              /* 退出,返回 -1 */
          }
          if(xx<=ksx)  {            /* 如在块首行或之前 */
            if(xx==ksx) ksy+=yy;    /* 如在块首行 */
            ksx--;                  /* 块首行行号减 1 */
          }
          if(xx<=kwx) {             /* 如在块尾行或之前 */
            if(xx==kwx) kwy+=yy;    /* 如在块尾行 */
            kwx--;                  /* 块尾行行号减 1 */
          }
          dks();                    /* 如块首、块尾重合, 块标志置 1 */
          xx--;                     /* 文本当前行改为上行 */
          strcpy(ss[ss_x]+yy,ss[ss_x+1]);   /* 将下行拷至本行尾回车符前 */
          ser-=2;                   /* 字序数减少回车符的两位 */
          movbk(ss_x+1,1);          /* 数组后续各行前移,覆盖原行 */
          ttl_x--;                  /* 文末行行号减 1 */
          fp_rd--;                  /* fp 已读出行最大行号减 1 */
          ss_max--;                 /* 数组实用最大行号减 1 */
          return 2;                 /* 返回 2 */
        }
        else return 0;              /* 如在文首行,返回 0 */
      }
    }
  }
}
int vs(int a)                       /* 计算行首至 a 列全角字节数,返回奇偶值 */
{
  int i,j;
  j=0;                              /* 全角字节数,初值为 0 */
  for(i=0;i<=a;i++)
    if(ss[ss_x][i]>0xA0) j++;       /* 统计全角字节数 */
  return(j%2);                      /* 返回奇偶值 */
}

orien()                             /* 重定光标列号 */
{
  int g;

⌨️ 快捷键说明

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