<1>はじめに <2>コンパイラのダウンロードページおよび説明ページ <3>使用制限に関して <4>文字に関して <5>サブルーチンの名前に関して <6>文字列のファイル出力に関して <7>まとめ <1> ▼はじめに プログラム言語 FORTRAN77 のネットで得られる無料のコンパイラーとして 「Salford FTN77 Personal Edition」と「g77」がある。 本文章では、これらの違いと、「Salford FTN77 Personal Edition」対応プログラム を「g77」対応プログラムへ書き換える方法について説明したい。 <2> ▼コンパイラのダウンロードページおよび説明ページ こちら[↓]にまとめてある。 ../../academic/prgrm/link/fortran77.html <3> ▼使用制限に関して 「Salford FTN77 Personal Edition」には以下の制限がある。 http://www.salfordsoftware.co.uk/compilers/support/downloads.html >This compiler is only licensed for personal, non-commercial usage 以前は、もっと具体的な記述が見うけられたが、今は見つからない。 一方、「g77」は GNU なので、基本的に何をコンパイルしてもかまわないのだろう。 筆者は、「Salford FTN77 Personal Edition」の使用制限に関する具体的な記述が あったときに、後々問題にならないように、在来の「Salford FTN77 Personal Edition」 対応プログラムを「g77」でもコンパイルできるようにする方法を模索した。 <4> ▼文字に関して まず、日本語一般に関してだが、「Salford FTN77 Personal Edition」「g77」ともに 問題なく使える。 ただし「g77」のエディタとして有名な「Force」(g77を含んでおり、これをインストール しただけで、g77も使用できる)では画面に日本語を表示できない。しかし、「g77」 そのものは日本語を使用できる。 つまり、「Force」とは違うエディタで日本語を含むプログラムを書き、これを「Force」 で見ると、日本語は文字化けして表示されるが、コンパイルして実行すると、 MS-DOSプロンプトやファイル入出力に関し、日本語は正しく処理される。 しかし、「g77」で、気をつけなければならないのが'\'(円マーク)である。これは'\'の、 escape sequence と言われる役目によるものだ。これは「Salford FTN77 Personal Edition」 では気にしなくても良い。 http://ftp.esrf.fr/pub/scisoft/GrWinlib-old/qanda.html#kanji >Q.特定の漢字を使うとコンパイル時に警告メッセージが現れ,期待通りの結果が >得られません. >A.GNU-Win32のコンパイラはシフトJISコードの2バイト文字に対応していないため, >この症状が現れます. >文字 (列) 定数に「漢字」や「かな」を使うことは可能ですが,2バイト目に >エスケープ文字を表す「円記号」 '\' (5C) が含まれる特定の2バイト文字をそのまま >使うと, 警告メッセージが現れ,当然,期待通りの結果は得られません.しかし, >この問題は (^) で示された漢字を,1バイト目は16進表記し,2バイト目は「円記号」 >を表すエスケープ文字 '\\' を使って表すことで回避できます. 例えば,Fortran で > xxxxxx.f:yy: > WRITE(*,*) '...の能率 = ', x ^ > Unknown escape sequence `\' followed by char code 0xffffff97 at (^) >という警告が出たら,'能' のシフトJISコードは '945C' (16進) なので,対応する行を > WRITE(*,*) '...の\x94\\率 = ', x >と書き換えることで期待通りの結果が得られます.C の場合も同様です. >以下に,そのような不具合が生じる文字 (JIS コードの2バイト目が '5C' ) の, > 1バイト目の16進コード表を示します (表中の '\' は対応するコードの文字が存在 >しないことを表していて,「中点」 '・' => '\x81\x45' はそのまま使うことができます): > : 0 1 2 3 4 5 6 7 8 9 A B C D E F > ------------------------------------------------------------------- > 80: ― ・ ソ Ы ・ ・ \ ・ 噂 浬 欺 圭 構 蚕 十 > 90: 申 曾 箪 貼 能 表 暴 予 禄 兔 喀 媾 彌 拿 杤 歃 > E0: 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 ・ ・ x x ・ > F0: \ \ \ \ \ \ \ \ \ \ \ \ ・ >表の行と列の数字を足したもの (16進数) が対応する文字の1バイト目のコードです. >上の例の場合,表から '能' に対応する行と列の数字が 90 と 4 なので '能' の >1バイト目のコードは 94 (16進数) => '\x94' であり, '能' => '\x94\\' とすれば >よいことがわかります. http://ta.twi.tudelft.nl/archive/sepran-list/9702/msg00002.html >Gcc does not understand the construction: '\' >as the backslash is an escape sequence. I replaced it with: >'\\' http://www.fisica.uson.mx/carlos/Linux/Docs/lnag/Linux_learning.htm >In regexpr, the special characters are: "\" (backslash), "." (dot), >"*" (asterisk), "[" (bracket), "^" (caret, special only at the beginnig of > a string), "$" (dollar sign, special only at the end of a string). >A character terminating a pattern string is also special for this string. >The backslash, "\" is used as an "escape" character, i.e., to quote a subsequent > special character. >Thus, "" searches for a backslash, "\." searches for a dot, "\*" searches for > the asterisk, "\[" searches for the bracket, "\^" searches for the caret even > at the begining of the string, "\$" searches for the dollar sign even at the > end of the string. なお、"["は special character であるが、"]"は、special character ではない。 つまり、 「Salford FTN77 Personal Edition」対応プログラムから 「g77」対応プログラムへの書き換え方 (1) '\'を全て'\\'に置換する。ただし、一行の制限をオーバーしないか注意。 ファイルの指定で、ディレクトリを意味する'\'を使っている場合には、無用の混乱を さけるため'/'にしておく。 その他'.'などは置換しなくてもかまわない。 <5> ▼サブルーチンの名前に関して 「g77」でコンパイルすると「Same name used for global」というエラーメッセージ が出る場合がある。 http://www.netlaputa.ne.jp/~utty/linuxmld/g771.html >Q] >g77 で compile しようとしたら、 >Same name `rand' used for global at (2) and intrinsic at (1) [info -f g77 M INTGLOB] >というようなメッセージがでるのですが >[A] >恐らく g77 に組み込まれている関数名と同じ名前を使っているからでしょう。 >上記の場合、rand という 0 から 1 までの範囲で一様乱数を生成する関数が g77 に >ありますので、メインプログラムで >EXTERNAL rand >と外部定義の関数であることを宣言するか、別の名前に変更するとうまくいくと思います。 >[Appendix] >上記のメッセージが出た場合でも、コンパイル自体はうまくいっています。 >ただし、出来上がったバイナリを実行した結果は g77 の組み込み関数をつかった >結果になりますので十分注意してください。 つまり、 「Salford FTN77 Personal Edition」対応プログラムから 「g77」対応プログラムへの書き換え方 (2) 「g77」でコンパイルして「Same name used for global」というエラーメッセージが でるようなら、そのサブルーチンの名前を変える。 <6> ▼文字列のファイル出力に関して 文字列をファイルへ出力した場合の書式は、コンパイラだけでなく、その他の環境に よっても違うようだ。 以下の三つの環境について、いろいろなWRITE文で出力させて、書式を比較する。 1)「Salford FTN77 Personal Edition」, Win XP 2)「g77」, Win XP 3)「g77」, Win 98 UNIT 22 にファイルを指定する。文字型 cha は、 character*250 cha cha='あいうえお' である。 サブルーチン ALG250(文字型,整数型) は、文字型引数の実際の長さを整数型引数に代入する もので、 call ALG250(cha,wlg) で、wlgは 10 となる。cha は、'あいうえお'なので、最後バイトである'お'の2バイト目は 10バイト目であり、この 10 が wlg に代入されるのだ。LEN関数とは異なるものであること に注意してほしい (LEN(cha)=250である)。 1] プログラム call ALG250(cha,wlg) write(22,602) (cha(w:w),w=1,wlg) 602 format(250A1) 出力結果 1)あいうえお[改行] 2)あいうえお[改行] 3)あいうえお[改行] 2] プログラム call ALG250(cha,wlg) write(22,601) cha(1:wlg) 601 format (A250) 出力結果 1)[半角スペース240個]あいうえお[改行] 2)[半角スペース240個]あいうえお[改行] 3)[半角スペース240個]あいうえお[改行] つまり、'お'の2バイト目が250バイト目となる。 3] プログラム write(22,601) cha 601 format (A250) 出力結果 1)あいうえお[改行] 2)[半角スペース240個]あいうえお[改行] 3)[半角スペース240個]あいうえお[改行] 4] プログラム write(22,*) cha 出力結果 1)[半角スペース]あいうえお[改行] [半角スペース][改行] [半角スペース][改行] 2)[半角スペース]あいうえお[半角スペース239個][改行] 3)[半角スペース]あいうえお[半角スペース239個][改行] 5] プログラム call ALG250(cha,wlg) write(22,*) cha(1:wlg) 出力結果 1)[半角スペース]あいうえお[改行] 2)[半角スペース]あいうえお[半角スペース239個][改行] 3)[半角スペース]あいうえお[改行] たいていは、「あいうえお[改行]」という出力が期待されていると思うので、 「Salford FTN77 Personal Edition」対応プログラムから 「g77」対応プログラムへの書き換え方 (3) 文字列をファイルへ出力する場合には、 call ALG250(cha,wlg) write(22,602) (cha(w:w),w=1,wlg) 602 format(250A1) といったプログラムにする。これは 1] に当たる。 <7> ▼まとめ まとめると、「Salford FTN77 Personal Edition」対応プログラムを「g77」対応プログラム へ書き換える方法は、 (1) '\'を全て'\\'に置換する。ただし、一行の制限をオーバーしないか注意。 ファイルの指定で、ディレクトリを意味する'\'を使っている場合には、無用の混乱を さけるため'/'にしておく。 その他'.'などは置換しなくてもかまわない。 (2) 「g77」でコンパイルして「Same name used for global」というエラーメッセージが でるようなら、そのサブルーチンの名前を変える。 (3) 文字列をファイルへ出力する場合には、 call ALG250(cha,wlg) write(22,602) (cha(w:w),w=1,wlg) 602 format(250A1) といったプログラムにする。 である。これで、「g77」でも、正常にコンパイルされ、ほぼ正常に動くプログラムになるはずだ。 あと、注意すべきことを挙げると、 http://ftp.esrf.fr/pub/scisoft/GrWinlib-old/qanda.html#kanji > : 0 1 2 3 4 5 6 7 8 9 A B C D E F > ------------------------------------------------------------------- > 80: ― ・ ソ Ы ・ ・ \ ・ 噂 浬 欺 圭 構 蚕 十 > 90: 申 曾 箪 貼 能 表 暴 予 禄 兔 喀 媾 彌 拿 杤 歃 > E0: 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 ・ ・ x x ・ > F0: \ \ \ \ \ \ \ \ \ \ \ \ ・ の表に含まれている文字がファイル名(ファイルの中身は問題ない)にならないようにすること がある。 初出 2004/ 3/20
■ ■ ■
|
▲ 簡易html化ドキュメント
Copyright(C) TAKAGI-1 All rights reserved.