2017年7月29日土曜日

GDLSSW003, sswdbの導入とON_IOERRORの不備

GDL (GNU Data Language) 上で SSW (Solar Soft Ware) を使うためのメモ書き


前回までに、エラーメッセージが出ながらもssw_gdlを起動する事ができた。

次にSSWDBのインストールのため、sswdb_upgrade.proを動かした。

SSWDBのインストールのためには、SSWのホームページで装置名を選択して、テキストファイル(setup.sswdb_upgrade)を作る必要がある。




 ON_IOERRORの不備


sswdb_upgrade.proを動かした。

GDL> sswdb_upgrade, /spawn, /loud

すると、file_stat.pro, ssw_file_delete.proで、openrについてのエラーが出て、停止した。

% OPENR: Error opening file. Unit: 100, File:
% Execution halted at: FILE_STAT           69 /media/yamamoto/_dat11/ssw/gen/idl/system/file_stat.pro

これらの共通の要素は、次の2行である。

>      on_ioerror,err
>      openr,lun,/get_lun,files(i)

IDLなら、openrでエラーが出た際に、条件式on_ioerrorがスイッチとなり、他の箇所に書いてあるようなエラー処理をする。

しかし、GDLではこのon_ioerrorが機能していないようで、openrでエラーが出た段階で止まっていた。

そこでエラー変数を受け取り、エラー時の処理を行うように書き換えたところ、エラーで止まる事は無くなった。

例、file_stat.pro

>      on_ioerror,err
>      openr,lun,/get_lun,files(i)
>      fstat_lun = fstat(lun)
>      free_lun,lun

<      openr,lun,/get_lun,files(i),ERROR=err1
<      if err1 ne 0 then begin
<         fstat_lun = fstat(1)
<         fstat_lun.name=''
<         fstat_lun.size=0
<      endif else begin
<         fstat_lun = fstat(lun)
<         free_lun,lun
<      endelse

fstatコマンドから返されるfstat_lun.name, sizeがこの関数の返り値である。

free_lunは、元のプロシージャでは離れた場所に書いてあるが、ここではまとめた。



 なお、以下のコマンドでon_ioerrorが使われている行数を調べた所、265行だった。

 find /???/ssw/ -type f -print | xargs grep 'on\_ioerror' > ioerror.txt
何箇所かはプロシージャの説明書きであるが、これだけ修正するのは現実的ではない。

(つまり、私がインストールした限られたSSWのプロシージャについてでさえ、100ファイル以上の書き直しが必要)

GDLの開発にお任せかな?(´・ω・`)



追記

ssw_upgradeを実行すると、元ファイルが上書きされてしまうので、手動で修正が必要。

FTP転送の際、ファイルの容量の違いで判断している模様。

次回の記事のmake_mirror.proも同じく修正が必要。

0 件のコメント:

コメントを投稿

注目の投稿

【貨幣循環】名目GDPと M=G+I と V=1/(1-β) の成長率

「 【貨幣循環】貨幣循環導入の3点セット 」では、貨幣循環の定式化である M=G+I と V=1/(1-β) を紹介した。「 【貨幣循環】歳出伸び率とGDP成長率の関係 」では、名目GDPの成長率と政府支出Gの成長率の関係を紹介した。本記事では、MとV、および名目GDPの成長率...

人気の投稿