[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