〜2001年4月中旬〜
unpack gdbm-1.8.0-X-src.tar.gz cd gdbm-1.8.0 ./configure cp Makefile.cygwin Makefile make make progs make install make install-compatと書いてある。なんのためのconfigure? 結局無視することにして、そのまま
% make CFLAGS='-Os -DGDBM_STATIC'と実行。CFLAGSもMakefile.inを見ると-O決め打ちなところが気になるが、 無事終了。ロックするしないはwin32/win32.cを参考にこんな感じ。
--- gdbmopen.c.orig Sun Jul 30 12:46:41 2000 +++ gdbmopen.c Sun Apr 8 23:57:52 2001 @@ -54,2 +54,3 @@ +#include <windows.h> @@ -111,2 +112,13 @@ dbf->coalesce_blocks = FALSE; /* Default to not coalescing blocks. */ + + { + OSVERSIONINFO osver; + memset(&osver, 0, sizeof(OSVERSIONINFO)); + osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&osver); + if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) + { + dbf->file_locking = FALSE; + } + }あ、#ifdef入れるの忘れてるなあ。あとは
% sudo make install install-compatでいいはずだが、prefixはなぜか/usr/localのまま。 Makefile.inを見ると
prefix = /usr/localになってる。うう。君は本当にGNUのソフトなのか?
% sudo make install install-compat prefix=/usr/local/cygwinヘッダを見るとlibgdbm.dll.aがデフォルトになってるので、
#define GDBM_STATICをgdbm.h,ndbm.h,dbm.hに入れる。 が、そんなことをするならオリジナルから作ったほうがよかったんじゃない? もしくは/usr/local/binにcyggdbm.dllを置くとか。
print %w.J u s t \ a n o t h e r \ R u b y \ h a c k e r ,.
% ./configure \ --enable-rubyinterp \ --enable-perlinterp --enable-multibyte <中略> /USR/LOCAL/lib/ruby/1.6/i386-cygwin/rbconfig.rb:5: ruby lib version \ (1.6.3) doesn't match executable version (1.6.4) (RuntimeError)あ、やばい。1.6.4になってたんだ。Linuxのほうを上げるの忘れてた。 fake.rbはRUBY_VERSIONもいじるべきか。 って、Vimいじってる場合じゃないよ、ドラえも〜ん。
print String [%[Just another Ruby hacker,]]
:ruby print "Hello"するとSEGVる。お約束ではあるが、gdbから起動すると
Vim: Warning: Output is not to a terminal Vim: Warning: Input is not from a terminalと言われてしまい、入力もできない。 だが、Cygwin版のgdbはWINPIDを指定することでattachできるのであった。 落ちる場所はif_ruby.cに決まってるから
% cd src % rm if_ruby.o % make CC='gcc -g' % ./vimしとく。他の端末から
% ps PID PPID PGID WINPID TTY UID STIME COMMAND 4074869 1 4074869 4290892427 -1 500 22:27:58 /USR/SBIN/INETD I 3971881 1 3971881 4291007071 1 500 00:21:37 /usr/bin/ZSH 3925365 3971881 3971881 4291041931 1 500 00:21:37 /usr/bin/ZSH 4025705 4074869 4025705 4291047239 -1 500 00:21:59 /USR/SBIN/IN.RLOGIND 3975465 4025705 3975465 4290991527 0 500 00:22:00 /usr/bin/ZSH 3935269 4074869 3935269 4291065563 -1 500 00:22:07 /USR/SBIN/IN.RLOGIND 3931221 3935269 3931221 4291036547 2 500 00:22:07 /usr/bin/ZSH 3906537 3931221 3906537 4291071671 2 500 00:24:54 /HOME/WATANABE/CYGWIN/VIM60AA/SRC/VIM 3908173 3975465 3908173 4291084283 0 500 00:25:58 /usr/bin/PSとしてWINPIDを調べる。このWINPIDを指定してgdbを起動。
% gdb --quiet --nw ./vim.exe 4291071671 /home/watanabe/cygwin/vim60aa/src/4291071671: No such file or directory. Attaching to program `/home/watanabe/cygwin/vim60aa/src/./vim.exe', process -3895625 [Switching to thread -3895625.0xffc4815b]gdbに制御が移るのでcontinueする。
(gdb) c Continuing.ここで元の端末に戻り
:ruby print "Hello"と入力。するとgdb側に
Program received signal SIGSEGV, Segmentation fault. 0x4b249c in ruby_io_init () at if_ruby.c:494 494 rb_defout = rb_obj_alloc(rb_cObject);と表示される。listを見る。
(gdb) l 489 490 static void ruby_io_init(void) 491 { 492 extern VALUE rb_defout; 493 494 rb_defout = rb_obj_alloc(rb_cObject); 495 rb_define_singleton_method(rb_defout, "write", vim_message, 1); 496 rb_define_global_function("p", f_p, -1); 497 } 498なるほど。この
492 extern VALUE rb_defout;が原因だ。EXTERNにしないとね。
#undef EXTERNとある。VimもEXTERNを使っているのか。うーむ。ややこしいなあ。 Tcl/TkもEXTERNを使ってるし、EXTERNはやめるべきか?
print catch(:x){throw :x, 'Just another Ruby hacker,'}
ARGF.each{|line|print line}1行で書けてCより簡単という話だったが
% touch cat % ruby -p cat filesなら0バイトだ。いやそれじゃTV的にはNGだよ。
print DATA.gets.chomp __END__ Just another Ruby hacker,
% ruby -e 'p "z".succ' "aa"どうせなら6.0viまで突き進んでくれ。
% ruby -e 'p +("aa".."vi").to_a.size' 555かなり無理があるが。
KeyWinRaise="Alt+u" KeyWinPrev="Alt+k" KeyWinNext="Alt+j" KeyWinMinimize="Alt+i" KeyWinRollup="Alt+r" KeySysWindowList="Alt+l"
r,w = IO::pipe;w.print 'Just another Ruby hacker,';w.close;print r.gets
CGIが原因とか 書いてあるが、http serverとmail serverぐらいわけてくれないかなあ。 まじで。てゆうか、今popできないし。今日はメール読めないかも。
print sprintf '%s', format '%s' % '%s', 'Just another Ruby hacker,'
なんかあまり話題になってないが先週出てる。 5.6.0自体あまり使われてない気もするし、各distroはどうなってんだろう?
Makefileに
@rem = %qd
と書くとどう解釈されるかというと、 @remという変数に代入したことになる。
% echo '@rem = %qd\nall:;@echo $(@rem)' > Makefile % make %qd
GNU makeだけかもしれないけど。
print eval 'Just another Ruby hacker,'.inspect
Vim 6.0を使っていてつい command-line modeで<C-B>とか押して非常にせつなくなるんだけど、 実は
:help cmdline
すると例があって *1
:cnoremap <C-A> <Home> :cnoremap <C-F> <Right> :cnoremap <C-B> <Left> :cnoremap <Esc>b <S-Left> :cnoremap <Esc>f <S-Right>
とすればいいとわかる。最後のふたつは使わないからどうでもいいが、 <C-D>には候補のリストを表示するなんてのを割り当てるよりは
:cnoremap <C-D> <Del>
でしょう、やっぱ。
/#{print 'Just another Ruby hacker,'}/
Cygwinで
PATH=/usr/local/bin:/usr/X11R6/bin:/usr/bin:/bin
てな設定にして使っているんだけど、 たまに.xlsなファイルを見なきゃいけないときにがあったりすると、 そのときだけExploreを立ち上げるのがすごくいやだった。 だったらPATHに加えとけばいいんだろうけど、 アプリケーション毎に違うとこにあるしなんかもったいない。 が、
start() { c:/winnt/system32/cmd /c start "$@" }
としとけばいいのか。
% start foo.xls
あとはstartがよろしくやってくれる。
WinNTはstartが内部コマンドなんだね。
start.exeを探しまくったよ。
print 'Just another Ruby hacker,'.scan(/./).collect{|x|x[0]}.pack'U*'
vim-jp MLによると6.0abが出たらしいが、ftp://ftp.vim.org/にまったくつながらない。
mirrorを調べるのも面倒なのでCVSで追い掛けることにした。
てゆうかたぶん調べる手間はどっちも同じだよ。
print [<<'+'.delete("\n").gsub(/./){format'%02b',$&[0]-?A}].pack'B*' BACCBDBBBDADBDBAACAABCABBCDCBCDDBDBABCCABCBBBDACAC AABBACBDBBBCACBDCBACAABCCABCABBCADBCCDBCBBBDACACDA +