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 にあるのね。