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

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

📁 全屏幕编辑软件
💻 TXT
📖 第 1 页 / 共 2 页
字号:
    clear_ques();                  /* 清提问区 */
    write_prompt(6);               /* 提示文件未找到 */
    return;                        /* 退出本功能 */
  }
  chg=1;                           /* 文件已修改标志置为真 */
  txx=xx;                          /* 保存文本行号 */
  tyy=yy;                          /* 保存文本列号 */
  *hsz=0;                          /* 字符串置为空串 */
  g=0;                             /* 累计读入行数置初值 0 */
  for(;;)  {                       /* 分批读入的循环 */
    ddd=malloc(KK+1);              /* 给 ddd 分配内存 */
    dd=ddd;                        /* 保存 ddd 首指针 */
    j=fread(ddd,sizeof(char),KK,fp3);       /* 读文件KK字节至ddd */
    v=0;                           /* 本次读入行数置初值 0 */
    while(*ddd) {                  /* *ddd 为真则循环 */
      if(*ddd==0x1A)  {            /* 以 '\0' 代替文件结束符 */
        *ddd=0;
        break;                     /* 退出循环 */
      }
      if(*ddd++==0x0A) {           /* 计算读入行数 */
        ++v;                       /* 本次循环读入行数加 1 */
        ++g;                       /* 累计读入行数加 1 */
      }
    }
    ddd=dd;                        /* 恢复指针到指针头 */
    v+=xx;                         /* 计算本次拷入后光标行号 */
    write_block(v);                /* ddd 中内容拷入当前位置 */
    ddd=dd;                        /* 恢复 ddd 指针到指针头 */
    free(ddd);
    if(j<KK)  break;               /* 读入字节数小于 KK 时,文件已读完 */
  }
  if(txx<ksx) ksx+=g;       /* 如当前行在块首行前,块首行号增加读入文件行数 */
  else {                           /* 如当前行不在块首行前 */
    if(txx==ksx && tyy<=ksy) {     /* 如当前行为块首行,当前列在块首列前 */
      ksx+=g;                      /* 块首行行号增加 g */
      ksy+=yy-tyy;                 /* 计算块首列列号 */
    }
  }
  if(txx<kwx) kwx+=g;              /* 如当前行在块尾行后,块尾行行号增加 g */
  else {                           /* 如当前行不在块尾行后 */
    if(txx==kwx && tyy<=kwy) {     /* 如当前行在块尾行,并在块尾列前 */
      kwx+=g;                      /* 块尾行行号加 g */
      kwy+=yy-tyy;                 /* 计算块尾列列号 */
    }
  }
  comp_disp();                     /* 计算显示参数,重显当前屏幕 */
  fclose(fp3);                     /* 关闭外部文件 */
  clear_ques();                    /* 清提问区 */
}
Ctrl_P()                           /* 当前编辑文本的打印 */
{
  FILE *fpw,*fpr;
  unsigned char prt[255];
  int i,j,k,a,b=0,pg;
  write_ques(8);                   /* 提问每页打印行数 */
  if((j=key_digit(22))<=0) {       /* 输入行数,如为空串或按 ESC 键 */
    clear_ques();                  /* 清提问区 */
    return;                        /* 退出本功能 */
  }
  write_ques(12);                  /* 提问页号位置 */
  if((k=key_digit(20))<=0) {       /* 输入起始列号,如为空串或按 ESC 键 */
    clear_ques();                  /* 清提问区 */
    return;                        /* 退出本功能 */
  }
  write_ques(13);                  /* 提问起始页号 */
  if((pg=key_digit(16))<=0) {      /* 输入起始页号,如为空串或按 ESC 键 */
    clear_ques();                  /* 清提问区 */
    return;                        /* 退出本功能 */
  }
  Shift_F1();                      /* 存盘不退出 */
  if((fpr=fopen(mfile,"rb"))==NULL) { /* 打开主文件,指针赋于 fpr,如失败返回 */
    clear_ques();                  /* 清提问区 */
    return;                        /* 退出本功能 */
  }
  fpw=fopen("PRN","w");            /* 打开设备文件(打印机),指针赋于 fpw */
  while(1) {                       /* 为分页打印设的循环 */
    write_ques(10);                /* 提示:调整好打印机,按一键开始打印 */
    if(gett()==-1||tpt()==-1) {    /* 测打印机,如按 Esc 键 */
      fclose(fpr);                 /* 关闭 fpr */
      clear_ques();                /* 清提问区 */
      return;                      /* 返回 */
    }
    for(i=0;i<j;i++) {             /* 为一页内分行打印设的循环 */
      if(fgets(prt,255,fpr)==NULL) {    /* 从 fpr 读入一行至 prt, 如失败 */
         while(i++<j) {            /* 未打满一页则循环 */
           fprintf(fpw,"\n");      /* 打印一空行 */
           b=1;                    /* 文件结束标志置 1 */
         }
         break;                    /* 跳出 for 循环 */
      }
      for(a=0;prt[a];a++) {        /* 去除字符串中的回车换行符 */
        if(prt[a]==0x0D || prt[a]==0x8D)   break;
      }
      prt[a]=0;                    /* 字符串以 '\0' 定界 */
      fprintf(fpw,"%s\n",prt);     /* 打印一行 */     
    }
    fprintf(fpw,"\n");             /* 走纸一行 */
    for(a=0;a<k;a++) fprintf(fpw," ");    /* 打印页号前空格 */
    fprintf(fpw,"·%d·\n",pg++);  /* 打印页号 */
    if(b) break;                   /* 如打印完全文,退出循环 */
  }
  clear_ques();                    /* 清提问区 */
  fclose(fpr);                     /* 关闭打印的文本文件 */
  fclose(fpw);                     /* 关闭打印机文件 */
}
int tpt()                         /* 打印机状态测试 */
{
  while(1)  {                     /* 为重复测试建的循环 */
    if(inp(0x379)==0xDF)  break;  /* 取 0x379 端口值,如等于 0xDF, 跳出循环 */
    else  write_ques(9);          /* 否则提示打印机未准备好 */
    if(gett()==-1)   {            /* 等待按键,Esc 键返回 -1,否则继续循环 */
      clear_ques();               /* 清提问区 */
      return -1;                  /* 返回 -1 */
    }
  }
  write_ques(11);                 /* 提示“正在打印....” */
  return 0;                       /* 返回 0 */
}

Esc()                             /* 放弃存盘,退出编辑 */
{
  if(chg) {                       /* 如文本已修改过 */
    write_ques(0);                /* 提问:是否放弃并退出编辑 */
    if(key_yn(26)<1) {            /* 如输入 N */
      clear_ques();               /* 清提问区 */
      return;                     /* 返回,继续编辑 */
    }
  }
  bk();                           /* 退出程序,至 DOS 下 */
}

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

Chr()                             /* 输入字符 */
{
  static bb=0;                    /* 定义一个静态变量作为全角一、三区字符标志 */
  int j,g,k;
  if(cc.ch[0]==0xF0 && cc.ch[1]==76)  return;   /* 屏蔽小键盘中间键 */
  if(cc.ch[0]>31) {               /* 屏蔽控制键 */
    chg=1;                        /* 文件已修改标志置为真 */
    qq=0;                         /* 全角制表符标志变量初始化 */
    make_tab();                   /* 如表线开关为开,产生表格线 */
AA: z2=cc.ch[0];                  /* 将字符放入 z2 */
    if(yy>=enq)  {                /* 如在排版宽度以后 */
      if(vs(enq-1)==0) {          /* 如排版长度处不为全角后半部 */
        if(yy==enq) {             /* 如写在排版长度处 */
          if(z2<160)  {           /* 如为半角字符 */
            if(punc1(z2))  goto BB;   /* 如为指定标点符号,转写入字符串 */
            else k=enq;           /* 如不是,在此处折断 *

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

          }
          else  {                 /* 如为全角字符 */
            if(z2==161 || z2==163)  {  /* 如第一字节在一、三区 */
              z1=z2;              /* 输入字符从 z2 移入 z1 暂存 */
              bb=1;               /* 全角一、三区标志置 1 */
              goto BB;            /* 先写入字符串 */
            }
            else k=enq;           /* 否则在此处折断 */
          }
        }
        else  {                   /* 如在排版长度之后 */
          if(bb && punc2(z1,z2))  goto BB;
                                  /* 如为指定全角标点符号,写入字符串 */
          else  {                 /* 否则检查排版长处字符 */
            bb=0;                 /* 全角一、三区标志 bb 恢复初值 */
            a1=ss[ss_x][enq];     /* 排版长处取一字节,放入 a1 */
            if(a1<160)  {         /* 如为半角字符 */
              if(punc1(a1)) k=enq+1; /* 如为指定半角标点,折断处后移一字节 */
              else k=enq;         /* 否则原处折断 */
            }
            else  {               /* 如为全角字符 *

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

              a2=ss[ss_x][enq+1]; /* 再取一字节放入 a2 */
              if(punc2(a1,a2))    /* 如为指定全角标点*/
                k=enq+2;          /* 折断处后移二字节 */
              else   k=enq;       /* 否则原处折断 */
            }
          }
        }
      }
      else  {                     /* 排版长度处为全角字符后半部 */
        z1=ss[ss_x][enq-1];       /* 读出全角前半部 */
        if(yy==enq) {             /* 如写入处在排版长度处 */
          if(punc2(z1,z2))  goto BB;   /* 如为指定全角标点, 转写入字符串 */
          else  k=enq-1;          /* 否则折断处前移一字节 */
        }
        else  {                   /* 如写入在排版长之后 */
          a2=ss[ss_x][enq];       /* 检查应折断处字符 */
          if(punc2(z1,a2))        /* 如为指定全角标点 */
            k=enq+1;              /* 折断处后移一字符 */
          else  k=enq-1;          /* 否则,折断处前移一字节 */
        }
      }
      intercept(k);               /* 折断字符串换行 */
      strcpy(ss[ss_x-1]+k,ra);    /* 折断处加软回车符 0x8D0A */
      yy-=k;                      /* 计算列号 */
      comp_disp();                /* 计算参数,重显当前屏幕 *
   }
BB: g=string_lingth();            /* 计算行长(不包括回车换行符) */
    if(ins || yy==g)  {           /* 如为插入状态或写在行末 */
      if(g>HC-4)  {               /* 如行超长退回 */
        write_prompt(3);          /* 提示:行超长 */
        return;                   /* 退出 */
      }
      if(xx==ksx && yy<ksy)  ksy++;  /* 计算块坐标变化 */
      if(xx==kwx && yy<kwy)  kwy++;
      for(j=g+3;j>yy;j--)  ss[ss_x][j]=ss[ss_x][j-1];
    }                             /* 插入字符后的字符依次后移 */
    else {                        /* 如为非插入状态 */
      if(cc.ch[0]<127 && ss[ss_x][yy]>0xA0)  ss[ss_x][yy+1]=32;
                                  /* 如为半角复盖全角,全角后半字填空格 */
      if(vs(yy)==0 && cc.ch[0]>0xA0 && ss[ss_x][yy]<127
        && ss[ss_x][yy+1]>0xA0){  /* 如为全角复盖一个半角和一个全角的前半部 */
        ss[ss_x][yy+2]=32;        /* 全角后半字节填空格 */
      }

⌨️ 快捷键说明

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