w3m のソースコード探訪
まずは main.c から。ライブラリ化するとしたら -dump オプションをつけた動作が参考になるかな、と眺めていくと変数 w3m_dump, w3m_backend あたりがキーになりそう。
backend オプション
backend、うん、言葉の響きからもこれは当たりではないかな。
w3m_backend が真だと backend() が呼ばれるので定義場所を探すと backend.c らしい。ほほう。-backend オプションを付けて w3m を起動すると、プロンプトを出してコマンドを受けつけるんだ。MANUAL.html にも乗ってないぞ、と。
w3m>
ふむふむ。
w3m> get http://www.yahoo.co.jp/ 12 [main] w3m 388 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack) HTTP/1.1 200 OK Date: Sat, 27 Jun 2009 10:04:00 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY O NL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" Cache-Control: no-cache Cache-Control: no-store, must-revalidate Expires: -1 Pragma: no-cache X-XRDS-Location: http://open.login.yahoo.co.jp/openid20/www.yahoo.co.jp/xrds Cache-Control: private Connection: close Content-Type: text/html; charset=utf-8 Content-Encoding: gzip Content-Length: 6527 w3m-current-url: http://www.yahoo.co.jp/ w3m-content-type: text/html w3m-content-length: 87 <pre> gzip: stdin: unexpected end of file <internal> </internal> </pre><title></title> w3m>
なんだろうなあ。警告の _cygtls は cygwin 関係かな。gzip はなんでこけてるんだろうなあ。謎。
でも、backend() -> get() -> internal_get() から呼んでいる loadGeneralFile() が実際に URL から取ってきて文字列に格納するところだろうな。えと、これは file.c にあるのね。