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

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

📁 全屏幕编辑软件
💻 TXT
📖 第 1 页 / 共 2 页
字号:
        j++;                          /* 后移一字节 */
      }
    }
    if(u%2)  n++;              /* 如本屏串尾是汉字前半字节,再多显示一字节 */
    *(s+n)=0;                         /* 截除本屏后字符 */
    strcpy(s,s+k);                    /* 去除本屏前字符,s 即为本屏显示的串 */
  }
  ux=xx-x+i;                          /* 计算本行的文本行号 */
  q=strlen(s);                        /* 测 s 字符串长 */
  for(;;)  {                          /* 为文本行显示设的循环 */
    if(ux<ksx || ux>kwx) {            /* 如本行在块首行前或块尾行后 */
      write_string(i,0,s,TEXT_COLOR); /* 以文本色显示本行 */
      break;                          /* 跳出循环 */
    }
    if(ux==kwx)  {                    /* 如本行为块尾行 */
      if(kwy>=k)  {                   /* 如块尾在本屏首字节之后 */
        if(kwy<=n)  {                 /* 如块尾在本屏末字节之前 */
          if(blck==1) {               /* 如只设置了块首 */
            if(*(s+kwy-k)>0xA0)       /* 如块首后一字节为全角 */
              jv=kwy-k+2;             /* 后移二字节开始显示文本色 */
            else jv=kwy-k+1;          /* 如为半角,后移一字节开始 */
          }
          else  jv=kwy-k;             /* 如已完整定义块,从块尾位置开始 */
          write_string(i,jv,s+jv,TEXT_COLOR);    /* 用文本色显示块后字串 */
          *(s+jv)=0;                  /* 截除块尾后字节 */
        }
      }
      else  {                         /* 如块尾在本屏首字节前 */
        write_string(i,0,s,TEXT_COLOR);    /* 用文本色显示字符串 */
        break;                        /* 跳出循环 */
      }
    }                       
    if(ux==ksx && ksy>=k)  {          /* 如本行为块首行,块首列在本屏首后 */
      if(ksy<=n)  {                   /* 如块首列在本屏末字节前 */
        jv=ksy-k;                     /* 从块首位置开始显示 */
        write_string(i,jv,s+jv,BLCK_COLOR);      /* 用字块色显示字块 */
        *(s+jv)=0;                    /* 在 s 中截除块首后字节 */
      }
      write_string(i,0,s,TEXT_COLOR); /* 用文本色显示剩余部分 */
    }
    else write_string(i,0,s,BLCK_COLOR);
                            /* 如块首列在前屏或为块的其它行,用字块色显示 */
    break;                            /* 跳出循环 */
  }
  write_space(i,q,FH+1-q,TEXT_COLOR); /* 用空格复盖本行串尾后屏幕 */
  if(q>=ZS)  write_char(i,FH,'+',CHAR_COLOR);
                                      /* 如串尾在以后屏,标志行显示“+” */
  else  {                             /* 如串尾不在以后屏 */
    if(ss[a][g]==0x8D)   write_char(i,FH,'.',CHAR_COLOR);
                                      /* 如串尾为软回车,标志行显示“.” */
    if(ss[a][g]==0x0D)   write_char(i,FH,'<',CHAR_COLOR);
                                      /* 如串尾为硬回车,标志行显示“<” */
  }
  free(s);                            /* 释放 s 占用的内存空间 */
}
disp_t()                              /* 显示一屏 */
{
  int i;
  for(i=0;i<=H3;i++) {                /* 为逐行显示设置的循环 */
    cc.ii=bioskey(1);                 /* 判断是否按键 */
    if(xx-x && xx<ttl_x && cc.ch[0]==0 &&
           (cc.ch[1]==81 || cc.ch[1]==73 || cc.ch[1]==62))
       return;                        /* 如连续按 PgUp、PgDn、F4 键,则返回 */
    else {
       if(xx-x+i>ttl_x) write_space(i,0,80,TEXT_COLOR);
                                      /* 如超出文末行,清文末行后屏幕 */
       else disp(ss_x-x+i,i);         /* 否则显示一行 */
    }
  }
}

int key_digit(int e)                  /* 在 HH 行输入数字,e 为列坐标 */
{
  char a[16];
  int k=0;
  while(1)  {                         /* 为输入数字串设的循环 */
    goto_xy(HH,e+k);                  /* 定光标位置 */
    cc.ii=bioskey(0);                 /* 接收一个按键值 */
    clear_prompt();                   /* 清提示区 */
    if(!cc.ch[0])                     /* 如低位字节为 0 */
      switch(cc.ch[1])  {             /* 判断高位字节 */
        case 75:                      /* 如为 Del 键或左移光标键 */
        case 83: goto AA;             /* 跳转 AA */
      }
    else                              /* 如低位字节不为 0 */
      switch(cc.ch[0])  {             /* 判断低位字节 */
        case 27: return -1;           /* ESC 键退回 */
        case 13: a[k]=0;              /* 按回车时确认值 */
                 if(!k) return 0;     /* 如未输入数字,返回 0 */
                 return atoi(a);      /* 否则,返回输入的数值 */
        case 8:                       /* 如为退格键 */
 AA:      if(k) {                     /* 如不在首字节 */
            a[--k]=0;                 /* 后退一字节填 '\0' */
            write_char(HH,e+k,' ',PROM_COLOR);   /* 原显示字节用空格复盖 */
          }
          break;                      /* 跳出开关语句 */
        case 3:  bk();                /* Ctrl+C 退至DOS下 */
        default:
          if(cc.ch[0]>47 && cc.ch[0]<58) { /* 如为数字 */
            if(!k) write_space(HH,e,6,PROM_COLOR);
                                      /* 如在首字节,用空格复盖原显示 */
            a[k]=cc.ch[0];            /* 字符写入字符串中 */
            write_char(HH,e+k,a[k],PROM_COLOR);      /* 显示字符 */
            k++;                      /* 移至下一位置 */
          }
          else  write_prompt(4);      /* 否则响铃,提示,返回重输 */
    }    
  }
}

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

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

int key_string(int j,int e,unsigned char a[],int d)  /* 输入字符串 */
{                                     /* j 行坐标,e 列坐标,a字符串,d显示属性 */
  int i,k=0,jv;
  while(1)  {                         /* 为输入字符串设的循环 */
    goto_xy(j,e+k);                   /* 光标定位 */
    cc.ii=bioskey(0);                 /* 读击键值 */
    if(!cc.ch[0])                     /* 如低位字节为 0 */
      switch(cc.ch[1])  {             /* 判断高位字节 */
        case 75:                      /* 如为删除键或左移箭头键,跳转AA */
        case 83: goto AA;
        case 73: a[0]=0;              /* PgDn 键,返回 -4 */
                 return -4;
        case 81: a[0]=0;              /* PgUp 键,返回 -5 */
                 return -5;
      }
    else                              /* 如低位字节不为 0 */
      switch(cc.ch[0]) {              /* 判断低位字节 */
        case 27: return -1;           /* ESC 键,返回 -1 */
        case 13: a[k]=0;              /* 如为回车键,确认 */
                 return k;            /* 返回输入的字节数 */
        case 3:  bk();                /* Ctrl+C 键,返回 DOS 下 */
        case 8:                       /* 如为退格键 */
AA:       if(k)  {                    /* 如不为空串 */
            for(;;) {                 /* 为删除全角字符设的循环 */
              a[--k]=0;               /* 前移一字节,填 '\0' */
              write_char(j,e+k,' ',d);/* 空格复盖显示字节 */
              jv=0;                   /* jv 置初值 0 */
              for(i=0;i<k;i++)        /* 为统计全角字节数设的循环 */
                if(a[i]>0xA0) jv++;   /* 如为全角字节,jv 加 1 */
              if(jv%2==0)  break;     /* 如为偶数,退出 for 循环 */
            }
          }
          continue;                   /* 继续循环 */
        default:
          if(cc.ch[0]>31) {           /* 如不为控制字符 */
            a[k++]=cc.ch[0];          /* 写入字符串 */
            a[k]=0;  a[k+1]=0;        /* 字符串结尾 */
            write_string(j,e,a,d);    /* 重显字符串 */
          }
      }
  }
}
int key_yn(int e)                     /* 输入 Y 或 N */
{
  char sf='N';                        /* 置初值为 N */
  while(1)  {
    write_char(HH,e,sf,PROM_COLOR);   /* 在提问行显示字符 */
    if(e==59) goto_xy(x,y);           /* 替代操作时,光标定在找到的字符串尾 */
    else goto_xy(HH,e);               /* 其余情况下,光标定在提问行 */
    cc.ii=bioskey(0);                 /* 读一击键值 */
    clear_prompt();                   /* 清提示区 */
    if(cc.ch[0])                      /* 如低位字节不为 0 */
      switch(cc.ch[0])  {             /* 判断低位字节 */
        case 27:  return -1;          /* ESC 键,返回 -1 */
        case 3 :  bk();               /* Ctrl+C 键,返回 DOS 下 */
        case 13:  if(sf=='Y') return 1;    /* 回车键,输入 Y 返回 1 */
                  else return 0;      /* 否则返回 0 */
        default:
          if(cc.ch[0]=='y'||cc.ch[0]=='n'||cc.ch[0]=='Y'||cc.ch[0]=='N') {
                                      /* 如为 Y 或 N */
            sf=toupper(cc.ch[0]);     /* 变为大写放入 sf */
            write_char(HH,e,sf,PROM_COLOR);   /* 显示字符 */
          }
          else write_prompt(5);       /* 否则,提示必须输入 Y 或 N */
      }
  }
}

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

int gett()                            /* 输入用户反应 */
{
  cc.ii=bioskey(0);                   /* 读击键值 */
  switch(cc.ch[0])  {                 /* 根据低位码比较 */
    case 27 :  return -1;             /* Esc 键返回 -1 */
    case 3  :  bk();                  /* Ctrl+C 键退出运行 */
    default :  return 0;              /* 按其他键返回 0 */
  }
}

⌨️ 快捷键说明

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