[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
京都大学宙空電波科学研究センター (旧超高層電波研究センター)