Not only is the Internet dead, it's starting to smell really bad.:2004年11月分

2004/11/13(Sat)

(ry

@私事ですが

本業はホント地獄だぜフゥハハハー(AA略な状態で過労で倒れること2度。
てなわけで何も手が動いてません、スマソ。
年明けからは長期出張の予感で、来年5月まではここもほとんど更新ないと思われ。

@OpenBSD/Citrus

20041114版
/distfiles/citrus/OpenBSD/HEAD-citrus-20041114.tar.bz2
残作業

  • gettext-toolsをsrc/gnu以下につっこむ
    Makefile.bsd-wrapperの作法を調べる気力がないので未着手
  • usr.bin/locale をNetBSDからmergeする
    stringlist.hがportableでないので直したいなーとか
    locale -a でlocale.aliasのエントリは扱わんでええの? とか
    気になることがいくつかあるので未着手

2004/11/19(Fri)

(ry

@vfscanf/vfprintf

当然のように今日も終電ですがな。
タクシー行列を避けてファミレスで飯食いながらてきとーに直してみた。
/distfiles/citrus/NetBSD/08_vfscanf_vfprintf_wchar_t-support.patch

@

ちょっとpatchを直した、at 東海道線

2004/11/20(Sat)

(ry

@vfscanf

wchar_t wc;
setlocale(LC_CTYPE, "ja_JP.ISO2022-JP");
scanf("^[$B%s^[(B%lc", &wc);

の場合、入力に

^[$B%s^[(B^[$B%s ...

を喰わせると wc == L'ン' だけども

^[$B%s%s ...

の場合 input_failure になるでいいんだよね?
SUSv3には%lc or %lsが見つかった場合はそこから
初期シフト状態でinputをparseするって書いてあった希ガス。

@で結局は

wscanfを使いましょうってことですね、実装無いけど(*´Д`)

2004/11/22(Mon)

@vfscanf/vfprintf

おもいっきりwchar_tの中身を覗いてるとことか、
酷いコードだったのでちょっとコードを整理。

先日の^[$B%s%s ... を食わせるとinput_failureってのは
今のcitrus_iso2022.cの実装からすると誤り、^[$B%sまで変換したところで
mbsinitは0を返す(initial state)のでマッチします。
JISが呼び出されてるのにinitial stateってのは違和感有るけどまあいいや。
あと下のコードがAbortしてしまうのはバグですかね?

#include <errno.h>
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
int main(int argc, char **argv)
{
	wchar_t wc;
	char *s = "^[$B%s^[(B^[$B%s^[(B";
	mbstate_t st;
	int n;

	setlocale(LC_CTYPE, "ja_JP.ISO2022-JP");
	memset(&st, 0, sizeof(st));
	for (;;) {
		n = mbrtowc(&wc, s, 1, &st);
		if (n == (size_t)-1) {
			abort();
		} else if (n == (size_t)-2) {
			s++;
		} else {
			s += n;
			if (wc == 0)
				break;
		}
	}
	return (0);
}

2004/11/23(Tue)

@vfscanf with ISO2022

素朴な疑問

  1. "%^[$B^[(Bs" みたいに途中無意味なescape sequenceを挟む場合って
    "%s"と同じくフォーマット文字列と見なすか見なさないか。
  2. フォーマット文字列にisspaceな文字があった場合、isspaceな入力文字を読み飛ばすが
    こちらも" ^[$B^[(B " みたいに途中無意味なescape sequenceを挟む場合
    escape sequenceで止まるか止まらないか

2004/11/26(Fri)

(ry

@小ネタ

http://www.freebsd.org/projects/c99/
眺めてて気付いたので、imaxabs(3)/imaxdiv(3)
/distfiles/citrus/NetBSD/09_imaxabs_imaxdiv.patch