rubysdl 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. data/LICENSE +505 -0
  2. data/MANIFEST +81 -0
  3. data/NEWS.en +144 -0
  4. data/NEWS.ja +151 -0
  5. data/README.en +117 -0
  6. data/README.ja +166 -0
  7. data/SDL_kanji.c +403 -0
  8. data/SDL_kanji.h +48 -0
  9. data/depend +18 -0
  10. data/doc/Makefile +18 -0
  11. data/doc/cdrom.rsd +431 -0
  12. data/doc/collision.rsd +162 -0
  13. data/doc/event.rsd +1487 -0
  14. data/doc/font.rsd +839 -0
  15. data/doc/general.rsd +49 -0
  16. data/doc/init.rsd +175 -0
  17. data/doc/joystick.rsd +387 -0
  18. data/doc/mixer.rsd +837 -0
  19. data/doc/mpeg.rsd +595 -0
  20. data/doc/rsd.rb +125 -0
  21. data/doc/sdlskk.rsd +496 -0
  22. data/doc/time.rsd +45 -0
  23. data/doc/video.rsd +2499 -0
  24. data/doc/wm.rsd +113 -0
  25. data/extconf.rb +92 -0
  26. data/lib/rubysdl_aliases.rb +431 -0
  27. data/lib/sdl.rb +271 -0
  28. data/rubysdl.h +109 -0
  29. data/rubysdl_cdrom.c +176 -0
  30. data/rubysdl_const_list.txt +280 -0
  31. data/rubysdl_doc.en.rd +2180 -0
  32. data/rubysdl_doc_old.rd +2402 -0
  33. data/rubysdl_event.c +346 -0
  34. data/rubysdl_event2.c +417 -0
  35. data/rubysdl_event_key.c +356 -0
  36. data/rubysdl_image.c +53 -0
  37. data/rubysdl_joystick.c +156 -0
  38. data/rubysdl_kanji.c +135 -0
  39. data/rubysdl_main.c +202 -0
  40. data/rubysdl_mixer.c +422 -0
  41. data/rubysdl_mouse.c +96 -0
  42. data/rubysdl_opengl.c +63 -0
  43. data/rubysdl_pixel.c +133 -0
  44. data/rubysdl_ref.html +5550 -0
  45. data/rubysdl_ref.rd +6163 -0
  46. data/rubysdl_rwops.c +90 -0
  47. data/rubysdl_sdlskk.c +312 -0
  48. data/rubysdl_sge_video.c +622 -0
  49. data/rubysdl_smpeg.c +341 -0
  50. data/rubysdl_time.c +36 -0
  51. data/rubysdl_ttf.c +324 -0
  52. data/rubysdl_video.c +749 -0
  53. data/rubysdl_wm.c +71 -0
  54. data/sample/aadraw.rb +24 -0
  55. data/sample/alpha.rb +27 -0
  56. data/sample/alphadraw.rb +25 -0
  57. data/sample/bfont.rb +24 -0
  58. data/sample/cdrom.rb +17 -0
  59. data/sample/collision.rb +97 -0
  60. data/sample/cursor.bmp +0 -0
  61. data/sample/cursor.rb +22 -0
  62. data/sample/ellipses.rb +35 -0
  63. data/sample/event2.rb +32 -0
  64. data/sample/font.bmp +0 -0
  65. data/sample/font.rb +25 -0
  66. data/sample/fpstimer.rb +175 -0
  67. data/sample/icon.bmp +0 -0
  68. data/sample/joy2.rb +81 -0
  69. data/sample/kanji.rb +36 -0
  70. data/sample/movesp.rb +93 -0
  71. data/sample/playmod.rb +14 -0
  72. data/sample/plaympeg.rb +48 -0
  73. data/sample/playwave.rb +16 -0
  74. data/sample/randrect.rb +40 -0
  75. data/sample/sample.ttf +0 -0
  76. data/sample/sdlskk.rb +70 -0
  77. data/sample/sgetest.rb +31 -0
  78. data/sample/stetris.rb +275 -0
  79. data/sample/testgl.rb +166 -0
  80. data/sample/testsprite.rb +68 -0
  81. data/sample/transformblit.rb +41 -0
  82. metadata +121 -0
@@ -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
+ �ʾ�
@@ -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
+