微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题如何快速、有效地在PROTEL电路原理图中增添汉字
栏目软件操作与技巧
作者南京燕士海
发布1993-11-26
  传统的做法是,采用构造汉字元件的方法,将要注释的汉字以元件的形式存到元件库中,需要时再将它调出来,这种方法固然可取,但对于一般的用户而言,显得很不方便。
  笔者根据PROTEL中元件的存贮 格式,用TURBO C编写了一个程序,可 以将一定数量的全角字符转换成PROTEL的存贮格式,然后以“BLOCK”的形 式,读入原理图中去,程序清单见后。
  用户只要事先将要转换的汉字(最 多达2304个)存到一个文本文件中,然后 运行该程序, 就可以转换得到可读入 PROTEL原理图中的文件,更为方便的 是,每一个汉字在原理图中均可以作为 一个独立的元件来进行各种操作。
  本程序在编写时,借鉴了南京大学信息物理系93 研究生陶建华同志的思路,在此向他表示感谢!
  #include<stdio.h>
  #include<io.h>
  #include<fcntl.h>
  char matrix[32];
  unsi gned charpp[298];
  FILE* fc;
  void getmatrix(unsigned char str []){int qu,wei;
  unsigned long int addr;
  register int k,1;
  qu= (str[0])- 0xa1;
  wei= (str[1])- 0xa1;
  addr= (long)(qu* 94+ wei);
  fseek (fc, (long) addr< < 5, SEEK - SET);
  fread (matrix,1,32,fc);
  }
  main(int argc,char* argv[]);
  {
  FILE* fp1,* fp2,* fp3;
  char sfile[30],tfile[30],c;
  unsigned char stt[2],ch,ch1;
  int i,ff;
  clrscr();
  for (i = 0; i < 62; i + + ) printf (〃 - 〃 );
  textcolor(14);printf(〃 \ n\ n〃 );
  cprintf(〃 protel- Schematic Chi nese compiler〃 );
  printf(〃 \ t\ tV ersion 2.0\ n\ n \ n〃 );textcolor(14);
  cprintf(〃 Contributed by〃 );
  textcolor(15);
  cprintf(〃 Shihai Yan〃 );
  textcolor(15);
  printf(〃 \ t\ t\ t1993. 10. 21 \ n \ n〃 );for (i = 0; i < 62; i + + ) printf (〃 - 〃 )〃 ;
  if(argc< 3)
  {
  textcolor(14);printf(〃 \ n\ n\ n \ n〃 );
  cprintf(〃 Chinese source file name > 〃 );scanf(〃 % s〃 ,sfile);
  argv[1]= sfile;
  do
  {
  printf(〃 \ n〃 );
  cprintf(〃 O utput Protel file name > 〃 );
  scanf(〃 % s〃 ,tfile)
  argv[2]= tfile;
  c= '';
  if ((fp2 = fopen (argv [2], 〃 r 〃 ))!= NULL)
  {
  printf (〃 \ n% s exist, overwrite (y/ n? 〃 ,tfile);
  c= getch( );
  putchar(c);
  fclose(fp2);
  printf(〃 \ n〃 );
  }
  }
  while ((toupper (c))= = 'N');
  PRINTF (〃 \ n
  〃 );
  }
  if ((fp1 = fopen (argv[1],〃 r〃 ))
  = = NULL)
  {
  printf(〃 \ n% scannot be open!
  〃 ,argv[1]);
  exit(1);
  }
  fp2= fopen(argv[2];〃 wb〃 );
  if ((fc = fopen (〃 zk. lib 〃 , 〃 rb
  〃 ))
  = = NULL)
  {
  printf(〃 zk.lib if not found! 〃 );
  exit(2);
  }
  if((fp3 = fopen(〃 fmt. dat〃 , 〃 rb
  〃 ))
  = = NULL)
  {
  printf(〃 fmt. dat is not found!
  〃 );
  exit(3);
  }
  fread(pp,1,298,fp3);
  for(ff= 0;ff< = 175;ff+ + )
  fputc(pp[ff],fp2);
  ch= getc(fp1);
  ch1= getc(fp1);
  while(feof(fp1)= = 0)
  {
  while(ch< 128)
  {
  if(feof(fp1)! = 0)goto end1;
  ch= ch1;
  ch1= getc(fp1);
  }
  stt[0]= ch;
  stt[1]= ch1;
  for(ff= 176;ff< = 297;ff+ + )
  fputc(pp[ff],fp2);
  pp[204]= pp[204]+ 0X14;
  if(pp[204]= = 0xf0)
  {
  pp[204]= 0x00;
  pp[205]+ + ;
  }
  if(pp[205]= = 0x04
  {
  pp[205]= 0x00;
  pp[206]= pp[206]+ 0x14;
  }
  if(pp[206]= = 0xf0)
  {
  pp[206]= 0x00;
  pp[207]+ + ;
  }
  if(pp[207]= 0x04)
  {
  printf(〃 Source file is too long!
  〃 );
  exit(4);
  }
  getmatrix(stt);
  for(ff= 0;ff< 32;ff= ff+ 2)
  {
  fputc(matrix[ff],fp2);
  fputc(matrix[ff+ 1],fp2);
  fputc(0x00,fp2);
  }
  for(ff= 0;ff< 6;ff+ + )
  fputc(0x00,f02);
  ch= getc(fp1);
  ch1= getc(fp1);
  }
  end1:
  fclose(fp1);
  fclose(fp2);
  fclose(fp3);
  fclose(fc);
  (南京 燕士海)