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

2016-02-19 13:25 6 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享全屏幕编辑软件的编写(C语言)04教程,希望对大家能有一点小小的帮助。

【 tulaoshi.com - 编程语言 】

ss[ss_x][yy]=z2;              /* 将字符读入编辑数组 */
    y++;                          /* 屏幕光标后移一列 */
    yy++;                         /* 后移一字节 */
    ser++;                        /* 字序号增 1 */
    if(qq)  {                     /* 如为全角制表符 */
      qq=0;                       /* 表格线标志变量置 0 */
      cc.ch[0]=two;               /* 暂存在two中的表格线第二字节放入cc.ch[0] */
      goto AA;                    /* 返回 AA,进行排版,并写入第二字节 */
    }
    if(vs(yy-1)) return;          /* 如为前半字节,再读入一字节 */
    if(y=ZS)  {                  /* 如到本屏行尾 */
      m++;                        /* 后移一屏 */
      disp_t();                   /* 显示后一屏 */
    }
    else disp(ss_x,x);            /* 否则重显本行 */
  }
}

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

int punc1(unsigned char z)        /* 检查是否是指定的半角标点或空格 */
{
  if(z==33||z==41||z==44||z==46||z==58||z==59||z==63||z==93||z==32)
    return 1;                     /* 如是指定标点,返回 1 */
  else  return 0;                 /* 否则返回 0 */
}

int punc2(unsigned char z1,unsigned char z2)   /* 检查是否是指定的全角标点 */
{
   if((z1==161&&(z2==162||z2==163||z2==164||z2==175||z2==177||z2==179
      ||z2==181||z2==183||z2==185||z2==187||z2==189||z2==191||z2==195))
      ||(z1==163&&(z2==161||z2==169||z2==172||z2==174||z2==186||z2==187
      ||z2==191||z2==221)))   return 1;  /* 如是,返回 1 */
   else return 0;                        /* 否则返回 0 */
}

make_tab()                         /* 形成表格线 */
{
  if(tab && cc.ch[1]70 && cc.ch[1]82 && cc.ch[0])  {
                                   /* 如为表格线状态,并是小键盘的数字键 */
    switch(cc.ch[0])  {            /* 判断按键低位码 */
      case 45: two=0xA5;           /* 如为-键,定━的第二字节 */
               break;              /* 跳出开关语句 */
      case 43: two=0xEF;           /* 如为+键,定╋的第二字节 */
               break;              /* 跳出开关语句 */
      case 49: two=0xBB;           /* 如为1键,定┗的第二字节 */
               break;              /* 跳出开关语句 */
      case 50: two=0xDF;           /* 如为2键,定┻的第二字节 */
               break;              /* 跳出开关语句 */
      case 51: two=0xBF;           /* 如为3键,定┛的第二字节 */
               break;              /* 跳出开关语句 */
      case 52: two=0xC7;           /* 如为4键,定┣的第二字节 */
               break;              /* 跳出开关语句 */
      case 53: two=0xA7;           /* 如为5键,定┃的第二字节 */
               break;              /* 跳出开关语句 */
      case 54: two=0xCF;           /* 如为6键,定┫的第二字节 */
               break;              /* 跳出开关语句 */
      case 55: two=0xB3;           /* 如为7键,定┏的第二字节 */
               break;              /* 跳出开关语句 */
      case 56: two=0xD7;           /* 如为8键,定┳的第二字节 */
               break;              /* 跳出开关语句 */
      case 57: two=0xB7;           /* 如为9键,定┓的第二字节 */
               break;              /* 跳出开关语句 */
    }
    cc.ch[0]=0xA9;                 /* 定表格线第一字节 */
    qq=1;                          /* 表格线字符标志置 1 */
  }
}

intercept(int ky)                  /* 折断字符串,换行,ky 为折断处列号 */
{
  if(xxksx) ksx++;                /* 如在块首行前,块首行号加 1 */
  else if(xx==ksx && ky=ksy) {    /* 否则,如为块首行,当前列在块首列前 */
         ksx++;                    /* 块首行号加 1 */
         ksy-=ky;                  /* 计算块首列号 */
       }
  if(xxkwx)  kwx++;               /* 如当前行在块尾行前,块尾行号加 1 */
  else if(xx==kwx && ky=kwy) {    /* 如在块尾行的块尾列前 */
         kwx++;                    /* 块尾行号增 1 */
         kwy-=ky;                  /* 计算块尾列号 */
       }
  xx++;                            /* 当前行至下行 */
  ss_x++;                          /* 到下行 */
  fp_rd++;                         /* fp已读出行最大行号加 1 */
  ttl_x++;                         /* 文末行行号加 1 */
  ss_max++;                        /* 数组已用最大行号增 1 */
  ser+=2;                          /* 字序数增回车换行符占用的 2 字节 */
  if(ss_max=QB-1)                 /* 如数组超过 QB 行 */
    ss_xQ1 ? wfp1() : wfp2();     /* 当前数组行在 Q1 后时,上部 Q3 行存入 fp1,
                                      行数小于 Q1 时,下部 Q3 行存入 fp2 */
  mov(ss_x,1);                     /* 缓冲区数组当前行以后顺移一行 */
  strcpy(ss[ss_x],ss[ss_x-1]+ky);  /* 折断处后字符放入新行 */
  if(xH3) x++;                    /* 如未到屏幕文本区底行,光标下移一行 */
  m=0;                             /* 到 0 屏 */
}

PgUp()                             /* 上翻一屏 */
{
  long a;
  if(xx-x0)  {                    /* 如不在文首屏 */
    a=(xx=H3-2)?0:xx-H3+2;        /* 定目标行号 */
    upto(a);                       /* 上移至目标行 */
    comp_disp();                   /* 重显一屏 */
  }
}

PgDn()                             /* 向下翻屏 */
{
  long a;
  if(xxttl_x)  {                  /* 如未到文末行 */
    a=(ttl_x-xx=H3-2)?xx+H3-2:ttl_x;
                         /* 定目标行号:到文末行数不到翻屏行数时取总行数 */
    dnto(a);                       /* 下移至第 a 行 */
    disp_t();                      /* 重显一屏 */
  }
}

Right()                            /* 右移光标键 */
{
  int g;
  g=string_lingth();               /* 计算不包括回车换行符的行长 */
  for(;;)  {                       /* 为全角字符设立的循环 */
    if(yyg) {                     /* 如不在行末 */
      y++;                         /* 屏幕光标右移一列 */
      yy++;                        /* 文本列号加 1 */
      ser++;                       /* 字序号增 1 */
      if(yZS-1)  comp_disp();     /* 如到屏幕最右侧,计算显示参数,重显一屏 */
    }
    else  {                        /* 如在行末 */
      if(xxttl_x) {               /* 如不在文末行 */
        ss_x++;    xx++;           /* 至下一行 */
        if(ss_x=ss_max)  tj();    /* 如超出缓冲区数组中已存最大行,补充数组行 */
        yy=0;                      /* 至行首 */
        ser+=2;                    /* 计算字序数 */
        if(x==H3) {                /* 如在屏幕文本区最底行 */
          if(m==0) {               /* 如原为 0 屏 */
            roll_scr_up(0,H3);     /* 向上滚屏 */
            disp(ss_x,x);          /* 下部补显一行 */
          }
          else {                   /* 如原不为 0 屏 */
            m=0;
            disp_t();              /* 显示 0 屏 */
          }
        }
        else  {                    /* 如不在屏底行 */
          x++;                     /* 屏幕光标下移一行 */
          if(m)  {                 /* 如不是 0 屏 */
            m=0;
            disp_t();              /* 显示 0 屏各行 */
          }
        }
      }
      else  break;                 /* 如在文末行尾,退出循环 */
    }
    if(vs(yy-1)==0)  break;        /* 如不为全角前半字,退出循环 */
  }
}

Left()                             /* 左移光标键 */
{
  for(;;)  {                       /* 为全角字符设的循环 */
    if(yy0) {                     /* 如不在行首 */
      y--;    yy--;                /* 左移一字节 */
      ser--;                       /* 字序号减 1 */
      if(y0) comp_disp();         /* 如移至前屏, 计算参数, 重显一屏 */
    }
    else {                         /* 如在行首 */
      if(xx) {                     /* 如在不文首行 */
        xx--;                      /* 到上一行 */
        ss_x--;                    /* 数组行号加 1 */
        ser-=2;                    /* 字序数减少回车换行符占的 2 字节 */
        yy=string_lingth();        /* 至行末 */
        if(x0)  {                 /* 如不在本屏首行 */
          x--;                     /* 到屏幕上一行 */
          comput();                /* 计算参数 */
          if(m) disp_t();          /* 如不为 0 屏,重显一屏 */
        }
        else  {                    /* 如在本屏首行 */
          if(ss_x==0)  st();       /* 如已到数组首行,从fp1补充Q3行至数组上部 */
          comput();                /* 计算参数 */
          if(!m) roll_scr_down(0,H3);   /* 如上移行尾在 0 屏,下滚一屏 */
          else   disp_t();         /* 否则重显所在屏  */
        }
      }
    }
    if(vs(yy-1)==0)   break;       /* 如不在全角前半字,退出循环 */
  }
}

Up()                               /* 上移一行 */
{
  int k;
  if(xx) {                         /* 如不在文首行 */
    if(!ss_x) st();                /* 如到编辑数组第一行,从 fp1 读入 Q3 行 */
    xx--;                          /* 上移一行 */
    ss_x--;                        /* 编辑数组行号减 1 */
    ser-=yy+2;                     /* 计算上行末字序数 */
    k=m;                           /* 保存原屏号 */
    if(x0)  {                     /* 如不在本屏起始行 */
      x--;                         /* 屏幕光标上移一行 */
      orien();        /* 判断上移后光标是否在串尾后,如在串尾后,光标定于串尾 */
      if(m!=k)  disp_t();          /* 如不在原屏,重显一屏 */
    }
    else  {                        /* 如在本屏起始行 */
      orien();        /* 判断光标是否在串尾后,如在串尾后,定光标于串尾 */
      if(m==k) roll_scr_down(0,H3);/* 如仍在原屏,向下滚屏 */
      else  disp_t();              /* 否则显示串尾所在屏 */
    }
    ser-=string_lingth()-yy;       /* 计算字序数 */
  }
}

Down()                             /* 下移一行 */
{
  int k,l;
  l=string_lingth();               /* 计算行长(不包括回车换行符) */
  if(xxttl_x)  {                  /* 如不在文末行 */
    ss_x++;   xx++;                /* 下移一行 */
    ser+=l-yy+2;                   /* 计算下行首字序数 */
    if(ss_x=ss_max) tj();         /* 如超出编辑数组,从 fp2 或 fp 补充 */
    k=m;                           /* 保存原屏号 */
    if(xH3)  {                    /* 如不在屏幕文本区最下一行 */
      x++;                         /* 屏幕光标下移一行 */
      orien();           /* 判断光标是否在串尾后,如在串尾后,定光标于串尾 */
      if(m!=k) disp_t();           /* 如不在原屏,重显一屏 */
    }
    else  {                        /* 如光标在屏幕文本区最后一行 */
      orien();                     /* 重定列号 */
      if(m==k) {                   /* 如在原屏 */
        roll_scr_up(0,H3);         /* 向上滚屏 */
        disp(ss_x,x);              /* 屏幕最下行补显一行 */
      }
      else  disp_t();              /* 如不在原屏,重显一屏 */
    }
    ser+=yy;                       /* 计算字序数 */
  }
}

Ins()                                  /* 插入/非插入状态切换 */
{
  if(!ins)  {                          /* 如 ins 为假 */
    ins=1;                             /* 转置 ins 为 1 */
    write_string(H1,0,"插入",0x4E);    /* 在信息行显示插入二字 */
  }
  else  {                              /* 如 ins 为真 */
    ins=0;                             /* 转置 ins 为 0 */
    write_space(H1,0,4,0x0E);          /* 用空格盖掉插入二字 */
  }
}

Home()                             /* 移至行首 */
{
  ser-=yy;                         /* 计算字序数 */
  yy=0;                            /* 到行首列 */
  if(m)  {                         /* 如不是 0 屏 */
    m=0;
    disp_t();                      /* 显示 0 屏各行 */
  }
}

End()                              /* 到行末 */
{
  int i,g;
  i=m;                             /* 保存屏号 */
  g=string_lingth();               /* 计算字符串长(不包括回车换行符) */
  ser+=g-yy;                       /* 计算字序数 */
  yy=g;                            /* 当前位置移至行末 */
  comput();                        /* 计算各参数 */
  if(i!=m)  disp_t();              /* 如不在原屏,重显一屏 */
}

comp_disp()                        /* 计算参数,重显一屏 */
{
  comput();                        /* 计算各参数 */
  disp_t();                        /* 显示一屏 */
}

comput()                           /* 根据 yy 计算屏号 m、y 等参数 */
{
  m=yy/BP;                         /* 计算屏号 */
  if(m)  m--;                      /* 如不为 0 屏,屏号减 1 */
  y=yy-m*BP;                       /* 计算屏幕显示列坐标 y */
  if(xx-x0) x=xx;       /* 如 xx-x 小于屏幕行坐标,行坐标取内存数组当前行号 */
}

mvto(long a)                       /* 移到指定行 a */
{
  yy=tyy;                          /* 恢复原列号 */
  if(a=xx)  upto(a);              /* 如目标行在当前行或之前,前移至目标行 */
  else  dnto(a);                   /* 如目标行在当前行后,后移至目标行 */
}

F1(int a)                          /* 文本存盘,a=1 退出,a=0 不退出 */
{
  unsigned int i,j;
  long b;
  if(chg) {                        /* 如文件已修改过 */
    write_prompt(0);               /* 提示请稍候... */
    if(!findfirst(bfile,pt,0))     /* 如有后备文件 */
      remove(bfile);               /* 删除原后备文件 */
    if(old) {                      /* 如原有老文件 */
      b=ftell(fp);                 /* 测出老文件当前读写指针位置 */
      fclose(fp);                  /* 关闭老文件 */
      rename(mfile,bfile);         /* 改为带扩展名 BAK 的后备文件 */
    }
    fp3=fopen(bfile,"rb");         /* 打开后备文件,文件指针赋于 fp3 */
    fp=fopen(mfile,"wb+");         /* 重建正文文件,文件指针仍放 fp 中 */
    ddd=malloc(KK);                /* 为 ddd 分配内存 */
    i=0;                           /* i 置初值 0 */
    while(ioa)  {                 /* fp1 中记录并入 fp */
      fseek(fp1,wra[i++],SEEK_SET);/* fp1 指针移到读写起始处 */
      j=wra[i]-wra[i-1];           /* 计算读入字节数 */
      fread(ddd,sizeof(char),j,fp1);  /* 从 fp1 读入 j 字节至 ddd */
      fwrite(ddd,sizeof(char),j,fp);  /* 将 ddd 中内容写入 fp */
    }
    write_to(0,ss_max+1,fp);       /* 缓冲区数组的记录写入 fp */
    write_prompt(0);               /* 提示请稍候... */
    i=ob;                          /* ob 为 fp2 中最后一次读写指针数组序号 */
    while(i)  {                    /* fp2 中记录并入 fp */
      fseek(fp2,wrb[--i],SEEK_SET);/* fp2 指针移到前一读写起始处 */
      j=wrb[i+1]-wrb[i];           /* 计算读入字节数 */
      fread(ddd,sizeof(char),j,fp2);   /* 从 fp2 读入 j 字节至 ddd */
      if(*(ddd+j-1)==0)  j--;          /* 消除 wfp2() 读入文末部分时加的 '' */
      fwrite(ddd,sizeof(char),j,fp);   /* 将 ddd 中内容写入 fp */
    }
    vw=ftell(fp);                  /* 保存 fp 指针位置 */
    if(!fp_end) {                  /* 如原文件未全部读完,剩余部分拷入 fp */
      fseek(fp3,b,SEEK_SET);       /* 移至原老文件当前读写位置 */
      for(;;)  {
        j=fread(ddd,sizeof(char),KK,fp3);  /* 每次从 fp3 读入 KK 字节到 ddd */
        fwrite(ddd,sizeof(char),j,fp);     /* 将 ddd 中内容写入 fp */
        if(jKK)  break;           /* 如读出字节数不足 KK,文件已读完,退出 */
      }
    }
    else   fputc(0x1A,fp);         /* 否则加文件结束标志 */
    fclose(fp3);                   /* 关闭 fp3 */
    fclose(fp);                    /* 关闭 fp */
    free(ddd);                     /* 释放 ddd 占用的内存空间 */
  }
  if(a)  bk();                     /* 如 a 为真,退出运行 */
}

    ss[ss_x][yy]=z2;              /* 将字符读入编辑数组 */
       y++;                          /* 屏幕光标后移一列 */
      yy++;                         /* 后移一字节 */
      ser++;                        /* 字序号增 1 */
      if(QQ)  {                     /* 如为全角制表符 */
        qq=0;                       /* 表格线标志变量置 0 */
        cc.ch[0]=two;               /* 暂存在two中的表格线第二字节放入cc.ch[0] */
        goto AA;                    /* 返回 AA,进行排版,并写入第二字节 */
      }
      if(vs(yy-1)) return;          /* 如为前半字节,再读入一字节 */
      if(y=ZS)  {                  /* 如到本屏行尾 */
        m++;                        /* 后移一屏 */
        disp_t();                   /* 显示后一屏 */
      }
      else disp(ss_x,x);            /* 否则重显本行 */
    }
  } int punc1(unsigned char z)        /* 检查是否是指定的半角标点或空格 */
  {
    if(z==33z==41z==44z==46z==58z==59z==63z==93z==32)
      return 1;                     /* 如是指定标点,返回 1 */
    else  return 0;                 /* 否则返回 0 */
  } int punc2(unsigned char z1,unsigned char z2)   /* 检查是否是指定的全角标点 */
  {
     if((z1==161&&(z2==162z2==163z2==164z2==175z2==177z2==179
        z2==181z2==183z2==185z2==187z2==189z2==191z2==195))
        (z1==163&&(z2==161z2==169z2==172z2==174z2==186z2==187
        z2==191z2==221)))   return 1;  /* 如是,返回 1 */
     else return 0;                        /* 否则返回 0 */
  }
   make_tab()                         /* 形成表格线 */
  {
    if(tab && cc.ch[1]70 && cc.ch[1]82 && cc.ch[0])  {
                                     /* 如为表格线状态,并是小键盘的数字键 */
      switch(cc.ch[0])  {            /* 判定按键低位码 */
        case 45: two=0xA5;           /* 如为-键,定━的第二字节 */
                 break;              /* 跳出开关语句 */
        case 43: two=0xEF;           /* 如为+键,定╋的第二字节 */
                 break;              /* 跳出开关语句 */
        case 49: two=0xBB;           /* 如为1键,定┗的第二字节 */
                 break;              /* 跳出开关语句 */
        case 50: two=0xDF;           /* 如为2键,定┻的第二字节 */
                 break;              /* 跳出开关语句 */
        case 51: two=0xBF;           /* 如为3键,定┛的第二字节 */
                 break;              /* 跳出开关语句 */
        case 52: two=0xC7;           /* 如为4键,定┣的第二字节 */
                 break;              /* 跳出开关语句 */
        case 53: two=0xA7;           /* 如为5键,定┃的第二字节 */
                 break;              /* 跳出开关语句 */
        case 54: two=0xCF;           /* 如为6键,定┫的第二字节 */
                 break;              /* 跳出开关语句 */
        case 55: two=0xB3;           /* 如为7键,定┏的第二字节 */
                 break;              /* 跳出开关语句 */
        case 56: two=0xD7;           /* 如为8键,定┳的第二字节 */
                 break;              /* 跳出开关语句 */
        case 57: two=0xB7;           /* 如为9键,定┓的第二字节 */
                 break;              /* 跳出开关

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

来源:http://www.tulaoshi.com/n/20160219/1604185.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...

经验教程

274

收藏

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