Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/cfg
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- Location:
- EcnlProtoTool/trunk/asp3_dcre/cfg
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/cfg/GenFile.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r270 r321 8 8 # Copyright (C) 2016 by APTJ Co., Ltd., JAPAN 9 9 # 10 # ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 # å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 # ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 # è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 # ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 # ã¨ï¼ 29 # (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 # (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 # å ±åãããã¨ï¼ 37 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 # 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 # å 45 責ãããã¨ï¼ 10 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 11 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 # スコード中に含まれていること. 16 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 # の無保証規定を掲載すること. 20 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 # と. 23 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 # 報告すること. 27 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 # 免責すること. 46 32 # 47 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 # ã®è²¬ä»»ãè² ããªãï¼ 33 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 # の責任を負わない. 53 38 # 54 # $Id : GenFile.rb 1011 2016-07-11 02:20:01Z coas-nagasima$39 # $Id$ 55 40 # 56 41 57 42 # 58 # ãã¡ã¤ã«ä½æã¯ã©ã¹43 # ファイル作成クラス 59 44 # 60 45 61 46 # 62 # ãã¡ã¤ã«ã«æ¸ããã¨ããå 63 容ãå¤æ°ã«èç©ãï¼ããã°ã©ã ã®çµäºæï¼output 64 # ã¡ã½ãããå¼ã°ããæï¼ã«ãã¡ã¤ã«ã«åºåããï¼æ¢ã«ãã¡ã¤ã«ãåå¨ãï¼å·® 65 # åããªãå ´åã¯åºåããªãï¼ã¿ã¤ã ã¹ã¿ã³ããæ´æ°ããªãï¼ï¼ 47 # ファイルに書こうとした内容を変数に蓄積し,プログラムの終了時(output 48 # メソッドが呼ばれた時)にファイルに出力する.既にファイルが存在し,差 49 # 分がない場合は出力しない(タイムスタンプを更新しない). 66 50 # 67 51 class GenFile … … 75 59 end 76 60 77 # ãã¡ã¤ã«ãã¼ã¿ã®æ«å°¾ã«æååã追å ãã61 # ファイルデータの末尾に文字列を追加する 78 62 def append(code = "") 79 63 @@fileDataHash[@selfFileName] << code 80 64 end 81 65 82 # ãã¡ã¤ã«ãã¼ã¿ã«1è¡è¿½å ãã66 # ファイルデータに1行追加する 83 67 def add(code = "") 84 68 @@fileDataHash[@selfFileName] << code << "\n" 85 69 end 86 70 87 # ãã¡ã¤ã«ãã¼ã¿ã«1è¡è¿½å ãã(æ¹è¡2å)71 # ファイルデータに1行追加する(改行2回) 88 72 def add2(code = "") 89 73 add(code + "\n") 90 74 end 91 75 92 # ã³ã¡ã³ããããã追å ãã76 # コメントヘッダを追加する 93 77 def comment_header(comment) 94 78 add("/*") … … 99 83 end 100 84 101 # ãã¡ã¤ã«ãã¼ã¿ã表示ãã85 # ファイルデータを表示する 102 86 def print() 103 87 puts(@@fileDataHash[@selfFileName]) 104 88 end 105 89 106 # å 107 ¨ãã¡ã¤ã«ãåºåãã 90 # 全ファイルを出力する 108 91 def self.output() 109 92 @@fileDataHash.each do |fileName, fileData| 110 # æ¢ã«ãã¡ã¤ã«ãåå¨ãï¼å·®åããªãå ´åã¯åºåããªã111 # ï¼ã¿ã¤ã ã¹ã¿ã³ããæ´æ°ããªãï¼93 # 既にファイルが存在し,差分がない場合は出力しない 94 #(タイムスタンプを更新しない) 112 95 if File.exist?(fileName) 113 96 if fileData == File.read(fileName) -
Property svn:mime-type
changed from
-
EcnlProtoTool/trunk/asp3_dcre/cfg/SRecord.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r270 r321 7 7 # Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN 8 8 # 9 # ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 # å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 # ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 # è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 # ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 # ã¨ï¼ 28 # (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 # (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 # å ±åãããã¨ï¼ 36 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 # 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 # å 44 責ãããã¨ï¼ 9 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 10 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 11 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 12 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 # スコード中に含まれていること. 15 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 # の無保証規定を掲載すること. 19 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 21 # と. 22 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 23 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 24 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 25 # 報告すること. 26 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 27 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 28 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 29 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 30 # 免責すること. 45 31 # 46 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 # ã®è²¬ä»»ãè² ããªãï¼ 32 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 # の責任を負わない. 52 37 # 53 # $Id : SRecord.rb 1011 2016-07-11 02:20:01Z coas-nagasima$38 # $Id$ 54 39 # 55 40 56 41 # 57 # S ã¬ã³ã¼ããã¡ã¤ã«å¦çã¯ã©ã¹42 # Sレコードファイル処理クラス 58 43 # 59 44 60 45 # 61 # S ã¬ã³ã¼ããã¡ã¤ã«ãå¤æ°ã«èªã¿è¾¼ã¿ï¼è¦æ±ãããçªå°ã®ãã¼ã¿ãè¿ãï¼46 # Sレコードファイルを変数に読み込み,要求された番地のデータを返す. 62 47 # 63 # @sRecDataã¯ï¼å 64 é çªå°ããã¼ã¨ãï¼ããããã®ãã¼ã¿ï¼ãããµãã³ãå½¢å¼ï¼ 65 # ãå¤ã¨ãããã¯ãæ ¼ç´ãããããã·ã¥ã§ããï¼é£ç¶ãããããã¯ã¯ï¼1ã¤ã®ã 66 # ããã¯ã«ã¾ã¨ãã¦æ ¼ç´ãããã®ã¨ããï¼ããããªãã¨ï¼ãã¼ã¿ã®ååºãããµã¼ 67 # ããé¢åã«ãªãï¼ï¼ 48 # @sRecDataは,先頭番地をキーとし,そこからのデータ(ヘキサダンプ形式) 49 # を値とブロックが格納されたハッシュである.連続するブロックは,1つのブ 50 # ロックにまとめて格納するものとする(そうしないと,データの取出しやサー 51 # チが面倒になる). 68 52 # 69 53 class SRecord … … 74 58 prevData = "" 75 59 file.each do |line| 76 # ãã¼ã¿ã¬ã³ã¼ãã«ããåå²60 # データレコードにより分岐 77 61 case line.slice(0, 2) 78 62 when "S1" 79 # ãã¼ã¿é·ï¼ã¢ãã¬ã¹å[2byte]+ãã§ãã¯ãµã å1byteãæ¸ç®ï¼63 # データ長(アドレス分[2byte]+チェックサム分1byteを減算) 80 64 length = line.slice(2, 2).hex - 2 - 1 81 65 82 # ã¢ãã¬ã¹ï¼4æå=2byteï¼66 # アドレス(4文字=2byte) 83 67 address = line.slice(4, 4).hex 84 68 85 # ãã¼ã¿ï¼ãã®æç¹ã§ã¯æååã§åã£ã¦ããï¼69 # データ(この時点では文字列で取っておく) 86 70 data = line.slice(8, length * 2) 87 71 when "S2" 88 # ãã¼ã¿é·ï¼ã¢ãã¬ã¹å[3byte]+ãã§ãã¯ãµã å1byteãæ¸ç®ï¼72 # データ長(アドレス分[3byte]+チェックサム分1byteを減算) 89 73 length = line.slice(2, 2).hex - 3 - 1 90 74 91 # ã¢ãã¬ã¹ï¼6æå=3byteï¼75 # アドレス(6文字=3byte) 92 76 address = line.slice(4, 6).hex 93 77 94 # ãã¼ã¿ï¼ãã®æç¹ã§ã¯æååã§åã£ã¦ããï¼78 # データ(この時点では文字列で取っておく) 95 79 data = line.slice(10, length * 2) 96 80 when "S3" 97 # ãã¼ã¿é·ï¼ã¢ãã¬ã¹å[4byte]+ãã§ãã¯ãµã å1byteãæ¸ç®ï¼81 # データ長(アドレス分[4byte]+チェックサム分1byteを減算) 98 82 length = line.slice(2, 2).hex - 4 - 1 99 83 100 # ã¢ãã¬ã¹ï¼8æå=4byteï¼84 # アドレス(8文字=4byte) 101 85 address = line.slice(4, 8).hex 102 86 103 # ãã¼ã¿ï¼ãã®æç¹ã§ã¯æååã§åã£ã¦ããï¼87 # データ(この時点では文字列で取っておく) 104 88 data = line.slice(12, length * 2) 105 89 else … … 108 92 109 93 if !address.nil? 110 # ãã¼ã¿ãæ ¼ç´ãã94 # データを格納する 111 95 if address == prevAddress + prevData.size / 2 112 96 prevData << data … … 122 106 end 123 107 124 # ãã¼ã¿åå¾108 # データ取得 125 109 def get_data(address, size) 126 110 endAddress = address + size … … 134 118 end 135 119 136 # ãã¼ã¿æ¸è¾¼ã¿120 # データ書込み 137 121 def set_data(address, data) 138 122 endAddress = address + data.size / 2 … … 141 125 142 126 if nEndBlock < address || endAddress < block 143 # éãªãããªã127 # 重なりがない 144 128 elsif address < block 145 # æ°è¦ãã¼ã¿ã®æ¹ãå 146 é çªå°ãå°ãã 147 # ããã§ã¯ endAddress >= block ãæç«ãã¦ãã 129 # 新規データの方が先頭番地が小さい 130 # ここでは endAddress >= block が成立している 148 131 offset = (endAddress - block) * 2 149 132 data << blockData[offset..-1] 150 133 @sRecData.delete(block) 151 134 else 152 # ç»é²æ¸ã¿ãã¼ã¿ã®æ¹ãå 153 é çªå°ãå°ãããåã 135 # 登録済みデータの方が先頭番地が小さいか同じ 154 136 offset = (address - block) * 2 155 137 address = block … … 162 144 end 163 145 164 # å¤ã¨ãã¦ã®ãã¼ã¿åå¾146 # 値としてのデータ取得 165 147 def get_value(address, size, signed) 166 148 targetData = get_data(address, size) … … 169 151 else 170 152 if $endianLittle 171 # ãªãã«ã¨ã³ãã£ã¢ã³ã®å ´åï¼ãã¤ããªã¼ãã¼ãéã«ãã153 # リトルエンディアンの場合,バイトオーダーを逆にする 172 154 reverseData = "" 173 # å¾ããã2æåãã¤æãåºãï¼ä¸¦ã³æ¿ãã155 # 後ろから2文字ずつ抜き出し,並び替える 174 156 while targetData.size > 0 175 157 reverseData << targetData[-2, 2] … … 181 163 end 182 164 183 # è² ã®æ°ã®å¦ç165 # 負の数の処理 184 166 if signed && (returnData & (1 << (size * 8 - 1))) != 0 185 167 returnData -= (1 << (size * 8)) -
Property svn:mime-type
changed from
-
EcnlProtoTool/trunk/asp3_dcre/cfg/cfg.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r270 r321 8 8 # Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 # 10 # ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 # å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 # ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 # è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 # ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 # ã¨ï¼ 29 # (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 # (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 # å ±åãããã¨ï¼ 37 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 # 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 # å 45 責ãããã¨ï¼ 46 # 47 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 # ã®è²¬ä»»ãè² ããªãï¼ 53 # 54 # $Id: cfg.rb 1011 2016-07-11 02:20:01Z coas-nagasima $ 10 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 11 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 # スコード中に含まれていること. 16 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 # の無保証規定を掲載すること. 20 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 # と. 23 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 # 報告すること. 27 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 # 免責すること. 32 # 33 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 # の責任を負わない. 38 # 39 # $Id$ 55 40 # 56 41 … … 68 53 69 54 # 70 # å®æ°å®ç¾© 71 # 72 # å 73 ±é 55 # 定数定義 56 # 57 # 共通 74 58 VERSION = "1.2.2" 75 59 76 # cfg1_out é¢ä¿60 # cfg1_out関係 77 61 CFG1_PREFIX = "TOPPERS_cfg_" 78 62 CFG1_MAGIC_NUM = "TOPPERS_magic_number" … … 85 69 CFG1_OUT_TARGET_H = "target_cfg1_out.h" 86 70 87 # cfg2_out é¢ä¿71 # cfg2_out関係 88 72 CFG2_OUT_DB = "cfg2_out.db" 89 73 90 # cfg3_out é¢ä¿74 # cfg3_out関係 91 75 CFG3_OUT_DB = "cfg3_out.db" 92 76 93 77 # 94 # ã¨ã©ã¼çºçæç¡ãã©ã°78 # エラー発生有無フラグ 95 79 # 96 80 $errorFlag = false 97 81 98 82 # 99 # ã¨ã©ã¼ï¼è¦å表示é¢æ°100 # 101 # ä¸è¬çãªã¨ã©ã¼è¡¨ç¤ºï¼å¦çãä¸æï¼83 # エラー/警告表示関数 84 # 85 # 一般的なエラー表示(処理を中断) 102 86 def error_exit(message, location = "") 103 87 location += " " if location != "" … … 105 89 end 106 90 107 # ä¸è¬çãªã¨ã©ã¼è¡¨ç¤ºï¼å¦çãç¶ç¶ï¼91 # 一般的なエラー表示(処理を継続) 108 92 def error(message, location = "") 109 93 location += " " if location != "" … … 112 96 end 113 97 114 # ä¸è¬çãªè¦å表示98 # 一般的な警告表示 115 99 def warning(message, location = "") 116 100 location += " " if location != "" … … 118 102 end 119 103 120 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®æ§æ解ææã®ã¨ã©ã¼104 # システムコンフィギュレーションファイルの構文解析時のエラー 121 105 $noParseError = 0 122 106 def parse_error(cfgFile, message) … … 127 111 end 128 112 129 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®æ§æ解ææã®è¦å113 # システムコンフィギュレーションファイルの構文解析時の警告 130 114 def parse_warning(cfgFile, message) 131 115 warning(message, "#{cfgFile.getFileName()}:#{cfgFile.getLineNo}:") … … 133 117 134 118 # 135 # éçAPIå¦çæã®ã¨ã©ã¼ï¼è¦å表示é¢æ°136 # 137 # éçAPIå¦çæã®ã¨ã©ã¼ï¼è¦åãçãè¨è¿°ã§ããããã«ï¼ã¡ãã»ã¼ã¸ä¸ã®%ã¾138 # ãã¯%%ã§å§ã¾ãè¨è¿°ã以ä¸ã®ããã«å±éããï¼139 # %label â#{params[:label]}140 # %%label âlabel `#{params[:label]}'141 # 142 # ã¨ã©ã¼ï¼è¦åã¡ãã»ã¼ã¸ã®å±é119 # 静的API処理時のエラー/警告表示関数 120 # 121 # 静的API処理時のエラー/警告を短く記述できるように,メッセージ中の%ま 122 # たは%%で始まる記述を以下のように展開する. 123 # %label → #{params[:label]} 124 # %%label → label `#{params[:label]}' 125 # 126 # エラー/警告メッセージの展開 143 127 def expand_message(message, params) 144 128 result = message.dup … … 156 140 end 157 141 158 # éçAPIå¦çæã®ã¨ã©ã¼142 # 静的API処理時のエラー 159 143 def error_api(params, message) 160 144 error(expand_message(message, params), \ … … 162 146 end 163 147 164 # éçAPIå¦çæã®è¦å148 # 静的API処理時の警告 165 149 def warning_api(params, message) 166 150 warning(expand_message(message, params), \ … … 168 152 end 169 153 170 # éçAPIå¦çæã®ã¨ã©ã¼ï¼ã¨ã©ã¼ã³ã¼ãä»ãï¼154 # 静的API処理時のエラー(エラーコード付き) 171 155 def error_ercd(errorCode, params, message) 172 156 error_api(params, "#{errorCode}: #{message}") 173 157 end 174 158 175 # éçAPIå¦çæã®è¦åï¼ã¨ã©ã¼ã³ã¼ãä»ãï¼159 # 静的API処理時の警告(エラーコード付き) 176 160 def warning_ercd(errorCode, params, message) 177 161 warning_api(params, "#{errorCode}: #{message}") 178 162 end 179 163 180 # ãã©ã¡ã¼ã¿ã®ã¨ã©ã¼164 # パラメータのエラー 181 165 def error_wrong(errorCode, params, symbol, wrong) 182 166 error_ercd(errorCode, params, "%%#{symbol} is #{wrong} in %apiname") … … 193 177 end 194 178 195 # ãã©ã¡ã¼ã¿ä¸æ£ã®ã¨ã©ã¼179 # パラメータ不正のエラー 196 180 def error_illegal(errorCode, params, symbol) 197 181 error_ercd(errorCode, params, "illegal %%#{symbol} in %apiname") … … 209 193 210 194 # 211 # String ã¯ã©ã¹ã®æ¡å¼µï¼äºéå¼ç¨ç¬¦ã§å²ã¾ããæååã®ä½æï¼å±éï¼195 # Stringクラスの拡張(二重引用符で囲まれた文字列の作成/展開) 212 196 # 213 197 class String 214 198 # 215 # äºéå¼ç¨ç¬¦ã§å²ã¾ããæååã®ä½æ199 # 二重引用符で囲まれた文字列の作成 216 200 # 217 201 def quote … … 249 233 250 234 # 251 # äºéå¼ç¨ç¬¦ã§å²ã¾ããæååã®å±é235 # 二重引用符で囲まれた文字列の展開 252 236 # 253 237 def unquote … … 299 283 300 284 # 301 # NumStr ã¯ã©ã¹ï¼æ°å¤ã«æååãä»å ãããã®ï¼ã®å®ç¾©285 # NumStrクラス(数値に文字列を付加したもの)の定義 302 286 # 303 287 class NumStr … … 307 291 end 308 292 309 # æ°å¤æ 310 å ±ãè¿ã 293 # 数値情報を返す 311 294 def val 312 295 return @val … … 314 297 alias_method :to_i, :val 315 298 316 # æååæ 317 å ±ãè¿ã 299 # 文字列情報を返す 318 300 def str 319 301 return @str … … 321 303 alias_method :to_s, :str 322 304 323 # æ¯è¼ã¯æ°å¤æ 324 å ±ã§è¡ã 305 # 比較は数値情報で行う 325 306 def ==(other) 326 307 @val == other … … 333 314 end 334 315 335 # ããã·ã¥ã®ãã¼ã¨ãã¦ä½¿ãæã®æ¯è¼ãæ°å¤æ 336 å ±ã§è¡ã 316 # ハッシュのキーとして使う時の比較も数値情報で行う 337 317 def eql?(other) 338 318 @val == other.val 339 319 end 340 320 341 # ããã·ã¥å¤ã®å®ç¾©ãä¸æ¸ããã321 # ハッシュ値の定義も上書きする 342 322 def hash 343 323 return @val.hash 344 324 end 345 325 346 # æ°å¤ã¯ã©ã¹ã¨æ¼ç®ã§ããããã«ãã326 # 数値クラスと演算できるようにする 347 327 def coerce(other) 348 328 if other.kind_of?(Numeric) … … 353 333 end 354 334 355 # äºéå¼ç¨ç¬¦ã§å²ã¾ããæååã®ä½æ335 # 二重引用符で囲まれた文字列の作成 356 336 def quote 357 337 str.quote 358 338 end 359 339 360 # äºéå¼ç¨ç¬¦ã§å²ã¾ããæååã®å±é340 # 二重引用符で囲まれた文字列の展開 361 341 def unquote 362 342 str.unquote 363 343 end 364 344 365 # pp æã®è¡¨ç¤º345 # pp時の表示 366 346 def pretty_print(q) 367 347 q.text("[#{@val}(=0x#{@val.to_s(16)}),") … … 370 350 end 371 351 372 # æªå®ç¾©ã®ã¡ã½ããã¯@valã«éã352 # 未定義のメソッドは@valに送る 373 353 def method_missing(*method) 374 354 @val.send(*method) … … 377 357 378 358 # 379 # ã·ã³ãã«ãã¡ã¤ã«ã®èªã¿è¾¼ã¿380 # 381 # 以ä¸ã®ã¡ã½ããã¯ï¼GNUã®nmãçæããã·ã³ãã«ãã¡ã¤ã«ã«å¯¾å¿ãã¦ããï¼382 # å¥ã®ãã¼ã«ã«å¯¾å¿ããå ´åã«ã¯ï¼ãã®ã¡ã½ãããæ¸ãæããã°ããï¼359 # シンボルファイルの読み込み 360 # 361 # 以下のメソッドは,GNUのnmが生成するシンボルファイルに対応している. 362 # 別のツールに対応する場合には,このメソッドを書き換えればよい. 383 363 # 384 364 def ReadSymbolFile(symbolFileName) … … 391 371 symbolAddress = {} 392 372 symbolFile.each do |line| 393 # ã¹ãã¼ã¹åºåãã§å解373 # スペース区切りで分解 394 374 fields = line.split(/\s+/) 395 375 396 # 3 åã«ãªã£ã¦ããªãè¡ã¯é¤å¤376 # 3列になっていない行は除外 397 377 if fields.size == 3 398 378 symbolAddress[fields[2]] = fields[0].hex … … 404 384 405 385 # 406 # å¤åå¾ã·ã³ãã«ãã°ãã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã386 # 値取得シンボルをグローバル変数として定義する 407 387 # 408 388 def DefineSymbolValue … … 415 395 416 396 # 417 # ã¤ã³ã¯ã«ã¼ããã¹ãããã¡ã¤ã«ãæ¢ã397 # インクルードパスからファイルを探す 418 398 # 419 399 def SearchFilePath(fileName) 420 400 if File.exist?(fileName) 421 # æå®ãããã¡ã¤ã«ãã¹ã«åå¨ãã401 # 指定したファイルパスに存在する 422 402 return fileName 423 403 elsif /^\./ =~ fileName 424 # ç¸å¯¾ãã¹ãæå®ãã¦ãã¦è¦ã¤ãããªãã£ãå ´åï¼åå¨ããªããã®ã¨ãã425 # ï¼æå³ããªããã¡ã¤ã«ã対象ã¨ãªããã¨ãé²æ¢ï¼404 # 相対パスを指定していて見つからなかった場合,存在しないものとする 405 #(意図しないファイルが対象となることを防止) 426 406 return nil 427 407 else 428 # åã¤ã³ã¯ã«ã¼ããã¹ãããã¡ã¤ã«åå¨ãã§ãã¯408 # 各インクルードパスからファイル存在チェック 429 409 $includeDirectories.each do |includeDirectory| 430 410 path = includeDirectory + "/" + fileName 431 # è¦ã¤ãã£ããç¸å¯¾ãã¹ãè¿ã411 # 見つかったら相対パスを返す 432 412 if File.exist?(path) 433 413 return path … … 439 419 440 420 # 441 # æå®ããçæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãæ¤ç´¢ãã¦loadãã421 # 指定した生成スクリプト(trbファイル)を検索してloadする 442 422 # 443 423 def IncludeTrb(fileName) … … 451 431 452 432 # 453 # ãã¹3ã®å¦ç433 # パス3の処理 454 434 # 455 435 def Pass3 456 436 # 457 # ãã¹2ããå¼ã渡ãããæ 458 å ±ããã¡ã¤ã«ããèªã¿è¾¼ã 437 # パス2から引き渡される情報をファイルから読み込む 459 438 # 460 439 db = PStore.new(CFG2_OUT_DB) … … 472 451 473 452 # 474 # å¤åå¾ã·ã³ãã«ãã°ãã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã453 # 値取得シンボルをグローバル変数として定義する 475 454 # 476 455 DefineSymbolValue() 477 456 478 457 # 479 # çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå®è¡ãã458 # 生成スクリプト(trbファイル)を実行する 480 459 # 481 460 $trbFileNames.each do |trbFileName| … … 484 463 485 464 # 486 # ãã¹4ã«å¼ã渡ãæ 487 å ±ããã¡ã¤ã«ã«çæ 465 # パス4に引き渡す情報をファイルに生成 488 466 # 489 467 if $omitOutputDb.nil? … … 503 481 504 482 # 505 # ãã¹4ã®å¦ç483 # パス4の処理 506 484 # 507 485 def Pass4 508 486 # 509 # ãã¹3ããå¼ã渡ãããæ 510 å ±ããã¡ã¤ã«ããèªã¿è¾¼ã 487 # パス3から引き渡される情報をファイルから読み込む 511 488 # 512 489 db = PStore.new(CFG3_OUT_DB) … … 523 500 524 501 # 525 # å¤åå¾ã·ã³ãã«ãã°ãã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã502 # 値取得シンボルをグローバル変数として定義する 526 503 # 527 504 DefineSymbolValue() 528 505 529 506 # 530 # çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå®è¡ãã507 # 生成スクリプト(trbファイル)を実行する 531 508 # 532 509 $trbFileNames.each do |trbFileName| … … 536 513 537 514 # 538 # çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼åãã®é¢æ°515 # 生成スクリプト(trbファイル)向けの関数 539 516 # 540 517 def SYMBOL(symbol) … … 564 541 565 542 # 566 # ã°ãã¼ãã«å¤æ°ã®åæå543 # グローバル変数の初期化 567 544 # 568 545 $kernel = nil … … 579 556 580 557 # 581 # ãªãã·ã§ã³ã®å¦ç558 # オプションの処理 582 559 # 583 560 OptionParser.new(banner="Usage: cfg.rb [options] CONFIG-FILE", 40) do |opt| … … 633 610 634 611 # 635 # ãªãã·ã§ã³ã®ãã§ãã¯612 # オプションのチェック 636 613 # 637 614 if $pass.nil? 638 # ãã¹ã®æå®ã¯å¿ 639 é 615 # パスの指定は必須 640 616 abort("`--pass' option is mandatory") 641 617 elsif /^[1234]$/ !~ $pass … … 643 619 end 644 620 645 # ãã¹1ã§ã¯ï¼éçAPIãã¼ãã«ã¯å¿ 646 é 621 # パス1では,静的APIテーブルは必須 647 622 if ($pass == "1" && $apiTableFileNames.empty?) 648 623 abort("`--api-table' option must be specified in pass 1") 649 624 end 650 625 651 # ãã¹1以å¤ã§ã¯ï¼çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå¿ 652 é 626 # パス1以外では,生成スクリプト(trbファイル)が必須 653 627 if ($pass != "1" && $trbFileNames.empty?) 654 628 abort("`--trb-file' must be specified except in pass 1") … … 656 630 657 631 # 658 # ã«ã¼ãã«ãªãã·ã§ã³ã®å¦ç632 # カーネルオプションの処理 659 633 # 660 634 case $kernel … … 666 640 667 641 # 668 # IDçªå·å 669 ¥åãã¡ã¤ã«ã®åã込㿠642 # ID番号入力ファイルの取り込み 670 643 # 671 644 $inputObjid = {} … … 686 659 687 660 # 688 # æå®ãããã·ã³ãã«ãã¡ã¤ã«ã®èªã¿è¾¼ã¿661 # 指定されたシンボルファイルの読み込み 689 662 # 690 663 if !$romSymbolFileName.nil? … … 697 670 698 671 # 699 # æå®ãããSã¬ã³ã¼ããã¡ã¤ã«ã®èªã¿è¾¼ã¿672 # 指定されたSレコードファイルの読み込み 700 673 # 701 674 if !$romImageFileName.nil? … … 708 681 709 682 # 710 # ãã¹ã«å¾ã£ã¦åå¦çãå®è¡683 # パスに従って各処理を実行 711 684 # 712 685 case $pass … … 725 698 end 726 699 727 # ã¨ã©ã¼çºçæã¯abortãã700 # エラー発生時はabortする 728 701 if $errorFlag 729 702 if ($0 == __FILE__) 730 703 abort() 731 704 else 732 # simplecov 対å¿705 # simplecov対応 733 706 raise() 734 707 end … … 736 709 737 710 # 738 # ä½æãããã¹ã¦ã®ãã¡ã¤ã«ãåºåãã711 # 作成したすべてのファイルを出力する 739 712 # 740 713 GenFile.output 741 714 742 715 # 743 # ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®çæ716 # タイムスタンプファイルの生成 744 717 # 745 718 if !$timeStampFileName.nil? -
Property svn:mime-type
changed from
-
EcnlProtoTool/trunk/asp3_dcre/cfg/pass1.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r270 r321 7 7 # Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 # 9 # ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 # å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 # ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 # è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 # ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 # ã¨ï¼ 28 # (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 # (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 # å ±åãããã¨ï¼ 36 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 # 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 # å 44 責ãããã¨ï¼ 45 # 46 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 # ã®è²¬ä»»ãè² ããªãï¼ 52 # 53 # $Id: pass1.rb 1011 2016-07-11 02:20:01Z coas-nagasima $ 54 # 55 56 # 57 # ãã¹1ã®å¦ç 58 # 59 60 # 61 # å¤åå¾ã·ã³ãã«ãã¼ãã«ã¸ã®åºå®ç»é² 9 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 10 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 11 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 12 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 # スコード中に含まれていること. 15 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 # の無保証規定を掲載すること. 19 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 21 # と. 22 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 23 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 24 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 25 # 報告すること. 26 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 27 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 28 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 29 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 30 # 免責すること. 31 # 32 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 # の責任を負わない. 37 # 38 # $Id$ 39 # 40 41 # 42 # パス1の処理 43 # 44 45 # 46 # 値取得シンボルテーブルへの固定登録 62 47 # 63 48 $symbolValueTable = { … … 80 65 81 66 # 82 # éçAPIãã¼ãã«ã¸ã®åºå®ç»é²67 # 静的APIテーブルへの固定登録 83 68 # 84 69 $apiDefinition = { "INCLUDE" => … … 86 71 87 72 # 88 # éçAPIãã¼ãã«ã®èªã¿è¾¼ã¿73 # 静的APIテーブルの読み込み 89 74 # 90 75 def ReadApiTableFile … … 102 87 apiFile = File.open(apiTableFileName) 103 88 apiFile.each do |line| 104 next if /^#/ =~ line # ã³ã¡ã³ããã¹ããã105 106 fields = line.split(/\s+/) # ãã£ã¼ã«ãã«å解107 108 apiName = fields.shift # API åã®åãåºã89 next if /^#/ =~ line # コメントをスキップ 90 91 fields = line.split(/\s+/) # フィールドに分解 92 93 apiName = fields.shift # API名の取り出し 109 94 if /^(.+)\[(.+)\]$/ =~ apiName 110 95 apiName = $1 … … 127 112 128 113 case prefix 129 when "#" # ãªãã¸ã§ã¯ãèå¥åï¼å®ç¾©ï¼114 when "#" # オブジェクト識別名(定義) 130 115 apiParam[:ID_DEF] = true 131 when "%" # ãªãã¸ã§ã¯ãèå¥åï¼åç 132 §ï¼ 116 when "%" # オブジェクト識別名(参照) 133 117 apiParam[:ID_REF] = true 134 when "." # 符å·ç¡ãæ´æ°å®æ°å¼ãã©ã¡ã¼ã¿118 when "." # 符号無し整数定数式パラメータ 135 119 apiParam[:EXPTYPE] = "unsigned_t" 136 when "+" # 符å·ä»ãæ´æ°å®æ°å¼ãã©ã¡ã¼ã¿120 when "+" # 符号付き整数定数式パラメータ 137 121 apiParam[:EXPTYPE] = "signed_t" 138 122 apiParam[:SIGNED] = true 139 when "&" # ä¸è¬æ´æ°å®æ°å¼ãã©ã¡ã¼ã¿123 when "&" # 一般整数定数式パラメータ 140 124 # do nothing 141 when "$" # æååå®æ°å¼ãã©ã¡ã¼ã¿125 when "$" # 文字列定数式パラメータ 142 126 apiParam[:STRING] = true 143 127 else … … 146 130 147 131 case postfix 148 when "*" # ãã¼ã決ãããã©ã¡ã¼ã¿132 when "*" # キーを決めるパラメータ 149 133 apiDef[:KEYPAR] = name 150 when "?" # ãªãã·ã§ã³ãã©ã¡ã¼ã¿134 when "?" # オプションパラメータ 151 135 apiParam[:OPTIONAL] = true 152 when "\.\.\." # ãªã¹ããã©ã¡ã¼ã¿136 when "\.\.\." # リストパラメータ 153 137 apiParam[:LIST] = true 154 138 end … … 175 159 176 160 # 177 # å¤åå¾ã·ã³ãã«ãã¼ãã«ã®èªã¿è¾¼ã¿161 # 値取得シンボルテーブルの読み込み 178 162 # 179 163 def ReadSymvalTable … … 186 170 symvalCsv = CSV.open(symvalTableFileName) 187 171 symvalCsv.each do |record| 188 # å¤æ°å172 # 変数名 189 173 if record[0].nil? 190 174 error_exit("invalid variable name in `#{fileName}'") … … 194 178 variable = record[0] 195 179 196 # å¼180 # 式 197 181 if record[1].nil? || record[1].empty? 198 182 symbol[:EXPR] = variable … … 201 185 end 202 186 203 # å¼ã®å187 # 式の型 204 188 if !record[2].nil? && !record[2].empty? 205 189 case record[2] 206 when /^[bB]/ # çå½å¤190 when /^[bB]/ # 真偽値 207 191 symbol[:BOOL] = true 208 when /^[uU]/ # 符å·ç¡ãæ´æ°å¤209 # ä½ãè¨å®ããªã210 else # 符å·ä»ãæ´æ°å¤192 when /^[uU]/ # 符号無し整数値 193 # 何も設定しない 194 else # 符号付き整数値 211 195 symbol[:SIGNED] = true 212 196 end 213 197 end 214 198 215 # ã³ã³ãã¤ã«æ¡ä»¶199 # コンパイル条件 216 200 if !record[3].nil? && !record[3].empty? 217 201 symbol[:CONDITION] = record[3] 218 202 end 219 203 220 # æ¡ä»¶ãæç«ããªãæã®å¼204 # 条件が成立しない時の式 221 205 if !record[4].nil? && !record[4].empty? 222 206 symbol[:ELSE_EXPR] = record[4] … … 230 214 231 215 # 232 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ããã®èªã¿è¾¼ã¿ã¯ã©ã¹216 # システムコンフィギュレーションファイルからの読み込みクラス 233 217 # 234 218 class ConfigFile … … 256 240 if @withinComment 257 241 case line 258 when /\*\// # C è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãçµäº259 line.sub!(/^.*?\*\//, "") # æåã®*/ã«ãããããã*/242 when /\*\// # C言語スタイルのコメント終了 243 line.sub!(/^.*?\*\//, "") # 最初の*/にマッチさせる */ 260 244 @withinComment = false 261 245 else … … 264 248 end 265 249 if !@withinComment 266 line.gsub!(/\/\*.*?\*\//, "") # C è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãã®é¤å»267 # æåã®*/ã«ãããããã*/250 line.gsub!(/\/\*.*?\*\//, "") # C言語スタイルのコメントの除去 251 # 最初の*/にマッチさせる */ 268 252 case line 269 when /^\s*#/ # ããªããã»ããµãã£ã¬ã¯ãã£ã253 when /^\s*#/ # プリプロセッサディレクティブ 270 254 if withinApi 271 255 parse_error(self, \ … … 273 257 line = "" 274 258 end 275 when /\/\*/ # C è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãéå§259 when /\/\*/ # C言語スタイルのコメント開始 276 260 line.sub!(/\/\*.*$/, "") 277 261 @withinComment = true 278 when /\/\// # C++ è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ã262 when /\/\// # C++言語スタイルのコメント 279 263 line.sub!(/\/\/.*$/, "") 280 264 end … … 293 277 294 278 # 295 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ãã¼ãµã¼ã¯ã©ã¹279 # システムコンフィギュレーションファイルのパーサークラス 296 280 # 297 281 class CfgParser … … 303 287 def initialize 304 288 @line = "" 305 @skipComma = false # 次ã,ã§ããã°èªã¿é£ã°ã306 end 307 308 # 309 # æååæ«ã¾ã§èªã289 @skipComma = false # 次が,であれば読み飛ばす 290 end 291 292 # 293 # 文字列末まで読む 310 294 # 311 295 def parseString(cfgFile) … … 313 297 begin 314 298 case @line 315 when /^([^"]*\\\\)(.*)$/ # \\ ã¾ã§èªã299 when /^([^"]*\\\\)(.*)$/ # \\まで読む 316 300 string += $1 317 301 @line = $2 318 when /^([^"]*\\\")(.*)$/ # \" ã¾ã§èªã302 when /^([^"]*\\\")(.*)$/ # \"まで読む 319 303 string += $1 320 304 @line = $2 321 when /^([^"]*\")(.*)$/ # " ã¾ã§èªã305 when /^([^"]*\")(.*)$/ # "まで読む 322 306 string += $1 323 307 @line = $2 324 308 return(string) 325 else # è¡æ«ã¾ã§èªã309 else # 行末まで読む 326 310 string += @line + "\n" 327 311 @line = cfgFile.getNextLine(true) … … 333 317 334 318 # 335 # æåæ«ã¾ã§èªã319 # 文字末まで読む 336 320 # 337 321 def parseChar(cfgFile) … … 339 323 begin 340 324 case @line 341 when /^([^']*\\\\)(.*)$/ # \\ ã¾ã§èªã325 when /^([^']*\\\\)(.*)$/ # \\まで読む 342 326 string += $1 343 327 @line = $2 344 when /^([^']*\\\')(.*)$/ # \' ã¾ã§èªã328 when /^([^']*\\\')(.*)$/ # \'まで読む 345 329 string += $1 346 330 @line = $2 347 when /^([^']*\')(.*)$/ # ' ã¾ã§èªã331 when /^([^']*\')(.*)$/ # 'まで読む 348 332 string += $1 349 333 @line = $2 350 334 return(string) 351 else # è¡æ«ã¾ã§èªã335 else # 行末まで読む 352 336 string += @line + "\n" 353 337 @line = cfgFile.getNextLine(true) … … 359 343 360 344 # 361 # æ¹è¡ã¨ç©ºç½æåãèªã¿é£ã°ã345 # 改行と空白文字を読み飛ばす 362 346 # 363 347 def skipSpace(cfgFile, withinApi) 364 348 loop do 365 return if @line.nil? # ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³ 366 @line.lstrip! # å 367 é ã®ç©ºç½ãåé¤ 368 return if @line != "" # 空è¡ã§ãªããã°ãªã¿ã¼ã³ 369 @line = cfgFile.getNextLine(withinApi) # 次ã®è¡ãèªã 370 end 371 end 372 373 # 374 # 次ã®æåã¾ã§èªã¿é£ã°ã 349 return if @line.nil? # ファイル末であればリターン 350 @line.lstrip! # 先頭の空白を削除 351 return if @line != "" # 空行でなければリターン 352 @line = cfgFile.getNextLine(withinApi) # 次の行を読む 353 end 354 end 355 356 # 357 # 次の文字まで読み飛ばす 375 358 # 376 359 def skipToToken(cfgFile, withinApi=true) 377 360 skipSpace(cfgFile, withinApi) 378 if @line.nil? # ãã¡ã¤ã«æ«ã§ããã°ã¨ã©ã¼çµäº361 if @line.nil? # ファイル末であればエラー終了 379 362 error_exit("unexpexced end-of-file") 380 363 end … … 382 365 383 366 # 384 # ãã©ã¡ã¼ã¿ã1ã¤èªã 385 # 386 # @lineã®å 387 é ãããã©ã¡ã¼ã¿ã1ã¤èªãã§ï¼ãããæååã§è¿ãï¼èªãã ã 388 # ã©ã¡ã¼ã¿ã¯ï¼@lineããã¯åé¤ããï¼ãã©ã¡ã¼ã¿ã®éä¸ã§è¡æ«ã«éããæã¯ï¼ 389 # cfgFileãã次ã®è¡ãåãåºãï¼ãã¡ã¤ã«æ«ã«éããæã¯ï¼nilãè¿ãï¼ 367 # パラメータを1つ読む 368 # 369 # @lineの先頭からパラメータを1つ読んで,それを文字列で返す.読んだパ 370 # ラメータは,@lineからは削除する.パラメータの途中で行末に達した時は, 371 # cfgFileから次の行を取り出す.ファイル末に達した時は,nilを返す. 390 372 # 391 373 def parseParam(cfgFile) 392 param = "" # èªãã æåå393 parenLevel = 0 # æ¬å¼§ã®ãã¹ãã¬ãã«374 param = "" # 読んだ文字列 375 parenLevel = 0 # 括弧のネストレベル 394 376 skipComma = @skipComma 395 377 @skipComma = false 396 378 397 skipToToken(cfgFile) # 次ã®æåã¾ã§èªã¿é£ã°ã379 skipToToken(cfgFile) # 次の文字まで読み飛ばす 398 380 begin 399 381 if parenLevel == 0 … … 403 385 if param == "" && skipComma 404 386 skipComma = false 405 return(parseParam(cfgFile)) # å帰å¼ã³åºã387 return(parseParam(cfgFile)) # 再帰呼び出し 406 388 else 407 389 return(param.strip) … … 418 400 @line = $2 419 401 parenLevel += 1 420 when /^(\s*([)}]))(.*)$/ # } ã)402 when /^(\s*([)}]))(.*)$/ # }か) 421 403 if param != "" 422 404 return(param.strip) … … 432 414 @line = $2 433 415 param += $1 + parseChar(cfgFile) 434 when /^(\s*[^,{}()"'\s]+)(.*)$/ # ãã®ä»ã®æåå416 when /^(\s*[^,{}()"'\s]+)(.*)$/ # その他の文字列 435 417 param += $1 436 418 @line = $2 437 else # è¡æ«419 else # 行末 438 420 param += " " 439 421 @line = cfgFile.getNextLine(true) 440 422 end 441 423 else 442 # æ¬å¼§å 443 ã®å¦ç 424 # 括弧内の処理 444 425 case @line 445 426 when /^(\s*\()(.*)$/ # "(" … … 457 438 @line = $2 458 439 param += $1 + parseChar(cfgFile) 459 when /^(\s*[^()"'\s]+)(.*)$/ # ãã®ä»ã®æåå440 when /^(\s*[^()"'\s]+)(.*)$/ # その他の文字列 460 441 param += $1 461 442 @line = $2 462 else # è¡æ«443 else # 行末 463 444 param += " " 464 445 @line = cfgFile.getNextLine(true) … … 492 473 493 474 def parseApi(cfgFile, apiName) 494 # éçAPIã®èªã¿è¾¼ã¿475 # 静的APIの読み込み 495 476 staticApi = {} 496 477 tooFewParams = false 497 478 skipUntilBrace = 0 498 479 499 skipToToken(cfgFile) # 次ã®æåã¾ã§èªã¿é£ã°ã480 skipToToken(cfgFile) # 次の文字まで読み飛ばす 500 481 if (/^\((.*)$/ =~ @line) 501 482 @line = $1 … … 508 489 509 490 apiDef[:PARAM].each do |apiParam| 510 return(staticApi) if param.nil? # ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³491 return(staticApi) if param.nil? # ファイル末であればリターン 511 492 512 493 if skipUntilBrace > 0 513 # API å®ç¾©ã}ã¾ã§ã¹ãããä¸494 # API定義を}までスキップ中 514 495 if apiParam.has_key?(:BRACE) 515 496 case apiParam[:BRACE] … … 533 514 staticApi[apiParam[:NAME]].push(getParam(apiParam, param, cfgFile)) 534 515 param = parseParam(cfgFile) 535 break if param.nil? # ãã¡ã¤ã«æ«ã®å ´å516 break if param.nil? # ファイル末の場合 536 517 end 537 518 elsif apiParam.has_key?(:OPTBRACE) 538 519 if param == apiParam[:BRACE] 539 520 param = parseParam(cfgFile) 540 break if param.nil? # ãã¡ã¤ã«æ«ã®å ´å521 break if param.nil? # ファイル末の場合 541 522 else 542 523 if param == "" 543 524 param = parseParam(cfgFile) 544 break if param.nil? # ãã¡ã¤ã«æ«ã®å ´å525 break if param.nil? # ファイル末の場合 545 526 elsif /^([})])$/ !~ param 546 527 parse_error(cfgFile, "`{...}' expected before #{param}") 547 528 end 548 skipUntilBrace += 1 # API å®ç¾©ã}ã¾ã§ã¹ããã529 skipUntilBrace += 1 # API定義を}までスキップ 549 530 end 550 531 elsif !apiParam.has_key?(:BRACE) … … 561 542 else 562 543 parse_error(cfgFile, "`#{apiParam[:BRACE]}' expected before #{param}") 563 # ) ããã¡ã¤ã«æ«ã¾ã§èªã¿é£ã°ã544 # )かファイル末まで読み飛ばす 564 545 loop do 565 546 param = parseParam(cfgFile) … … 570 551 end 571 552 572 # æå¾ 573 ããããã©ã¡ã¼ã¿ããã¹ã¦èªãã å¾ã®å¦ç 553 # 期待されるパラメータをすべて読んだ後の処理 574 554 if param != ")" 575 555 begin 576 556 param = parseParam(cfgFile) 577 return(staticApi) if param.nil? # ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³557 return(staticApi) if param.nil? # ファイル末であればリターン 578 558 end while param != ")" 579 559 parse_error(cfgFile, "too many parameters before `)'") … … 587 567 588 568 def parseOpenBrace(cfgFile) 589 # { ã®èªã¿è¾¼ã¿590 skipToToken(cfgFile) # 次ã®æåã¾ã§èªã¿é£ã°ã569 # {の読み込み 570 skipToToken(cfgFile) # 次の文字まで読み飛ばす 591 571 if (/^\{(.*)$/ =~ @line) 592 572 @line = $1 … … 602 582 cfgFile = cfgFiles.last 603 583 604 skipSpace(cfgFile, false) # æ¹è¡ã¨ç©ºç½æåãèªã¿é£ã°ã584 skipSpace(cfgFile, false) # 改行と空白文字を読み飛ばす 605 585 if @line.nil? 606 # ãã¡ã¤ã«æ«ã®å¦ç586 # ファイル末の処理 607 587 cfgFiles.pop.close 608 588 if cfgFiles.empty? 609 break # ãã¼ã¹å¦ççµäº589 break # パース処理終了 610 590 else 611 @line = "" # å 612 ã®ãã¡ã¤ã«ã«æ»ã£ã¦ç¶ãã 591 @line = "" # 元のファイルに戻って続ける 613 592 end 614 593 elsif /^;(.*)$/ =~ @line 615 # ; ã¯èªã¿é£ã°ã594 # ;は読み飛ばす 616 595 @line = $1 617 596 elsif /^#/ =~ @line 618 # ããªããã»ããµãã£ã¬ã¯ãã£ããèªã597 # プリプロセッサディレクティブを読む 619 598 case @line 620 599 when /^#include\b(.*)$/ … … 655 634 if !$domainId.has_key?(domid) 656 635 if $inputObjid.has_key?(domid) 657 # IDçªå·å 658 ¥åãã¡ã¤ã«ã«å®ç¾©ããã¦ããå ´å 636 # ID番号入力ファイルに定義されていた場合 659 637 $domainId[domid] = $inputObjid[domid] 660 638 if $domainId[domid] > 32 … … 683 661 else 684 662 if $apiDefinition.has_key?(apiName) 685 # éçAPIã1ã¤èªã663 # 静的APIを1つ読む 686 664 staticApi = parseApi(cfgFile, apiName) 687 665 if staticApi.empty? 688 # ãã¡ã¤ã«æ«ãææ³ã¨ã©ã¼666 # ファイル末か文法エラー 689 667 elsif (staticApi[:APINAME] == "INCLUDE") 690 # INCLUDE ã®å¦ç668 # INCLUDEの処理 691 669 includeFilePath = SearchFilePath(staticApi[:file]) 692 670 if includeFilePath.nil? … … 697 675 end 698 676 else 699 # éçAPIã®å¦ç677 # 静的APIの処理 700 678 if !@@currentDomain.nil? 701 679 staticApi[:DOMAIN] = @@currentDomain … … 714 692 end 715 693 elsif (/^\}(.*)$/ =~ @line) 716 # } ã®å¦ç694 # }の処理 717 695 if @@nestDC.size > 0 718 696 case @@nestDC.pop … … 735 713 736 714 # 737 # cfg1_out.c ã®çæ715 # cfg1_out.cの生成 738 716 # 739 717 module Cfg1OutC 740 718 # 741 # éçAPIã®ãã¡ã¤ã«åã¨è¡çªå·ã®åºå719 # 静的APIのファイル名と行番号の出力 742 720 # 743 721 def self.OutLineNumber(cfgInfo) … … 746 724 747 725 # 748 # ã¯ã©ã¹è¨è¿°ã®ãã¡ã¤ã«åã¨è¡çªå·ã®åºå726 # クラス記述のファイル名と行番号の出力 749 727 # 750 728 def self.OutClassLineNumber(cfgInfo) … … 753 731 754 732 # 755 # ãã©ã¡ã¼ã¿ã«é¢ããå®ç¾©ã®åºå733 # パラメータに関する定義の出力 756 734 # 757 735 def self.OutParamDef(param, index, apiParam, cfgInfo) … … 767 745 768 746 # 769 # cfg1_out.c ã®çæï¼ã¡ã¤ã³ã®å¦çï¼747 # cfg1_out.cの生成(メインの処理) 770 748 # 771 749 def self.Generate … … 778 756 EOS 779 757 780 # ã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«758 # インクルードヘッダファイル 781 759 $includeFiles.each do |file| 782 760 @cfg1Out.add("#include #{file}") … … 800 778 EOS 801 779 802 # å¤åå¾ã·ã³ãã«ã®å¦ç780 # 値取得シンボルの処理 803 781 $symbolValueTable.each do |symbolName, symbolData| 804 782 if symbolData.has_key?(:BOOL) || symbolData.has_key?(:SIGNED) … … 823 801 @cfg1Out.add 824 802 825 # ãã¡ã¤ã³IDã®å®ç¾©ã®çæ803 # ドメインIDの定義の生成 826 804 $domainId.each do |domainName, domainVal| 827 805 if domainVal > 0 … … 831 809 @cfg1Out.add 832 810 833 # éçAPIï¼ããªããã»ããµãã£ã¬ã¯ãã£ãã®å¦ç811 # 静的API/プリプロセッサディレクティブの処理 834 812 $cfgFileInfo.each do |cfgInfo| 835 813 if cfgInfo.has_key?(:DIRECTIVE) … … 844 822 next unless apiParam.has_key?(:NAME) 845 823 paramName = apiParam[:NAME] 846 next unless cfgInfo.has_key?(paramName) # ãã©ã¡ã¼ã¿ããªãå ´å824 next unless cfgInfo.has_key?(paramName) # パラメータがない場合 847 825 paramData = cfgInfo[paramName] 848 826 … … 856 834 end 857 835 if cfgInfo.has_key?(:CLASS) 858 # ã¯ã©ã¹IDã®åå¾ã®ããã®å¦ç836 # クラスIDの取得のための処理 859 837 OutClassLineNumber(cfgInfo) 860 838 @cfg1Out.add("const signed_t #{CFG1_PREFIX}valueof_CLASS_" \ … … 868 846 869 847 # 870 # ãã¹1ã®å¦ç848 # パス1の処理 871 849 # 872 850 def Pass1 873 851 # 874 # ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®852 # タイムスタンプファイルの指定 875 853 # 876 854 $timeStampFileName = CFG1_OUT_TIMESTAMP 877 855 878 856 # 879 # éçAPIãã¼ãã«ã®èªã¿è¾¼ã¿857 # 静的APIテーブルの読み込み 880 858 # 881 859 ReadApiTableFile() 882 860 883 861 # 884 # å¤åå¾ã·ã³ãã«ãã¼ãã«ã®èªã¿è¾¼ã¿862 # 値取得シンボルテーブルの読み込み 885 863 # 886 864 ReadSymvalTable() 887 865 888 866 # 889 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®èªã¿è¾¼ã¿867 # システムコンフィギュレーションファイルの読み込み 890 868 # 891 869 $cfgFileInfo = [] … … 896 874 CfgParser.new.parseFile(configFileName) 897 875 end 898 abort if $errorFlag # ã¨ã©ã¼çºçæã¯abortãã899 900 # 901 # ãã¡ã¤ã³IDã®å²å½ã¦å¦ç876 abort if $errorFlag # エラー発生時はabortする 877 878 # 879 # ドメインIDの割当て処理 902 880 # 903 881 nextDomainId = 1 … … 916 894 917 895 # 918 # cfg1_out.c ã®çæ896 # cfg1_out.cの生成 919 897 # 920 898 Cfg1OutC::Generate() 921 899 922 900 # 923 # ä¾åé¢ä¿ã®åºå901 # 依存関係の出力 924 902 # 925 903 if !$dependencyFileName.nil? … … 946 924 947 925 # 948 # ãã¹2ã«å¼ã渡ãæ 949 å ±ããã¡ã¤ã«ã«çæ 926 # パス2に引き渡す情報をファイルに生成 950 927 # 951 928 if $omitOutputDb.nil? -
Property svn:mime-type
changed from
-
EcnlProtoTool/trunk/asp3_dcre/cfg/pass2.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r270 r321 7 7 # Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 # 9 # ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 # å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 # ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 # è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 # ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 # ã¨ï¼ 28 # (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 # (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 # å ±åãããã¨ï¼ 36 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 # 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 # å 44 責ãããã¨ï¼ 45 # 46 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 # ã®è²¬ä»»ãè² ããªãï¼ 52 # 53 # $Id: pass2.rb 1011 2016-07-11 02:20:01Z coas-nagasima $ 54 # 55 56 # 57 # ãã¹2ã®å¦ç 58 # 59 60 # 61 # ãã¹1ã®çæç©ã®èªã¿è¾¼ã¿ 9 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 10 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 11 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 12 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 # スコード中に含まれていること. 15 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 # の無保証規定を掲載すること. 19 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 21 # と. 22 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 23 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 24 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 25 # 報告すること. 26 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 27 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 28 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 29 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 30 # 免責すること. 31 # 32 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 # の責任を負わない. 37 # 38 # $Id$ 39 # 40 41 # 42 # パス2の処理 43 # 44 45 # 46 # パス1の生成物の読み込み 62 47 # 63 48 module Cfg1Out 64 49 # 65 # S ã¬ã³ã¼ããã¡ã¤ã«ããã·ã³ãã«ã®å¤ãåãåºã50 # Sレコードファイルからシンボルの値を取り出す 66 51 # 67 52 def self.GetSymbolValue(symbol, size, signed) … … 74 59 75 60 # 76 # ãã¹1ã®çæç©ã®èªã¿è¾¼ã¿ï¼ã¡ã¤ã³ã®å¦çï¼61 # パス1の生成物の読み込み(メインの処理) 77 62 # 78 63 def self.Read 79 # cfg1_out.syms ã®èªã¿è¾¼ã¿64 # cfg1_out.symsの読み込み 80 65 @symbolAddress = ReadSymbolFile(CFG1_OUT_SYMS) 81 66 82 # cfg1_out.srec ã®èªã¿è¾¼ã¿67 # cfg1_out.srecの読み込み 83 68 begin 84 69 @cfg1SRec = SRecord.new(CFG1_OUT_SREC) … … 87 72 end 88 73 89 # ãã¸ãã¯ãã³ãã¼ã®åå¾74 # マジックナンバーの取得 90 75 if @symbolAddress.has_key?(CFG1_MAGIC_NUM) 91 76 $asmLabel = "" … … 108 93 end 109 94 110 # åºå®åºåããå¤æ°ã®åå¾95 # 固定出力した変数の取得 111 96 $sizeOfSigned = GetSymbolValue($asmLabel + CFG1_SIZEOF_SIGNED, 4, false) 112 97 113 # å¤åå¾ã·ã³ãã«ã®åå¾98 # 値取得シンボルの取得 114 99 $symbolValueTable.each do |symbolName, symbolData| 115 100 symbol = $cfg1_prefix + symbolName … … 117 102 value = GetSymbolValue(symbol, $sizeOfSigned, true) 118 103 if !value.nil? 119 # C è¨èªã®çå½å¤ãRubyã®çå½å¤ã«å¤æãã¦åãè¾¼ã104 # C言語の真偽値をRubyの真偽値に変換して取り込む 120 105 symbolData[:VALUE] = (value != 0) 121 106 end … … 130 115 131 116 # 132 # ããã·ã¥ã®åæå117 # ハッシュの初期化 133 118 # 134 119 $cfgData = {} … … 148 133 149 134 # 150 # ãã¡ã¤ã³çæãã¼ã¿ãã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¼ã¿ï¼$cfgDataï¼ã«æ ¼ç´135 # ドメイン生成データをコンフィギュレーションデータ($cfgData)に格納 151 136 # 152 137 $cfgData[:CRE_DOM] = {} … … 160 145 161 146 # 162 # ãã©ã¡ã¼ã¿ã®å¤ãåãåºã147 # パラメータの値を取り出す 163 148 # 164 149 def self.GetParamValue(paramName, param, apiIndex, index, apiParam, cfgInfo) 165 if apiParam.has_key?(:ID_DEF) # ãªãã¸ã§ã¯ãèå¥åï¼å®ç¾©ï¼150 if apiParam.has_key?(:ID_DEF) # オブジェクト識別名(定義) 166 151 value = @objidValues[paramName][param] 167 elsif apiParam.has_key?(:ID_REF) # ãªãã¸ã§ã¯ãèå¥åï¼åç 168 §ï¼ 152 elsif apiParam.has_key?(:ID_REF) # オブジェクト識別名(参照) 169 153 if @objidValues[paramName].has_key?(param) 170 154 value = @objidValues[paramName][param] … … 175 159 value = nil 176 160 end 177 elsif apiParam.has_key?(:EXPTYPE) # æ´æ°å®æ°å¼ãã©ã¡ã¼ã¿161 elsif apiParam.has_key?(:EXPTYPE) # 整数定数式パラメータ 178 162 if apiIndex.nil? 179 163 if param.is_a?(NumStr) … … 187 171 apiParam.has_key?(:SIGNED)) 188 172 end 189 else # ä¸è¬å®æ°å¼ï¼æååãã©ã¡ã¼ã¿173 else # 一般定数式/文字列パラメータ 190 174 return(param) 191 175 end … … 194 178 195 179 # 196 # æå®ãããã§ã¼ãºã®ããã®ãã¹1ã®çæç©ã®èªã¿è¾¼ã¿180 # 指定したフェーズのためのパス1の生成物の読み込み 197 181 # 198 182 def self.ReadPhase(phase) 199 183 # 200 # ãªãã¸ã§ã¯ãIDã®å²å½ã¦ 201 # 202 # å²ãå½ã¦ããªãã¸ã§ã¯ãIDã¯ï¼@objidValuesã«ä¿æããï¼@objidValuesã¯ï¼ 203 # 2éã®ããã·ã¥ï¼ããã·ã¥ã®ããã·ã¥ï¼ã§ããï¼ 204 # 205 # å 206 ·ä½çã«ã¯ï¼@objidValuesã¯ï¼ãªãã¸ã§ã¯ãIDã®ãã©ã¡ã¼ã¿åï¼ä¾ãã°ï¼ã» 207 # ããã©IDã§ããã°"semid"ï¼ãããä¿æããå¤æ°åã¯ï¼objidParamNameã¨ã 208 # ãï¼ããã¼ã¨ãï¼ãã®ãªãã¸ã§ã¯ãIDã®å²å½ã¦è¡¨ï¼ãããä¿æããå¤æ°å 209 # ã¯ï¼objidListã¨ããï¼ãå¤ã¨ããããã·ã¥ã§ããï¼ãªãã¸ã§ã¯ãIDã®å²å½ 210 # ã¦è¡¨ã¯ï¼ãªãã¸ã§ã¯ãåï¼ãããä¿æããå¤æ°åã¯ï¼objNameã¨ããï¼ããã¼ 211 # ã¨ãï¼ãã®IDçªå·ï¼ãããä¿æããå¤æ°åã¯ï¼objidNumberã¨ããï¼ãå¤ã¨ 212 # ããããã·ã¥ã§ããï¼ 213 # 214 # ä¾ãã°ï¼ã»ããã©SEM1ã®IDçªå·ã1ã®å ´åã«ã¯ï¼æ¬¡ã®ããã«è¨å®ãããï¼ 184 # オブジェクトIDの割当て 185 # 186 # 割り当てたオブジェクトIDは,@objidValuesに保持する.@objidValuesは, 187 # 2重のハッシュ(ハッシュのハッシュ)である. 188 # 189 # 具体的には,@objidValuesは,オブジェクトIDのパラメータ名(例えば,セ 190 # マフォIDであれば"semid".これを保持する変数名は,objidParamNameとす 191 # る)をキーとし,そのオブジェクトIDの割当て表(これを保持する変数名 192 # は,objidListとする)を値とするハッシュである.オブジェクトIDの割当 193 # て表は,オブジェクト名(これを保持する変数名は,objNameとする)をキー 194 # とし,そのID番号(これを保持する変数名は,objidNumberとする)を値と 195 # するハッシュである. 196 # 197 # 例えば,セマフォSEM1のID番号が1の場合には,次のように設定される. 215 198 # @objidValues["semid"]["SEM1"] == 1 216 199 # 217 200 218 # ID çªå·å²ãå½ã¦ã®åå¦ç201 # ID番号割り当ての前処理 219 202 objidParamNameList = [] 220 203 $cfgFileInfo.each do |cfgInfo| 221 # ããªããã»ããµãã£ã¬ã¯ãã£ãã¯èªã¿é£ã°ã204 # プリプロセッサディレクティブは読み飛ばす 222 205 next if cfgInfo.has_key?(:DIRECTIVE) 223 206 224 207 apiDef = $apiDefinition[cfgInfo[:APINAME]] 225 # ç°ãªããã§ã¼ãºã®éçAPIã¯èªã¿é£ã°ã208 # 異なるフェーズの静的APIは読み飛ばす 226 209 next if apiDef[:PHASE] != phase 227 210 228 211 apiIndex = cfgInfo[:INDEX] 229 212 if !apiIndex.nil? 230 # ã·ã³ãã«ãã¡ã¤ã«ã«éçAPIã®ã¤ã³ããã¯ã¹ãåå¨ããªããã°èªã¿é£231 # ã°ãï¼ifdefçã§æ¶ããéçAPIï¼213 # シンボルファイルに静的APIのインデックスが存在しなければ読み飛 214 # ばす(ifdef等で消えた静的API) 232 215 symbol = "#{$cfg1_prefix}static_api_#{apiIndex}" 233 216 next unless @symbolAddress.has_key?(symbol) … … 239 222 objName = cfgInfo[objidParamName] 240 223 if $inputObjid.has_key?(objName) 241 # IDçªå·å 242 ¥åãã¡ã¤ã«ã«å®ç¾©ããã¦ããå ´å 224 # ID番号入力ファイルに定義されていた場合 243 225 @objidValues[objidParamName][objName] = $inputObjid[objName] 244 226 else … … 250 232 end 251 233 252 # ID çªå·ã®å²å½ã¦å¦ç234 # ID番号の割当て処理 253 235 objidParamNameList.each do |objidParamName| 254 236 objidList = @objidValues[objidParamName] 255 237 256 # æªä½¿ç¨ã®IDçªå·ã®ãªã¹ãï¼ä½¿ç¨ãããã®ããæ¶ãã¦ããï¼238 # 未使用のID番号のリスト(使用したものから消していく) 257 239 unusedObjidList = (1.upto(objidList.keys.size)).to_a 258 240 259 # å²ãå½ã¦æ¸ã¿ã®IDçªå·ã®å¦ç241 # 割り当て済みのID番号の処理 260 242 objidList.each do |objName, objidNumber| 261 243 if $inputObjid.has_key?(objName) 262 244 objidIndex = unusedObjidList.index($inputObjid[objName]) 263 245 if objidIndex.nil? 264 # IDçªå·å 265 ¥åãã¡ã¤ã«ã§æå®ãããå¤ãä¸æ£ 246 # ID番号入力ファイルで指定された値が不正 266 247 error_exit("value of `#{objName}' in ID input file is illegal") 267 248 else 268 # æªä½¿ç¨ã®IDçªå·ã®ãªã¹ãããåé¤249 # 未使用のID番号のリストから削除 269 250 unusedObjidList.delete_at(objidIndex) 270 251 end … … 272 253 end 273 254 274 # ID çªå·ã®å²å½ã¦255 # ID番号の割当て 275 256 objidList.each do |objName, objidNumber| 276 257 if objidList[objName].nil? 277 # 以ä¸ã§ï¼@objidValuesãæ¸ãæãã¦ãã258 # 以下で,@objidValuesを書き換えている 278 259 objidList[objName] = unusedObjidList.shift 279 260 end … … 282 263 283 264 # 284 # éçAPIãã¼ã¿ãã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¼ã¿ï¼$cfgDataï¼ã«æ ¼ç´265 # 静的APIデータをコンフィギュレーションデータ($cfgData)に格納 285 266 # 286 267 $cfgFileInfo.each do |cfgInfo| 287 # ããªããã»ããµãã£ã¬ã¯ãã£ãã¯èªã¿é£ã°ã268 # プリプロセッサディレクティブは読み飛ばす 288 269 next if cfgInfo.has_key?(:DIRECTIVE) 289 270 290 271 apiDef = $apiDefinition[cfgInfo[:APINAME]] 291 # ç°ãªããã§ã¼ãºã®éçAPIã¯èªã¿é£ã°ã272 # 異なるフェーズの静的APIは読み飛ばす 292 273 next if apiDef[:PHASE] != phase 293 274 … … 295 276 apiIndex = cfgInfo[:INDEX] 296 277 if !apiIndex.nil? 297 # ã·ã³ãã«ãã¡ã¤ã«ã«éçAPIã®ã¤ã³ããã¯ã¹ãåå¨ããªããã°èªã¿é£298 # ã°ãï¼ifdefçã§æ¶ããéçAPIï¼278 # シンボルファイルに静的APIのインデックスが存在しなければ読み飛 279 # ばす(ifdef等で消えた静的API) 299 280 symbol = "#{$cfg1_prefix}static_api_#{apiIndex}" 300 281 next unless @symbolAddress.has_key?(symbol) 301 282 end 302 283 303 # ãã©ã¡ã¼ã¿ã®å¤ãããã·ã¥å½¢å¼ã«æ ¼ç´284 # パラメータの値をハッシュ形式に格納 304 285 params = {} 305 286 apiDef[:PARAM].each do |apiParam| 306 287 next unless apiParam.has_key?(:NAME) 307 288 paramName = apiParam[:NAME] 308 next unless cfgInfo.has_key?(paramName) # ãã©ã¡ã¼ã¿ããªãå ´å289 next unless cfgInfo.has_key?(paramName) # パラメータがない場合 309 290 paramData = cfgInfo[paramName] 310 291 … … 321 302 end 322 303 323 # ãã¡ã¤ã³IDã追å304 # ドメインIDを追加 324 305 if cfgInfo.has_key?(:DOMAIN) 325 306 domainName = cfgInfo[:DOMAIN] … … 327 308 end 328 309 329 # ã¯ã©ã¹IDã追å310 # クラスIDを追加 330 311 if cfgInfo.has_key?(:CLASS) 331 312 if apiIndex.nil? … … 338 319 end 339 320 340 # API åï¼ãã¡ã¤ã«åï¼è¡çªå·ã追å321 # API名,ファイル名,行番号を追加 341 322 params[:apiname] = cfgInfo[:APINAME] 342 323 params[:_file_] = cfgInfo[:_FILE_] 343 324 params[:_line_] = cfgInfo[:_LINE_] 344 325 345 # ç»é²ãã¼ã決å®ãã326 # 登録キーを決定する 346 327 if apiDef.has_key?(:KEYPAR) 347 328 keyParam = params[apiDef[:KEYPAR].to_sym] 348 329 key = keyParam.val 349 330 if $cfgData[apiSym].has_key?(key) 350 # ç»é²ãã¼ã®éè¤331 # 登録キーの重複 351 332 error("E_OBJ: #{apiDef[:KEYPAR]} `#{keyParam}' " \ 352 333 "is duplicated in #{cfgInfo[:APINAME]}", … … 361 342 362 343 # 363 # ID çªå·åºåãã¡ã¤ã«ã®çæ344 # ID番号出力ファイルの生成 364 345 # 365 346 def self.OutputId(fileName) … … 374 355 375 356 # 376 # ãã¹2ã®å¦ç357 # パス2の処理 377 358 # 378 359 def Pass2 379 360 # 380 # ãã¹1ããå¼ã渡ãããæ 381 å ±ããã¡ã¤ã«ããèªã¿è¾¼ã 361 # パス1から引き渡される情報をファイルから読み込む 382 362 # 383 363 db = PStore.new(CFG1_OUT_DB) … … 392 372 393 373 # 394 # ãã¹1ã®çæç©ãèªã¿è¾¼ã374 # パス1の生成物を読み込む 395 375 # 396 376 Cfg1Out.Read() 397 abort if $errorFlag # ã¨ã©ã¼çºçæã¯abortãã398 399 # 400 # å¤åå¾ã·ã³ãã«ãã°ãã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã377 abort if $errorFlag # エラー発生時はabortする 378 379 # 380 # 値取得シンボルをグローバル変数として定義する 401 381 # 402 382 DefineSymbolValue() 403 383 404 384 # 405 # çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå®è¡ãã385 # 生成スクリプト(trbファイル)を実行する 406 386 # 407 387 $trbFileNames.each do |trbFileName| … … 414 394 415 395 # 416 # ID çªå·åºåãã¡ã¤ã«ã®çæ396 # ID番号出力ファイルの生成 417 397 # 418 398 if !$idOutputFileName.nil? … … 421 401 422 402 # 423 # ãã¹3ã«å¼ã渡ãæ 424 å ±ããã¡ã¤ã«ã«çæ 403 # パス3に引き渡す情報をファイルに生成 425 404 # 426 405 if $omitOutputDb.nil? -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.