rubysdl 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +505 -0
- data/MANIFEST +81 -0
- data/NEWS.en +144 -0
- data/NEWS.ja +151 -0
- data/README.en +117 -0
- data/README.ja +166 -0
- data/SDL_kanji.c +403 -0
- data/SDL_kanji.h +48 -0
- data/depend +18 -0
- data/doc/Makefile +18 -0
- data/doc/cdrom.rsd +431 -0
- data/doc/collision.rsd +162 -0
- data/doc/event.rsd +1487 -0
- data/doc/font.rsd +839 -0
- data/doc/general.rsd +49 -0
- data/doc/init.rsd +175 -0
- data/doc/joystick.rsd +387 -0
- data/doc/mixer.rsd +837 -0
- data/doc/mpeg.rsd +595 -0
- data/doc/rsd.rb +125 -0
- data/doc/sdlskk.rsd +496 -0
- data/doc/time.rsd +45 -0
- data/doc/video.rsd +2499 -0
- data/doc/wm.rsd +113 -0
- data/extconf.rb +92 -0
- data/lib/rubysdl_aliases.rb +431 -0
- data/lib/sdl.rb +271 -0
- data/rubysdl.h +109 -0
- data/rubysdl_cdrom.c +176 -0
- data/rubysdl_const_list.txt +280 -0
- data/rubysdl_doc.en.rd +2180 -0
- data/rubysdl_doc_old.rd +2402 -0
- data/rubysdl_event.c +346 -0
- data/rubysdl_event2.c +417 -0
- data/rubysdl_event_key.c +356 -0
- data/rubysdl_image.c +53 -0
- data/rubysdl_joystick.c +156 -0
- data/rubysdl_kanji.c +135 -0
- data/rubysdl_main.c +202 -0
- data/rubysdl_mixer.c +422 -0
- data/rubysdl_mouse.c +96 -0
- data/rubysdl_opengl.c +63 -0
- data/rubysdl_pixel.c +133 -0
- data/rubysdl_ref.html +5550 -0
- data/rubysdl_ref.rd +6163 -0
- data/rubysdl_rwops.c +90 -0
- data/rubysdl_sdlskk.c +312 -0
- data/rubysdl_sge_video.c +622 -0
- data/rubysdl_smpeg.c +341 -0
- data/rubysdl_time.c +36 -0
- data/rubysdl_ttf.c +324 -0
- data/rubysdl_video.c +749 -0
- data/rubysdl_wm.c +71 -0
- data/sample/aadraw.rb +24 -0
- data/sample/alpha.rb +27 -0
- data/sample/alphadraw.rb +25 -0
- data/sample/bfont.rb +24 -0
- data/sample/cdrom.rb +17 -0
- data/sample/collision.rb +97 -0
- data/sample/cursor.bmp +0 -0
- data/sample/cursor.rb +22 -0
- data/sample/ellipses.rb +35 -0
- data/sample/event2.rb +32 -0
- data/sample/font.bmp +0 -0
- data/sample/font.rb +25 -0
- data/sample/fpstimer.rb +175 -0
- data/sample/icon.bmp +0 -0
- data/sample/joy2.rb +81 -0
- data/sample/kanji.rb +36 -0
- data/sample/movesp.rb +93 -0
- data/sample/playmod.rb +14 -0
- data/sample/plaympeg.rb +48 -0
- data/sample/playwave.rb +16 -0
- data/sample/randrect.rb +40 -0
- data/sample/sample.ttf +0 -0
- data/sample/sdlskk.rb +70 -0
- data/sample/sgetest.rb +31 -0
- data/sample/stetris.rb +275 -0
- data/sample/testgl.rb +166 -0
- data/sample/testsprite.rb +68 -0
- data/sample/transformblit.rb +41 -0
- metadata +121 -0
data/README.ja
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
|
2
|
+
Ruby/SDL 1.3.0
|
3
|
+
���Ӱ�ʿ
|
4
|
+
|
5
|
+
1 ����
|
6
|
+
|
7
|
+
����ϡ�Ruby����SDL�ε�ǽ��Ȥ�����γ�ĥ�饤�֥��Ǥ���
|
8
|
+
SDL�Ȥϡ�Win32,Linux,BeOS,MacOS,FreeBSD,Solaris����ư�����������ץ�åȥե�����ʥ����೫ȯ�ѥ饤�֥��Ǥ���
|
9
|
+
|
10
|
+
2 ư��Ķ�
|
11
|
+
Linux��X�塢Win32
|
12
|
+
�ޤ���FreeBSD��ư���ǧ���졢Ports�����줿�����Ǥ���
|
13
|
+
BeOS��Ǥ�ư�������Ǥ���
|
14
|
+
MacOSX�Ǥ�ư���������Ǥ���������Ruby�˼�������ɬ�פ�����褦�Ǥ���
|
15
|
+
����ʳ��Ǥϳ�ǧ���Ƥ��ޤ���
|
16
|
+
|
17
|
+
3 ɬ�פʥ饤�֥��
|
18
|
+
|
19
|
+
���Υ饤�֥��ϡ�ruby�ν����Ϥ�¾���ʲ��Υ饤�֥���ɬ�פȤ��ޤ���
|
20
|
+
SDL_mixer,SDL_ttf,SDL_image,SGE,smpeg,SDLSKK�Ϥʤ��Ƥ⤫�ޤ��ޤ���
|
21
|
+
|
22
|
+
SDL(ɬ��) http://www.libsdl.org/
|
23
|
+
|
24
|
+
|
25
|
+
SDL_mixer(���ץ����) http://www.libsdl.org/projects/SDL_mixer/index.html
|
26
|
+
SDL_ttf(���ץ����) http://www.libsdl.org/projects/SDL_ttf/index.html
|
27
|
+
SDL_image(���ץ����) http://www.libsdl.org/projects/SDL_image/index.html
|
28
|
+
SGE(���ץ����) http://www.etek.chalmers.se/~e8cal1/sge/
|
29
|
+
SMPEG(���ץ����) http://www.icculus.org/smpeg/
|
30
|
+
SDLSKK(���ץ����) http://www.kmc.gr.jp/~ohai/sdlskk.html
|
31
|
+
|
32
|
+
�ޤ���SDL_kanji�����Ѥ��Ƥ��ޤ���������ϥ��������֤˴ޤ�Ƥ���Τ�
|
33
|
+
�̤��Ѱդ���ɬ�פϤ���ޤ���
|
34
|
+
|
35
|
+
4 ���ȡ���
|
36
|
+
Linux��ǤΥ��ȡ�����������ޤ���Unix�Ϥ�OS�ʤ�ɤ�Ǥ�Ʊ���褦
|
37
|
+
�ˤǤ���Ȼפ��ޤ���
|
38
|
+
Debian��Vine������¾�͡��ʥǥ����ȥ�ӥ塼�����ˤ�Ruby/SDL�Υѥå�����
|
39
|
+
������ΤǤ�������Ѥ��Ƥ�褤�Ǥ��礦��
|
40
|
+
Windows��Ǥ��̤��Ѱդ��Ƥ���Х��ʥ����Ѥ����ۤ����ڤǤ��礦��
|
41
|
+
FreeBSD�ˤ�Port������ΤǤ�������Ѥ��Ƥ���������
|
42
|
+
��Ԥ�Windows�δĶ��Ǥϡ�extconf.rb����Ѥ���Makefile���ǽ�
|
43
|
+
����ѥ��뤷�Ƥ����ꤷ�ޤ���
|
44
|
+
|
45
|
+
(1)ruby�Υ��ȡ���
|
46
|
+
ruby�Υɥ���������˽��äƥ��ȡ��뤷�Ƥ���������
|
47
|
+
|
48
|
+
(2)SDL�Υ��ȡ���
|
49
|
+
��������Ÿ�����ƥ���ѥ��뤹����ϡ��ʲ����̤�ˤ��Ƥ���������
|
50
|
+
./configure --disable-pthreads
|
51
|
+
(������--disable-pthreads���ץ�����Ĥ��ʤ��Ȥ��ޤ�ư���ޤ���)
|
52
|
+
(���Υ��ץ�����Ĥ��Ƥ⡢SDL������ǽ�Ȥ���褦�Ǥ�)
|
53
|
+
(Linux�ʳ��Ǥ�ɬ�פ���ޤ���)
|
54
|
+
(rubysdl_doc.rd�κǸ��--disable-pthreads���դ��ʤ��Ȥ��ɤ���ˡ��Ƥ���ޤ�)
|
55
|
+
make
|
56
|
+
make install
|
57
|
+
|
58
|
+
(3)SGE�Υ��ȡ���
|
59
|
+
make; make install�ǥ��ȡ��뤵��ޤ���
|
60
|
+
|
61
|
+
(4)SDL_mixer,SDL_ttf,SDL_image,SMPEG,SDLSKK�Υ��ȡ���
|
62
|
+
��°�Υɥ�����Ȥ˽��äƥ��ȡ��뤷�Ƥ���������
|
63
|
+
|
64
|
+
(5)���γ�ĥ�饤�֥��(Ruby/SDL)�Υ��ȡ���
|
65
|
+
���Υ饤�֥��Υ�������Ÿ�������ǥ��쥯�ȥ����
|
66
|
+
ruby extconf.rb
|
67
|
+
make
|
68
|
+
make install
|
69
|
+
�Ȥ��Ƥ���������
|
70
|
+
|
71
|
+
5 �Ȥ���
|
72
|
+
require 'sdl'�ǻȤ��ޤ���
|
73
|
+
�ܤ����ϡ��ʲ��Υե������ɥ�����ȤƤ���������
|
74
|
+
|
75
|
+
sample/*.rb ����ץ�
|
76
|
+
�ʲ��Υ���ץ뤬����ޤ���
|
77
|
+
testsprite.rb ����ɽ���Υ���ץ�
|
78
|
+
playwave.rb PCM�ե�������դΥ���ץ� sample.wav ��ɬ��
|
79
|
+
movesp.rb �������ϤΥ���ץ�
|
80
|
+
alpha.rb ����ե��֥��ǥ��Υ���ץ�
|
81
|
+
sgetest.rb sge�Υץ�ߥƥ�������Υ���ץ�
|
82
|
+
font.rb True Type Font�Υ���ץ�
|
83
|
+
playmod.rb mod�ե�������դΥ���ץ� sample.it ��ɬ��
|
84
|
+
testgl.rb OpenGL�Υ���ץ�
|
85
|
+
cursor.rb �ޥ�������������ѹ����륵��ץ�p
|
86
|
+
transformblit.rb ��ž�̾�����Υ���ץ�
|
87
|
+
joy2.rb ���祤�ѥå����ϤΥ���ץ�
|
88
|
+
plaympeg.rb mpegɽ���Υ���ץ� sample.mpg��ɬ��
|
89
|
+
sdlskk.rb SDLSKK�Υ���ץ롣�ե���Ȥ伭����ɬ��
|
90
|
+
�ܤ����ϥ���ץ�Υ����ȤƤ�������
|
91
|
+
bfont.rb �ӥåȥޥåץե����ɽ���Υ���ץ�
|
92
|
+
kanji.rb SDL_Kanji��ǽ�Υ���ץ롣8x16.bdf��jiskan16.bdf
|
93
|
+
�Ȥ���2�Ĥ�bdf�ե����뤬ɬ��
|
94
|
+
collision.rb �����е�ǽ�Υ���ץ�
|
95
|
+
����¾
|
96
|
+
rubysdl_ref.rd, rubysdl_ref.html ��ե����
|
97
|
+
Ruby/SDL�Υ�ե���ޥ˥奢��Ǥ���
|
98
|
+
rubysdl_doc_old.rd �Ť���ե����
|
99
|
+
�Ť���ե���Ǥ���
|
100
|
+
SDL�Υɥ������
|
101
|
+
SDL�Υ��ȡ���ΤȤ���Ÿ�������ե��������ˤ���Ϥ��Ǥ���
|
102
|
+
�ޤ��� http://www.tacoworks.jp/software/SDLdoc-jp/index-j.html
|
103
|
+
�������ܸ�Υɥ�����Ȥ�������ޤ���
|
104
|
+
��ե���˽�Ƥ��ʤ����ȤϤ���Ƥ���������
|
105
|
+
doc/
|
106
|
+
Makefile
|
107
|
+
rsd.rb
|
108
|
+
*.rsd
|
109
|
+
��ե���ޥ˥奢��θ��ǡ����Ǥ���
|
110
|
+
|
111
|
+
6 OpenGL�ˤĤ���
|
112
|
+
���Υ饤�ե��ˤ�ä�OpenGL�ؤΥ�����������ǽ�ˤʤ�ޤ���
|
113
|
+
|
114
|
+
(1) SDL����OpenGL��Ȥ���褦�����ꤹ�롣
|
115
|
+
(2) http://raa.ruby-lang.org/project/opengl/ ����Ruby�Ѥ�
|
116
|
+
OpenGL Interface ���äƤ��ƥ��ȡ��뤹�롣
|
117
|
+
(3) ruby extconf.rb ��Ȥ��ˡ�--enable-opengl ����ꤹ�롣
|
118
|
+
(4) make ; make install ���롣
|
119
|
+
���ξ���Ruby�Υ�����ץ����require 'opengl'��ɬ�פ�����ޤ���
|
120
|
+
|
121
|
+
�����ե������� OpenGL Interface �Τ�ΤΤޤȤäƤ��ޤ���
|
122
|
+
����λȤ������ϡ�SDL�Υɥ�����ȡ�OpenGL�Υɥ�����ȡ�
|
123
|
+
����� sample/testgl.rb ��Ĵ�٤Ƥ���������
|
124
|
+
|
125
|
+
����
|
126
|
+
OpenGL�Υ����ե������ϼ����ˤ�äƾ������İۤʤ�ޤ������Τ���
|
127
|
+
���Τޤޤ��Ȥȥ���ѥ���Ǥ��ʤ������ޤ�ư���ʤ��ʤɤθ��ݤ�������
|
128
|
+
���Ȥ�����ޤ������ξ�� OpenGL Interface �Υ������˼�������ɬ��
|
129
|
+
������ޤ���
|
130
|
+
|
131
|
+
7 �饤����
|
132
|
+
GNU LGPL(GNU Lesser General Public License) version 2.1 �ʹߤ˽����ޤ���
|
133
|
+
�ܤ�����LICENSE�Ƥ���������
|
134
|
+
��������sample/ �ʲ��ˤ��륵��ץ�ץ������Ϥ���ˤϽ��鷺��
|
135
|
+
��ͳ�����Ѥ��Ƥ褤�Ǥ���
|
136
|
+
|
137
|
+
8 �ռ�
|
138
|
+
�ʲ��ο�ã�˴��դ��ޤ���
|
139
|
+
* FreeBSD�Ǥ�ư���ǧ��Ports���äƤ���������Akinori MUSHA����
|
140
|
+
* ���ޤ��ޤʰո������äƤ������ꡢ�����Ĥ�Υѥå������äƤ������ä���
|
141
|
+
��������餵��
|
142
|
+
* �����Ƥ⤦�ҤȤĤ�SDL��Ruby��ĥ�饤�֥��"RUDL"�κ�ԤǤ���
|
143
|
+
Danny van Bruggen ����(�����Ĥ��Υ����ǥ��Υ饤�֥�꤫�����ޤ���)��
|
144
|
+
* rubysdl_ttf.c�ε�ǽ��ĥ�ѥå���Vine��Debian�Υѥå����������ʤɤ�
|
145
|
+
���Ƥ�����������ޤ������餵��
|
146
|
+
* �����Ĥ��Υѥå����ä� Wayne Conrad ����Christian Neukirchen����
|
147
|
+
Keffin Barnaby����
|
148
|
+
* ����ץ�����Ƥ������ä� Simon Strandgaard ����
|
149
|
+
* ͭ�Ѥʾ��Х���ݡ��Ȥ����ä� Rorien Dunn����Dennis Ranke����
|
150
|
+
Keita Urashima����
|
151
|
+
* SDL��¸�ߤ��Ƥ��졢Ruby/SDL���뤭�ä�����Ϳ���Ƥ��줿��Ȫ����
|
152
|
+
* SDLdoc ���ܸ������ץ��������Ȥˤ�����ä��ߤʤ���
|
153
|
+
* ����ץ��ѤΥե���Ȥ����Ƥ��줿������
|
154
|
+
* #sdl-fan-jp@friend chat �Τߤʤ���
|
155
|
+
|
156
|
+
9 ����¾
|
157
|
+
�ޤ��ƥ��Ȥ���Ƥ��ʤ���ǽ��¿������ޤ�(�ѥ�åȴ�Ϣ
|
158
|
+
��MPEG��Ϣ�Υ�åɤ����Ĥ��ʤ�)��
|
159
|
+
|
160
|
+
��˾���Х���𡢻��Ѥ����������ϡ�ohai@kmc.gr.jp�˥���Ф���
|
161
|
+
�������������ΤȤ����ޤ��ȿ��������ޤ���Τǡ���ñ�ʴ��ۤǤ����äƤ���
|
162
|
+
��ȴ��Ǥ���
|
163
|
+
�ޤ���ruby-list��ruby-ext�Ƥ��ޤ��Τǡ��Х���������𤷤Ƥ���Ƥ�
|
164
|
+
�ɤ��Ǥ���
|
165
|
+
|
166
|
+
�ʾ�
|
data/SDL_kanji.c
ADDED
@@ -0,0 +1,403 @@
|
|
1
|
+
#include "SDL_kanji.h"
|
2
|
+
|
3
|
+
#include <string.h>
|
4
|
+
#include <stdio.h>
|
5
|
+
#include <stdlib.h>
|
6
|
+
#include <ctype.h>
|
7
|
+
|
8
|
+
#define BUF 256
|
9
|
+
|
10
|
+
static void InitFont(Kanji_Font* font) {
|
11
|
+
int i;
|
12
|
+
for (i = 0; i < 96*96 + 256; i++) {
|
13
|
+
font->moji[i] = 0;
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
Kanji_Font* Kanji_OpenFont(const char* file, int size) {
|
18
|
+
Kanji_Font* font;
|
19
|
+
font = (Kanji_Font*)malloc(sizeof(Kanji_Font));
|
20
|
+
|
21
|
+
font->k_size = size;
|
22
|
+
font->a_size = size / 2;
|
23
|
+
font->sys = KANJI_JIS;
|
24
|
+
|
25
|
+
InitFont(font);
|
26
|
+
if (0 == Kanji_AddFont(font, file)) {
|
27
|
+
return font;
|
28
|
+
}
|
29
|
+
else {
|
30
|
+
free(font);
|
31
|
+
return 0;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
static void ParseChar(Kanji_Font* font, int index, FILE* fp, int shift) {
|
36
|
+
char buf[BUF];
|
37
|
+
int y;
|
38
|
+
|
39
|
+
/* ���Ƀ��[�h����Ă��镶���͓ǂݍ��܂Ȃ� */
|
40
|
+
if (font->moji[index] != 0) return;
|
41
|
+
|
42
|
+
font->moji[index] = (Uint32*)malloc(sizeof(Uint32)*font->k_size);
|
43
|
+
|
44
|
+
for (y = 0; y < font->k_size; y++) {
|
45
|
+
fgets(buf, BUF, fp);
|
46
|
+
font->moji[index][y] = (strtol(buf, 0, 16) >> shift);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
static int ParseFont(Kanji_Font* font, FILE* fp) {
|
51
|
+
char buf[BUF], *p;
|
52
|
+
int index;
|
53
|
+
int k_rshift, a_rshift;
|
54
|
+
int s;
|
55
|
+
|
56
|
+
for (s = 8; s < font->k_size; s += 8) {}
|
57
|
+
k_rshift = s - font->k_size;
|
58
|
+
for (s = 8; s < font->a_size; s += 8) {}
|
59
|
+
a_rshift = s - font->a_size;
|
60
|
+
|
61
|
+
while (1) {
|
62
|
+
if (fgets(buf, BUF, fp) == NULL) {
|
63
|
+
break;
|
64
|
+
}
|
65
|
+
|
66
|
+
if (strstr(buf, "ENCODING") != NULL) {
|
67
|
+
p = strchr(buf, ' ');
|
68
|
+
index = strtol(p, 0, 10);
|
69
|
+
|
70
|
+
while (strstr(buf, "BITMAP") == NULL) {
|
71
|
+
fgets(buf, BUF, fp);
|
72
|
+
}
|
73
|
+
|
74
|
+
if (index > 255) {
|
75
|
+
index = (((index & 0xff00) >> 8) - 0x20) * 96
|
76
|
+
+ (index & 0xff) - 0x20 + 0xff;
|
77
|
+
ParseChar(font, index, fp, k_rshift);
|
78
|
+
}
|
79
|
+
else {
|
80
|
+
ParseChar(font, index, fp, a_rshift);
|
81
|
+
}
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
return 0;
|
86
|
+
}
|
87
|
+
|
88
|
+
int Kanji_AddFont(Kanji_Font* font, const char* file) {
|
89
|
+
FILE* fp;
|
90
|
+
|
91
|
+
fp = fopen(file, "r");
|
92
|
+
if(fp==NULL){
|
93
|
+
fprintf(stderr, "cant open [%s]\n", file);
|
94
|
+
return -1;
|
95
|
+
}
|
96
|
+
|
97
|
+
if (0 != ParseFont(font, fp)) return -1;
|
98
|
+
|
99
|
+
fclose(fp);
|
100
|
+
return 0;
|
101
|
+
}
|
102
|
+
|
103
|
+
int Kanji_FontHeight(Kanji_Font* font) {
|
104
|
+
return font->k_size;
|
105
|
+
}
|
106
|
+
|
107
|
+
int Kanji_FontWidth(Kanji_Font* font, const char* text) {
|
108
|
+
if (text == 0) return font->a_size;
|
109
|
+
else return strlen(text) * font->a_size;
|
110
|
+
}
|
111
|
+
|
112
|
+
static void KanjiPutpixel(SDL_Surface *s,int x,int y,Uint32 pixel){
|
113
|
+
Uint8 *p,bpp;
|
114
|
+
if(SDL_MUSTLOCK(s)){
|
115
|
+
if(SDL_LockSurface(s)<0) return;
|
116
|
+
}
|
117
|
+
bpp=s->format->BytesPerPixel;
|
118
|
+
p=(Uint8*)(s->pixels)+y*s->pitch+x*bpp;
|
119
|
+
|
120
|
+
switch(bpp){
|
121
|
+
case 1:
|
122
|
+
*((Uint8 *)p)=(Uint8)pixel;
|
123
|
+
break;
|
124
|
+
case 2:
|
125
|
+
*((Uint16 *)p)=(Uint16)pixel;
|
126
|
+
break;
|
127
|
+
case 4:
|
128
|
+
*((Uint32 *)p)=pixel;
|
129
|
+
break;
|
130
|
+
}
|
131
|
+
|
132
|
+
if(SDL_MUSTLOCK(s)){
|
133
|
+
SDL_UnlockSurface(s);
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
static void euc2jis(unsigned char *c1, unsigned char *c2)
|
138
|
+
{
|
139
|
+
*c1 &= 0x7f;
|
140
|
+
*c2 &= 0x7f;
|
141
|
+
}
|
142
|
+
|
143
|
+
static void sjis2jis(unsigned char *c1, unsigned char *c2)
|
144
|
+
{
|
145
|
+
if( *c2 < 0x9f )
|
146
|
+
{
|
147
|
+
if( *c1 < 0xa0 )
|
148
|
+
{
|
149
|
+
*c1 -= 0x81;
|
150
|
+
*c1 *= 2;
|
151
|
+
*c1 += 0x21;
|
152
|
+
}
|
153
|
+
else
|
154
|
+
{
|
155
|
+
*c1 -= 0xe0;
|
156
|
+
*c1 *= 2;
|
157
|
+
*c1 += 0x5f;
|
158
|
+
}
|
159
|
+
if( *c2 > 0x7f )
|
160
|
+
-- *c2;
|
161
|
+
*c2 -= 0x1f;
|
162
|
+
}
|
163
|
+
else
|
164
|
+
{
|
165
|
+
if( *c1 < 0xa0 )
|
166
|
+
{
|
167
|
+
*c1 -= 0x81;
|
168
|
+
*c1 *= 2;
|
169
|
+
*c1 += 0x22;
|
170
|
+
}
|
171
|
+
else
|
172
|
+
{
|
173
|
+
*c1 -= 0xe0;
|
174
|
+
*c1 *= 2;
|
175
|
+
*c1 += 0x60;
|
176
|
+
}
|
177
|
+
*c2 -= 0x7e;
|
178
|
+
}
|
179
|
+
}
|
180
|
+
|
181
|
+
static void ConvertCodingSystem(Kanji_Font* font,
|
182
|
+
unsigned char *c1, unsigned char *c2) {
|
183
|
+
if (font->sys == KANJI_SJIS) {
|
184
|
+
sjis2jis(c1, c2);
|
185
|
+
}
|
186
|
+
else if (font->sys == KANJI_EUC) {
|
187
|
+
euc2jis(c1, c2);
|
188
|
+
}
|
189
|
+
}
|
190
|
+
|
191
|
+
int Kanji_PutText(Kanji_Font* font, int dx, int dy,
|
192
|
+
SDL_Surface* dst, const char* txt, SDL_Color fg)
|
193
|
+
{
|
194
|
+
Uint32 fgcol;
|
195
|
+
int index;
|
196
|
+
int x, y, cx = dx, cy = dy;
|
197
|
+
unsigned char high, low;
|
198
|
+
int minx, miny, maxx, maxy;
|
199
|
+
int nowKanji = 0;
|
200
|
+
const unsigned char* text = (const unsigned char*)txt;
|
201
|
+
|
202
|
+
fgcol = SDL_MapRGB(dst->format, fg.r, fg.g, fg.b);
|
203
|
+
while (*text != 0) {
|
204
|
+
if (font->sys == KANJI_JIS && *text == 0x1b) {
|
205
|
+
if (*(text+1) == 0x24 && *(text+2) == 0x42) {
|
206
|
+
nowKanji = 1;
|
207
|
+
}
|
208
|
+
else if (*(text+1) == 0x28 && *(text+2) == 0x42) {
|
209
|
+
nowKanji = 0;
|
210
|
+
}
|
211
|
+
text += 3;
|
212
|
+
continue;
|
213
|
+
}
|
214
|
+
if (font->sys != KANJI_JIS) nowKanji = !isprint(*text);
|
215
|
+
|
216
|
+
if (!nowKanji) {
|
217
|
+
index = *text;
|
218
|
+
text++;
|
219
|
+
if (font->moji[index] == 0) {
|
220
|
+
cx += font->a_size;
|
221
|
+
continue;
|
222
|
+
}
|
223
|
+
|
224
|
+
minx = (cx >= 0) ? 0 : -cx;
|
225
|
+
miny = (cy >= 0) ? 0 : -cy;
|
226
|
+
maxx = (cx+font->a_size <= dst->w) ? font->a_size : dst->w-cx;
|
227
|
+
maxy = (cy+font->k_size <= dst->h) ? font->k_size : dst->h-cy;
|
228
|
+
|
229
|
+
for (y = miny; y < maxy; y++) {
|
230
|
+
for (x = minx; x < maxx; x++) {
|
231
|
+
if (font->moji[index][y] & (1 << (font->a_size-x-1))) {
|
232
|
+
KanjiPutpixel(dst, cx+x, cy+y, fgcol);
|
233
|
+
}
|
234
|
+
}
|
235
|
+
}
|
236
|
+
cx += font->a_size;
|
237
|
+
}
|
238
|
+
else {
|
239
|
+
high = *text;
|
240
|
+
low = *(text+1);
|
241
|
+
ConvertCodingSystem(font, &high, &low);
|
242
|
+
index = (high - 0x20) * 96 + low - 0x20 + 0xff;
|
243
|
+
text += 2;
|
244
|
+
if (font->moji[index] == 0) {
|
245
|
+
cx += font->k_size;
|
246
|
+
continue;
|
247
|
+
}
|
248
|
+
|
249
|
+
minx = (cx >= 0) ? 0 : -cx;
|
250
|
+
miny = (cy >= 0) ? 0 : -cy;
|
251
|
+
maxx = (cx+font->k_size <= dst->w) ? font->k_size : dst->w-cx;
|
252
|
+
maxy = (cy+font->k_size <= dst->h) ? font->k_size : dst->h-cy;
|
253
|
+
|
254
|
+
for (y = miny; y < maxy; y++) {
|
255
|
+
for (x = minx; x < maxx; x++) {
|
256
|
+
if (font->moji[index][y] & (1 << (font->k_size-x-1))) {
|
257
|
+
KanjiPutpixel(dst, cx+x, cy+y, fgcol);
|
258
|
+
}
|
259
|
+
}
|
260
|
+
}
|
261
|
+
cx += font->k_size;
|
262
|
+
}
|
263
|
+
}
|
264
|
+
return 0;
|
265
|
+
}
|
266
|
+
|
267
|
+
int Kanji_PutTextTate(Kanji_Font* font, int dx, int dy,
|
268
|
+
SDL_Surface* dst, const char* txt, SDL_Color fg)
|
269
|
+
{
|
270
|
+
Uint32 fgcol;
|
271
|
+
int index;
|
272
|
+
int x, y, cx = dx, cy = dy;
|
273
|
+
unsigned char high, low;
|
274
|
+
int minx, miny, maxx, maxy;
|
275
|
+
int nowKanji = 0;
|
276
|
+
const unsigned char* text = (const unsigned char*)txt;
|
277
|
+
|
278
|
+
fgcol = SDL_MapRGB(dst->format, fg.r, fg.g, fg.b);
|
279
|
+
while (*text != 0) {
|
280
|
+
if (font->sys == KANJI_JIS && *text == 0x1b) {
|
281
|
+
if (*(text+1) == 0x24 && *(text+2) == 0x42) {
|
282
|
+
nowKanji = 1;
|
283
|
+
}
|
284
|
+
else if (*(text+1) == 0x28 && *(text+2) == 0x42) {
|
285
|
+
nowKanji = 0;
|
286
|
+
}
|
287
|
+
text += 3;
|
288
|
+
continue;
|
289
|
+
}
|
290
|
+
if (font->sys != KANJI_JIS) nowKanji = !isprint(*text);
|
291
|
+
|
292
|
+
/* ASCII �͖��� */
|
293
|
+
if (!nowKanji) {
|
294
|
+
text++;
|
295
|
+
}
|
296
|
+
else {
|
297
|
+
high = *text;
|
298
|
+
low = *(text+1);
|
299
|
+
ConvertCodingSystem(font, &high, &low);
|
300
|
+
index = (high - 0x20) * 96 + low - 0x20 + 0xff;
|
301
|
+
text += 2;
|
302
|
+
if (font->moji[index] == 0) {
|
303
|
+
cy += font->k_size;
|
304
|
+
continue;
|
305
|
+
}
|
306
|
+
|
307
|
+
if (high == 0x21 && (low >= 0x22 || low <= 0x25)) {
|
308
|
+
cx += font->k_size * 0.6;
|
309
|
+
cy -= font->k_size * 0.6;
|
310
|
+
}
|
311
|
+
|
312
|
+
minx = (cx >= 0) ? 0 : -cx;
|
313
|
+
miny = (cy >= 0) ? 0 : -cy;
|
314
|
+
maxx = (cx+font->k_size <= dst->w) ? font->k_size : dst->w-cx;
|
315
|
+
maxy = (cy+font->k_size <= dst->h) ? font->k_size : dst->h-cy;
|
316
|
+
|
317
|
+
for (y = miny; y < maxy; y++) {
|
318
|
+
for (x = minx; x < maxx; x++) {
|
319
|
+
if (font->moji[index][y] & (1 << (font->k_size-x-1))) {
|
320
|
+
KanjiPutpixel(dst, cx+x, cy+y, fgcol);
|
321
|
+
}
|
322
|
+
}
|
323
|
+
}
|
324
|
+
|
325
|
+
if (high == 0x21 && (low >= 0x22 || low <= 0x25)) {
|
326
|
+
cx -= font->k_size * 0.6;
|
327
|
+
cy += font->k_size * 1.6;
|
328
|
+
}
|
329
|
+
else {
|
330
|
+
cy += font->k_size;
|
331
|
+
}
|
332
|
+
}
|
333
|
+
}
|
334
|
+
return 0;
|
335
|
+
}
|
336
|
+
|
337
|
+
SDL_Surface* Kanji_CreateSurface(Kanji_Font* font, const char* text,
|
338
|
+
SDL_Color fg, int bpp)
|
339
|
+
{
|
340
|
+
SDL_Surface* textbuf;
|
341
|
+
int len;
|
342
|
+
Uint32 bgcol;
|
343
|
+
|
344
|
+
if (text == NULL) return NULL;
|
345
|
+
if (*text == 0 ) return NULL;
|
346
|
+
len = strlen(text);
|
347
|
+
|
348
|
+
textbuf = SDL_AllocSurface(SDL_SWSURFACE, font->a_size*len, font->k_size,
|
349
|
+
bpp, 0, 0, 0, 0);
|
350
|
+
if (textbuf == NULL) {
|
351
|
+
fprintf(stderr,"ERROR: at Kanji_RenderText\n");
|
352
|
+
return NULL;
|
353
|
+
}
|
354
|
+
bgcol = SDL_MapRGB(textbuf->format, 255-fg.r, 255-fg.g, 255-fg.b);
|
355
|
+
SDL_FillRect(textbuf, NULL, bgcol);
|
356
|
+
SDL_SetColorKey(textbuf, SDL_SRCCOLORKEY, bgcol);
|
357
|
+
|
358
|
+
Kanji_PutText(font, 0, 0, textbuf, text, fg);
|
359
|
+
|
360
|
+
return textbuf;
|
361
|
+
}
|
362
|
+
|
363
|
+
SDL_Surface* Kanji_CreateSurfaceTate(Kanji_Font* font, const char* text,
|
364
|
+
SDL_Color fg, int bpp)
|
365
|
+
{
|
366
|
+
SDL_Surface* textbuf;
|
367
|
+
int len;
|
368
|
+
Uint32 bgcol;
|
369
|
+
|
370
|
+
if (text == NULL) return NULL;
|
371
|
+
if (*text == 0 ) return NULL;
|
372
|
+
len = strlen(text);
|
373
|
+
|
374
|
+
textbuf = SDL_AllocSurface(SDL_SWSURFACE, font->k_size, font->a_size*len,
|
375
|
+
bpp, 0, 0, 0, 0);
|
376
|
+
if (textbuf == NULL) {
|
377
|
+
fprintf(stderr,"ERROR: at Kanji_RenderText\n");
|
378
|
+
return NULL;
|
379
|
+
}
|
380
|
+
|
381
|
+
bgcol = SDL_MapRGB(textbuf->format, 255-fg.r, 255-fg.g, 255-fg.b);
|
382
|
+
SDL_FillRect(textbuf, NULL, bgcol);
|
383
|
+
SDL_SetColorKey(textbuf, SDL_SRCCOLORKEY, bgcol);
|
384
|
+
|
385
|
+
Kanji_PutTextTate(font, 0, 0, textbuf, text, fg);
|
386
|
+
|
387
|
+
return textbuf;
|
388
|
+
}
|
389
|
+
|
390
|
+
void Kanji_CloseFont(Kanji_Font* font) {
|
391
|
+
int i;
|
392
|
+
for (i = 0; i < 96*96 + 256; i++) {
|
393
|
+
if (font->moji[i] != 0) {
|
394
|
+
free(font->moji[i]);
|
395
|
+
}
|
396
|
+
}
|
397
|
+
free(font);
|
398
|
+
}
|
399
|
+
|
400
|
+
void Kanji_SetCodingSystem(Kanji_Font* font, Kanji_CodingSystem sys) {
|
401
|
+
font->sys = sys;
|
402
|
+
}
|
403
|
+
|