DelphiのWindows API向けユニットからAPI名を抽出する
古いDelphiアプリケーションでWindows APIを直接実行している箇所を調べる必要が出てきたので、Windows API向けのユニットから function または procedure として宣言されている箇所をとりあえず抜き出してみることにした
ユニットファイルの場所
ここらへんにあります
C:\Program Files (x86)\Embarcadero\Studio\??.??\source\rtl\win
抽出方法
#!/usr/bin/awk -f BEGIN { FS="[ \t(;:]" } $1 == "function" || $1 == "procedure" { apiname[$2]++ } END { for (key in apiname) print key | "sort" }
つぎのように実行すると、Windows API を含むリストが生成される
$./searchWinAPI.awk *.pas ARGBToColorRef AbortDoc AbortPath AbortPrinter AbortSystemShutdown AbortSystemShutdownA AbortSystemShutdownW AcceptEx AccessCheck AccessCheckAndAuditAlarm AccessCheckAndAuditAlarmA AccessCheckAndAuditAlarmW AccessCheckByType . . .
既存のプロジェクトに対して、このリストのキーワードが含まれるかどうかでAPIの利用状況を推測できるだろうと考えているところです。