[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:000543] Re: array dimension proto type
堀之内です。
> graph1.f77proto 等のファイル (grph[12], misc1, math[12]) の中で
> 配列のプロトタイプ宣言中の、任意長を表す "*" を具体的な整数表
> 現で置き換えることでなくしてしまう、です。
grph1 に取り掛かり始めました。
補足ですが、フィルターを働かすためには「整数表現」中の変数は引数
に現れている必要があります。つまりたとえば
SUBROUTINE HOGE(
INTEGER N
REAL (*) o ARY
)
が
SUBROUTINE HOGE(
INTEGER N
REAL (N) o ARY
)
になるというわけです。こうなってれば、ARY を初期化するのに、引数
として渡ってきた N を長さとすればいいということをフィルターが判
断しますので。
しかし、ENTRY が使われているときに困ったパターンがあることがわか
りました。それは上の N に相当するものをある入り口で設定して内部
で記憶し、別の entry から呼ぶときにはそれが陽に引数に現れない場
合です。実例をあげると、
/*****************************************************
* grph1/szpack/szfint.f
****************************************************/
/*
* SUBROUTINE SZFINT(NCNT)
*/
SUBROUTINE SZFINT(
INTEGER o NCNT
)
/*
* ENTRY SZQFNT(JPOSX,CLX,CLY)
* INTEGER JPOSX(*)
* CHARACTER CLX(*)*1,CLY(*)*1
*/
SUBROUTINE SZQFNT(
INTEGER (*) o JPOSX
CHARACTER*1 (*) o CLX
CHARACTER*1 (*) o CLY
)
/*
* ENTRY SZQFNW(WX1,WX2)
* REAL WX1(*),WX2(*)
*/
SUBROUTINE SZQFNW(
REAL (*) o WX1
REAL (*) o WX2
)
ここで C 方式でコメントアウトしてあるのは、オリジナルソースにお
ける宣言文、コメントアウトしていないのは protp2c 用のプロトタイ
プ宣言です。例でお分かりのように ENTRY は SUBROUTINE 扱いしてま
す。それはいいんですが、問題は長さ NCNT は最初の入り口でしか設定
していないので、残りの SZQFNT と SZQFNW において
REAL (NCNT) o WX1
などとしても、現在のラッパー生成器には NCNT をどこから拾ってくれ
ばいいか判断できません。
さて、この例はたまたまラップ不要な szpack なので、
grph1.f77proto から sz パックのサブルーチンは全部落す
ということで対処します。ラップが必要なサブルーチンで同じ目に会わ
ないことを祈ってます。ついでですから、
shiotani> grph1/csgi ラップ必要
shiotani> scpack ラップ必要(優先順位は低い)
shiotani> sgpack ラップ必要
shiotani> slpack ラップ必要
shiotani> stpack ラップ必要(優先順位は低い)
shiotani> swpack ラップ不要
shiotani> szpack ラップ不要
に従って swpack も落します。
# 塩谷先生、math,miscではどのパッケージを落しましょうか。
堀之内 武 horinout@xxxxxx
京都大学宙空電波科学研究センター (旧超高層電波研究センター)