rubysdl 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
+