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

大云南旅游

大云南旅游

2016-02-19 13:25

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

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==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();                   /* 重显一屏 */
  }
}

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

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 为真,退出运行 */
}

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

    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;              /* 跳出开关

展开更多 50%)
分享

猜你喜欢

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

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

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

编程语言 网络编程
全屏幕编辑软件的编写(C语言)01

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

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

编程语言 网络编程
全屏幕编辑软件的编写(C语言)03

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

编程语言 网络编程
全屏幕编辑软件的编写(C语言)05

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

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

编程语言 网络编程
全屏幕编辑软件的编写(C语言)06

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

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

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Bean和Servlet的企业应用

Bean和Servlet的企业应用

罗云彬VxD教程--DeviceIoControl接口

罗云彬VxD教程--DeviceIoControl接口
下拉加载更多内容 ↓