pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


DelphiのWindows API向けユニットからAPI名を抽出する

古いDelphiアプリケーションでWindows APIを直接実行している箇所を調べる必要が出てきたので、Windows API向けのユニットから function または procedure として宣言されている箇所をとりあえず抜き出してみることにした

ユニットファイルの場所

ここらへんにあります

C:\Program Files (x86)\Embarcadero\Studio\??.??\source\rtl\win

抽出方法

awk の下記スクリプトを、

#!/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の利用状況を推測できるだろうと考えているところです。