[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: MGL2 update
鈴木(康)です。
<20000202210127B.jun@soum.co.jp>の記事において
jun@soum.co.jpさんは書きました。
| From: suz@hpc.bs1.fc.nec.co.jp (Koji Suzuki)
| Subject: MGL2 update
| Date: Sat, 29 Jan 2000 17:38:08 +0900 (JST)
|
| > R-300 と R-530 で動作を確認されたそうです。
| > (R-530 は、初のカラー対応!)
|
| R-500で動きました。かっちょいいですね。
あんまりデザインのセンスに自信ないんで
"かっちょいい" と言われるとすごく嬉しいです。
ところで、私は X版でテストしているんですが、mglsvrx + mgterm でレスポンスが
すごく悪くなるときがあります。
console版 -- mglsvrcons では、そのような問題起きていませんでしょうか?
ちょっと気になっています。
| とりあえずnviを作ってます。
| エディタは何入れるといいでしょうね。
わたしの好みは jvim と ng ですが ..
そういう答えでいいんでしょうか?
| もしかしてこれであのスケジューラとか動いちゃったりなんか
| するんでしょうか?
| --
task ですね。mnw は、MGL1 用なんで、変更しないといけないです。
( MGL2 は、互換性を少し(?)犠牲にしています。)
やないさんからもらったパッチがあるんで添付しちゃいます。
事後になっちゃいますが、OK ですよね > やないさん。
----- ここから -----
diff -r -u ../../mnw-1.1/Makefile ./Makefile
--- ../../mnw-1.1/Makefile Wed Aug 11 02:51:12 1999
+++ ./Makefile Tue Feb 1 10:24:28 2000
@@ -6,10 +6,11 @@
DISTNAME = mnw-1.1-990810
SRCDIR = mnw-1.1
BINDIR = /usr/local/bin
-MGLDIR = /usr/local/lib/mgl
+MGLDIR = /usr/local/lib/mgl2
USE_TRUETYPE = FALSE
USE_GGI = FALSE
+USE_MGL2 = TRUE
DEST = sample ev xpm2mgr bin2src
@@ -31,8 +32,8 @@
mnwwin.o
#CFLAGS = -O6 -DARCH_POSIX -I. -I/usr/local/lib/mgl
-CFLAGS = -Wall -g -DDEBUG -DARCH_POSIX -I. -I/usr/local/lib/mgl
-LFLAGS = -L. -lmnw -ldl
+CFLAGS = -Wall -g -DDEBUG -DARCH_POSIX -I. -I/usr/local/lib/mgl2
+LFLAGS = -L. -L/usr/local/lib/mgl2 -lmnw -L/usr/X11R6/lib -lX11 #-ldl
ifeq ($(USE_TRUETYPE),TRUE)
OBJ += \
@@ -47,6 +48,11 @@
ifeq ($(USE_GGI),TRUE)
CFLAGS += -DMNW_USE_GGI
LFLAGS += -lggi
+endif
+
+ifeq ($(USE_MGL2),TRUE)
+CFLAGS += -DUSE_MGL2
+LFLAGS += -lmgl2
else
LFLAGS += -lmgl
endif
diff -r -u ../../mnw-1.1/mnw.h ./mnw.h
--- ../../mnw-1.1/mnw.h Wed Nov 17 00:15:53 1999
+++ ./mnw.h Tue Feb 1 09:56:40 2000
@@ -10,23 +10,44 @@
/* #define MGL_PROTOTYPE */
#include "arch.h"
-#include "mgl.h" /* mgl library */
+#ifndef USE_MGL2
+ #include "mgl.h" /* mgl library */
+#else
+ #include "mgl2.h" /* mgl library */
+#endif /* !USE_MGL2 */
#include <stdio.h>
#include <sys/time.h>
/* -- macros */
#define REGION_SCREEN_WIDTH 640
+//#define REGION_SCREEN_WIDTH 480
#define REGION_SCREEN_HEIGHT 240
#define REGION_SCREEN_LEFT 0
#define REGION_SCREEN_TOP 0
-#define REGION_SCREEN_RIGHT (REGION_SCREEN_LEFT+REGION_SCREEN_WIDTH-1)
-#define REGION_SCREEN_BOTTOM (REGION_SCREEN_TOP+REGION_SCREEN_HEIGHT-1)
-
-#define kColor_Black 3
-#define kColor_DkGray 2
-#define kColor_LtGray 1
-#define kColor_White 0
+#ifndef USE_MGL2
+ #define REGION_SCREEN_RIGHT (REGION_SCREEN_LEFT+REGION_SCREEN_WIDTH-1)
+ #define REGION_SCREEN_BOTTOM (REGION_SCREEN_TOP+REGION_SCREEN_HEIGHT-1)
+#else
+ #define REGION_SCREEN_RIGHT (REGION_SCREEN_LEFT+SCREEN_WIDTH-1)
+ #define REGION_SCREEN_BOTTOM (REGION_SCREEN_TOP+SCREEN_HEIGHT-1)
+#endif /* !USE_MGL2 */
+
+#ifndef USE_MGL2
+ #define kColor_Black 3
+ #define kColor_DkGray 2
+ #define kColor_LtGray 1
+ #define kColor_White 0
+#else
+ //#define kColor_Black COLOR_BLACK
+ //#define kColor_DkGray COLOR_DARKGRAY
+ //#define kColor_LtGray COLOR_LIGHTGRAY
+ //#define kColor_White COLOR_WHITE
+ #define kColor_Black COLOR_WHITE
+ #define kColor_DkGray COLOR_LIGHTGRAY
+ #define kColor_LtGray COLOR_DARKGRAY
+ #define kColor_White COLOR_BLACK
+#endif /* !USE_MGL2 */
#define kFont_Default 0
#define kFont_12 1
@@ -114,7 +135,11 @@
int back_color;
int pen_x;
int pen_y;
+#ifndef USE_MGL2
int pen_color;
+#else
+ int mnw_pen_color;
+#endif /* !USE_MGL2 */
int pen_size;
int font;
int font_width;
diff -r -u ../../mnw-1.1/mnwgraph.c ./mnwgraph.c
--- ../../mnw-1.1/mnwgraph.c Mon Mar 8 16:17:52 1999
+++ ./mnwgraph.c Wed Feb 2 01:34:04 2000
@@ -16,6 +16,53 @@
static int tt_id[10];
#endif
+#ifdef USE_MGL2
+/* -- Font Utils */
+
+/* -- method */
+
+/* MGL2 用な関数名置き換え */
+#define draw_font_rotated draw_font
+
+/* 簡素なdraw_font_clipping代替関数 */
+static void
+draw_font_clipping(int x, int y, int code, int x1, int y1, int x2, int y2)
+{
+ struct screen *clip_base_scr;
+ int save_color;
+ int width = x2 - x1;
+ int height = y2 - y1;
+ int relpos_x;
+ int relpos_y;
+
+ /*
+ 毎回memscreen作るのは効率的に悪いかな? あらかじめglobalなmemscreen
+ 持たしたほーがいいかな。しかしメモリ喰うな...
+
+ 余白は25pix位で大丈夫かな?
+
+ 黒文字描く時どーすんのよ??
+ */
+ clip_base_scr = create_memscreen(width + 50, height + 50, NULL, STK_GENERIC_4COLOR, 0);
+ relpos_x = relpos_y = 25;
+ save_color = current_screen->_pen_color.color;
+
+//fprintf(stderr, "%s\n", "draw_font_clipping!");
+//fprintf(stderr, "x-%d y-%d x1-%d y1-%d x2-%d y2-%d\n", x, y, x1, y1, x2, y2);
+
+ push_screen(clip_base_scr);
+ set_color(COLOR_BLACK);
+ fill_rect(0, 0, width + relpos_x, height + relpos_y);
+ set_color(save_color);
+ draw_font(x - x1 + relpos_x, y - y1 + relpos_y, code, DIR_NORTH);
+ pop_screen();
+ bitblt(NULL, x1, y1, clip_base_scr, relpos_x, relpos_y, width, height, BLT_MASKING + COLOR_BLACK);
+ free_screen(clip_base_scr);
+ return;
+}
+#endif /* USE_MGL2 */
+
+
/* -- Rect */
/* -- method */
@@ -99,16 +146,31 @@
tt_id[kFont_24] = mnwTTFont_Create(24, 72, true);
#else
/* mglの初期化 */
+#ifndef USE_MGL2
open_graph();
/* 10x8 恵梨沙フォントのロード */
load_font("k10x8.fnt", 10, 8);
+#else
+ SCREEN_WIDTH = REGION_SCREEN_WIDTH;
+ SCREEN_HEIGHT = REGION_SCREEN_HEIGHT;
+ mgl_apli_type = AT_MAIN;
+ open_graph();
+ /* 10x8 恵梨沙フォントのロード */
+ //load_font("k10x8.fnt", 10, 8);
+ set_color(COLOR_WHITE);
+ clear_screen();
+#endif /* !USE_MGL2 */
#endif
self->fore_color = kColor_Black;
self->back_color = kColor_White;
self->pen_x = 0;
self->pen_y = 0;
+#ifndef USE_MGL2
self->pen_color = kColor_Black;
+#else
+ self->mnw_pen_color = kColor_Black;
+#endif /* !USE_MGL2 */
self->pen_size = 1;
self->font = kFont_12;
self->font_width = 12;
@@ -267,7 +329,11 @@
#ifdef MNW_USE_GGI
/* TODO */
#else
+#ifndef USE_MGL2
set_color(4); /* invert */
+#else
+ set_color(COLOR_REVERSE); /* invert */
+#endif /* !USE_MGL2 */
fill_rect(rect->x, rect->y, rect->width, rect->height);
/* NOTE: スクリーンの切り替えはサポートしていない */
set_color(kColor_Black);
@@ -301,7 +367,11 @@
char *src = pixmap;
int i;
+#ifndef USE_MGL2
offscreen = create_memscreen(pixmapwidth, pixmapheight, NULL);
+#else
+ offscreen = create_memscreen(pixmapwidth, pixmapheight, NULL, STK_GENERIC_4COLOR ,0);
+#endif /* !USE_MGL2 */
for (i = 0; i < offscreen->wbytes*offscreen->height; i++){
(offscreen->bitmap)[i] = ((src[i]&(0x03<<0))<<6)|((src[i]&(0x03<<2))<<2)|((src[i]&(0x03<<4))>>2)|((src[i]&(0x03<<6))>>6);
@@ -327,7 +397,11 @@
/* TODO */
#else
struct screen *offscreen;
+#ifndef USE_MGL2
offscreen = create_memscreen(pixmapwidth, pixmapheight, pixmap_buf);
+#else
+ offscreen = create_memscreen(pixmapwidth, pixmapheight, pixmap_buf, STK_GENERIC_4COLOR, 0);
+#endif /* !USE_MGL2 */
return (void *)offscreen;
/* NOTE: スクリーンの切り替えはサポートしていない */
#endif
@@ -464,7 +538,11 @@
#ifdef MNW_USE_GGI
mnwTT_DrawFontRotated(tt_id[self->font], x, y, code, kDIR_NORTH);
#else
+#ifndef USE_MGL2
draw_font(x, y, code);
+#else
+ draw_font(x, y, code, DIR_NORTH);
+#endif /* !USE_MGL2 */
#endif
if ((p[0]&0xff) == 0x8E){
/* EUC x0201 kana */
@@ -479,7 +557,11 @@
#ifdef MNW_USE_GGI
mnwTT_DrawFontRotated(tt_id[self->font], x, y, *p & 0xff, kDIR_NORTH);
#else
+#ifndef USE_MGL2
draw_font(x, y, *p & 0xff);
+#else
+ draw_font(x, y, *p & 0xff, DIR_NORTH);
+#endif /* !USE_MGL2 */
#endif
x += self->font_width / 2;
p++;
----- ここまで -----
--
鈴木 康司 @NEC
suz@hpc.bs1.fc.nec.co.jp
TEL 0423-33-5381