#ifdef
を確定しながらコードを減らしていく。
config.h に注意
build コマンドの引き数と config.h の内容を連動させる。 うっかり片方だけ作業するとビルドが通らないならまだしも、壊れるかもしれない。
nvim の treesitter が便利
#if
と #endif
間のジャンプができて便利。
https://github.com/andymass/vim-matchup
巨大なファイル(file.c:7000行)で遅かった…
また作業用に @keyword.directive.c
に目立つ色を指定した。
以前使った python スクリプトを発掘
#ifdef X
#elseif
#endif
を対して define を指定して有効なブロックを残して、
無効ブロックを削除するスクリプト。
うまく処理できないケースもあるが無いよりは役に立つ。
うまくいかないところは手でなおす。
ひとつずつ減らして動作確認する
まとめて削除したらビルドは通るが動かなくなった。
少しずつ減らして、都度最低限の動作確認をして進める。
unittest
とかあるといいのだけど無いし。
将来的には作りたいですね。
さらに、funcmap の index がずれる!。 都度、再生成させねばならない。注意。
作業前
> cloc --exclude-dir=docusaurus --match-f=\.[ch]$ .
142 text files.
142 unique files.
1 file ignored.
github.com/AlDanial/cloc v 1.90 T=0.14 s (1044.0 files/s, 511900.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 88 4377 1868 55191
C/C++ Header 54 596 196 7395
-------------------------------------------------------------------------------
SUM: 142 4973 2064 62586
-------------------------------------------------------------------------------
cygwin?系
__CYGWIN__
SUPPORT_WIN9X_CONSOLE_MBCS
__DJGPP__
__MINGW32_VERSION
__EMX__
__WATT32__
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 88 4318 1814 54247
C/C++ Header 54 593 196 7307
-------------------------------------------------------------------------------
SUM: 142 4911 2010 61554
-------------------------------------------------------------------------------
1000 行くらい減ったような。
Term系
USE_COLOR
USE_ANSI_COLOR
USE_BG_COLOR
USE_RAW_SCROLL
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 88 4282 1801 53297
C/C++ Header 54 593 196 7267
-------------------------------------------------------------------------------
SUM: 142 4875 1997 60564
-------------------------------------------------------------------------------
1000 行くらい減ったような。 白黒になった。underline, reverse などはまだ健在。
mouse / menu / imagemap / image(sixelなど)
USE_MENU
MENU_MAP
MENU_SELECT
USE_MOUSE
USE_GPM
USE_IMAGE
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 88 3817 1674 48125
C/C++ Header 54 587 194 7025
-------------------------------------------------------------------------------
SUM: 142 4404 1868 55150
-------------------------------------------------------------------------------
5000行くらい減った👀
文字コード系
USE_M17N
USE_UNICODE
ENABLE_NLS
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 62 3256 1568 37780
C/C++ Header 33 393 198 5685
-------------------------------------------------------------------------------
SUM: 95 3649 1766 43465
-------------------------------------------------------------------------------
5000行くらい減った👀 ASCII モードになっちゃった。 ここで試しに libwc を削除したところビルド成功。 さらに7000行くらい減ったー。 これなら bohem GC をやめて std::string に乗りかえ出来るんでないか。
w3mimg
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 55 2965 1471 35313
C/C++ Header 30 373 195 5585
-------------------------------------------------------------------------------
SUM: 85 3338 1666 40898
-------------------------------------------------------------------------------
未使用。
http以外のプロトコル
USE_NNTP
USE_GOPHER
いつのまにか消していて、どれくらい減ったかわらない。 たぶん、量的なインパクトは少ない。
FTP も消したいのだけど、マクロ制御じゃないようだ。 FTP は2本コネクションを張って複雑さを増やすので消すと簡単にできる。