[#24134] File.rename error message — Kazuhiro Yoshida <moriq.kazuhiro@...>

もりきゅうです。

14 messages 2000/08/08
[#24135] Re: File.rename error message — Takahiro Kambe <taca@...> 2000/08/08

In message <200008081252.AA00846@VZF07161.nifty.ne.jp>

[#24158] Hash の初期値に [] を使う — Mitsuhiro Kondo <kondo@...>

rubyを使っていて不思議に思ったことがあります。

16 messages 2000/08/11

[#24176] FreeBSD ports — "Akinori -Aki- MUSHA" <knu@...>

 こんにちは、 knu です。

31 messages 2000/08/11
[#24187] Re: FreeBSD ports — Yasuhiro Fukuma <yasuf@...> 2000/08/12

最近ports関連はすっかりさぼっている福間@福岡 です。

[#24190] Re: FreeBSD ports — "Akinori -Aki- MUSHA" <knu@...> 2000/08/13

 こんにちは。

[#24197] Re: FreeBSD ports — Takahiro Kambe <taca@...> 2000/08/14

In message <86vgx5fv7j.wl@daemon.local.idaemons.org>

[#24199] Re: FreeBSD ports — Yasuhiro Fukuma <yasuf@...> 2000/08/14

福間@福岡 です。

[#24191] drb.rb: 0x40155740 is recycled object (IndexError) — Hideto ISHIBASHI <hideto-i@...4u.or.jp>

おひさしぶりです。石橋秀仁です。

15 messages 2000/08/14
[#24192] Re: drb.rb: 0x40155740 is recycled object (IndexError) — Masatoshi SEKI <m_seki@...> 2000/08/14

[#24221] Re: drb.rb: 0x40155740 is recycled object(IndexError) — Hideto ISHIBASHI <hideto-i@...4u.or.jp> 2000/08/15

石橋秀仁です。咳さん、お返事ありがとうございます。

[#24223] Re: drb.rb: 0x40155740 is recycled object(IndexError) — Masatoshi SEKI <m_seki@...> 2000/08/15

[#24229] Re: drb.rb: 0x40155740 is recycledobject(IndexError) — Hideto ISHIBASHI <hideto-i@...4u.or.jp> 2000/08/16

石橋秀仁です。咳さん、お返事ありがとうございます。

[#24324] ruby の発展の為に — "Mitsuo Igarashi" <mitsu5@...>

Windows に ruby をインストールしようとして、皆様に助けられ

87 messages 2000/08/21
[#24328] Re: ruby の発展の為に — Takahiro Kambe <taca@...> 2000/08/21

思いっ切りUNIXな者からの、おそらく偏ってるであろう意見です。

[#24338] Re: ruby の発展の為に — kiri@... 2000/08/22

桐山です。

[#24342] Re: ruby の発展の為に — gotoken@... (GOTO Kentaro) 2000/08/22

ごとけんです

[#24344] Re: ruby の発展の為に — rubikitch <rubikitch@...> 2000/08/22

From: gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro)

[#24382] Re: ruby の発展の為に — Koji Arai <JCA02266@...> 2000/08/22

新井です。

[#24390] Re: ruby の発展の為に — rubikitch <rubikitch@...> 2000/08/23

From: Koji Arai <JCA02266@nifty.ne.jp>

[#24391] Ruby Documentation Project(仮) — rubikitch <rubikitch@...> 2000/08/23

From: rubikitch <rubikitch@ruby-lang.org>

[#24398] Re: Ruby Documentation Project(仮) — Koji Arai <JCA02266@...> 2000/08/23

新井です。

[#24401] — rubikitch <rubikitch@...> 2000/08/23

From: Koji Arai <JCA02266@nifty.ne.jp>

[#24404] Re: — Koji Arai <JCA02266@...> 2000/08/23

新井です。

[#24405] Re: — rubikitch <rubikitch@...> 2000/08/23

From: Koji Arai <JCA02266@nifty.ne.jp>

[#24406] Re: — Koji Arai <JCA02266@...> 2000/08/23

新井です。

[#24407] Re: Ruby Documentation Project(仮) — rubikitch <rubikitch@...> 2000/08/23

From: Koji Arai <JCA02266@nifty.ne.jp>

[#24413] Re: Ruby Documentation Project(仮) — MOROHOSHI Akihiko <moro@...> 2000/08/23

師星です。

[#24414] Re: Ruby Documentation Project(仮) — rubikitch <rubikitch@...> 2000/08/23

From: MOROHOSHI Akihiko <moro@remus.dti.ne.jp>

[#24419] Re: Ruby Documentation Project(仮) — MOROHOSHI Akihiko <moro@...> 2000/08/23

師星です。

[#24421] Re: Ruby Documentation Project(仮) — rubikitch <rubikitch@...> 2000/08/23

From: MOROHOSHI Akihiko <moro@remus.dti.ne.jp>

[#24433] Re: Ruby DocumentationProject(仮) — Koji Arai <JCA02266@...> 2000/08/23

新井です。

[#24451] Re: Ruby DocumentationProject(仮) — Tadayoshi Funaba <tadf@...> 2000/08/24

ふなばです (RD の話題についていけてない)。

[#24460] Re: RubyDocumentationProject(仮) — Koji Arai <JCA02266@...> 2000/08/24

新井です。

[#24481] Re: RubyDocumentationProject(仮) — Tadayoshi Funaba <tadf@...> 2000/08/25

ふなばです。

[#24518] Re: RubyDocumentationProject(仮) — Koji Arai <JCA02266@...> 2000/08/26

新井です。

[#24341] install guide draft — gotoken@... (GOTO Kentaro)

ごとけんです

106 messages 2000/08/22
[#24420] did commit install guide — gotoken@... (GOTO Kentaro) 2000/08/23

ごとけんです

[#24448] Re: did commit install guide — TAKAHASHI Masayoshi <maki@...> 2000/08/24

高橋征義です。

[#24469] レンタルサーバで eruby — Tokita Kousui <ktokita@...>

前にレンタルサーバでerubyを動かせないと騒いでた時田です(^^;

22 messages 2000/08/24
[#24476] Re: レンタルサーバで eruby — TAKEUCHi Kahori <takeuchi@...> 2000/08/24

たけうちかほりです。

[#24550] Array への nil の代入について — Kenya Ogata <k_ogata@...>

おがたといいます。

30 messages 2000/08/27
[#24558] Re: Array への nil の代入について — Kenya Ogata <k_ogata@...> 2000/08/27

おがたです

[#24564] Ruby の落とし穴 — Kazuhiro NISHIYAMA <zn@...> 2000/08/27

Kenya Ogata <k_ogata@mbd.nifty.com> wrote:

[#24648] RDP のフォーマット案 — Koji Arai <JCA02266@...>

新井です。

15 messages 2000/08/30

[ruby-list:24615] Re: レンタルサーバで eruby

From: Shugo Maeda <shugo@...>
Date: 2000-08-28 08:26:20 UTC
List: ruby-list #24615
前田です。

At Fri, 25 Aug 2000 17:08:51 +0900,
Shugo Maeda <shugo@ruby-lang.org> wrote:
> > #!/bin/sh
> > /usr/local/bin/eruby -KS
> 
> erubyが#!行の引数を見るようにすればこういうトリックは要らないはず
> なんですよね。
> この点は対応したいです。

試しに実装しました。

ついでに、

  -C [charset]          specifies charset parameter for Content-Type

というoptionを追加しました。
(#!行で見るのは-Kと-Cだけです。)

#!/usr/bin/eruby -Ks -C shift_jis

のようにファイルの先頭に書いておけば、それっぽい動作をするはずで
す。

-- 
前田 修吾

Index: eruby.c
===================================================================
RCS file: /home/cvs/eruby/eruby.c,v
retrieving revision 1.7
diff -u -r1.7 eruby.c
--- eruby.c	2000/05/30 02:36:05	1.7
+++ eruby.c	2000/08/28 08:25:41
@@ -5,6 +5,11 @@
 
 #include "ruby.h"
 
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <fcntl.h>
+#include <errno.h>
 #include <sys/stat.h>
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -31,6 +36,94 @@
 
 #define EOP (-2)
 
+static int parse_options(FILE *in, FILE *out)
+{
+    int c;
+
+    do {
+	c = getc(in);
+	if (c == EOF) return 0;
+    } while (!isspace(c));
+
+    for (;;) {
+	c = getc(in);
+    again:
+	switch (c) {
+	case EOF:
+	    return 0;
+	case '\n':
+	    putc(c, out);
+	    return 0;
+	case '-':
+	    c = getc(in);
+	    switch (c) {
+	    case 'K':
+	    {
+		char tmp[1];
+
+		c = getc(in);
+		if (c == EOF || c == '\n')
+		    return -1;
+		tmp[0] = c;
+		rb_set_kcode(tmp);
+		while (c != EOF && !isspace(c)) {
+		    c = getc(in);
+		}
+		goto again;
+	    }
+	    case 'C':
+	    {
+		int term;
+		char tmp[1];
+		VALUE charset = rb_str_new("", 0);
+
+		c = getc(in);
+		while (isspace(c)) {
+		    if (c == '\n') return -1;
+		    c = getc(in);
+		}
+		if (c == EOF) {
+		    return -1;
+		}
+		else if (c == '"' || c == '\'') {
+		    term = c;
+		    c = getc(in);
+		    while (c != EOF && c != term) {
+			tmp[0] = c;
+			rb_str_cat(charset, tmp, 1);
+			c = getc(in);
+		    }
+		    eruby_charset = charset;
+		}
+		else {
+		    while (c != EOF && !isspace(c)) {
+			tmp[0] = c;
+			rb_str_cat(charset, tmp, 1);
+			c = getc(in);
+		    }
+		    eruby_charset = charset;
+		    goto again;
+		}
+		break;
+	    }
+	    default:
+		return -1;
+	    }
+	    break;
+	case ' ':
+	case '\t':
+	case '\v':
+	case '\f':
+	case '\r':
+	    break;
+	default:
+	    return -1;
+	}
+    }
+
+    return 0;
+}
+
 static int parse_embedded_program(FILE *in, FILE *out,
 				  enum embedded_program_type type)
 {
@@ -122,13 +215,20 @@
 
     c = getc(in);
     if (c == '#') {
-	do {
-	    c = getc(in);
-	    if (c == '\n') {
-		putc('\n', out);
-		break;
+	c = getc(in);
+	if (c == '!') {
+	    if (parse_options(in, out) == -1)
+		return ERUBY_INVALID_OPTION;
+	}
+	else {
+	    while (c != EOF) {
+		c = getc(in);
+		if (c == '\n') {
+		    putc(c, out);
+		    break;
+		}
 	    }
-	} while (c != EOF);
+	}
     }
     else {
 	ungetc(c, in);
@@ -276,6 +376,7 @@
     char *tmp;
     VALUE scriptname;
     FILE *in, *out;
+    int fd;
     int err;
 
     if (strcmp(filename, "-") == 0) {
@@ -285,18 +386,29 @@
 	if ((in = fopen(filename, "r")) == NULL)
 	    rb_sys_fail(filename);
     }
+ retry:
     if ((tmp = eruby_mktemp(filename)) == NULL)
-	rb_fatal("Can't mktemp");
+	rb_fatal("can't mktemp");
+    fd = open(tmp, O_CREAT |O_EXCL | O_WRONLY, 0600);
+    if (fd < 0) {
+	free(tmp);
+	if (errno == EEXIST)
+	    goto retry;
+	rb_fatal("cannot open temporary file: %s", tmp);
+    }
     scriptname = rb_str_new2(tmp);
     free(tmp);
-    if ((out = fopen(RSTRING(scriptname)->ptr, "w")) == NULL)
-	rb_fatal("Cannot open temporary file: %s", RSTRING(scriptname)->ptr);
+    if ((out = fdopen(fd, "w")) == NULL)
+	rb_fatal("cannot open temporary file: %s", RSTRING(scriptname)->ptr);
     err = eruby_compile(in, out);
     if (in != stdin) fclose(in);
     fclose(out);
     switch (err) {
     case ERUBY_MISSING_END_DELIMITER:
 	rb_raise(rb_eSyntaxError, "missing end delimiter");
+	break;
+    case ERUBY_INVALID_OPTION:
+	rb_raise(rb_eSyntaxError, "invalid #! line");
 	break;
     case ERUBY_SYSTEM_ERROR:
 	rb_sys_fail(filename);
Index: eruby.h
===================================================================
RCS file: /home/cvs/eruby/eruby.h,v
retrieving revision 1.7
diff -u -r1.7 eruby.h
--- eruby.h	2000/05/18 08:09:13	1.7
+++ eruby.h	2000/08/28 08:25:41
@@ -11,6 +11,7 @@
 enum eruby_compile_status {
     ERUBY_OK = 0,
     ERUBY_MISSING_END_DELIMITER,
+    ERUBY_INVALID_OPTION,
     ERUBY_SYSTEM_ERROR
 };
 
Index: eruby_main.c
===================================================================
RCS file: /home/cvs/eruby/eruby_main.c,v
retrieving revision 1.12
diff -u -r1.12 eruby_main.c
--- eruby_main.c	2000/08/25 07:41:44	1.12
+++ eruby_main.c	2000/08/28 08:25:41
@@ -433,7 +433,7 @@
 
 static VALUE defout_cancel(VALUE self)
 {
-    if (RSTRING(self)->len == 0) return;
+    if (RSTRING(self)->len == 0) return Qnil;
     RSTRING(self)->len = 0;
     RSTRING(self)->ptr[0] = '\0';
     return Qnil;
@@ -483,6 +483,7 @@
 			  f: filter mode\n\
 			  c: CGI mode\n\
 			  n: NPH-CGI mode\n\
+  -C [charset]		specifies charset parameter for Content-Type\n\
   -n, --noheader	disables CGI header output\n\
   -v, --verbose		enables verbose mode\n\
   --version		print version information and exit\n\
@@ -564,9 +565,28 @@
 	    break;
 #endif
 	case 'K':
-	    rb_set_kcode(++s);
 	    s++;
+	    if (*s == '\0') {
+		fprintf(stderr, "%s: no arg given for -K\n", argv[0]);
+		exit(2);
+	    }
+	    rb_set_kcode(s);
+	    s++;
 	    goto again;
+	case 'C':
+	    s++;
+	    if (*s == '\0') {
+		i++;
+		if (i == argc) {
+		    fprintf(stderr, "%s: no arg given for -C\n", argv[0]);
+		    exit(2);
+		}
+		eruby_charset = rb_str_new2(argv[i]);
+	    }
+	    else {
+		eruby_charset = rb_str_new2(s);
+	    }
+	    break;
 	case 'd':
 	    ruby_debug = Qtrue;
 	    s++;
@@ -625,6 +645,18 @@
     char *out;
     int nout;
 
+    ruby_init();
+#if RUBY_VERSION_CODE >= 145
+    rb_ary_push(rb_load_path, rb_str_new2("."));
+#endif
+    if (eruby_mode == MODE_CGI || eruby_mode == MODE_NPHCGI)
+	rb_set_safe_level(1);
+
+    rb_defout = rb_str_new("", 0);
+    rb_define_singleton_method(rb_defout, "write", defout_write, 1);
+    rb_define_singleton_method(rb_defout, "cancel", defout_cancel, 0);
+    eruby_init();
+
     parse_options(argc, argv);
     if (eruby_mode == MODE_UNKNOWN)
 	eruby_mode = guess_mode();
@@ -643,17 +675,6 @@
 	    eruby_filename = "-";
     }
 
-    ruby_init();
-#if RUBY_VERSION_CODE >= 145
-    rb_ary_push(rb_load_path, rb_str_new2("."));
-#endif
-    if (eruby_mode == MODE_CGI || eruby_mode == MODE_NPHCGI)
-	rb_set_safe_level(1);
-
-    rb_defout = rb_str_new("", 0);
-    rb_define_singleton_method(rb_defout, "write", defout_write, 1);
-    rb_define_singleton_method(rb_defout, "cancel", defout_cancel, 0);
-    eruby_init();
     script = eruby_load(eruby_filename, 0, &state);
     if (state && !rb_obj_is_kind_of(ruby_errinfo, rb_eSystemExit)) {
 	error_print(state, eruby_mode, script);

In This Thread