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

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

📁 全屏幕编辑软件
💻 TXT
📖 第 1 页 / 共 2 页
字号:
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 */
}

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

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 */
  }
}

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

intercept(int ky)                  /* 折断字符串,换行,ky 为折断处列号 */
{
  if(xx<ksx) ksx++;                /* 如在块首行前,块首行号加 1 */
  else if(xx==ksx && ky<=ksy) {    /* 否则,如为块首行,当前列在块首列前 */
         ksx++;                    /* 块首行号加 1 */
         ksy-=ky;                  /* 计算块首列号 */
       }
  if(xx<kwx)  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_x>Q1 ? wfp1() : wfp2();     /* 当前数组行在 Q1 后时,上部 Q3 行存入 fp1,
                                      行数小于 Q1 时,下部 Q3 行存入 fp2 */
  mov(ss_x,1);                     /* 缓冲区数组当前行以后顺移一行 */
  strcpy(ss[ss_x],ss[ss_x-1]+ky);  /* 折断处后字符放入新行 */
  if(x<H3) x++;                    /* 如未到屏幕文本区底行,光标下移一行 */
 m=0;                             /* 到 0 屏 */
}
PgUp()                             /* 上翻一屏 */
{
  long a;
  if(xx-x>0)  {                    /* 如不在文首屏 */
    a=(xx<=H3-2)?0:xx-H3+2;        /* 定目标行号 */
    upto(a);                       /* 上移至目标行 */
    comp_disp();                   /* 重显一屏 */
  }
}

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

PgDn()                             /* 向下翻屏 */
{
  long a;
  if(xx<ttl_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(yy<g) {                     /* 如不在行末 */
      y++;                         /* 屏幕光标右移一列 */
      yy++;                        /* 文本列号加 1 */
      ser++;                       /* 字序号增 1 */
      if(y>ZS-1)  comp_disp();     /* 如到屏幕最右侧,计算显示参数,重显一屏 */
    }
    else  {                        /* 如在行末 */
      if(xx<ttl_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;        /* 如不为全角前半字,退出循环 */
  }
}

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

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

Left()                             /* 左移光标键 */
{
  for(;;)  {                       /* 为全角字符设的循环 */
    if(yy>0) {                     /* 如不在行首 */
      y--;    yy--;                /* 左移一字节 */
      ser--;                       /* 字序号减 1 */
      if(y<0) comp_disp();         /* 如移至前屏, 计算参数, 重显一屏 */
    }
    else {                         /* 如在行首 */
      if(xx) {                     /* 如在不文首行 */
        xx--;                      /* 到上一行 */
        ss_x--;                    /* 数组行号加 1 */
        ser-=2;                    /* 字序数减少回车换行符占的 2 字节 */

⌨️ 快捷键说明

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