全屏幕编辑软件的编写(C语言)02

2016-02-19 13:19 7 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享全屏幕编辑软件的编写(C语言)02,希望可以对大家能有小小的帮助。

【 tulaoshi.com - 编程语言 】

   coord()                                    /* 显示标尺行 */
{
  int i,j,k,g;
  g=m*BP;                                  /* 本屏行首列号 */
  y=yy-g;                                  /* 计算 y */
  k=(enq-gZS+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=(yk) ? 0x50 : 0x30;                   /* 确定标尺光标色彩 */
  ((yy+1)%5==0)?write_char(H2,y,'|',g):write_char(H2,y,'-',g);
                                           /* 显示标尺光标 */
}

coord()                                    /* 显示标尺行 */
{
  int i,j,k,g;
  g=m*BP;                                  /* 本屏行首列号 */
  y=yy-g;                                  /* 计算 y */
  k=(enq-gZS+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=(yk) ? 0x50 : 0x30;                   /* 确定标尺光标色彩 */
  ((yy+1)%5==0)?write_char(H2,y,'|',g):write_char(H2,y,'-',g);
                                           /* 显示标尺光标 */
}

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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);             /* 显示列号 */
}

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 && gZS)  write_char(x,FH,'',CHAR_COLOR);
                                           /* 如行尾在 0 屏,显示硬回车标志 */
    ss_x++;   xx++;                        /* 数组行号和文本行号均加 1 */
    ser+=g-yy+2;                           /* 计算字序数 */
    if(ss_xss_max)  tj();                 /* 如下行超出编辑数组最大行号,
                                              从 fp2 或 fp 读入一部分 */
    if(xH3)  {                            /* 如不是屏幕底行 */
      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(kH3)  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(x0)  --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;                               /* 跳出开关语句 */
  }
}

int delc()                          /* 删字,如在行首,将本行接在上行尾 */
{
  int i,g,k=0;
  for(;;)  {                        /* 为全角字符设的循环 */
    if(y0)  {                      /* 如不在本屏行首 */
      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+ittl_x)
          tj();      /* 如屏幕最下行超出数组,但未到文末,从fp2或fp读入Q3行 */
        if(xx)  {                   /* 如不在文首行 */
          g=strlen(ss[ss_x]);       /* 测行长 */
          ss_x--;                   /* 至上一行 */
          yy=string_lingth();       /* 定光标于上行尾处 */
          if(g+yyHC-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;
  g=string_lingth();                /* 测当前列长(不包括回车换行符) */
  if(yyg)  yy=g;                   /* 如光标在字符串尾后,定光标于串尾 */
  if(vs(yy-1))  yy--;               /* 如光标在后半汉字,前移一字节 */
  y=yy-m*BP;                        /* 计算屏幕 y 坐标 */
  if(y0) comput();                 /* 如 y 为负数,重算各参数 */
}

Ctrl_N()                            /* 插入一空行 */
{
  chg=1;                            /* 文件已修改标志置为真 */
  fp_rd++;                          /* fp 已读出最大行号加 1 */
  ttl_x++;                          /* 文末行行号加 1 */
  if(xx=ksx)  {                    /* 如插入行在块首行或之前 */
    ksx++;    kwx++;                /* 块首、块尾行号加 1 */
  }
  else {                            /* 如插入行在块首行后 */
    if(xxksx && xx=kwx) kwx++;    /* 如插入行在字块中,块尾行号加 1 */
  }
  ser-=yy;                          /* 计算字序数 */
  if(ss_max=QB-1) {                /* 如超出缓冲区数组可容行数 */
     ss_xQ1 ? 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;                             /* 光标至行首 */
}

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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+ittl_x)   tj();
                    /* 如屏幕最下行超出数组,但在总行数内,从fp2或fp读入Q3行 */
  if(xxksx) ksx--;                 /* 如被删行在块首行前,块首行号减 1 */
  else  if(xx==ksx) ksy=0;          /* 如被删行为块首行,块首列号置 0 */ 
  if(xxkwx) kwx--;                 /* 如被删行在块尾行前,块尾行号减 1 */
  else  if(xx==kwx)  kwy=0;         /* 如被删行为块尾行,块尾列号置 0 */ 
  dks();                            /* 如块首、块尾重合,块标志 blck 置 1 */
  ser-=yy;                          /* 计算字序数 */
  if(xxttl_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);            /* 否则,提示:请先定义块 */
}

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);           /* 否则,提示:请先定义块 */
}

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;                     /* 保存原块标记有用参数 */
    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);           /* 否则,提示请先定义块! */
}

来源:http://www.tulaoshi.com/n/20160219/1603786.html

延伸阅读
什么时候会用到全屏幕模式? 也许用到的机会很少,但JDK还是为我们提供了这个的功能。像许多软件中的打印预览功能,还有某些文本编辑器中为了获得更大的编辑画面,也用到了全屏幕模式,假如你有爱好写一个像ACDSee这样的软件,使用全屏幕模式可以让用户看到更大的图片画面。 如何使用全屏幕模式? 要害是Jav...
标签: 电脑入门
最近用ppt2010播放幻灯片时发现无法全屏,有时候竖直方向满屏了,横向无法铺满。这个问题困扰我了很久,最后发现是设置问题。解决方法如下: 打开PowerPoint2010页面设置(菜单文件--页面设置): 根据自己电脑屏幕大小,设置幻灯片大小: 然后,再播放幻灯片试试看,是不是全屏了呢?如果还是不行,就继续调整上述页面设置中的幻灯片大小...
Visual C#是微软公司推出的新一代程序开发语言,是微软.Net框架中的一个重要组成部分。屏幕保护程序是以scr为扩展名的标准Windows可执行程序。屏幕保护程序不仅可以延长显示器的使用寿命,还可以保护私人信息。本文向大家介绍一个.Net平台上用C#编写的一个动态文本及图形的屏幕保护程序。 一、具体实现步骤: (1)在Visual Stud...
C# Builder是Borland公司推出的又一款基于.NET的开发工具。我们下面就用它做个简单的屏幕保护程序。屏幕保护程序是以scr为扩展名的标准Windows可执行程序。屏幕保护程序不仅可以延长显示器的使用寿命,还可以保护私人信息。本文向大家介绍一个用C# Builder编写的一个动态文本及图形的屏幕保护程序。 具体实现步骤 1)在C# Builder下新建...
简介 模拟银行的钱数大写输出例如 345 叁肆伍 方法/步骤 首先打开VC++ 文件》》》新建 创建一个C++空白文档 先声明头文件 代码如下: #includestdio.h   声明变量 代码如下: char *p[10]={"零","一","二","三","四","五","六","七","八","九"};   由于用到了自定义函数,所以先声明 代码如下: vo...

经验教程

260

收藏

93
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部