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

📄 gen-from-jis.c

📁 gcc的JAVA模块的源代码
💻 C
字号:
/* Copyright (C) 1999  Free Software Foundation   This file is part of libgcj.This software is copyrighted work licensed under the terms of theLibgcj License.  Please consult the file "LIBGCJ_LICENSE" fordetails.  */#include <stdio.h>struct chval{  unsigned char b1;            /* 1st byte */  unsigned char b2;            /* 2nd byte */  unsigned short uc;  /* unicode value */};#define MAP(B1, B2, C) { B1, B2, C },struct chval chtab_0201[] = {#include "JIS0201.h"  { 255, 255, 0}};struct chval chtab_0208[] = {#include "JIS0208.h"  { 255, 255, 0}};struct chval chtab_0212[] = {#include "JIS0212.h"  { 255, 255, 0}};#undef MAPstruct chval sorted[] = {#define MAP(B1, B2, C) { B1, B2, C },#include "JIS0208.h"#undef MAP#define MAP(B1, B2, C) { 0x80|B1, B2, C },#include "JIS0212.h"#undef MAP};struct chval *chtab;intcompare (void *p1, void *p2){  struct chval *c1 = (struct chval *) p1;  struct chval *c2 = (struct chval *) p2;  return (int) c1->uc - (int) c2->uc;}intmain(int argc, char** argv){  FILE *out = stdout;  int min1 = 256, max1 = 0, min2 = 256, max2 = 0, count = 0;  int low1_uc = 0xFFFF, high1_uc = 0;  int low2_uc = 0xFFFF, high2_uc = 0;  int i;  int row, col;  if (strcmp (argv[1], "JIS0208") == 0)    chtab = chtab_0208;  else if (strcmp (argv[1], "JIS0212") == 0)    chtab = chtab_0212;  else if (strcmp (argv[1], "toJIS") == 0)    {      int i;      for (i = 0;  chtab_0201[i].b1 != 255;  i++)	{	  enter(chtab_0201[i].uc, chtab_0201[i].b2);	}      for (i = 0;  i < 0x20;  i++)	{	  enter (i, i);	}      enter (127, 127);      for (i = 0;  chtab_0208[i].b1 != 255;  i++)	{	  enter(chtab_0208[i].uc,		(chtab_0208[i].b1 << 8) | chtab_0208[i].b2);	}      for (i = 0;  chtab_0212[i].b1 != 255;  i++)	{	  enter(chtab_0212[i].uc,		0x8000 | (chtab_0212[i].b1 << 8) | chtab_0212[i].b2);	}      print_table ("Unicode_to_JIS", stdout);      exit(0);    }  else    {      fprintf (stderr, "bad argument!");      exit (-1);    }  for (i = 0;  chtab[i].b1 != 255; i++)    {      if (chtab[i].b1 < min1) min1 = chtab[i].b1;      if (chtab[i].b2 < min2) min2 = chtab[i].b2;      if (chtab[i].b1 > max1) max1 = chtab[i].b1;      if (chtab[i].b2 > max2) max2 = chtab[i].b2;      count++;    }  fprintf(stderr, "1st byte ranges from %d to %d.\n", min1, max1);  fprintf(stderr, "2nd byte ranges from %d to %d.\n", min2, max2);  fprintf(out,"/* This file is automatically generated from %s.TXT. */\n",	  argv[1]);  fprintf(out,"#pragma GCC java_exceptions\n",	  argv[1]);  fprintf(out, "unsigned short %s_to_Unicode[%d][%d] = {\n",	  argv[1], max1 - min1 + 1,  max2 - min2 + 1);  i = 0;  for (row = min1;  row <= max1;  row++)    {      fprintf(out, "/* 1st byte: %d */ { ", row);      if (row < chtab[i].b1)	{	  fprintf(out, "0 }, /* unused row */\n");	}      else if (row > chtab[i].b1)	{	  fprintf (stderr, "error - char table out of order!\n");	  exit (-1);	}      else	{	  fprintf(out, "\n");	  for (col = min2;  col <= max2;  col++)	    {	      if (row == chtab[i].b1 && col == chtab[i].b2)		{		  int uc = chtab[i].uc;		  if (uc < 0x2000)		    {		      if (uc > high1_uc)			high1_uc = uc;		      if (uc < low1_uc)			low1_uc = uc;		    }		  else		    {		      if (uc > high2_uc)			high2_uc = uc;		      if (uc < low2_uc)			low2_uc = uc;		    }		  fprintf (out, "  /* 2nd byte: %d */ 0x%04x",			   chtab[i].b2, uc);		  i++;		}	      else if (row < chtab[i].b1		  || (row == chtab[i].b1 && col < chtab[i].b2))		{		  fprintf (out, "  0");		}	      else		{		  fprintf (stderr, "error - char table our of order!\n");		  exit (-1);		}	      if (col != max2)		fprintf (out, ",\n");	    }	  fprintf(out, row == max1 ? "}\n" : "},\n");	}    }  fprintf(out, "};\n");  fprintf(stderr, "total number of characters is %d.\n", count);  fprintf(stderr, "Range is 0x%04x-0x%04x and 0x%04x-0x%04x.\n",	  low1_uc, high1_uc, low2_uc, high2_uc);  return 0;}

⌨️ 快捷键说明

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