亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ringkey.c

?? PSP YDICT ver0.3 改進的功能 1。在《牛津現(xiàn)代英漢雙解詞典》中
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
//	This program is free software; you can redistribute it and/or
//	modify it under the terms of the GNU General Public License
//
//	Copyright (c) 2005 ZYM <yanming.zhang@gmail.com>
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pspctrl.h>
#include "main.h"
#include "chinesedraw.h"

// we make '_' as ' ' for display
//char kbletters[]="abcdefghijklmnopqrstuvwxyz.-('@_";
char kbletters[]="fghijklmnopqrstuvwxyz.'-_/(abcde";
char kbnumbers[]="87654321!@#$%^&*()_+{}|\\:;][=-09";
//char kbletters2[]="FGHIJKLMNOPQRSTUVWXYZ.'-_@(ABCDE";
char *currkb;
int currkeyindex;

const int KEYCOS[8]={
// cos()*10000, from ...
//	5.625,	16.875,	28.125,	39.375
	9952,	9569,	8819,	7730,
//	50.625,	61.875,	73.125,	84.375
	6344,	4714,	2903,	980};

const int KEYTAN[8]={
// tan()*10000
//	5.625,	16.875,	28.125,	39.375
	985,	3033,	5345,	8207,
//	50.625,	61.875,	73.125,	84.375
        12185,  18709,	32966,	101532};

const int ANALOGTAN[4]={
// tan()*10000
//	11.25,	22.5,	33.75,	45
	1989,	4142,	6682,	10000};

struct key_info {
	unsigned int x;
	unsigned int y;
};

struct key_info	kb[KEYNUMBER];
#define INPUTBAR_SIZE	35
struct inputbar {
	char string[INPUTBAR_SIZE];
	int cursor;
};
struct inputbar	myinput;

int getcurrentkeyindex(unsigned char x, unsigned char y)
{
	unsigned int deltax, deltay;
	int i;
	
	deltax = abs(MAXANALOG_X/2 -x);
	deltay = abs(MAXANALOG_Y/2 -y);
	if ((x<MAXANALOG_X/2) &&(y<MAXANALOG_Y/2)) {
		//kbletter 0..7
		if (deltax>=deltay) {
			//kbletter 0..3
			for (i=0;i<4;i++) {
				if (deltay*10000/deltax <=ANALOGTAN[i])
					return i;
			}
		}
		else {
			// kbletter 4..7
			for (i=0;i<4;i++) {
				if (deltax*10000/deltay<=ANALOGTAN[i])
					return (7-i);
			}
		}
	}
	else if ((x>MAXANALOG_X/2)&&(y<MAXANALOG_Y/2)) {
		// kbletter 8..15
		if (deltax<=deltay) {
			// kbletter 8..11
			for (i=0;i<4;i++) {
				if (deltax*10000/deltay<=ANALOGTAN[i])
					return (8+i);
			}
		}
		else {
			// kbletter 12..15
			for (i=0;i<4;i++) {
				if (deltay*10000/deltax<=ANALOGTAN[i])
					return (15-i);
			}
		}
	}
	else if ((x>MAXANALOG_X/2)&&(y>MAXANALOG_Y/2)) {
		// kbletter 16..23
		if (deltax>=deltay) {
			// kbletter 16.. 19
			for (i=0;i<4;i++){
				if (deltay*10000/deltax<=ANALOGTAN[i])
					return (16+i);
			}
		}
		else {
			// kbletter 20..23
			for (i=0;i<4;i++) {
				if (deltax*10000/deltay<=ANALOGTAN[i])
					return (23-i);
			}
		}
	}
	else if ((x<MAXANALOG_X/2)&&(y>MAXANALOG_Y/2)) {
		// kbletter 24..31
		if (deltax<=deltay) {
			// kbletter 24..27
			for (i=0;i<4;i++) {
				if (deltax*10000/deltay<=ANALOGTAN[i])
					return (24+i);
			}
		}
		else {
			// kbletter 28..31
			for (i=0;i<4;i++) {
				if (deltay*10000/deltax<=ANALOGTAN[i])
					return (31-i);
			}
		}
	}
}

void buildkeyxy(void)
{
	int i;
	int deltax1, deltay1, deltax2,deltay2;
	//build letter array
	for (i=0;i<8; i++) {
		deltax1 = (KBRADIUS * KEYCOS[i]+5000) / 10000;
		deltay1 = (deltax1 * KEYTAN[i]+5000) / 10000;
		deltax2 = (KBRADIUS * KEYCOS[7-i]+5000) / 10000;
		deltay2 = (deltax2 * KEYTAN[7-i]+5000)/ 10000;
		kb[i].x = KBCENTRE_X - deltax1;
		kb[i].y = KBCENTRE_Y - deltay1;
		kb[i+8].x = KBCENTRE_X +deltax2;
		kb[i+8].y = KBCENTRE_Y - deltay2;
		kb[i+16].x = KBCENTRE_X + deltax1;
		kb[i+16].y = KBCENTRE_Y + deltay1;
		kb[i+24].x= KBCENTRE_X -deltax2;
		kb[i+24].y= KBCENTRE_Y+deltay2;
	}
}

int getindex(char *inputstr)
{
	int i, mid, first, last;

	first = 0;
	last = wordcount-1;
	while(1) {
		mid=(first+last)/2;
	
		i = strcasecmp(inputstr, *(wordarray+mid));
		if (i==0) {
			break;
		}
		else if (i>0) {
			first=mid;
		}
		else {
			last=mid;
		}
		if ((last-first)<=1){
			//DBG_PRINT("first %s last %s", *(wordarray+first), *(wordarray+last));
			break;
		}
	}
	//DBG_PRINT(" %s/ %s/ %s", *(wordarray+first),*(wordarray+mid),*(wordarray+last));
	if ((mid>0) && (strcasecmp(inputstr, *(wordarray+mid-1))==0))
		return (mid-1);
	if (strcasecmp(inputstr, *(wordarray+mid))>0)
		return last;
	return mid;
}

void disp_ringkey_page(void);

void ydict_ringkey(int laststate)
{
	unsigned char x, y;
	unsigned int button;
	struct ydictctrl yctrl;

	buildkeyxy();

	memset(&myinput, 0, sizeof(struct inputbar));
	updatelist(0);
	curword = -1;
	currkb = &kbletters;

	while (1) {
		if ((curword !=-1)&&(curpage == 0)) {
			build_dictraw(&wordlist[curword]);
			curwordrows= (strlen(*(wordarray+wordlist[curword].index))+C_LEN)/C_LEN;
			dictpages = (curwordrows+dictrows+R_LEN)/R_LEN;
		}
		disp_ringkey_page();
		
		getcontrol(&yctrl);
		x = yctrl.x;
		y = yctrl.y;
		button = yctrl.buttons;
		if ((abs(MAXANALOG_X/2 -x)+abs(MAXANALOG_Y/2 -y)) >ANALOG_IGNORE) {
			// maybe should use (dx*dx + dy*dy) >ignore*ignore
			currkeyindex= getcurrentkeyindex(x, y);
			if (curword !=-1){
				memset(&myinput, 0, sizeof(struct inputbar));
				updatelist(0);
				curword =-1;
			}
		}
		else {
			// no analog input
			currkeyindex= -1;
		}
		switch (button) {
		case PSP_CTRL_SELECT:
			// 
			gstate = STATE_SWITCHMODE;
			return;
		case PSP_CTRL_START:
			memset(&myinput, 0, sizeof(struct inputbar));
			updatelist(0);
			curword = -1;
			break;
		case PSP_CTRL_CIRCLE:
			// input the currkey
			if ((myinput.cursor<INPUTBAR_SIZE )&&(currkeyindex!=-1)) {
				if ((currkb==&kbletters) && (*(currkb+currkeyindex)=='_'))
					myinput.string[myinput.cursor] = ' ';
				else
					myinput.string[myinput.cursor] = *(currkb+currkeyindex);
				myinput.cursor++;
				updatelist(getindex(myinput.string));
				curword =-1;
			}
			break;
		case PSP_CTRL_SQUARE:
			// erase last key
			if (myinput.cursor>0) {
				myinput.cursor--;
				myinput.string[myinput.cursor]=0;
				updatelist(getindex(myinput.string));
				curword =-1;
			}
			break;
		case PSP_CTRL_UP:
			// previous word
			if (curword == -1) {
				curword = WORDLIST_SIZE -1;
			}
			else if (curword == 0){
				int i;

				if (wordlist[curword].index >0) {
					i = wordlist[curword].index -1;
					updatelist(i);
					//updateidxword(i, &currange.mid);
					//update currange first
					//if (currange.first.index >= currange.mid.index)
					//	updateidxword(currange.mid.index, &currange.first);
				}
			}
			else {
				curword +=(WORDLIST_SIZE -1);
				curword %= WORDLIST_SIZE;
			}
			curpage = 0;
			break;
		case PSP_CTRL_DOWN:
			// next word
			if (curword == -1)
				curword = 0;
			else if (curword == (WORDLIST_SIZE-1)) {
				int i;

				if (wordlist[curword].index <(wordcount-1)) {
					i = wordlist[curword].index +1;
					updatelist(i-WORDLIST_SIZE+1);
					//updateidxword(i, &currange.mid);
					//update currange last
					//if (currange.last.index <= currange.mid.index)
					//	updateidxword(currange.mid.index, &currange.last);
				}
			}
			else {
				curword++;
				curword %= WORDLIST_SIZE;
			}
			curpage = 0;
			break;
		case PSP_CTRL_LEFT:
			//previous list
			if (wordlist[0].index <WORDLIST_SIZE)
				updatelist(0);
			else
				updatelist(wordlist[0].index - WORDLIST_SIZE);
			// left/right key do not change curword
			// but if curword has value, set curpage as 0 to update the dictraw info
			if (curword != -1){
				curword = 0;
				curpage = 0;
			}
			break;
		case PSP_CTRL_RIGHT:
			//next list
			if ((wordlist[0].index + WORDLIST_SIZE) > (wordcount - WORDLIST_SIZE))
				updatelist(wordcount - WORDLIST_SIZE);
			else
				updatelist(wordlist[0].index + WORDLIST_SIZE);
			// left/right key do not change curword
			// but if curword has value, set curpage as 0 to update the dictraw info
			if (curword != -1) {
				curword = 0;
				curpage = 0;
			}
			break;
		case PSP_CTRL_TRIANGLE:
			// change keyboard, or previous page in view mode
			{
				if (curword !=-1) {
					if (curpage>0)
						curpage--;
				}
				else {
					// change ring keyboard
					if (currkb == &kbletters)
						currkb = &kbnumbers;
					else
						currkb = &kbletters;
				}
			}
			break;
		case PSP_CTRL_CROSS:
			// view word dict, or next page in dict mode, or mark this word
			if (curword == -1) {
				curword = 0;
				curpage = 0;
			}
			else {
				if ((curpage+1)<dictpages)
					curpage++;
				else {
					if (tagfilep!=NULL) {
						int idx;
						unsigned char tag, c;
						idx = wordlist[curword].index;
						tag = *(tagfilep+idx);
						c = ((tag&0x03) +1) %3;
						*(tagfilep +idx) = (tag&0xF0) + c;
						tagchanged = 1;
					}
				}
			}
			break;
		case PSP_CTRL_LTRIGGER:
			if (tagfilep!=NULL)
			{
				int idx, i;
				unsigned char tag;
				// view the previous marked word
				if (curword ==-1)
					idx=wordlist[0].index;
				else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品对白一区国产伦| 午夜av一区二区| 亚洲国产精品精华液网站| 精品在线免费视频| 日本乱人伦一区| 精品国产乱码久久久久久久 | 亚洲精品久久7777| 精品一区二区三区在线观看| 日韩一二三区视频| 亚洲精品欧美专区| 国产成人av一区二区三区在线观看| 在线欧美一区二区| 国产精品你懂的在线| 久久er精品视频| 在线不卡a资源高清| 亚洲欧美激情插 | 开心九九激情九九欧美日韩精美视频电影| av网站免费线看精品| 精品国产乱码久久久久久图片 | 中文字幕在线不卡| 国产乱对白刺激视频不卡| 91精品国产麻豆国产自产在线 | 欧美日韩国产一区| 一区二区三区中文字幕电影| 99久久国产免费看| 国产精品久久久久久久久搜平片| 久久精品国产秦先生| 欧美一区二区福利视频| 亚洲国产一区二区三区青草影视| 色老汉一区二区三区| 亚洲色图丝袜美腿| 91网站在线播放| 国产精品国产馆在线真实露脸 | 欧洲av一区二区嗯嗯嗯啊| 亚洲视频 欧洲视频| av爱爱亚洲一区| 中文字幕一区视频| 一本久久精品一区二区| 亚洲色大成网站www久久九九| 91网站最新网址| 一区二区三区色| 欧美日韩成人一区| 日本va欧美va精品发布| 精品国产人成亚洲区| 韩国在线一区二区| 国产女主播一区| 成人动漫一区二区在线| 亚洲欧洲无码一区二区三区| 色综合夜色一区| 一区二区三区在线免费播放 | 久久人人爽人人爽| 国产一区二区三区蝌蚪| 国产精品麻豆视频| 欧美在线小视频| 日本vs亚洲vs韩国一区三区二区| 26uuu精品一区二区| 成人app在线| 亚洲精品乱码久久久久久黑人| 欧美三区在线观看| 国产在线不卡一区| 亚洲色图制服诱惑| 日韩欧美国产一二三区| 成人丝袜18视频在线观看| 亚洲激情av在线| 欧美一区二区三区四区在线观看 | 成人免费在线视频| 欧美日韩高清一区二区三区| 国产精品1区2区| 亚洲日本一区二区三区| 欧美精品免费视频| 国产成人av网站| 亚洲自拍偷拍九九九| 亚洲精品一区二区三区香蕉| 色综合久久天天| 另类调教123区| 亚洲免费观看高清完整版在线观看| 91超碰这里只有精品国产| 国产99久久久国产精品潘金| 亚洲高清免费在线| 国产精品丝袜在线| 欧美精品久久久久久久多人混战| 国产成人在线色| 日本特黄久久久高潮| 中文字幕在线一区二区三区| 91精品午夜视频| av在线一区二区| 国产精品资源在线观看| 免费人成在线不卡| 午夜电影久久久| 日韩毛片高清在线播放| 国产无一区二区| 欧美一区二区三区四区久久| 91激情五月电影| 成年人网站91| 国产福利91精品一区二区三区| 日本不卡视频一二三区| 亚洲成av人片在线| 亚洲精品高清在线观看| 国产欧美一区二区三区在线老狼| 91精品婷婷国产综合久久性色 | heyzo一本久久综合| 欧美性大战久久久久久久蜜臀| 国产成人av一区二区| 麻豆精品在线视频| 日韩精品一区第一页| 亚洲人成小说网站色在线| 欧美国产1区2区| 久久一日本道色综合| 精品国产乱码久久久久久图片 | 国产一区999| 免费成人在线影院| 日本美女一区二区三区视频| 亚洲国产日韩a在线播放| 亚洲日本在线a| 亚洲欧洲日韩av| 亚洲四区在线观看| 国产精品不卡一区二区三区| 18欧美亚洲精品| 国产精品丝袜在线| 亚洲欧美国产三级| 亚洲影院免费观看| 亚洲图片一区二区| 亚洲成人av一区二区| 五月天视频一区| 天堂成人免费av电影一区| 青青草精品视频| 精品一区二区三区不卡| 国产精选一区二区三区| 丁香桃色午夜亚洲一区二区三区| 国产69精品久久久久777| 本田岬高潮一区二区三区| 91小视频在线| 在线观看日韩av先锋影音电影院| 欧美精品乱码久久久久久| 欧美成人精品1314www| 亚洲国产精品二十页| 亚洲欧美色综合| 亚洲成av人**亚洲成av**| 蜜桃一区二区三区在线观看| 国产成人精品亚洲日本在线桃色 | 国产黄色精品视频| 91在线观看一区二区| 欧美午夜电影网| 欧美大黄免费观看| 国产精品青草综合久久久久99| 亚洲精品第一国产综合野| 日日欢夜夜爽一区| 国产一区二区免费看| 91浏览器打开| 精品久久久久久久久久久久久久久| 中文字幕在线观看不卡视频| 婷婷开心久久网| 国产成人免费9x9x人网站视频| 色国产精品一区在线观看| 欧美一区二区三区在线观看| 国产精品久久久久久福利一牛影视 | 久久精品国产亚洲一区二区三区| 国产传媒欧美日韩成人| 91网上在线视频| 久久毛片高清国产| 午夜欧美大尺度福利影院在线看| 国产一区美女在线| 欧美在线不卡一区| 欧美国产激情二区三区| 青草国产精品久久久久久| 成人av网站在线观看| 日韩一级完整毛片| 亚洲精品成人精品456| 久久99国产乱子伦精品免费| 色婷婷av一区二区三区大白胸| 欧美精品一区二区三区很污很色的 | 日本特黄久久久高潮| 91麻豆成人久久精品二区三区| 久久综合久久综合久久综合| 亚洲成人免费看| 91麻豆免费观看| 国产视频一区二区在线观看| 免费观看久久久4p| 欧美日精品一区视频| 亚洲色图欧美激情| 成人一区二区在线观看| 2021国产精品久久精品| 日韩av一区二区三区| 欧美日韩三级一区| 亚洲一区二区三区在线播放| 91在线免费看| 国产精品久久久久9999吃药| 国产一区二区在线观看免费| 日韩视频免费观看高清完整版| 图片区小说区区亚洲影院| 色久综合一二码| 一区二区三区在线免费播放| 色哟哟国产精品| 亚洲乱码中文字幕综合| 色婷婷久久综合| 亚洲老妇xxxxxx| 在线观看中文字幕不卡| 亚洲一二三区视频在线观看| 精品婷婷伊人一区三区三| 亚洲超碰97人人做人人爱|