播放器页面已经实现,文件中的歌曲名被读取,歌曲列表显示在右侧。可以通过触 触摸屏幕上的按钮暂停并继续播放,静音和消除静音,调整音量大小,快进快退,点击进度 改变歌曲播放进度,点击歌曲名称切换歌曲。当歌词随歌曲播放同步显示时,页面 还将展示歌曲名称、歌手、歌曲总长度、当前播放时间和歌曲进度的百分比。
使用Glade实现音乐播放器页面,然后创建无名管阅读信息和命名管发送命令。通过创建过程,子过程execlp函数启动Mplayer,并重定向Mplayer将标准输出到无名管道的写作端。在父亲的过程中创建三个线程:向命名管道发送命令Mplayer播放控制;从无名管道读取信息,并将信息显示到界面;歌词分析,歌词同步显示。
#ifndef _SUNGTK_INTERFACE_H_ #define _SUNGTK_INTERFACE_H_ #include<gtk/gtk.h> #define GET_WIDGET_WIDTH(widget) widget->allocation.width //widget宽度 #define GET_WIDGET_HEIGHT(widget) widget->allocation.height //widget高度 /***************************************************** * 函数功能:设置背景图 * 参数类型: widget: 主窗口 * w, h: 图片的大小 * path: 图片路径 * 返回值:成功返回0,失败返回-1 * 维护记录:2013-12-18 by lihuibo ******************************************************/ extern int sungtk_background_set_picture(GtkWidget *widget, const gchar *path, const int w, const int h); /************************************************** * 函数功能:创建良好image重新设计图片 * 参数类型: * image:已创建好的image控件 * file_path:图片路径 * w、h:图片长度和宽带,如w==0&&h==0.默认使用图片大小 * 返回类型:成功返回0,失败返回-1 * 维护记录:2013-12-18 by lihuibo **************************************************/ extern int sungtk_image_load_picture(GtkWidget *image, const char *file_path, const int w, const int h ); /************************************************** * 函数功能:创建带图片的函数功能:image控件 * 参数类型: * image:已创建好的image控件 * file_path:图片路径 * w、h:图片长度和宽带,如w==0&&h==0.默认使用图片大小 * 返回类型:成功返回0,失败返回-1 * 维护记录:2013-12-18 by lihuibo **************************************************/ GtkWidget *sungtk_image_new_from_file(const char *file_path, const int w, const int h); /************************************************** * 函数功能:根据图片路径创建新按钮,同时指定图片的大小 * 参数类型: * file_path:图片路径 * w、h:图片长度和宽带,如w==0&&h==0,默认使用图片大小 * 返回类型:成功返回创建button地址 * 维护记录:2013-12-18 by lihuibo **************************************************/ extern GtkWidget *sungtk_button_new_with_image(const char *file_path, const int w, const int h); /************************************************** * 函数功能:重新设置按钮的照片 * 参数类型:button:按钮控件需要设置 * file_path:图片路径 * w、h:图片长度和宽带,如w==0&&h==0,默认使用图片大小 * 返回类型: * 维护记录:2013-12-18 by lihuibo **************************************************/ extern int sungtk_button_set_image(GtkWidget *button, const gchar *file_path, const int w, const int h); //按钮插入一张照片 extern GtkWidget *sungtk_button_inset_image(GtkWidget *button, const gchar *file_path, const int w, const int h); ///用文字和图片创建按钮 extern GtkWidget *sungtk_button_new_with_label_and_image(const char *file, const char *label, const int w, const int h); /************************************************** * 函数功能: 设置控件字体大小 * 参数类型: * widget: 控件需要改变字体 * size: 字体大小 * is_button: TRUE按钮代表控件,FALSE为其它控件 * 返回类型:成功返回0,失败返回-1 * 维护记录:2013-12-18 by lihuibo **************************************************/ extern int sungtk_widget_set_font_size(GtkWidget *widget, int size, gboolean is_button); /*********************************************** * 函数功能:获取一个GdkColor类型 * 参数类型:color_buf:设置字体颜色,如"red"、"blue" color:存放GdkColor类型地址 * 返回类型:成功返回0,失败返回-1 * 维护记录:2013-12-18 by lihuibo ***********************************************/ extern int sungtk_color_get(const char *color_buf, GdkColor *color); /*********************************************** * 函数功能:设置控件字体颜色 * 参数类型:widget:控件需要改变颜色 color_buf:设置字体颜色,如"red"、"blue" is_button:是否为button * 返回类型:成功返回0,失败返回-1 * 维护记录:2013-12-18 by lihuibo ***********************************************/ extern int sungtk_widget_set_font_color(GtkWidget *widget, const char *color_buf, gboolean is_button); /*********************************************** * 函数功能:创建滚动窗口 * 参数类型: * 返回类型:成功返回0,失败返回-1 * 维护记录:2013-12-18 by lihuibo ***********************************************/ extern GtkWidget *sungtk_scrolled_window_new(void); /*********************************************** * 函数功能:设置滚动窗的水平值 * 参数类型:widget:滚动窗口地址 add_val:加在原基础上,相反方向滚动正负值 * 返回类型:成功返回0,失败返回-1 * 维护记录:2013-12-18 by lihuibo ***********************************************/ extern int sungtk_scrolled_window_set_hadjustment_value(GtkWidget *s_window, const gdouble add_val); /*********************************************** * 函数功能:设置滚动窗的垂直方向值 * 参数类型:widget:滚动窗口地址 add_val:加在原基础上,相反方向滚动正负值 * 返回类型:成功返回0,失败返回-1 * 维护记录:2013-12-18 by lihuibo ***********************************************/ etern int sungtk_scrolled_window_set_vadjustment_value(GtkWidget *s_window, const gdouble add_val);
/************************自定义列表************************************/
//每一行点击时的回调函数类型
typedef gboolean (*SunGtkSelectRow)(GtkWidget *widget, GdkEventButton *event, gpointer data);
//为列表创建的链表的结构体
typedef struct _clist_link
{
GtkWidget *event_box; //每一行都有一个事件盒子,用于支持点击
GtkWidget *label; //将label放置在事件盒子中,用于显示文字
struct _clist_link *next;
}CListLink;
//整个列表的结构体
typedef struct _sungtk_clist
{
GtkWidget *fixed; //整个列表是一个固定布局
GtkWidget *vbox; //利用垂直布局,可以动态追加行
gint select_row; //当前选中行
gint font_size; //字体大小
gchar font_color[30]; //字体颜色
gint row_height; //每行的高度
gint col_width; //每行宽度
gint total_num; //行总数
gchar sig_str[30]; //信号
SunGtkSelectRow callback;//行点击回调函数
CListLink *head;
}SunGtkCList;
#define SUNGTK_CLIST(x) (SunGtkCList *)x
//自定义列表创建
extern SunGtkCList *sungtk_clist_new();
//列表释放资源
extern int sungtk_clist_unref(SunGtkCList *clist);
//追加一行
extern int sungtk_clist_append(SunGtkCList *clist, const gchar *text);
//设置前景颜色
extern int sungtk_clist_set_foreground(SunGtkCList *clist, const gchar *color_buf);
//设置其中一行的颜色
extern int sungtk_clist_set_row_color(SunGtkCList *clist, gint row, const gchar *color_buf);
//选中某一行
extern int sungtk_clist_select_row(SunGtkCList *clist, gint row, const gchar *color_buf);
//设置行高度
extern int sungtk_clist_set_row_height(SunGtkCList *clist, gint height);
//设置列宽度
extern int sungtk_clist_set_col_width(SunGtkCList *clist, gint width);
//设置字体大小
extern int sungtk_clist_set_text_size(SunGtkCList *clist, int size);
//获取某一行内容
extern const gchar *sungtk_clist_get_row_data(SunGtkCList *clist, gint row);
//设置某一行内容
extern int sungtk_clist_set_row_data(SunGtkCList *clist, gint row, const gchar *text);
//设置点击行的信号
extern int sungtk_clist_set_select_row_signal(SunGtkCList *clist, const gchar *detailed_signal, SunGtkSelectRow callback);
//设置整个列表行在固定布局的位置
extern void sungtk_clist_set_position_in_fixed(SunGtkCList *clist, gint x, gint y);
/**************************************************************************/
/*********************自定义滑动锁***************************************/
#define MOTIONKEY_NUM 9 //锁的个数
//滑动锁抬起时回调函数的的类型
typedef gboolean (*SunGtkMotionLockRelease)(GtkWidget *widget, GdkEventButton *event, gpointer data);
//整个滑动锁的结构体
typedef struct _motion_lock
{
GtkWidget *event_box; //滑动事件盒子
GtkWidget *fixed; //事件盒子添加固定布局
GtkWidget *image[MOTIONKEY_NUM]; //图片控件
gint password[MOTIONKEY_NUM]; //密码记录
gint pressed[MOTIONKEY_NUM]; //每个图片是否以按下
gint start_flag; //第一次按下标志位
gint lock_size; //整个滑动锁的大小
gint img_size; //每张图片大小
gint space_size; //图片间的间距
gchar *press_pic; //按下照片路径
gchar *unpress_pic; //未按下照片路径
}SungtkMotionLock;
//滑动锁抬起时的处理
extern void sungtk_motion_lock_release_deal(SungtkMotionLock *lock);
//设置滑动锁抬起时执行的回调函数, 实际就是事件盒子抬起事件
extern void sungtk_motion_lock_signal_release(SungtkMotionLock *lock, SunGtkMotionLockRelease callback_release);
//获取滑动锁按下的值
extern void sungtk_motion_lock_get_password(SungtkMotionLock *lock, char *pwd, int size);
//滑动锁的创建,需要指定大小,和图片路径名
extern SungtkMotionLock *sungtk_motion_lock_new(gint lock_size, gint img_size, const gchar *press_pic, const gchar *unpress_pic);
//滑动锁资源释放
extern void sungtk_motion_lock_unref(SungtkMotionLock *lock);
/**************************************************************************/
#endif
#include<gtk/gtk.h>
#include<string.h>
#include<stdlib.h>
#include"sungtk_interface.h"
//函数功能:设置背景图
int sungtk_background_set_picture(GtkWidget *widget, const gchar *path, const int w, const int h)
{
if(widget==NULL || path==NULL)
return -1;
gtk_widget_set_app_paintable(widget, TRUE); //允许窗口可以绘图
gtk_widget_realize(widget);
/* 更改背景图时,图片会重叠
* 这时要手动调用下面的函数,让窗口绘图区域失效,产生窗口重绘制事件(即 expose 事件)。
*/
gtk_widget_queue_draw(widget);
GdkPixbuf *src_pixbuf = gdk_pixbuf_new_from_file(path, NULL); // 创建图片资源对象
// w, h是指定图片的宽度和高度
GdkPixbuf *dst_pixbuf = gdk_pixbuf_scale_simple(src_pixbuf, w, h, GDK_INTERP_BILINEAR);
GdkPixmap *pixmap = NULL;
/* 创建pixmap图像;
* NULL:不需要蒙版;
* 123: 0~255,透明到不透明
*/
gdk_pixbuf_render_pixmap_and_mask(dst_pixbuf, &pixmap, NULL, 128);
// 通过pixmap给widget设置一张背景图,最后一个参数必须为: FASLE
gdk_window_set_back_pixmap(widget->window, pixmap, FALSE);
// 释放资源
g_object_unref(src_pixbuf);
g_object_unref(dst_pixbuf);
g_object_unref(pixmap);
return 0;
}
//函数功能:给创建好的image重新设计一张图片
int sungtk_image_load_picture(GtkWidget *image, const char *file_path, const int w, const int h )
{
GdkPixbuf *src_pixbuf = NULL;
GdkPixbuf *dest_pixbuf = NULL;
if(image==NULL || file_path==NULL)
return -1;
gtk_image_clear( GTK_IMAGE(image) ); // 清除图像
src_pixbuf = gdk_pixbuf_new_from_file(file_path, NULL); // 创建图片资源
if(w==0 && h==0){
dest_pixbuf = src_pixbuf;
}else{
dest_pixbuf = gdk_pixbuf_scale_simple(src_pixbuf, w, h, GDK_INTERP_BILINEAR); // 指定大小
}
gtk_image_set_from_pixbuf(GTK_IMAGE(image), dest_pixbuf); // 图片控件重新设置一张图片(pixbuf)
if(w!=0 || h!=0)
g_object_unref(dest_pixbuf); // 释放资源
g_object_unref(src_pixbuf); // 释放资源
return 0;
}
//函数功能:创建一个带图片的image控件
GtkWidget *sungtk_image_new_from_file(const char *file_path, const int w, const int h)
{
GtkWidget *image = gtk_image_new_from_pixbuf(NULL);
sungtk_image_load_picture(image, file_path, w, h);
return image;
}
//函数功能:根据图片路径创建一个新按钮,同时指定图片大小
GtkWidget *sungtk_button_new_with_image(const char *file_path, const int w, const int h)
{
GtkWidget *temp_image = gtk_image_new_from_pixbuf(NULL);
sungtk_image_load_picture(temp_image, file_path, w, h);
GtkWidget *button = gtk_button_new(); // 先创建空按钮
gtk_button_set_image(GTK_BUTTON(button), temp_image); // 给按钮设置图标
gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); // 按钮背景色透明
return button;
}
//函数功能:重新设置按钮的照片
int sungtk_button_set_image(GtkWidget *button, const gchar *file_path, const int w, const int h)
{
if(button==NULL || file_path==NULL)
return -1;
GtkWidget *image = gtk_button_get_image(GTK_BUTTON(button)); // 获得按钮上面的图标
sungtk_image_load_picture(image, file_path, w, h);
return 0;
}
GtkWidget *sungtk_button_inset_image(GtkWidget *button, const gchar *file_path, const int w, const int h)
{
GtkWidget *temp_image = gtk_image_new_from_pixbuf(NULL);
sungtk_image_load_picture(temp_image, file_path, w, h);
gtk_button_set_image(GTK_BUTTON(button), temp_image); // 给按钮设置图标
gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); // 按钮背景色透明
return temp_image;
}
GtkWidget *sungtk_button_new_with_label_and_image(const char *file, const char *label, const int w, const int h)
{
GtkWidget *temp_image = gtk_image_new_from_pixbuf(NULL);
sungtk_image_load_picture(temp_image, file, w, h);
GtkWidget *button = gtk_button_new_with_label(label); // 先创建空按钮
gtk_button_set_image(GTK_BUTTON(button), temp_image); // 给按钮设置图标
gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); // 按钮背景色透明
gtk_button_set_image_position(GTK_BUTTON(button), GTK_POS_TOP);
return button;
}
//函数功能: 设置控件字体大小
int sungtk_widget_set_font_size(GtkWidget *widget, int size, gboolean is_button)
{
GtkWidget *labelChild;
PangoFontDescription *font;
gint fontSize = size;
if(widget == NULL)
return -1;
font = pango_font_description_from_string("Sans"); //"Sans"字体名
pango_font_description_set_size(font, fontSize*PANGO_SCALE);//设置字体大小
if(is_button){
labelChild = gtk_bin_get_child(GTK_BIN(widget));//取出GtkButton里的label
}else{
labelChild = widget;
}
//设置label的字体,这样这个GtkButton上面显示的字体就变了
gtk_widget_modify_font(GTK_WIDGET(labelChild), font);
pango_font_description_free(font);
return 0;
}
//函数功能:获取一个GdkColor类型
int sungtk_color_get(const char *color_buf, GdkColor *color)
{
gdk_color_parse(color_buf, color);
return 0;
}
//函数功能:设置窗口显示字体颜色
int sungtk_widget_set_font_color(GtkWidget *widget, const char *color_buf, gboolean is_button)
{
if(widget == NULL && color_buf==NULL)
return -1;
GdkColor color;
GtkWidget *labelChild = NULL;
sungtk_color_get(color_buf, &color);
if(is_button == TRUE){
labelChild = gtk_bin_get_child(GTK_BIN(widget));//取出GtkButton里的label
gtk_widget_modify_fg(labelChild, GTK_STATE_NORMAL, &color);
gtk_widget_modify_fg(labelChild, GTK_STATE_SELECTED, &color);
gtk_widget_modify_fg(labelChild, GTK_STATE_PRELIGHT, &color);
}else{
gtk_widget_modify_fg(widget, GTK_STATE_NORMAL, &color);
}
return 0;
}
//函数功能:创建一个滚动窗口
GtkWidget *sungtk_scrolled_window_new(void)
{
GtkObject *adjust_h = NULL;
GtkObject *adjust_v = NULL;
adjust_h = gtk_adjustment_new(0, 0, 1, 1, 1, 1);
adjust_v = gtk_adjustment_new(0, 0, 1, 1, 1, 1);
GtkWidget *s_window = gtk_scrolled_window_new(GTK_ADJUSTMENT(adjust_h), GTK_ADJUSTMENT(adjust_v));
return s_window;
}
//函数功能:设置滚动窗口的水平值
int sungtk_scrolled_window_set_hadjustment_value(GtkWidget *s_window, const gdouble add_val)
{
GtkAdjustment *adjust_h = NULL;
adjust_h = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(s_window));
gdouble temp_val = gtk_adjustment_get_value(GTK_ADJUSTMENT(adjust_h));
//printf("temp_val=====%lf\n", temp_val);
gtk_adjustment_set_value(GTK_ADJUSTMENT(adjust_h), temp_val+add_val);
return 0;
}
/***********************************************
* 函数功能:设置滚动窗口的垂直方向值
* 参数类型:widget:滚动窗口地址
add_val:原基础之上进行相加,正负值滚动相反方向
* 返回类型:成功返回0,失败返回-1
* 维护记录:2013-12-18 by lihuibo
***********************************************/
int sungtk_scrolled_window_set_vadjustment_value(GtkWidget *s_window, const gdouble add_val)
{
GtkAdjustment *adjust_v = NULL;
adjust_v = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(s_window));
gdouble temp_val = gtk_adjustment_get_value(GTK_ADJUSTMENT(adjust_v));
//printf("temp_val=====%lf\n", temp_val);
gtk_adjustment_set_value(GTK_ADJUSTMENT(adjust_v), temp_val+add_val);
return 0;
}
/*********************自定义列表实现*************************************************/
static void sungtk_clist_set_label_color(GtkWidget *label, const char *color_buf)
{
GdkColor color;
gdk_color_parse(color_buf, &color);
gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &color);
}
static void sungtk_clist_set_label_size(GtkWidget *label, const gint size)
{
PangoFontDescription *font;
font = pango_font_description_from_string("Sans"); //"Sans"字体名
pango_font_description_set_size(font, size*PANGO_SCALE);//设置字体大小
gtk_widget_modify_font(GTK_WIDGET(label), font);
pango_font_description_free(font);
}
int sungtk_clist_set_foreground(SunGtkCList *clist, const gchar *color_buf)
{
if(clist == NULL)
return -1;
int i = 0;
CListLink *temp_head = clist->head;
memset(clist->font_color, 0, sizeof(clist->font_color));
strncpy(clist->font_color, color_buf, sizeof(clist->font_color));
while(temp_head)
{
sungtk_clist_set_label_color(temp_head->label, color_buf);
temp_head = temp_head->next;
++i;
}
return i;
}
int sungtk_clist_set_row_color(SunGtkCList *clist, gint row, const gchar *color_buf)
{
if(clist == NULL)
return -1;
int i = 0;
CListLink *temp_head = clist->head;
while(temp_head)
{
if(i==row){
sungtk_clist_set_label_color(temp_head->label, color_buf);
break;
}
temp_head = temp_head->next;
++i;
}
return i;
}
int sungtk_clist_select_row(SunGtkCList *clist, gint row, const gchar *color_buf)
{
if(clist == NULL)
return -1;
int i = 0;
CListLink *temp_head = clist->head;
while(temp_head)
{
sungtk_clist_set_label_color(temp_head->label, clist->font_color);
if(i==row){
clist->select_row = i;
sungtk_clist_set_label_color(temp_head->label, color_buf);
}
temp_head = temp_head->next;
++i;
}
return i;
}
int sungtk_clist_set_row_height(SunGtkCList *clist, gint height)
{
if(clist == NULL)
return -1;
int i = 0;
CListLink *temp_head = clist->head;
clist->row_height = height;
while(temp_head)
{
gtk_widget_set_size_request(temp_head->event_box, clist->col_width, clist->row_height);
temp_head = temp_head->next;
++i;
}
return i;
}
int sungtk_clist_set_col_width(SunGtkCList *clist, gint width)
{
if(clist == NULL)
return -1;
int i = 0;
CListLink *temp_head = clist->head;
clist->col_width = width;
while(temp_head)
{
gtk_widget_set_size_request(temp_head->event_box, clist->col_width, clist->row_height);
temp_head = temp_head->next;
++i;
}
return i;
}
int sungtk_clist_set_text_size(SunGtkCList *clist, int size)
{
if(clist == NULL)
return -1;
int i = 0;
CListLink *temp_head = clist->head;
clist->font_size = size;
while(temp_head)
{
sungtk_clist_set_label_size(temp_head->label, size);
temp_head = temp_head->next;
++i;
}
return i;
}
const gchar *sungtk_clist_get_row_data(SunGtkCList *clist, gint row)
{
if(clist == NULL)
return NULL;
int i = 0;
CListLink *temp_head = clist->head;
while(temp_head)
{
if(row == i)
return gtk_label_get_text(GTK_LABEL(temp_head->label));
temp_head = temp_head->next;
++i;
}
return NULL;
}
int sungtk_clist_set_row_data(SunGtkCList *clist, gint row, const gchar *text)
{
if(clist == NULL || text==NULL)
return -1;
int i = 0;
CListLink *temp_head = clist->head;
while(temp_head)
{
if(row == i){
gtk_label_set_text(GTK_LABEL(temp_head->label), text);
break;
}
temp_head = temp_head->next;
++i;
}
return -1;
}
int sungtk_clist_set_select_row_signal(SunGtkCList *clist, const gchar *detailed_signal, SunGtkSelectRow callback)
{
if(clist == NULL)
return -1;
clist->callback = callback;
strncpy(clist->sig_str, detailed_signal, sizeof(clist->sig_str));
return 0;
}
void sungtk_clist_set_position_in_fixed(SunGtkCList *clist, gint x, gint y)
{
gtk_fixed_move(GTK_FIXED(clist->fixed), clist->vbox, x, y);
}
int sungtk_clist_append(SunGtkCList *clist, const gchar *text)
{
if(clist==NULL || text==NULL)
return -1;
CListLink *temp = (CListLink *)malloc(sizeof(CListLink));
if(temp==NULL)
return -1;
temp->event_box = gtk_event_box_new();
gtk_event_box_set_visible_window(GTK_EVENT_BOX(temp->event_box), FALSE);
gtk_widget_set_size_request(temp->event_box, clist->col_width, clist->row_height);
gtk_container_add(GTK_CONTAINER(clist->vbox), temp->event_box);
temp->label = gtk_label_new(text);
gtk_misc_set_alignment(GTK_MISC(temp->label), 0, 0.5);//居中
sungtk_clist_set_label_size(temp->label, clist->font_size);
sungtk_clist_set_label_color(temp->label, clist->font_color);
gtk_container_add(GTK_CONTAINER(temp->event_box), temp->label);
temp->next = NULL;
if(clist->callback != NULL){
g_signal_connect(temp->event_box, clist->sig_str, G_CALLBACK(clist->callback), (void *)clist->total_num);
}
clist->total_num++;
if(clist->head == NULL){
clist->head = temp;
return 0;
}
CListLink *temp_head = clist->head;
CListLink *pf = NULL;
while(temp_head)
{
pf = temp_head;
temp_head = temp_head->next;
}
pf->next = temp;
return 0;
}
SunGtkCList *sungtk_clist_new()
{
SunGtkCList *clist = (SunGtkCList *)malloc(sizeof(SunGtkCList));
if(clist==NULL)
return NULL;
memset(clist, 0, sizeof(SunGtkCList));
clist->fixed = gtk_fixed_new();
clist->vbox = gtk_vbox_new(TRUE, 0);
gtk_fixed_put(GTK_FIXED(clist->fixed), clist->vbox, 0, 0);
clist->font_size = 8;
strncpy(clist->font_color, "black", sizeof(clist->font_color));
clist->row_height = 30;
clist->col_width = 100;
clist->select_row = 0;
clist->total_num = 0;
return clist;
}
int sungtk_clist_unref(SunGtkCList *clist)
{
if(clist == NULL)
return-1;
int i = 0;
CListLink *temp_head = clist->head;
CListLink *pf = NULL;
while(temp_head)
{
pf = temp_head;
temp_head = temp_head->next;
gtk_widget_destroy(pf->label);
gtk_widget_destroy(pf->event_box);
free(pf);
++i;
}
gtk_widget_destroy(clist->fixed);
free(clist);
return 0;
}
/**********************************************************************/
/********************自定义滑动锁****************************/
static inline int get_press_image_num(SungtkMotionLock *lock, double press_x, double press_y)
{
int i, j;
int n = 0;
int temp = lock->space_size + lock->img_size;
//printf("press_x==%lf, press_y==%lf\n", press_x, press_y);
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if((press_x > lock->space_size+j*temp) &&
(press_x < (j+1)*temp) &&
(press_y > lock->space_size+i*temp) &&
(press_y < (i+1)*temp)){
return n;
}
n++;
}
}
return -1;
}
static inline void sungtk_motion_lock_show_button(SungtkMotionLock *lock, int num)
{
char *image[2] = {NULL, NULL};
image[1] = lock->press_pic;
image[0] = lock->unpress_pic;
sungtk_image_load_picture(lock->image[num], image[lock->pressed[num]], lock->img_size, lock->img_size);
}
static inline void sungtk_motion_lock_show_board(SungtkMotionLock *lock)
{
int i;
char *image[2] = {NULL, NULL};
image[1] = lock->press_pic;
image[0] = lock->unpress_pic;
for(i=0;i<MOTIONKEY_NUM;i++){
sungtk_image_load_picture(lock->image[i], image[lock->pressed[i]], lock->img_size, lock->img_size);
}
}
static inline void sungtk_remember_password(SungtkMotionLock *lock, int num)
{
int i;
for(i=0;i<MOTIONKEY_NUM;i++){
if(lock->password[i] == 0)
break;
}
lock->password[i] = num+1;
}
void sungtk_motion_lock_get_password(SungtkMotionLock *lock, char *pwd, int size)
{
int i;
if(pwd == NULL)
return;
memset(pwd, 0, size);
for(i=0;i<MOTIONKEY_NUM && i<size;i++){
if(lock->password[i] != 0){
pwd[i] = lock->password[i] + '0';
}
}
}
static inline gboolean callback_lock_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
SungtkMotionLock *lock = (SungtkMotionLock *)data;
int num = get_press_image_num(lock, event->x, event->y);
//printf("num===%d, ===%d\n", num, FALSE);
memset(lock->password, 0, sizeof(lock->password));
memset(lock->pressed, 0, sizeof(lock->pressed));
if(num != -1){
lock->start_flag = TRUE;
lock->pressed[num] = TRUE;
sungtk_motion_lock_show_button(lock, num);
sungtk_remember_password(lock, num);
}
return TRUE;
}
static inline gboolean callback_lock_motion_event(GtkWidget *widget, GdkEventMotion *event, gpointer data)
{
SungtkMotionLock *lock = (SungtkMotionLock *)data;
if(lock->start_flag == FALSE)
return FALSE;
int num = get_press_image_num(lock, event->x, event->y);
if(num != -1){
if(lock->pressed[num] == FALSE){
lock->pressed[num] = TRUE;
sungtk_motion_lock_show_button(lock, num);
sungtk_remember_password(lock, num);
}
}
return TRUE;
}
static void sungtk_motion_lock_board_init(SungtkMotionLock *lock)
{
int i,j;
int n = 1;
int temp = lock->space_size + lock->img_size;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
lock->image[n-1] = sungtk_image_new_from_file(lock->unpress_pic, lock->img_size, lock->img_size);
gtk_fixed_put(GTK_FIXED(lock->fixed), lock->image[n-1],
lock->space_size+j*temp, lock->space_size+i*temp);
n++;
}
}
}
void sungtk_motion_lock_release_deal(SungtkMotionLock *lock)
{
lock->start_flag = FALSE;
memset(lock->pressed, 0, sizeof(lock->pressed));
memset(lock->password, 0, sizeof(lock->password));
sungtk_motion_lock_show_board(lock);
}
void sungtk_motion_lock_signal_release(SungtkMotionLock *lock, SunGtkMotionLockRelease callback_release)
{
g_signal_connect(lock->event_box, "button-press-event", G_CALLBACK(callback_lock_press_event), lock);
g_signal_connect(lock->event_box, "button-release-event", G_CALLBACK(callback_release), lock);
g_signal_connect(lock->event_box, "motion-notify-event", G_CALLBACK(callback_lock_motion_event), lock);
}
SungtkMotionLock *sungtk_motion_lock_new(gint lock_size, gint img_size, const gchar *press_pic, const gchar *unpress_pic)
{
SungtkMotionLock *lock = (SungtkMotionLock *)malloc(sizeof(SungtkMotionLock));
if(lock == NULL)
return NULL;
memset(lock, 0, sizeof(SungtkMotionLock));
lock->lock_size = lock_size;
lock->img_size = img_size;
lock->space_size = (lock_size - 3*img_size)/4;
lock->press_pic = (gchar *)malloc(strlen(press_pic)+1);
memset(lock->press_pic, 0, strlen(press_pic)+1);
strcpy(lock->press_pic, press_pic);
lock->unpress_pic = (gchar *)malloc(strlen(unpress_pic)+1);
memset(lock->unpress_pic, 0, strlen(unpress_pic)+1);
strcpy(lock->unpress_pic, unpress_pic);
lock->event_box = gtk_event_box_new();
gtk_event_box_set_visible_window(GTK_EVENT_BOX(lock->event_box), FALSE);
gtk_widget_set_size_request(lock->event_box, lock_size, lock_size);
lock->fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(lock->event_box), lock->fixed);
sungtk_motion_lock_board_init(lock);
return lock;
}
void sungtk_motion_lock_unref(SungtkMotionLock *lock)
{
int i;
if(lock == NULL)
return;
for(i=0;i<MOTIONKEY_NUM;i++){
gtk_widget_destroy(lock->image[i]);
}
gtk_widget_destroy(lock->fixed);
gtk_widget_destroy(lock->event_box);
free(lock->press_pic);
free(lock->unpress_pic);
free(lock);
}
#ifndef __GB2312_UCS2_H__
#define __GB2312_UCS2_H__
/*************************************************************
* 文件:gb2312_ucs2.c gb2312_ucs2.h
* 功能:GB2312码与uncode 码相互转换。
**************************************************************/
/*************************************************************
* 语法格式:unsigned short gb2312_to_ucs2(unsigned short ucs2)
* 实现功能:gb2312转换为ucs2
* 参数: gb2312 待转换的gb2312编码
* 返回值: ucs2编码
**************************************************************/
unsigned short gb2312_to_ucs2(unsigned short gb2312);
/*************************************************************
* 语法格式:unsigned short ucs2_to_gb2312(unsigned short ucs2)
* 实现功能:ucs2转gb2312
* 参数: ucs2: 待转换的ucs2编码
* 返回值: gb2312编码
**************************************************************/
unsigned short ucs2_to_gb2312(unsigned short ucs2);
/*************************************************************
*功能:
* 说明:
* UTF-8以字节为单位对Unicode进行编码。
* 从Unicode到UTF-8的编码方式如下:
* Unicode编码(16进制) --> UTF-8 字节流(二进制)
* U-00000000 ~ U-0000007F --> 0xxxxxxx
* U-00000080 ~ U-000007FF --> 110xxxxx 10xxxxxx
* U-00000800 ~ U-0000FFFF --> 1110xxxx 10xxxxxx 10xxxxxx
* U-00010000 ~ U-001FFFFF --> 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
* U-00200000 ~ U-03FFFFFF --> 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
* U-04000000 ~ U-7FFFFFFF --> 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
* 故根据每个汉字的第一个字节,便可以知道utf-8汉字由几个字节组成
*************************************************************/
int get_utf8_nbytes(unsigned char first_char);
/*************************************************************
* 语法格式:int utf8_to_ucs2(const char *utf8)
* 实现功能:utf-8字符串转换为unicode码
* 参数: utf utf-8字符串
* 返回值: unicode码码值
*************************************************************/
int utf8_to_ucs2(const char *utf8);
/*************************************************************
* 语法格式:char *utf8str_to_ucs2str(char *dest, char *source)
* 功能: utf8字符串转为ucs2字符串
* 参数: source:utf8字符串
dest:ucs2字符串
* 返回值: ucs2字符串首地址
**************************************************************/
char *utf8str_to_ucs2str(char *dest, char *source);
/*************************************************************
* 语法格式:unsigned char *utf8_to_gb2312(
const unsigned char *utf, unsigned char *gb2312)
* 实现功能:utf-8字符串转换为gb2312字符串
* 参数: utf utf-8字符串
* gb2312 gb2312字符串
* 返回值:
**************************************************************/
unsigned char *utf8_to_gb2312(const unsigned char *utf, unsigned char *gb2312);
/*************************************************************
* 语法格式:unsigned char *gb2312_to_utf8(
const unsigned char *gb2312, unsigned char *utf)
* 实现功能:gb2312字符串转换为utf-8字符串
* 参数: gb2312 gb2312字符串
* utf utf-8字符串
* 返回值:
**************************************************************/
unsigned char *gb2312_to_utf8(const unsigned char *gb2312, unsigned char *utf);
#endif
/*************************************************************
* 文件名称:gb2312_ucs2.c
* 功能描述: gb2312、ucs2间的转换
* 字节序:little-endian 低地址存低字节
**************************************************************/
#include <stdio.h>
#include <string.h>
#define BIT(x) ((0x01)<<(x))
typedef unsigned char uchar;
const unsigned short MAX_UNI_INDEX = 6808; /*6768*/
/*************************************************************
*功能: 十六进制基数码表
**************************************************************/
static const char radix_table[] = "0123456789ABCDEF";
/*************************************************************
*功能: ucs2_gb2312_table码表
**************************************************************/
static const unsigned short ucs2_gb2312_table[][2];
/*************************************************************
* 语法格式:unsigned short gb2312_to_ucs2(unsigned short ucs2)
* 实现功能:gb2312转换为ucs2
* 参数: gb2312 待转换的gb2312编码
* 返回值: ucs2编码
**************************************************************/
unsigned short gb2312_to_ucs2(unsigned short gb2312)
{
int Index;
for(Index = MAX_UNI_INDEX - 1; Index >= 0; Index--)
{
if(gb2312 == ucs2_gb2312_table[Index][1])
return ucs2_gb2312_table[Index][0];
}
return 0;
}
/*************************************************************
* 语法格式:unsigned short ucs2_to_gb2312(unsigned short ucs2)
* 实现功能:ucs2转gb2312
* 参数: ucs2: 待转换的ucs2编码
* 返回值: gb2312编码
**************************************************************/
unsigned short ucs2_to_gb2312(unsigned short ucs2)
{
int left = 0;
int right = MAX_UNI_INDEX - 1;
int middle;
while(left <= right)
{
middle = (left+right)/2;
if (ucs2 == ucs2_gb2312_table[middle][0])
return ucs2_gb2312_table[middle][1];
if (ucs2 > ucs2_gb2312_table[middle][0])
left = middle + 1;
else
right = middle - 1;
}
/*如果找不到汉字,则使用全角的空格代替*/
return 0xFED7;
}
/*************************************************************
*功能:
* 说明:
* UTF-8以字节为单位对Unicode进行编码。
* 从Unicode到UTF-8的编码方式如下:
* Unicode编码(16进制) --> UTF-8 字节流(二进制)
* U-00000000 ~ U-0000007F --> 0xxxxxxx
* U-00000080 ~ U-000007FF --> 110xxxxx 10xxxxxx
* U-00000800 ~ U-0000FFFF --> 1110xxxx 10xxxxxx 10xxxxxx
* U-00010000 ~ U-001FFFFF --> 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
* U-00200000 ~ U-03FFFFFF --> 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
* U-04000000 ~ U-7FFFFFFF --> 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
* 故根据每个汉字的第一个字节,便可以知道utf-8汉字由几个字节组成
*************************************************************/
int get_utf8_nbytes(unsigned char first_char)
{
unsigned char temp = 0x080;
int num = 0;
if(first_char < 0x80)
{
num = 1;
}
while (temp & first_char)
{
num++;
//printf("in Get num=%d\n", num);
temp = (temp >> 1);
}
return num;
}
/*************************************************************
* 语法格式:int utf8_to_ucs2(const char *utf8)
* 实现功能:utf-8字符串转换为unicode码
* 参数: utf utf-8字符串
* 返回值: unicode码码值
*************************************************************/
int utf8_to_ucs2(const char *utf8)
{
int bytes = 0;
int unicode = 0;
bytes = get_utf8_nbytes(utf8[0]);
//printf("bytes = %d\n", bytes);
if((bytes>0) && (bytes<=6))
{
switch(bytes)
{
case 1:
unicode = (int)(utf8[0]&(0x7f));
break;
case 2:
unicode = ((int)(utf8[0]&(0x1f)))<<6
| ((int)(utf8[1]&(0x3f)));
break;
case 3:
unicode = ((int)(utf8[0]&(0x0f)))<<12
| ((int)(utf8[1]&(0x3f)))<<6
| ((int)(utf8[2]&(0x3f)));
break;
case 4:
unicode = ((int)(utf8[0]&(0x07)))<<18
| ((int)(utf8[1]&(0x3f)))<<12
| ((int)(utf8[2]&(0x3f)))<<6
| ((int)(utf8[3]&(0x3f)));
break;
case 5:
unicode = ((int)(utf8[0]&(0x03)))<<24
| ((int)(utf8[1]&(0x3f)))<<18
| ((int)(utf8[2]&(0x3f)))<<12
| ((int)(utf8[3]&(0x3f)))<<6
| ((int)(utf8[4]&(0x3f)));
break;
case 6:
unicode = ((int)(utf8[0]&(0x01)))<<30
| ((int)(utf8[1]&(0x3f)))<<24
| ((int)(utf8[2]&(0x3f)))<<18
| ((int)(utf8[3]&(0x3f)))<<12
| ((int)(utf8[4]&(0x3f)))<<6
| ((int)(utf8[5]&(0x3f)));
break;
default:
break;
}
}
return unicode;
}
/*************************************************************
* 语法格式:char *utf8str_to_ucs2str(char *dest, char *source)
* 功能: utf8字符串转为ucs2字符串
* 参数: source:utf8字符串
dest:ucs2字符串
* 返回值: ucs2字符串首地址
**************************************************************/
char *utf8str_to_ucs2str(char *dest, char *source)
{
char *tmp = NULL;
int bytes;
int ucs2;
tmp = dest;
while(1)
{
bytes = get_utf8_nbytes(source[0]);
//printf("source = %s\n", source);
ucs2 = utf8_to_ucs2(source);
sprintf(tmp, "%04X", ucs2);
tmp += 4;
source += bytes;
if(strlen(source) == 0)
break;
}
//printf("dest = %s\n", dest);
return dest;
}
/*************************************************************
* 语法格式:unsigned char *utf8_to_gb2312(
const unsigned char *utf, unsigned char *gb2312)
* 实现功能:utf-8字符串转换为gb2312字符串
* 参数: utf utf-8字符串
* gb2312 gb2312字符串
* 返回值:
**************************************************************/
unsigned char *utf8_to_gb2312(const unsigned char *utf, unsigned char *gb2312)
{
int num=0;
unsigned short unicodekey;
unsigned short gb2312key;
unsigned char *gb2312_base;
gb2312_base = gb2312;
while(*utf)
{
/*U-00000000 ~ U-0000007F --> 0xxxxxxx*/
if(utf[0] <= 0x7F)
{
gb2312[0] = utf[0];
// printf("gb2312[0] = %#x\n", gb2312[0]);
// printf("utf[0] = %#x\n", utf[0]);
utf++;
gb2312++;
}
else
{
num = get_utf8_nbytes(utf[0]);
// printf("num = %d\n", num);
/*U-00000800 ~ U-0000FFFF --> 1110xxxx 10xxxxxx 10xxxxxx*/
if(num==3)
{
unicodekey = (((unsigned short)(((utf[0]&0x0f)<<4)|((utf[1]&0x3c)>>2)))<<8)
|(((utf[1]&0x03)<<6)|(utf[2]&0x3F));
gb2312key = ucs2_to_gb2312(unicodekey);
gb2312[0] = (unsigned char)(gb2312key&0x00ff);
gb2312[1] = (unsigned char)((gb2312key&0xff00)>>8);
// printf("utf[0] = %#x\n", utf[0]);
// printf("utf[1] = %#x\n", utf[1]);
// printf("utf[2] = %#x\n", utf[2]);
// printf("unicodekey = %#x\n", unicodekey);
// printf("gb2312key = %#x\n", gb2312key);
// printf("gb2312[0] = %#x\n", gb2312[0]);
// printf("gb2312[1] = %#x\n", gb2312[1]);
utf += num;
gb2312 +=2;
}
else
{
printf("gb2312 code not found\n");
return NULL;
}
}
}
return gb2312_base;
}
/*************************************************************
* 语法格式:unsigned char *gb2312_to_utf8(
const unsigned char *gb2312, unsigned char *utf)
* 实现功能:gb2312字符串转换为utf-8字符串
* 参数: gb2312 gb2312字符串
* utf utf-8字符串
* 返回值:
**************************************************************/
unsigned char *gb2312_to_utf8(const unsigned char *gb2312, unsigned char *utf)
{
unsigned short unicodekey;
unsigned short gb2312key;
unsigned char *utf_base;
utf_base = utf;
while(*gb2312)
{
/* U-00000000 ~ U-0000007F --> 0xxxxxxx */
if(gb2312[0] <= 0x7F)
{
utf[0] = gb2312[0];
utf++;
gb2312++;
// printf("gb2312[0] = %#x\n", gb2312[0]);
// printf("utf[0] = %#x\n", utf[0]);
}
else
{
/*U-00000800 ~ U-0000FFFF --> 1110xxxx 10xxxxxx 10xxxxxx*/
gb2312key = ((unsigned short )gb2312[1])<<8
|((unsigned short )(gb2312[0]));
unicodekey = gb2312_to_ucs2(gb2312key);
// printf("gb2312[0] = %#x\n", gb2312[0]);
// printf("gb2312[1] = %#x\n", gb2312[1]);
// printf("gb2312key = %#x\n", gb2312key);
// printf("unicodekey = %#x\n", unicodekey);
/* U-00000800 ~ U-0000FFFF --> 1110xxxx 10xxxxxx 10xxxxxx */
if(0x0800 <= unicodekey)
{
utf[0] = (unicodekey>>12)|0x0E0;
utf[1] = ((unicodekey&0x0FC0)>>6)|0x080;
utf[2] = (unicodekey&0x3F)|0x080;
// printf("utf[0] = %#x\n", utf[0]);
// printf("utf[1] = %#x\n", utf[1]);
// printf("utf[2] = %#x\n", utf[2]);
utf +=3;
gb2312 += 2;
}
else
{
printf("gb2312 code not found\n");
return NULL;
}
}
}
return utf_base;
}
/*************************************************************
*功能: ucs2_gb2312_table码表
**************************************************************/
static const unsigned short ucs2_gb2312_table[][2]={
/*unicode,GB2312*/
{0x4E00,0xBBD2}, /* 一: GB2312 Code: 0xD2BB ==> Row:50 Col:27 */
{0x4E01,0xA1B6}, /* 丁: GB2312 Code: 0xB6A1 ==> Row:22 Col:01 */
{0x4E03,0xDFC6}, /* 七: GB2312 Code: 0xC6DF ==> Row:38 Col:63 */
{0x4E07,0xF2CD}, /* 万: GB2312 Code: 0xCDF2 ==> Row:45 Col:82 */
{0x4E08,0xC9D5}, /* 丈: GB2312 Code: 0xD5C9 ==> Row:53 Col:41 */
{0x4E09,0xFDC8}, /* 三: GB2312 Code: 0xC8FD ==> Row:40 Col:93 */
{0x4E0A,0xCFC9}, /* 上: GB2312 Code: 0xC9CF ==> Row:41 Col:47 */
{0x4E0B,0xC2CF}, /* 下: GB2312 Code: 0xCFC2 ==> Row:47 Col:34 */
{0x4E0C,0xA2D8}, /* 丌: GB2312 Code: 0xD8A2 ==> Row:56 Col:02 */
{0x4E0D,0xBBB2}, /* 不: GB2312 Code: 0xB2BB ==> Row:18 Col:27 */
{0x4E0E,0xEBD3}, /* 与: GB2312 Code: 0xD3EB ==> Row:51 Col:75 */
{0x4E10,0xA4D8}, /* 丐: GB2312 Code: 0xD8A4 ==> Row:56 Col:04 */
{0x4E11,0xF3B3}, /* 丑: GB2312 Code: 0xB3F3 ==> Row:19 Col:83 */
{0x4E13,0xA8D7}, /* 专: GB2312 Code: 0xD7A8 ==> Row:55 Col:08 */
{0x4E14,0xD2C7}, /* 且: GB2312 Code: 0xC7D2 ==> Row:39 Col:50 */
{0x4E15,0xA7D8}, /* 丕: GB2312 Code: 0xD8A7 ==> Row:56 Col:07 */
{0x4E16,0xC0CA}, /* 世: GB2312 Code: 0xCAC0 ==> Row:42 Col:32 */
{0x4E18,0xF0C7}, /* 丘: GB2312 Code: 0xC7F0 ==> Row:39 Col:80 */
{0x4E19,0xFBB1}, /* 丙: GB2312 Code: 0xB1FB ==> Row:17 Col:91 */
{0x4E1A,0xB5D2}, /* 业: GB2312 Code: 0xD2B5 ==> Row:50 Col:21 */
{0x4E1B,0xD4B4}, /* 丛: GB2312 Code: 0xB4D4 ==> Row:20 Col:52 */
{0x4E1C,0xABB6}, /* 东: GB2312 Code: 0xB6AB ==> Row:22 Col:11 */
{0x4E1D,0xBFCB}, /* 丝: GB2312 Code: 0xCBBF ==> Row:43 Col:31 */
{0x4E1E,0xA9D8}, /* 丞: GB2312 Code: 0xD8A9 ==> Row:56 Col:09 */
{0x4E22,0xAAB6}, /* 丢: GB2312 Code: 0xB6AA ==> Row:22 Col:10 */
{0x4E24,0xBDC1}, /* 两: GB2312 Code: 0xC1BD ==> Row:33 Col:29 */
{0x4E25,0xCFD1}, /* 严: GB2312 Code: 0xD1CF ==> Row:49 Col:47 */
{0x4E27,0xA5C9}, /* 丧: GB2312 Code: 0xC9A5 ==> Row:41 Col:05 */
{0x4E28,0xADD8}, /* 丨: GB2312 Code: 0xD8AD ==> Row:56 Col:13 */
{0x4E2A,0xF6B8}, /* 个: GB2312 Code: 0xB8F6 ==> Row:24 Col:86 */
{0x4E2B,0xBED1}, /* 丫: GB2312 Code: 0xD1BE ==> Row:49 Col:30 */
{0x4E2C,0xDCE3}, /* 丬: GB2312 Code: 0xE3DC ==> Row:67 Col:60 */
{0x4E2D,0xD0D6}, /* 中: GB2312 Code: 0xD6D0 ==> Row:54 Col:48 */
{0x4E30,0xE1B7}, /* 丰: GB2312 Code: 0xB7E1 ==> Row:23 Col:65 */
{0x4E32,0xAEB4}, /* 串: GB2312 Code: 0xB4AE ==> Row:20 Col:14 */
{0x4E34,0xD9C1}, /* 临: GB2312 Code: 0xC1D9 ==> Row:33 Col:57 */
{0x4E36,0xBCD8}, /* 丶: GB2312 Code: 0xD8BC ==> Row:56 Col:28 */
{0x4E38,0xE8CD}, /* 丸: GB2312 Code: 0xCDE8 ==> Row:45 Col:72 */
{0x4E39,0xA4B5}, /* 丹: GB2312 Code: 0xB5A4 ==> Row:21 Col:04 */
{0x4E3A,0xAACE}, /* 为: GB2312 Code: 0xCEAA ==> Row:46 Col:10 */
{0x4E3B,0xF7D6}, /* 主: GB2312 Code: 0xD6F7 ==> Row:54 Col:87 */
{0x4E3D,0xF6C0}, /* 丽: GB2312 Code: 0xC0F6 ==> Row:32 Col:86 */
{0x4E3E,0xD9BE}, /* 举: GB2312 Code: 0xBED9 ==> Row:30 Col:57 */
{0x4E3F,0xAFD8}, /* 丿: GB2312 Code: 0xD8AF ==> Row:56 Col:15 */
{0x4E43,0xCBC4}, /* 乃: GB2312 Code: 0xC4CB ==> Row:36 Col:43 */
{0x4E45,0xC3BE}, /* 久: GB2312 Code: 0xBEC3 ==> Row:30 Col:35 */
{0x4E47,0xB1D8}, /* 乇: GB2312 Code: 0xD8B1 ==> Row:56 Col:17 */
{0x4E48,0xB4C3}, /* 么: GB2312 Code: 0xC3B4 ==> Row:35 Col:20 */
{0x4E49,0xE5D2}, /* 义: GB2312 Code: 0xD2E5 ==> Row:50 Col:69 */
{0x4E4B,0xAED6}, /* 之: GB2312 Code: 0xD6AE ==> Row:54 Col:14 */
{0x4E4C,0xDACE}, /* 乌: GB2312 Code: 0xCEDA ==> Row:46 Col:58 */
{0x4E4D,0xA7D5}, /* 乍: GB2312 Code: 0xD5A7 ==> Row:53 Col:07 */
{0x4E4E,0xF5BA}, /* 乎: GB2312 Code: 0xBAF5 ==> Row:26 Col:85 */
{0x4E4F,0xA6B7}, /* 乏: GB2312 Code: 0xB7A6 ==> Row:23 Col:06 */
{0x4E50,0xD6C0}, /* 乐: GB2312 Code: 0xC0D6 ==> Row:32 Col:54 */
{0x4E52,0xB9C6}, /* 乒: GB2312 Code: 0xC6B9 ==> Row:38 Col:25 */
{0x4E53,0xD2C5}, /* 乓: GB2312 Code: 0xC5D2 ==> Row:37 Col:50 */
{0x4E54,0xC7C7}, /* 乔: GB2312 Code: 0xC7C7 ==> Row:39 Col:39 */
{0x4E56,0xD4B9}, /* 乖: GB2312 Code: 0xB9D4 ==> Row:25 Col:52 */
{0x4E58,0xCBB3}, /* 乘: GB2312 Code: 0xB3CB ==> Row:19 Col:43 */
{0x4E59,0xD2D2}, /* 乙: GB2312 Code: 0xD2D2 ==> Row:50 Col:50 */
{0x4E5C,0xBFD8}, /* 乜: GB2312 Code: 0xD8BF ==> Row:56 Col:31 */
{0x4E5D,0xC5BE}, /* 九: GB2312 Code: 0xBEC5 ==> Row:30 Col:37 */
{0x4E5E,0xF2C6}, /* 乞: GB2312 Code: 0xC6F2 ==> Row:38 Col:82 */
{0x4E5F,0xB2D2}, /* 也: GB2312 Code: 0xD2B2 ==> Row:50 Col:18 */
{0x4E60,0xB0CF}, /* 习: GB2312 Code: 0xCFB0 ==> Row:47 Col:16 */
{0x4E61,0xE7CF}, /* 乡: GB2312 Code: 0xCFE7 ==> Row:47 Col:71 */
{0x4E66,0xE9CA}, /* 书: GB2312 Code: 0xCAE9 ==> Row:42 Col:73 */
{0x4E69,0xC0D8}, /* 乩: GB2312 Code: 0xD8C0 ==> Row:56 Col:32 */
{0x4E70,0xF2C2}, /* 买: GB2312 Code: 0xC2F2 ==> Row:34 Col:82 */
{0x4E71,0xD2C2}, /* 乱: GB2312 Code: 0xC2D2 ==> Row:34 Col:50 */
{0x4E73,0xE9C8}, /* 乳: GB2312 Code: 0xC8E9 ==> Row:40 Col:73 */
{0x4E7E,0xACC7}, /* 乾: GB2312 Code: 0xC7AC ==> Row:39 Col:12 */
{0x4E86,0xCBC1}, /* 了: GB2312 Code: 0xC1CB ==> Row:33 Col:43 */
{0x4E88,0xE8D3}, /* 予: GB2312 Code: 0xD3E8 ==> Row:51 Col:72 */
{0x4E89,0xF9D5}, /* 争: GB2312 Code: 0xD5F9 ==> Row:53 Col:89 */
{0x4E8B,0xC2CA}, /* 事: GB2312 Code: 0xCAC2 ==> Row:42 Col:34 */
{0x4E8C,0xFEB6}, /* 二: GB2312 Code: 0xB6FE ==> Row:22 Col:94 */
{0x4E8D,0xA1D8}, /* 亍: GB2312 Code: 0xD8A1 ==> Row:56 Col:01 */
{0x4E8E,0xDAD3}, /* 于: GB2312 Code: 0xD3DA ==> Row:51 Col:58 */
{0x4E8F,0xF7BF}, /* 亏: GB2312 Code: 0xBFF7 ==> Row:31 Col:87 */
{0x4E91,0xC6D4}, /* 云: GB2312 Code: 0xD4C6 ==> Row:52 Col:38 */
{0x4E92,0xA5BB}, /* 互: GB2312 Code: 0xBBA5 ==> Row:27 Col:05 */
{0x4E93,0xC1D8}, /* 亓: GB2312 Code: 0xD8C1 ==> Row:56 Col:33 */
{0x4E94,0xE5CE}, /* 五: GB2312 Code: 0xCEE5 ==> Row:46 Col:69 */
{0x4E95,0xAEBE}, /* 井: GB2312 Code: 0xBEAE ==> Row:30 Col:14 */
{0x4E98,0xA8D8}, /* 亘: GB2312 Code: 0xD8A8 ==> Row:56 Col:08 */
{0x4E9A,0xC7D1}, /* 亚: GB2312 Code: 0xD1C7 ==> Row:49 Col:39 */
{0x4E9B,0xA9D0}, /* 些: GB2312 Code: 0xD0A9 ==> Row:48 Col:09 */
{0x4E9F,0xBDD8}, /* 亟: GB2312 Code: 0xD8BD ==> Row:56 Col:29 */
{0x4EA0,0xEFD9}, /* 亠: GB2312 Code: 0xD9EF ==> Row:57 Col:79 */
{0x4EA1,0xF6CD}, /* 亡: GB2312 Code: 0xCDF6 ==> Row:45 Col:86 */
{0x4EA2,0xBABF}, /* 亢: GB2312 Code: 0xBFBA ==> Row:31 Col:26 */
{0x4EA4,0xBBBD}, /* 交: GB2312 Code: 0xBDBB ==> Row:29 Col:27 */
{0x4EA5,0xA5BA}, /* 亥: GB2312 Code: 0xBAA5 ==> Row:26 Col:05 */
{0x4EA6,0xE0D2}, /* 亦: GB2312 Code: 0xD2E0 ==> Row:50 Col:64 */
{0x4EA7,0xFAB2}, /* 产: GB2312 Code: 0xB2FA ==> Row:18 Col:90 */
{0x4EA8,0xE0BA}, /* 亨: GB2312 Code: 0xBAE0 ==> Row:26 Col:64 */
{0x4EA9,0xB6C4}, /* 亩: GB2312 Code: 0xC4B6 ==> Row:36 Col:22 */
{0x4EAB,0xEDCF}, /* 享: GB2312 Code: 0xCFED ==> Row:47 Col:77 */
{0x4EAC,0xA9BE}, /* 京: GB2312 Code: 0xBEA9 ==> Row:30 Col:09 */
{0x4EAD,0xA4CD}, /* 亭: GB2312 Code: 0xCDA4 ==> Row:45 Col:04 */
{0x4EAE,0xC1C1}, /* 亮: GB2312 Code: 0xC1C1 ==> Row:33 Col:33 */
{0x4EB2,0xD7C7}, /* 亲: GB2312 Code: 0xC7D7 ==> Row:39 Col:55 */
{0x4EB3,0xF1D9}, /* 亳: GB2312 Code: 0xD9F1 ==> Row:57 Col:81 */
{0x4EB5,0xF4D9}, /* 亵: GB2312 Code: 0xD9F4 ==> Row:57 Col:84 */
{0x4EBA,0xCBC8}, /* 人: GB2312 Code: 0xC8CB ==> Row:40 Col:43 */
{0x4EBB,0xE9D8}, /* 亻: GB2312 Code: 0xD8E9 ==> Row:56 Col:73 */
{0x4EBF,0xDAD2}, /* 亿: GB2312 Code: 0xD2DA ==> Row:50 Col:58 */
{0x4EC0,0xB2CA}, /* 什: GB2312 Code: 0xCAB2 ==> Row:42 Col:18 */
{0x4EC1,0xCAC8}, /* 仁: GB2312 Code: 0xC8CA ==> Row:40 Col:42 */
{0x4EC2,0xECD8}, /* 仂: GB2312 Code: 0xD8EC ==> Row:56 Col:76 */
{0x4EC3,0xEAD8}, /* 仃: GB2312 Code: 0xD8EA ==> Row:56 Col:74 */
{0x4EC4,0xC6D8}, /* 仄: GB2312 Code: 0xD8C6 ==> Row:56 Col:38 */
{0x4EC5,0xF6BD}, /* 仅: GB2312 Code: 0xBDF6 ==> Row:29 Col:86 */
{0x4EC6,0xCDC6}, /* 仆: GB2312 Code: 0xC6CD ==> Row:38 Col:45 */
{0x4EC7,0xF0B3}, /* 仇: GB2312 Code: 0xB3F0 ==> Row:19 Col:80 */
{0x4EC9,0xEBD8}, /* 仉: GB2312 Code: 0xD8EB ==> Row:56 Col:75 */
{0x4ECA,0xF1BD}, /* 今: GB2312 Code: 0xBDF1 ==> Row:29 Col:81 */
{0x4ECB,0xE9BD}, /* 介: GB2312 Code: 0xBDE9 ==> Row:29 Col:73 */
{0x4ECD,0xD4C8}, /* 仍: GB2312 Code: 0xC8D4 ==> Row:40 Col:52 */
{0x4ECE,0xD3B4}, /* 从: GB2312 Code: 0xB4D3 ==> Row:20 Col:51 */
{0x4ED1,0xD8C2}, /* 仑: GB2312 Code: 0xC2D8 ==> Row:34 Col:56 */
{0x4ED3,0xD6B2}, /* 仓: GB2312 Code: 0xB2D6 ==> Row:18 Col:54 */
{0x4ED4,0xD0D7}, /* 仔: GB2312 Code: 0xD7D0 ==> Row:55 Col:48 */
{0x4ED5,0xCBCA}, /* 仕: GB2312 Code: 0xCACB ==> Row:42 Col:43 */
{0x4ED6,0xFBCB}, /* 他: GB2312 Code: 0xCBFB ==> Row:43 Col:91 */
{0x4ED7,0xCCD5}, /* 仗: GB2312 Code: 0xD5CC ==> Row:53 Col:44 */
{0x4ED8,0xB6B8}, /* 付: GB2312 Code: 0xB8B6 ==> Row:24 Col:22 */
{0x4ED9,0xC9CF}, /* 仙: GB2312 Code: 0xCFC9 ==> Row:47 Col:41 */
{0x4EDD,0xDAD9}, /* 仝: GB2312 Code: 0xD9DA ==> Row:57 Col:58 */
{0x4EDE,0xF0D8}, /* 仞: GB2312 Code: 0xD8F0 ==> Row:56 Col:80 */
{0x4EDF,0xAAC7}, /* 仟: GB2312 Code: 0xC7AA ==> Row:39 Col:10 */
{0x4EE1,0xEED8}, /* 仡: GB2312 Code: 0xD8EE ==> Row:56 Col:78 */
{0x4EE3,0xFAB4}, /* 代: GB2312 Code: 0xB4FA ==> Row:20 Col:90 */
{0x4EE4,0xEEC1}, /* 令: GB2312 Code: 0xC1EE ==> Row:33 Col:78 */
{0x4EE5,0xD4D2}, /* 以: GB2312 Code: 0xD2D4 ==> Row:50 Col:52 */
{0x4EE8,0xEDD8}, /* 仨: GB2312 Code: 0xD8ED ==> Row:56 Col:77 */
{0x4EEA,0xC7D2}, /* 仪: GB2312 Code: 0xD2C7 ==> Row:50 Col:39 */
{0x4EEB,0xEFD8}, /* 仫: GB2312 Code: 0xD8EF ==> Row:56 Col:79 */
{0x4EEC,0xC7C3}, /* 们: GB2312 Code: 0xC3C7 ==> Row:35 Col:39 */
{0x4EF0,0xF6D1}, /* 仰: GB2312 Code: 0xD1F6 ==> Row:49 Col:86 */
{0x4EF2,0xD9D6}, /* 仲: GB2312 Code: 0xD6D9 ==> Row:54 Col:57 */
{0x4EF3,0xF2D8}, /* 仳: GB2312 Code: 0xD8F2 ==> Row:56 Col:82 */
{0x4EF5,0xF5D8}, /* 仵: GB2312 Code: 0xD8F5 ==> Row:56 Col:85 */
{0x4EF6,0xFEBC}, /* 件: GB2312 Code: 0xBCFE ==> Row:28 Col:94 */
{0x4EF7,0xDBBC}, /* 价: GB2312 Code: 0xBCDB ==> Row:28 Col:59 */
{0x4EFB,0xCEC8}, /* 任: GB2312 Code: 0xC8CE ==> Row:40 Col:46 */
{0x4EFD,0xDDB7}, /* 份: GB2312 Code: 0xB7DD ==> Row:23 Col:61 */
{0x4EFF,0xC2B7}, /* 仿: GB2312 Code: 0xB7C2 ==> Row:23 Col:34 */
{0x4F01,0xF3C6}, /* 企: GB2312 Code: 0xC6F3 ==> Row:38 Col:83 */
{0x4F09,0xF8D8}, /* 伉: GB2312 Code: 0xD8F8 ==> Row:56 Col:88 */
{0x4F0A,0xC1D2}, /* 伊: GB2312 Code: 0xD2C1 ==> Row:50 Col:33 */
{0x4F0D,0xE9CE}, /* 伍: GB2312 Code: 0xCEE9 ==> Row:46 Col:73 */
{0x4F0E,0xBFBC}, /* 伎: GB2312 Code: 0xBCBF ==> Row:28 Col:31 */
{0x4F0F,0xFCB7}, /* 伏: GB2312 Code: 0xB7FC ==> Row:23 Col:92 */
{0x4F10,0xA5B7}, /* 伐: GB2312 Code: 0xB7A5 ==> Row:23 Col:05 */
{0x4F11,0xDDD0}, /* 休: GB2312 Code: 0xD0DD ==> Row:48 Col:61 */
{0x4F17,0xDAD6}, /* 众: GB2312 Code: 0xD6DA ==> Row:54 Col:58 */
{0x4F18,0xC5D3}, /* 优: GB2312 Code: 0xD3C5 ==> Row:51 Col:37 */
{0x4F19,0xEFBB}, /* 伙: GB2312 Code: 0xBBEF ==> Row:27 Col:79 */
{0x4F1A,0xE1BB}, /* 会: GB2312 Code: 0xBBE1 ==> Row:27 Col:65 */
{0x4F1B,0xF1D8}, /* 伛: GB2312 Code: 0xD8F1 ==> Row:56 Col:81 */
{0x4F1E,0xA1C9}, /* 伞: GB2312 Code: 0xC9A1 ==> Row:41 Col:01 */
{0x4F1F,0xB0CE}, /* 伟: GB2312 Code: 0xCEB0 ==> Row:46 Col:16 */
{0x4F20,0xABB4}, /* 传: GB2312 Code: 0xB4AB ==> Row:20 Col:11 */
{0x4F22,0xF3D8}, /* 伢: GB2312 Code: 0xD8F3 ==> Row:56 Col:83 */
{0x4F24,0xCBC9}, /* 伤: GB2312 Code: 0xC9CB ==> Row:41 Col:43 */
{0x4F25,0xF6D8}, /* 伥: GB2312 Code: 0xD8F6 ==> Row:56 Col:86 */
{0x4F26,0xD7C2}, /* 伦: GB2312 Code: 0xC2D7 ==> Row:34 Col:55 */
{0x4F27,0xF7D8}, /* 伧: GB2312 Code: 0xD8F7 ==> Row:56 Col:87 */
{0x4F2A,0xB1CE}, /* 伪: GB2312 Code: 0xCEB1 ==> Row:46 Col:17 */
{0x4F2B,0xF9D8}, /* 伫: GB2312 Code: 0xD8F9 ==> Row:56 Col:89 */
{0x4F2F,0xAEB2}, /* 伯: GB2312 Code: 0xB2AE ==> Row:18 Col:14 */
{0x4F30,0xC0B9}, /* 估: GB2312 Code: 0xB9C0 ==> Row:25 Col:32 */
{0x4F32,0xA3D9}, /* 伲: GB2312 Code: 0xD9A3 ==> Row:57 Col:03 */
{0x4F34,0xE9B0}, /* 伴: GB2312 Code: 0xB0E9 ==> Row:16 Col:73 */
{0x4F36,0xE6C1}, /* 伶: GB2312 Code: 0xC1E6 ==> Row:33 Col:70 */
{0x4F38,0xECC9}, /* 伸: GB2312 Code: 0xC9EC ==> Row:41 Col:76 */
{0x4F3A,0xC5CB}, /* 伺: GB2312 Code: 0xCBC5 ==> Row:43 Col:37 */
{0x4F3C,0xC6CB}, /* 似: GB2312 Code: 0xCBC6 ==> Row:43 Col:38 */
{0x4F3D,0xA4D9}, /* 伽: GB2312 Code: 0xD9A4 ==> Row:57 Col:04 */
{0x4F43,0xE8B5}, /* 佃: GB2312 Code: 0xB5E8 ==> Row:21 Col:72 */
{0x4F46,0xABB5}, /* 但: GB2312 Code: 0xB5AB ==> Row:21 Col:11 */
{0x4F4D,0xBBCE}, /* 位: GB2312 Code: 0xCEBB ==> Row:46 Col:27 */
{0x4F4E,0xCDB5}, /* 低: GB2312 Code: 0xB5CD ==> Row:21 Col:45 */
{0x4F4F,0xA1D7}, /* 住: GB2312 Code: 0xD7A1 ==> Row:55 Col:01 */
{0x4F50,0xF4D7}, /* 佐: GB2312 Code: 0xD7F4 ==> Row:55 Col:84 */
{0x4F51,0xD3D3}, /* 佑: GB2312 Code: 0xD3D3 ==> Row:51 Col:51 */
{0x4F53,0xE5CC}, /* 体: GB2312 Code: 0xCCE5 ==> Row:44 Col:69 */
{0x4F55,0xCEBA}, /* 何: GB2312 Code: 0xBACE ==> Row:26 Col:46 */
{0x4F57,0xA2D9}, /* 佗: GB2312 Code: 0xD9A2 ==> Row:57 Col:02 */
{0x4F58,0xDCD9}, /* 佘: GB2312 Code: 0xD9DC ==> Row:57 Col:60 */
{0x4F59,0xE0D3}, /* 余: GB2312 Code: 0xD3E0 ==> Row:51 Col:64 */
{0x4F5A,0xFDD8}, /* 佚: GB2312 Code: 0xD8FD ==> Row:56 Col:93 */
{0x4F5B,0xF0B7}, /* 佛: GB2312 Code: 0xB7F0 ==> Row:23 Col:80 */
{0x4F5C,0xF7D7}, /* 作: GB2312 Code: 0xD7F7 ==> Row:55 Col:87 */
{0x4F5D,0xFED8}, /* 佝: GB2312 Code: 0xD8FE ==> Row:56 Col:94 */
{0x4F5E,0xFAD8}, /* 佞: GB2312 Code: 0xD8FA ==> Row:56 Col:90 */
{0x4F5F,0xA1D9}, /* 佟: GB2312 Code: 0xD9A1 ==> Row:57 Col:01 */
{0x4F60,0xE3C4}, /* 你: GB2312 Code: 0xC4E3 ==> Row:36 Col:67 */
{0x4F63,0xB6D3}, /* 佣: GB2312 Code: 0xD3B6 ==> Row:51 Col:22 */
{0x4F64,0xF4D8}, /* 佤: GB2312 Code: 0xD8F4 ==> Row:56 Col:84 */
{0x4F65,0xDDD9}, /* 佥: GB2312 Code: 0xD9DD ==> Row:57 Col:61 */
{0x4F67,0xFBD8}, /* 佧: GB2312 Code: 0xD8FB ==> Row:56 Col:91 */
{0x4F69,0xE5C5}, /* 佩: GB2312 Code: 0xC5E5 ==> Row:37 Col:69 */
{0x4F6C,0xD0C0}, /* 佬: GB2312 Code: 0xC0D0 ==> Row:32 Col:48 */
{0x4F6F,0xF0D1}, /* 佯: GB2312 Code: 0xD1F0 ==> Row:49 Col:80 */
{0x4F70,0xDBB0}, /* 佰: GB2312 Code: 0xB0DB ==> Row:16 Col:59 */
{0x4F73,0xD1BC}, /* 佳: GB2312 Code: 0xBCD1 ==> Row:28 Col:49 */
{0x4F74,0xA6D9}, /* 佴: GB2312 Code: 0xD9A6 ==> Row:57 Col:06 */
{0x4F76,0xA5D9}, /* 佶: GB2312 Code: 0xD9A5 ==> Row:57 Col:05 */
{0x4F7B,0xACD9}, /* 佻: GB2312 Code: 0xD9AC ==> Row:57 Col:12 */
{0x4F7C,0xAED9}, /* 佼: GB2312 Code: 0xD9AE ==> Row:57 Col:14 */
{0x4F7E,0xABD9}, /* 佾: GB2312 Code: 0xD9AB ==> Row:57 Col:11 */
{0x4F7F,0xB9CA}, /* 使: GB2312 Code: 0xCAB9 ==> Row:42 Col:25 */
{0x4F83,0xA9D9}, /* 侃: GB2312 Code: 0xD9A9 ==> Row:57 Col:09 */
{0x4F84,0xB6D6}, /* 侄: GB2312 Code: 0xD6B6 ==> Row:54 Col:22 */
{0x4F88,0xDEB3}, /* 侈: GB2312 Code: 0xB3DE ==> Row:19 Col:62 */
{0x4F89,0xA8D9}, /* 侉: GB2312 Code: 0xD9A8 ==> Row:57 Col:08 */
{0x4F8B,0xFDC0}, /* 例: GB2312 Code: 0xC0FD ==> Row:32 Col:93 */
{0x4F8D,0xCCCA}, /* 侍: GB2312 Code: 0xCACC ==> Row:42 Col:44 */
{0x4F8F,0xAAD9}, /* 侏: GB2312 Code: 0xD9AA ==> Row:57 Col:10 */
{0x4F91,0xA7D9}, /* 侑: GB2312 Code: 0xD9A7 ==> Row:57 Col:07 */
{0x4F94,0xB0D9}, /* 侔: GB2312 Code: 0xD9B0 ==> Row:57 Col:16 */
{0x4F97,0xB1B6}, /* 侗: GB2312 Code: 0xB6B1 ==> Row:22 Col:17 */
{0x4F9B,0xA9B9}, /* 供: GB2312 Code: 0xB9A9 ==> Row:25 Col:09 */
{0x4F9D,0xC0D2}, /* 依: GB2312 Code: 0xD2C0 ==> Row:50 Col:32 */
{0x4FA0,0xC0CF}, /* 侠: GB2312 Code: 0xCFC0 ==> Row:47 Col:32 */
{0x4FA3,0xC2C2}, /* 侣: GB2312 Code: 0xC2C2 ==> Row:34 Col:34 */
{0x4FA5,0xC4BD}, /* 侥: GB2312 Code: 0xBDC4 ==> Row:29 Col:36 */
{0x4FA6,0xECD5}, /* 侦: GB2312 Code: 0xD5EC ==> Row:53 Col:76 */
{0x4FA7,0xE0B2}, /* 侧: GB2312 Code: 0xB2E0 ==> Row:18 Col:64 */
{0x4FA8,0xC8C7}, /* 侨: GB2312 Code: 0xC7C8 ==> Row:39 Col:40 */
{0x4FA9,0xEBBF}, /* 侩: GB2312 Code: 0xBFEB ==> Row:31 Col:75 */
{0x4FAA,0xADD9}, /* 侪: GB2312 Code: 0xD9AD ==> Row:57 Col:13 */
{0x4FAC,0xAFD9}, /* 侬: GB2312 Code: 0xD9AF ==> Row:57 Col:15 */
{0x4FAE,0xEACE}, /* 侮: GB2312 Code: 0xCEEA ==> Row:46 Col:74 */
{0x4FAF,0xEEBA}, /* 侯: GB2312 Code: 0xBAEE ==> Row:26 Col:78 */
{0x4FB5,0xD6C7}, /* 侵: GB2312 Code: 0xC7D6 ==> Row:39 Col:54 */
{0x4FBF,0xE3B1}, /* 便: GB2312 Code: 0xB1E3 ==> Row:17 Col:67 */
{0x4FC3,0xD9B4}, /* 促: GB2312 Code: 0xB4D9 ==> Row:20 Col:57 */
{0x4FC4,0xEDB6}, /* 俄: GB2312 Code: 0xB6ED ==> Row:22 Col:77 */
{0x4FC5,0xB4D9}, /* 俅: GB2312 Code: 0xD9B4 ==> Row:57 Col:20 */
{0x4FCA,0xA1BF}, /* 俊: GB2312 Code: 0xBFA1 ==> Row:31 Col:01 */
{0x4FCE,0xDED9}, /* 俎: GB2312 Code: 0xD9DE ==> Row:57 Col:62 */
{0x4FCF,0xCEC7}, /* 俏: GB2312 Code: 0xC7CE ==> Row:39 Col:46 */
{0x4FD0,0xFEC0}, /* 俐: GB2312 Code: 0xC0FE ==> Row:32 Col:94 */
{0x4FD1,0xB8D9}, /* 俑: GB2312 Code: 0xD9B8 ==> Row:57 Col:24 */
{0x4FD7,0xD7CB}, /* 俗: GB2312 Code: 0xCBD7 ==> Row:43 Col:55 */
{0x4FD8,0xFDB7}, /* 俘: GB2312 Code: 0xB7FD ==> Row:23 Col:93 */
{0x4FDA,0xB5D9}, /* 俚: GB2312 Code: 0xD9B5 ==> Row:57 Col:21 */
{0x4FDC,0xB7D9}, /* 俜: GB2312 Code: 0xD9B7 ==> Row:57 Col:23 */
{0x4FDD,0xA3B1}, /* 保: GB2312 Code: 0xB1A3 ==> Row:17 Col:03 */
{0x4FDE,0xE1D3}, /* 俞: GB2312 Code: 0xD3E1 ==> Row:51 Col:65 */
{0x4FDF,0xB9D9}, /* 俟: GB2312 Code: 0xD9B9 ==> Row:57 Col:25 */
{0x4FE1,0xC5D0}, /* 信: GB2312 Code: 0xD0C5 ==> Row:48 Col:37 */
{0x4FE3,0xB6D9}, /* 俣: GB2312 Code: 0xD9B6 ==> Row:57 Col:22 */
{0x4FE6,0xB1D9}, /* 俦: GB2312 Code: 0xD9B1 ==> Row:57 Col:17 */
{0x4FE8,0xB2D9}, /* 俨: GB2312 Code: 0xD9B2 ==> Row:57 Col:18 */
{0x4FE9,0xA9C1}, /* 俩: GB2312 Code: 0xC1A9 ==> Row:33 Col:09 */
{0x4FEA,0xB3D9}, /* 俪: GB2312 Code: 0xD9B3 ==> Row:57 Col:19 */
{0x4FED,0xF3BC}, /* 俭: GB2312 Code: 0xBCF3 ==> Row:28 Col:83 */
{0x4FEE,0xDED0}, /* 修: GB2312 Code: 0xD0DE ==> Row:48 Col:62 */
{0x4FEF,0xA9B8}, /* 俯: GB2312 Code: 0xB8A9 ==> Row:24 Col:09 */
{0x4FF1,0xE3BE}, /* 俱: GB2312 Code: 0xBEE3 ==> Row:30 Col:67 */
{0x4FF3,0xBDD9}, /* 俳: GB2312 Code: 0xD9BD ==> Row:57 Col:29 */
{0x4FF8,0xBAD9}, /* 俸: GB2312 Code: 0xD9BA ==> Row:57 Col:26 */
{0x4FFA,0xB3B0}, /* 俺: GB2312 Code: 0xB0B3 ==> Row:16 Col:19 */
{0x4FFE,0xC2D9}, /* 俾: GB2312 Code: 0xD9C2 ==> Row:57 Col:34 */
{0x500C,0xC4D9}, /* 倌: GB2312 Code: 0xD9C4 ==> Row:57 Col:36 */
{0x500D,0xB6B1}, /* 倍: GB2312 Code: 0xB1B6 ==> Row:17 Col:22 */
{0x500F,0xBFD9}, /* 倏: GB2312 Code: 0xD9BF ==> Row:57 Col:31 */
{0x5012,0xB9B5}, /* 倒: GB2312 Code: 0xB5B9 ==> Row:21 Col:25 */
{0x5014,0xF3BE}, /* 倔: GB2312 Code: 0xBEF3 ==> Row:30 Col:83 */
{0x5018,0xC8CC}, /* 倘: GB2312 Code: 0xCCC8 ==> Row:44 Col:40 */
{0x5019,0xF2BA}, /* 候: GB2312 Code: 0xBAF2 ==> Row:26 Col:82 */
{0x501A,0xD0D2}, /* 倚: GB2312 Code: 0xD2D0 ==> Row:50 Col:48 */
{0x501C,0xC3D9}, /* 倜: GB2312 Code: 0xD9C3 ==> Row:57 Col:35 */
{0x501F,0xE8BD}, /* 借: GB2312 Code: 0xBDE8 ==> Row:29 Col:72 */
{0x5021,0xABB3}, /* 倡: GB2312 Code: 0xB3AB ==> Row:19 Col:11 */
{0x5025,0xC5D9}, /* 倥: GB2312 Code: 0xD9C5 ==> Row:57 Col:37 */
{0x5026,0xEBBE}, /* 倦: GB2312 Code: 0xBEEB ==> Row:30 Col:75 */
{0x5028,0xC6D9}, /* 倨: GB2312 Code: 0xD9C6 ==> Row:57 Col:38 */
{0x5029,0xBBD9}, /* 倩: GB2312 Code: 0xD9BB ==> Row:57 Col:27 */
{0x502A,0xDFC4}, /* 倪: GB2312 Code: 0xC4DF ==> Row:36 Col:63 */
{0x502C,0xBED9}, /* 倬: GB2312 Code: 0xD9BE ==> Row:57 Col:30 */
{0x502D,0xC1D9}, /* 倭: GB2312 Code: 0xD9C1 ==> Row:57 Col:33 */
{0x502E,0xC0D9}, /* 倮: GB2312 Code: 0xD9C0 ==> Row:57 Col:32 */
{0x503A,0xAED5}, /* 债: GB2312 Code: 0xD5AE ==> Row:53 Col:14 */
{0x503C,0xB5D6}, /* 值: GB2312 Code: 0xD6B5 ==> Row:54 Col:21 */
{0x503E,0xE3C7}, /* 倾: GB2312 Code: 0xC7E3 ==> Row:39 Col:67 */
{0x5043,0xC8D9}, /* 偃: GB2312 Code: 0xD9C8 ==> Row:57 Col:40 */
{0x5047,0xD9BC}, /* 假: GB2312 Code: 0xBCD9 ==> Row:28 Col:57 */
{0x5048,0xCAD9}, /* 偈: GB2312 Code: 0xD9CA ==> Row:57 Col:42 */
{0x504C,0xBCD9}, /* 偌: GB2312 Code: 0xD9BC ==> Row:57 Col:28 */
{0x504E,0xCBD9}, /* 偎: GB2312 Code: 0xD9CB ==> Row:57 Col:43 */
{0x504F,0xABC6}, /* 偏: GB2312 Code: 0xC6AB ==> Row:38 Col:11 */
{0x5055,0xC9D9}, /* 偕: GB2312 Code: 0xD9C9 ==> Row:57 Col:41 */
{0x505A,0xF6D7}, /* 做: GB2312 Code: 0xD7F6 ==> Row:55 Col:86 */
{0x505C,0xA3CD}, /* 停: GB2312 Code: 0xCDA3 ==> Row:45 Col:03 */
{0x5065,0xA1BD}, /* 健: GB2312 Code: 0xBDA1 ==> Row:29 Col:01 */
{0x506C,0xCCD9}, /* 偬: GB2312 Code: 0xD9CC ==> Row:57 Col:44 */
{0x5076,0xBCC5}, /* 偶: GB2312 Code: 0xC5BC ==> Row:37 Col:28 */
{0x5077,0xB5CD}, /* 偷: GB2312 Code: 0xCDB5 ==> Row:45 Col:21 */
{0x507B,0xCDD9}, /* 偻: GB2312 Code: 0xD9CD ==> Row:57 Col:45 */
{0x507E,0xC7D9}, /* 偾: GB2312 Code: 0xD9C7 ==> Row:57 Col:39 */
{0x507F,0xA5B3}, /* 偿: GB2312 Code: 0xB3A5 ==> Row:19 Col:05 */
{0x5080,0xFEBF}, /* 傀: GB2312 Code: 0xBFFE ==> Row:31 Col:94 */