Eagle ULP

マニュアルのダウンロード先 http://www.cadsoftusa.com/downloads/file/ulp720_en.pdf
サンプルULPはデフォルトのULPフォルダ内の ex- から始まるもの
関数は大文字、小文字を区別するので注意
dlgMessageBoxは最大4つの引数を取り、対応は下記のとおり

スケマティックの部品数を数えるULP

[c] int cnt=0;
/* スケマティックになっているか確認 */
if (schematic) schematic(S) //スケマティックオブジェクトSのインスタンス生成
{
S.parts(P)
{
P.instances(E)
{
cnt++;
}
}
}
string result;
sprintf(result, "The parts count is %d", cnt);
dlgMessageBox(result, "+Yes", "No","Maybe"); // display the parts count in a dlgMessageBox
exit(0);
[/c] デバッグ用にprintfデバックをするには dlgMessageBox と sprintf を使うのが定番
[c] string result,a;
result="";
board(B){
B.texts(T){
sprintf(a,"%s,%d\n",T.value,T.size);
result+=a;
}
}
dlgMessageBox(result, "+Yes", "No","Maybe");
exit(0);
[/c]
boardのElementsを使ってパッケージ(パッドの情報が入っているボード上のパーツ)の色々な要素を読みだす
[c] string result,a;
result="";
board(B){
B.elements(E){
sprintf(a,"Elements %s,(%f %f),package=%s\n",E.name,u2mm(E.x),u2mm(E.y),E.package.name);
result+=a;
}
}
dlgMessageBox(result, "Yes");
exit(0);
[/c]
グループ指定されている部品かどうかは ingroup(オブジェクト) で判定できる
[c] string result,a;
result="";
board(B){
B.elements(E){
sprintf(a,"Elements %s,(%f %f),package=%s",E.name,u2mm(E.x),u2mm(E.y),E.package.name);
result+=a;
if(ingroup(E)) result+=" <=group";
result+="\n";
}
}
dlgMessageBox(result, "Yes");
exit(0);
[/c]
boardオブジェクト階層

[c] #usage "&lt;b&gt;Example: Usage of argv&lt;/b&gt;\n"
"
"
"Returns the path of the ULP."
"
"
"&lt;author&gt;Author: support@cadsoft.de&lt;/author&gt;"
// THIS PROGRAM IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED
void main(void) {
string ulp_path = "";
char c = ‘/’;
int pos = strrchr(argv[0], c);
if (pos &gt;= 0) {
ulp_path = strsub(argv[0], 0, pos + 1);
}
dlgMessageBox(ulp_path , "+OK");
}
[/c] ディレクティブは #include , #require , #usage の3つ
#usage・・・コントロールパネルに表示される文字列を指定する

コメント
[c] /* 1行だけのコメント */
/* 複数行の
コメント
*/
[/c] 16進数の表し方・・・0xを付ける
エスケープシーケンス
\n 改行 \r キャリッジリターン \t タブ \’ シングルクォート \” ダブルクォート
変数の方
char(1文字) , int(32bit整数) , real(64bit実数) , string(文字列)
オブジェクト
library(L) { … }
schematic(S) { … }
board(B) { … }
データメンバー
[c] board(B) {
printf("%s\n", B.name);
}
[/c] [c] board(B) {
printf("%f\n", B.grid.size);
}
[/c] ループメンバー
[c] board(B) {
B.elements(E) {
printf("%-8s %-8s\n", E.name, E.value);
}
}
[/c] [c] board(MyBoard) {
MyBoard.elements(TheCurrentElement) {
printf("%-8s %-8s\n", TheCurrentElement.name, TheCurrentElement.value);
}
}
[/c]