[#2355] [Req] Array#reverse — keiju@... (Keiju ISHITSUKA)

けいじゅ@SHLジャパンです.

19 messages 1997/03/13
[#2357] Re: [Req] Array#reverse — matz@... (Yukihiro Matsumoto) 1997/03/13

まつもと ゆきひろです.

[#2359] Re: [Req] Array#reverse 1997/03/13

けいじゅ@SHLジャパンです.

[#2387] Kanji String — gotoken@... (GOTO Kentaro)

はじめまして、 後藤ともうします。

33 messages 1997/03/19
[#2389] Re: Kanji String — matz@... (Yukihiro Matsumoto) 1997/03/19

まつもと ゆきひろです.

[#2391] Re: Kanji String — gotoken@... (GOTO Kentaro) 1997/03/19

後藤です

[#2393] Re: Kanji String — matz@... (Yukihiro Matsumoto) 1997/03/19

まつもと ゆきひろです.

[#2465] curses library — MAEDA Shugo <ender@...> 1997/03/28

前田です。

[#2402] about TCPserver — MAEDA Shugo <ender@...>

前田です。

45 messages 1997/03/21
[#2403] Re: about TCPserver — matz@... (Yukihiro Matsumoto) 1997/03/22

まつもと ゆきひろです

[#2405] Re: about TCPserver — MAEDA Shugo <ender@...> 1997/03/23

前田です。

[#2406] Re: about TCPserver — matz@... (Yukihiro Matsumoto) 1997/03/24

[#2408] Re: about TCPserver — WATANABE Hirofumi <watanabe@...> 1997/03/24

わたなべです.

[#2411] Re: about TCPserver — MAEDA Shugo <ender@...> 1997/03/24

前田です。

[#2417] Re: about TCPserver — matz@... (Yukihiro Matsumoto) 1997/03/25

まつもと ゆきひろです.

[#2425] Re: about TCPserver — MAEDA Shugo <ender@...> 1997/03/25

前田です。

[#2439] url escape — gotoken@... (GOTO Kentaro)

どシロウトの後藤です.

57 messages 1997/03/27
[#2451] Re: url escape — sinara@... 1997/03/27

原です。

[#2455] class design (Re: url escape) — matz@... (Yukihiro Matsumoto) 1997/03/27

まつもと ゆきひろです

[#2471] Re: class design (Re: url escape) — sinara@... 1997/03/28

原です。

[#2487] Re: class design (Re: url escape) — matz@... (Yukihiro Matsumoto) 1997/03/29

まつもと ゆきひろです

[#2510] Re: class design (Re: url escape) 1997/03/30

けいじゅ@SHLジャパンです.

[#2603] Re: class design (Re: url escape) — sinara@... 1997/04/04

原です。

[#2505] Re: WWW library (Re: class design) — Shin-ichiro Hara <sinara@...>

原です。

15 messages 1997/03/30

[ruby-list:2465] curses library

From: MAEDA Shugo <ender@...>
Date: 1997-03-28 01:45:47 UTC
List: ruby-list #2465
前田です。

On Wed, 19 Mar 97 19:12:16 JST,
matz@caelum.co.jp (Yukihiro Matsumoto) wrote:

| うー,私は curses使ったことないんで,そういうのはちょっとつ
| らいですねえ.まあ,他の拡張モジュールでもあんまり使ったこと
| ないのを作ってますけど(TkとかGDとか).
| 
| だれかrubyによる拡張を学ぶため,立候補してくださる方はいらっ
| しゃいませんか.松本との掛け合い連載をここ(ML)でしてくださる
| んでも構いません.

遅くなりましたが立候補させてください。
curses使ったことないので躊躇していたのですが、なんとかやってみ
ようと思います。
いずれはrubyでエディタを実装できればいいな、と思います。

ScreenというモジュールとWindowというクラスで実装しようと思います。
WindowはもちろんWINDOW構造体のラッパークラスです。

で、とりあえず

init_screen, close_screen, addch, getchなどを実装して、コンパイル
は通ったのですが、

ruby test.rbとしたら、

[BUG] Unknown operator `'
IOT trap/Abort (core dumped)

とのことでお亡くなりになりました:-(
Unknown operator とはどういうエラーメッセージなんでしょう?
# 演算子なんて定義してないのに。
一応ソースを付けときます。

あとREADME.EXTでバグらしきものを見つけましたので、パッチを付けと
きます。

前田 修吾



----Next_Part(Fri_Mar_28_10:42:23_1997)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Description: "This file is ext/curses/curses.c"

/*
 * curses.c
 */

#include "ruby.h"
#include <stdio.h>
#include <curses.h>

#define NUM2CHAR(x) (char)NUM2INT(x)
#define CHAR2NUM(x) INT2NUM((int)x)

VALUE mScreen;
VALUE cWindow;

extern VALUE mEnumerable;

struct windata {
    WINDOW *window;
};

static VALUE screen_init_screen() {
    initscr();
    wclear(stdscr);
    return Qnil;
}

static VALUE screen_close_screen() {
    endwin();
    return Qnil;
}

static void free_window(struct windata *winp)
{
    if (winp->window) delwin(winp->window);
}

static VALUE window_s_new(VALUE class,
			  VALUE lines, VALUE cols,
			  VALUE top, VALUE left)
{
    WINDOW *window;
    struct windata *winp;
    VALUE obj;
    
    window = newwin(NUM2INT(lines), NUM2INT(cols), NUM2INT(top), NUM2INT(left));
    obj = Data_Make_Struct(class , struct windata, 0, free_window, winp);
    winp->window = window;
    
    return obj;
}

static VALUE screen_addch(VALUE obj, VALUE ch)
{
    addch(NUM2CHAR(ch));
    return Qnil;
}

static VALUE screen_getch(VALUE obj)
{
    return CHAR2NUM(getch());
}

static VALUE make_stdscr()
{
    VALUE obj;
    struct windata *winp;
    
    obj = Data_Make_Struct(mScreen , struct windata, 0,
				   free_window, winp);
    winp->window = stdscr;
}

Init_curses()
{
    mScreen = rb_define_module("Screen");
    rb_define_module_function(mScreen, "init_screen", screen_init_screen, 0);
    rb_define_module_function(mScreen, "close_screen", screen_close_screen, 0);
    rb_define_module_function(mScreen, "getch", screen_getch, 0);
    rb_define_module_function(mScreen, "addch", screen_addch, 1);
    rb_define_global_const(mScreen, "STDSCR", make_stdscr());
    
    cWindow = rb_define_class("Window", cObject);
    rb_include_module(cWindow, mEnumerable);
    rb_define_singleton_method(cWindow, "new", window_s_new, 4);
}

----Next_Part(Fri_Mar_28_10:42:23_1997)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Content-Description: "this file is a patch to README.EXT"

*** README.EXT.orig	Fri Mar 28 10:26:27 1997
--- README.EXT	Fri Mar 28 10:30:47 1997
***************
*** 241,247 ****
    void rb_define_method(VALUE class, char *name, 
  		        VALUE (*func)(), int argc)
  
!   void rb_define_sigleton_method(VALUE object, char *name, 
  			         VALUE (*func)(), int argc)
  
  
--- 241,247 ----
    void rb_define_method(VALUE class, char *name, 
  		        VALUE (*func)(), int argc)
  
!   void rb_define_singleton_method(VALUE object, char *name, 
  			         VALUE (*func)(), int argc)
  
  
***************
*** 283,290 ****
  という形式でも使えます.モジュール関数を定義する関数は以下の
  通りです.
  
!   void rb_define_private_method(VALUE module, char *name, 
! 		                VALUE (*func)(), int argc)
  
  関数的メソッド(Kernelモジュールのprivaet method)を定義するた
  めの関数は以下の通りです.
--- 283,290 ----
  という形式でも使えます.モジュール関数を定義する関数は以下の
  通りです.
  
!   void rb_define_module_function(VALUE module, char *name, 
! 				 VALUE (*func)(), int argc)
  
  関数的メソッド(Kernelモジュールのprivaet method)を定義するた
  めの関数は以下の通りです.

----Next_Part(Fri_Mar_28_10:42:23_1997)----

In This Thread