Ignore:
Timestamp:
Aug 23, 2017, 9:27:43 AM (7 years ago)
Author:
coas-nagasima
Message:

文字コードを設定

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 to text/x-ruby;charset=UTF-8
    r270 r321  
    88#  Copyright (C) 2016 by APTJ Co., Ltd., JAPAN
    99#
    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#      免責すること.
    4632#
    47 #  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    48 ãŠ
    49 #  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    50 #  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    51 #  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    52 #  の責任を負わない.
     33#  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34#  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35#  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36#  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37#  の責任を負わない.
    5338#
    54 #  $Id: GenFile.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
     39#  $Id$
    5540#
    5641
    5742#
    58 #               ãƒ•ã‚¡ã‚¤ãƒ«ä½œæˆã‚¯ãƒ©ã‚¹
     43#               ファイル作成クラス
    5944#
    6045
    6146#
    62 # ファイルに書こうとしたå†
    63 å®¹ã‚’変数に蓄積し,プログラムの終了時(output
    64 # メソッドが呼ばれた時)にファイルに出力する.既にファイルが存在し,差
    65 # 分がない場合は出力しない(タイムスタンプを更新しない).
     47# ファイルに書こうとした内容を変数に蓄積し,プログラムの終了時(output
     48# メソッドが呼ばれた時)にファイルに出力する.既にファイルが存在し,差
     49# 分がない場合は出力しない(タイムスタンプを更新しない).
    6650#
    6751class GenFile
     
    7559  end
    7660
    77   # ファイルデータの末尾に文字列を追加する
     61  # ファイルデータの末尾に文字列を追加する
    7862  def append(code = "")
    7963    @@fileDataHash[@selfFileName] << code
    8064  end
    8165
    82   # ファイルデータに1行追加する
     66  # ファイルデータに1行追加する
    8367  def add(code = "")
    8468    @@fileDataHash[@selfFileName] << code << "\n"
    8569  end
    8670
    87   # ファイルデータに1行追加する(改行2回)
     71  # ファイルデータに1行追加する(改行2回)
    8872  def add2(code = "")
    8973    add(code + "\n")
    9074  end
    9175
    92   # コメントヘッダを追加する
     76  # コメントヘッダを追加する
    9377  def comment_header(comment)
    9478    add("/*")
     
    9983  end
    10084
    101   # ファイルデータを表示する
     85  # ファイルデータを表示する
    10286  def print()
    10387    puts(@@fileDataHash[@selfFileName])
    10488  end
    10589
    106   # å
    107 ¨ãƒ•ã‚¡ã‚¤ãƒ«ã‚’出力する
     90  # 全ファイルを出力する
    10891  def self.output()
    10992    @@fileDataHash.each do |fileName, fileData|
    110       # 既にファイルが存在し,差分がない場合は出力しない
    111       #(タイムスタンプを更新しない)
     93      # 既にファイルが存在し,差分がない場合は出力しない
     94      #(タイムスタンプを更新しない)
    11295      if File.exist?(fileName)
    11396        if fileData == File.read(fileName)
  • EcnlProtoTool/trunk/asp3_dcre/cfg/SRecord.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r270 r321  
    77#  Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
    88#
    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#      免責すること.
    4531#
    46 #  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    47 ãŠ
    48 #  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    49 #  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    50 #  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    51 #  の責任を負わない.
     32#  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     33#  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     34#  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     35#  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     36#  の責任を負わない.
    5237#
    53 #  $Id: SRecord.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
     38#  $Id$
    5439#
    5540
    5641#
    57 #               Sレコードファイル処理クラス
     42#               Sレコードファイル処理クラス
    5843#
    5944
    6045#
    61 # Sレコードファイルを変数に読み込み,要求された番地のデータを返す.
     46# Sレコードファイルを変数に読み込み,要求された番地のデータを返す.
    6247#
    63 # @sRecDataは,å
    64 ˆé ­ç•ªåœ°ã‚’キーとし,そこからのデータ(ヘキサダンプ形式)
    65 # を値とブロックが格納されたハッシュである.連続するブロックは,1つのブ
    66 # ロックにまとめて格納するものとする(そうしないと,データの取出しやサー
    67 # チが面倒になる).
     48# @sRecDataは,先頭番地をキーとし,そこからのデータ(ヘキサダンプ形式)
     49# を値とブロックが格納されたハッシュである.連続するブロックは,1つのブ
     50# ロックにまとめて格納するものとする(そうしないと,データの取出しやサー
     51# チが面倒になる).
    6852#
    6953class SRecord
     
    7458      prevData = ""
    7559      file.each do |line|
    76         # データレコードにより分岐
     60        # データレコードにより分岐
    7761        case line.slice(0, 2)
    7862        when "S1"
    79           # データ長(アドレス分[2byte]+チェックサム分1byteを減算)
     63          # データ長(アドレス分[2byte]+チェックサム分1byteを減算)
    8064          length = line.slice(2, 2).hex - 2 - 1
    8165
    82           # アドレス(4文字=2byte)
     66          # アドレス(4文字=2byte)
    8367          address = line.slice(4, 4).hex
    8468
    85           # データ(この時点では文字列で取っておく)
     69          # データ(この時点では文字列で取っておく)
    8670          data = line.slice(8, length * 2)
    8771        when "S2"
    88           # データ長(アドレス分[3byte]+チェックサム分1byteを減算)
     72          # データ長(アドレス分[3byte]+チェックサム分1byteを減算)
    8973          length = line.slice(2, 2).hex - 3 - 1
    9074
    91           # アドレス(6文字=3byte)
     75          # アドレス(6文字=3byte)
    9276          address = line.slice(4, 6).hex
    9377
    94           # データ(この時点では文字列で取っておく)
     78          # データ(この時点では文字列で取っておく)
    9579          data = line.slice(10, length * 2)
    9680        when "S3"
    97           # データ長(アドレス分[4byte]+チェックサム分1byteを減算)
     81          # データ長(アドレス分[4byte]+チェックサム分1byteを減算)
    9882          length = line.slice(2, 2).hex - 4 - 1
    9983
    100           # アドレス(8文字=4byte)
     84          # アドレス(8文字=4byte)
    10185          address = line.slice(4, 8).hex
    10286
    103           # データ(この時点では文字列で取っておく)
     87          # データ(この時点では文字列で取っておく)
    10488          data = line.slice(12, length * 2)
    10589        else
     
    10892
    10993        if !address.nil?
    110           # データを格納する
     94          # データを格納する
    11195          if address == prevAddress + prevData.size / 2
    11296            prevData << data
     
    122106  end
    123107
    124   # データ取得
     108  # データ取得
    125109  def get_data(address, size)
    126110    endAddress = address + size
     
    134118  end
    135119
    136   # データ書込み
     120  # データ書込み
    137121  def set_data(address, data)
    138122    endAddress = address + data.size / 2
     
    141125
    142126      if nEndBlock < address || endAddress < block
    143         # 重なりがない
     127        # 重なりがない
    144128      elsif address < block
    145         # 新規データの方がå
    146 ˆé ­ç•ªåœ°ãŒå°ã•ã„
    147         # ここでは endAddress >= block が成立している
     129        # 新規データの方が先頭番地が小さい
     130        # ここでは endAddress >= block が成立している
    148131        offset = (endAddress - block) * 2
    149132        data << blockData[offset..-1]
    150133        @sRecData.delete(block)
    151134      else
    152         # 登録済みデータの方がå
    153 ˆé ­ç•ªåœ°ãŒå°ã•ã„か同じ
     135        # 登録済みデータの方が先頭番地が小さいか同じ
    154136        offset = (address - block) * 2
    155137        address = block
     
    162144  end
    163145
    164   # 値としてのデータ取得
     146  # 値としてのデータ取得
    165147  def get_value(address, size, signed)
    166148    targetData = get_data(address, size)
     
    169151    else
    170152      if $endianLittle
    171         # リトルエンディアンの場合,バイトオーダーを逆にする
     153        # リトルエンディアンの場合,バイトオーダーを逆にする
    172154        reverseData = ""
    173         # 後ろから2文字ずつ抜き出し,並び替える
     155        # 後ろから2文字ずつ抜き出し,並び替える
    174156        while targetData.size > 0
    175157          reverseData << targetData[-2, 2]
     
    181163      end
    182164
    183       # 負の数の処理
     165      # 負の数の処理
    184166      if signed && (returnData & (1 << (size * 8 - 1))) != 0
    185167        returnData -= (1 << (size * 8))
  • EcnlProtoTool/trunk/asp3_dcre/cfg/cfg.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r270 r321  
    88#              Graduate School of Information Science, Nagoya Univ., JAPAN
    99#
    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$
    5540#
    5641
     
    6853
    6954#
    70 #  定数定義
    71 #
    72 # å
    73 ±é€š
     55#  定数定義
     56#
     57# 共通
    7458VERSION = "1.2.2"
    7559
    76 # cfg1_out関係
     60# cfg1_out関係
    7761CFG1_PREFIX        = "TOPPERS_cfg_"
    7862CFG1_MAGIC_NUM     = "TOPPERS_magic_number"
     
    8569CFG1_OUT_TARGET_H  = "target_cfg1_out.h"
    8670
    87 # cfg2_out関係
     71# cfg2_out関係
    8872CFG2_OUT_DB        = "cfg2_out.db"
    8973
    90 # cfg3_out関係
     74# cfg3_out関係
    9175CFG3_OUT_DB        = "cfg3_out.db"
    9276
    9377#
    94 ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿæœ‰ç„¡ãƒ•ãƒ©ã‚°
     78エラー発生有無フラグ
    9579#
    9680$errorFlag = false
    9781
    9882#
    99 ã‚¨ãƒ©ãƒ¼ï¼è­¦å‘Šè¡¨ç¤ºé–¢æ•°
    100 #
    101 # 一般的なエラー表示(処理を中断)
     83エラー/警告表示関数
     84#
     85# 一般的なエラー表示(処理を中断)
    10286def error_exit(message, location = "")
    10387  location += " " if location != ""
     
    10589end
    10690
    107 # 一般的なエラー表示(処理を継続)
     91# 一般的なエラー表示(処理を継続)
    10892def error(message, location = "")
    10993  location += " " if location != ""
     
    11296end
    11397
    114 # 一般的な警告表示
     98# 一般的な警告表示
    11599def warning(message, location = "")
    116100  location += " " if location != ""
     
    118102end
    119103
    120 # システムコンフィギュレーションファイルの構文解析時のエラー
     104# システムコンフィギュレーションファイルの構文解析時のエラー
    121105$noParseError = 0
    122106def parse_error(cfgFile, message)
     
    127111end
    128112
    129 # システムコンフィギュレーションファイルの構文解析時の警告
     113# システムコンフィギュレーションファイルの構文解析時の警告
    130114def parse_warning(cfgFile, message)
    131115  warning(message, "#{cfgFile.getFileName()}:#{cfgFile.getLineNo}:")
     
    133117
    134118#
    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# エラー/警告メッセージの展開
    143127def expand_message(message, params)
    144128  result = message.dup
     
    156140end
    157141
    158 # 静的API処理時のエラー
     142# 静的API処理時のエラー
    159143def error_api(params, message)
    160144  error(expand_message(message, params), \
     
    162146end
    163147
    164 # 静的API処理時の警告
     148# 静的API処理時の警告
    165149def warning_api(params, message)
    166150  warning(expand_message(message, params), \
     
    168152end
    169153
    170 # 静的API処理時のエラー(エラーコード付き)
     154# 静的API処理時のエラー(エラーコード付き)
    171155def error_ercd(errorCode, params, message)
    172156  error_api(params, "#{errorCode}: #{message}")
    173157end
    174158
    175 # 静的API処理時の警告(エラーコード付き)
     159# 静的API処理時の警告(エラーコード付き)
    176160def warning_ercd(errorCode, params, message)
    177161  warning_api(params, "#{errorCode}: #{message}")
    178162end
    179163
    180 # パラメータのエラー
     164# パラメータのエラー
    181165def error_wrong(errorCode, params, symbol, wrong)
    182166  error_ercd(errorCode, params, "%%#{symbol} is #{wrong} in %apiname")
     
    193177end
    194178
    195 # パラメータ不正のエラー
     179# パラメータ不正のエラー
    196180def error_illegal(errorCode, params, symbol)
    197181  error_ercd(errorCode, params, "illegal %%#{symbol} in %apiname")
     
    209193
    210194#
    211 #  Stringクラスの拡張(二重引用符で囲まれた文字列の作成/展開)
     195#  Stringクラスの拡張(二重引用符で囲まれた文字列の作成/展開)
    212196#
    213197class String
    214198  #
    215   #  二重引用符で囲まれた文字列の作成
     199  #  二重引用符で囲まれた文字列の作成
    216200  #
    217201  def quote
     
    249233
    250234  #
    251   #  二重引用符で囲まれた文字列の展開
     235  #  二重引用符で囲まれた文字列の展開
    252236  #
    253237  def unquote
     
    299283
    300284#
    301 #  NumStrクラス(数値に文字列を付加したもの)の定義
     285#  NumStrクラス(数値に文字列を付加したもの)の定義
    302286#
    303287class NumStr
     
    307291  end
    308292
    309   # 数値æƒ
    310 å ±ã‚’返す
     293  # 数値情報を返す
    311294  def val
    312295    return @val
     
    314297  alias_method :to_i, :val
    315298
    316   # 文字列æƒ
    317 å ±ã‚’返す
     299  # 文字列情報を返す
    318300  def str
    319301    return @str
     
    321303  alias_method :to_s, :str
    322304
    323   # 比較は数値æƒ
    324 å ±ã§è¡Œã†
     305  # 比較は数値情報で行う
    325306  def ==(other)
    326307    @val == other
     
    333314  end
    334315
    335   # ハッシュのキーとして使う時の比較も数値æƒ
    336 å ±ã§è¡Œã†
     316  # ハッシュのキーとして使う時の比較も数値情報で行う
    337317  def eql?(other)
    338318    @val == other.val
    339319  end
    340320
    341   # ハッシュ値の定義も上書きする
     321  # ハッシュ値の定義も上書きする
    342322  def hash
    343323    return @val.hash
    344324  end
    345325
    346   # 数値クラスと演算できるようにする
     326  # 数値クラスと演算できるようにする
    347327  def coerce(other)
    348328    if other.kind_of?(Numeric)
     
    353333  end
    354334
    355   # 二重引用符で囲まれた文字列の作成
     335  # 二重引用符で囲まれた文字列の作成
    356336  def quote
    357337    str.quote
    358338  end
    359339
    360   # 二重引用符で囲まれた文字列の展開
     340  # 二重引用符で囲まれた文字列の展開
    361341  def unquote
    362342    str.unquote
    363343  end
    364344
    365   # pp時の表示
     345  # pp時の表示
    366346  def pretty_print(q)
    367347    q.text("[#{@val}(=0x#{@val.to_s(16)}),")
     
    370350  end
    371351
    372   # 未定義のメソッドは@valに送る
     352  # 未定義のメソッドは@valに送る
    373353  def method_missing(*method)
    374354    @val.send(*method)
     
    377357
    378358#
    379 ã‚·ãƒ³ãƒœãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®èª­ã¿è¾¼ã¿
    380 #
    381 ä»¥ä¸‹ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ï¼ŒGNUのnmが生成するシンボルファイルに対応している.
    382 åˆ¥ã®ãƒ„ールに対応する場合には,このメソッドを書き換えればよい.
     359シンボルファイルの読み込み
     360#
     361以下のメソッドは,GNUのnmが生成するシンボルファイルに対応している.
     362別のツールに対応する場合には,このメソッドを書き換えればよい.
    383363#
    384364def ReadSymbolFile(symbolFileName)
     
    391371  symbolAddress = {}
    392372  symbolFile.each do |line|
    393     # スペース区切りで分解
     373    # スペース区切りで分解
    394374    fields = line.split(/\s+/)
    395375
    396     # 3列になっていない行は除外
     376    # 3列になっていない行は除外
    397377    if fields.size == 3
    398378      symbolAddress[fields[2]] = fields[0].hex
     
    404384
    405385#
    406 å€¤å–得シンボルをグローバル変数として定義する
     386値取得シンボルをグローバル変数として定義する
    407387#
    408388def DefineSymbolValue
     
    415395
    416396#
    417 ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ‘スからファイルを探す
     397インクルードパスからファイルを探す
    418398#
    419399def SearchFilePath(fileName)
    420400  if File.exist?(fileName)
    421     # 指定したファイルパスに存在する
     401    # 指定したファイルパスに存在する
    422402    return fileName
    423403  elsif /^\./ =~ fileName
    424     # 相対パスを指定していて見つからなかった場合,存在しないものとする
    425     #(意図しないファイルが対象となることを防止)
     404    # 相対パスを指定していて見つからなかった場合,存在しないものとする
     405    #(意図しないファイルが対象となることを防止)
    426406    return nil
    427407  else
    428     # 各インクルードパスからファイル存在チェック
     408    # 各インクルードパスからファイル存在チェック
    429409    $includeDirectories.each do |includeDirectory|
    430410      path = includeDirectory + "/" + fileName
    431       # 見つかったら相対パスを返す
     411      # 見つかったら相対パスを返す
    432412      if File.exist?(path)
    433413        return path
     
    439419
    440420#
    441 æŒ‡å®šã—た生成スクリプト(trbファイル)を検索してloadする
     421指定した生成スクリプト(trbファイル)を検索してloadする
    442422#
    443423def IncludeTrb(fileName)
     
    451431
    452432#
    453 ãƒ‘ス3の処理
     433パス3の処理
    454434#
    455435def Pass3
    456436  #
    457   #  パス2から引き渡されるæƒ
    458 å ±ã‚’ファイルから読み込む
     437  #  パス2から引き渡される情報をファイルから読み込む
    459438  #
    460439  db = PStore.new(CFG2_OUT_DB)
     
    472451
    473452  #
    474   #  値取得シンボルをグローバル変数として定義する
     453  #  値取得シンボルをグローバル変数として定義する
    475454  #
    476455  DefineSymbolValue()
    477456
    478457  #
    479   #  生成スクリプト(trbファイル)を実行する
     458  #  生成スクリプト(trbファイル)を実行する
    480459  #
    481460  $trbFileNames.each do |trbFileName|
     
    484463
    485464  #
    486   #  パス4に引き渡すæƒ
    487 å ±ã‚’ファイルに生成
     465  #  パス4に引き渡す情報をファイルに生成
    488466  #
    489467  if $omitOutputDb.nil?
     
    503481
    504482#
    505 ãƒ‘ス4の処理
     483パス4の処理
    506484#
    507485def Pass4
    508486  #
    509   #  パス3から引き渡されるæƒ
    510 å ±ã‚’ファイルから読み込む
     487  #  パス3から引き渡される情報をファイルから読み込む
    511488  #
    512489  db = PStore.new(CFG3_OUT_DB)
     
    523500
    524501  #
    525   #  値取得シンボルをグローバル変数として定義する
     502  #  値取得シンボルをグローバル変数として定義する
    526503  #
    527504  DefineSymbolValue()
    528505
    529506  #
    530   #  生成スクリプト(trbファイル)を実行する
     507  #  生成スクリプト(trbファイル)を実行する
    531508  #
    532509  $trbFileNames.each do |trbFileName|
     
    536513
    537514#
    538 ç”Ÿæˆã‚¹ã‚¯ãƒªãƒ—ト(trbファイル)向けの関数
     515生成スクリプト(trbファイル)向けの関数
    539516#
    540517def SYMBOL(symbol)
     
    564541
    565542#
    566 ã‚°ãƒ­ãƒ¼ãƒãƒ«å¤‰æ•°ã®åˆæœŸåŒ–
     543グローバル変数の初期化
    567544#
    568545$kernel = nil
     
    579556
    580557#
    581 ã‚ªãƒ—ションの処理
     558オプションの処理
    582559#
    583560OptionParser.new(banner="Usage: cfg.rb [options] CONFIG-FILE", 40) do |opt|
     
    633610
    634611#
    635 ã‚ªãƒ—ションのチェック
     612オプションのチェック
    636613#
    637614if $pass.nil?
    638   # パスの指定はå¿
    639 é ˆ
     615  # パスの指定は必須
    640616  abort("`--pass' option is mandatory")
    641617elsif /^[1234]$/ !~ $pass
     
    643619end
    644620
    645 # パス1では,静的APIテーブルはå¿
    646 é ˆ
     621# パス1では,静的APIテーブルは必須
    647622if ($pass == "1" && $apiTableFileNames.empty?)
    648623  abort("`--api-table' option must be specified in pass 1")
    649624end
    650625
    651 # パス1以外では,生成スクリプト(trbファイル)がå¿
    652 é ˆ
     626# パス1以外では,生成スクリプト(trbファイル)が必須
    653627if ($pass != "1" && $trbFileNames.empty?)
    654628  abort("`--trb-file' must be specified except in pass 1")
     
    656630
    657631#
    658 ã‚«ãƒ¼ãƒãƒ«ã‚ªãƒ—ションの処理
     632カーネルオプションの処理
    659633#
    660634case $kernel
     
    666640
    667641#
    668 #  ID番号å
    669 ¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®å–り込み
     642#  ID番号入力ファイルの取り込み
    670643#
    671644$inputObjid = {}
     
    686659
    687660#
    688 æŒ‡å®šã•ã‚ŒãŸã‚·ãƒ³ãƒœãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®èª­ã¿è¾¼ã¿
     661指定されたシンボルファイルの読み込み
    689662#
    690663if !$romSymbolFileName.nil?
     
    697670
    698671#
    699 æŒ‡å®šã•ã‚ŒãŸSレコードファイルの読み込み
     672指定されたSレコードファイルの読み込み
    700673#
    701674if !$romImageFileName.nil?
     
    708681
    709682#
    710 ãƒ‘スに従って各処理を実行
     683パスに従って各処理を実行
    711684#
    712685case $pass
     
    725698end
    726699
    727 # エラー発生時はabortする
     700# エラー発生時はabortする
    728701if $errorFlag
    729702  if ($0 == __FILE__)
    730703    abort()
    731704  else
    732     # simplecov対応
     705    # simplecov対応
    733706    raise()
    734707  end
     
    736709
    737710#
    738 ä½œæˆã—たすべてのファイルを出力する
     711作成したすべてのファイルを出力する
    739712#
    740713GenFile.output
    741714
    742715#
    743 ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ファイルの生成
     716タイムスタンプファイルの生成
    744717#
    745718if !$timeStampFileName.nil?
  • EcnlProtoTool/trunk/asp3_dcre/cfg/pass1.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r270 r321  
    77#              Graduate School of Information Science, Nagoya Univ., JAPAN
    88#
    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#  値取得シンボルテーブルへの固定登録
    6247#
    6348$symbolValueTable = {
     
    8065
    8166#
    82 é™çš„APIテーブルへの固定登録
     67静的APIテーブルへの固定登録
    8368#
    8469$apiDefinition = { "INCLUDE" =>
     
    8671
    8772#
    88 é™çš„APIテーブルの読み込み
     73静的APIテーブルの読み込み
    8974#
    9075def ReadApiTableFile
     
    10287    apiFile = File.open(apiTableFileName)
    10388    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名の取り出し
    10994      if /^(.+)\[(.+)\]$/ =~ apiName
    11095        apiName = $1
     
    127112
    128113          case prefix
    129           when "#"                                      # オブジェクト識別名(定義)
     114          when "#"                                      # オブジェクト識別名(定義)
    130115            apiParam[:ID_DEF] = true
    131           when "%"                                      # オブジェクト識別名(参ç
    132 §ï¼‰
     116          when "%"                                      # オブジェクト識別名(参照)
    133117            apiParam[:ID_REF] = true
    134           when "."                                      # 符号無し整数定数式パラメータ
     118          when "."                                      # 符号無し整数定数式パラメータ
    135119            apiParam[:EXPTYPE] = "unsigned_t"
    136           when "+"                                      # 符号付き整数定数式パラメータ
     120          when "+"                                      # 符号付き整数定数式パラメータ
    137121            apiParam[:EXPTYPE] = "signed_t"
    138122            apiParam[:SIGNED] = true
    139           when "&"                                      # 一般整数定数式パラメータ
     123          when "&"                                      # 一般整数定数式パラメータ
    140124            # do nothing
    141           when "$"                                      # 文字列定数式パラメータ
     125          when "$"                                      # 文字列定数式パラメータ
    142126            apiParam[:STRING] = true
    143127          else
     
    146130
    147131          case postfix
    148           when "*"                                      # キーを決めるパラメータ
     132          when "*"                                      # キーを決めるパラメータ
    149133            apiDef[:KEYPAR] = name
    150           when "?"                                      # オプションパラメータ
     134          when "?"                                      # オプションパラメータ
    151135            apiParam[:OPTIONAL] = true
    152           when "\.\.\."                         # リストパラメータ
     136          when "\.\.\."                         # リストパラメータ
    153137            apiParam[:LIST] = true
    154138          end
     
    175159
    176160#
    177 å€¤å–得シンボルテーブルの読み込み
     161値取得シンボルテーブルの読み込み
    178162#
    179163def ReadSymvalTable
     
    186170    symvalCsv = CSV.open(symvalTableFileName)
    187171    symvalCsv.each do |record|
    188       # 変数名
     172      # 変数名
    189173      if record[0].nil?
    190174        error_exit("invalid variable name in `#{fileName}'")
     
    194178      variable = record[0]
    195179
    196       # 式
     180      #
    197181      if record[1].nil? || record[1].empty?
    198182        symbol[:EXPR] = variable
     
    201185      end
    202186
    203       # 式の型
     187      # 式の型
    204188      if !record[2].nil? && !record[2].empty?
    205189        case record[2]
    206         when /^[bB]/                            # 真偽値
     190        when /^[bB]/                            # 真偽値
    207191          symbol[:BOOL] = true
    208         when /^[uU]/                            # 符号無し整数値
    209           # 何も設定しない
    210         else                                            # 符号付き整数値
     192        when /^[uU]/                            # 符号無し整数値
     193          # 何も設定しない
     194        else                                            # 符号付き整数値
    211195          symbol[:SIGNED] = true
    212196        end
    213197      end
    214198
    215       # コンパイル条件
     199      # コンパイル条件
    216200      if !record[3].nil? && !record[3].empty?
    217201        symbol[:CONDITION] = record[3]
    218202      end
    219203
    220       # 条件が成立しない時の式
     204      # 条件が成立しない時の式
    221205      if !record[4].nil? && !record[4].empty?
    222206        symbol[:ELSE_EXPR] = record[4]
     
    230214
    231215#
    232 ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰ã®èª­ã¿è¾¼ã¿ã‚¯ãƒ©ã‚¹
     216システムコンフィギュレーションファイルからの読み込みクラス
    233217#
    234218class ConfigFile
     
    256240    if @withinComment
    257241      case line
    258       when /\*\//                                               # C言語スタイルのコメント終了
    259         line.sub!(/^.*?\*\//, "")               # 最初の*/にマッチさせる */
     242      when /\*\//                                               # C言語スタイルのコメント終了
     243        line.sub!(/^.*?\*\//, "")               # 最初の*/にマッチさせる */
    260244        @withinComment = false
    261245      else
     
    264248    end
    265249    if !@withinComment
    266       line.gsub!(/\/\*.*?\*\//, "")             # C言語スタイルのコメントの除去
    267                                                                                 # 最初の*/にマッチさせる */
     250      line.gsub!(/\/\*.*?\*\//, "")             # C言語スタイルのコメントの除去
     251                                                                                # 最初の*/にマッチさせる */
    268252      case line
    269       when /^\s*#/                                              # プリプロセッサディレクティブ
     253      when /^\s*#/                                              # プリプロセッサディレクティブ
    270254        if withinApi
    271255          parse_error(self, \
     
    273257          line = ""
    274258        end
    275       when /\/\*/                                               # C言語スタイルのコメント開始
     259      when /\/\*/                                               # C言語スタイルのコメント開始
    276260        line.sub!(/\/\*.*$/, "")
    277261        @withinComment = true
    278       when /\/\//                                               # C++言語スタイルのコメント
     262      when /\/\//                                               # C++言語スタイルのコメント
    279263        line.sub!(/\/\/.*$/, "")
    280264      end
     
    293277
    294278#
    295 ã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ‘ーサークラス
     279システムコンフィギュレーションファイルのパーサークラス
    296280#
    297281class CfgParser
     
    303287  def initialize
    304288    @line = ""
    305     @skipComma = false                                          # 次が,であれば読み飛ばす
    306   end
    307 
    308   #
    309   #  文字列末まで読む
     289    @skipComma = false                                          # 次が,であれば読み飛ばす
     290  end
     291
     292  #
     293  #  文字列末まで読む
    310294  #
    311295  def parseString(cfgFile)
     
    313297    begin
    314298      case @line
    315       when /^([^"]*\\\\)(.*)$/                          # \\まで読む
     299      when /^([^"]*\\\\)(.*)$/                          # \\まで読む
    316300        string += $1
    317301        @line = $2
    318       when /^([^"]*\\\")(.*)$/                          # \"まで読む
     302      when /^([^"]*\\\")(.*)$/                          # \"まで読む
    319303        string += $1
    320304        @line = $2
    321       when /^([^"]*\")(.*)$/                            # "まで読む
     305      when /^([^"]*\")(.*)$/                            # "まで読む
    322306        string += $1
    323307        @line = $2
    324308        return(string)
    325       else                                                                      # 行末まで読む
     309      else                                                                      # 行末まで読む
    326310        string += @line + "\n"
    327311        @line = cfgFile.getNextLine(true)
     
    333317
    334318  #
    335   #  文字末まで読む
     319  #  文字末まで読む
    336320  #
    337321  def parseChar(cfgFile)
     
    339323    begin
    340324      case @line
    341       when /^([^']*\\\\)(.*)$/                          # \\まで読む
     325      when /^([^']*\\\\)(.*)$/                          # \\まで読む
    342326        string += $1
    343327        @line = $2
    344       when /^([^']*\\\')(.*)$/                          # \'まで読む
     328      when /^([^']*\\\')(.*)$/                          # \'まで読む
    345329        string += $1
    346330        @line = $2
    347       when /^([^']*\')(.*)$/                            # 'まで読む
     331      when /^([^']*\')(.*)$/                            # 'まで読む
    348332        string += $1
    349333        @line = $2
    350334        return(string)
    351       else                                                                      # 行末まで読む
     335      else                                                                      # 行末まで読む
    352336        string += @line + "\n"
    353337        @line = cfgFile.getNextLine(true)
     
    359343
    360344  #
    361   #  改行と空白文字を読み飛ばす
     345  #  改行と空白文字を読み飛ばす
    362346  #
    363347  def skipSpace(cfgFile, withinApi)
    364348    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  #  次の文字まで読み飛ばす
    375358  #
    376359  def skipToToken(cfgFile, withinApi=true)
    377360    skipSpace(cfgFile, withinApi)
    378     if @line.nil?                                                       # ファイル末であればエラー終了
     361    if @line.nil?                                                       # ファイル末であればエラー終了
    379362      error_exit("unexpexced end-of-file")
    380363    end
     
    382365
    383366  #
    384   #  パラメータを1つ読む
    385   #
    386   # @lineのå
    387 ˆé ­ã‹ã‚‰ãƒ‘ラメータを1つ読んで,それを文字列で返す.読んだパ
    388   # ラメータは,@lineからは削除する.パラメータの途中で行末に達した時は,
    389   # cfgFileから次の行を取り出す.ファイル末に達した時は,nilを返す.
     367  #  パラメータを1つ読む
     368  #
     369  # @lineの先頭からパラメータを1つ読んで,それを文字列で返す.読んだパ
     370  # ラメータは,@lineからは削除する.パラメータの途中で行末に達した時は,
     371  # cfgFileから次の行を取り出す.ファイル末に達した時は,nilを返す.
    390372  #
    391373  def parseParam(cfgFile)
    392     param = ""                                                          # 読んだ文字列
    393     parenLevel = 0                                                      # 括弧のネストレベル
     374    param = ""                                                          # 読んだ文字列
     375    parenLevel = 0                                                      # 括弧のネストレベル
    394376    skipComma = @skipComma
    395377    @skipComma = false
    396378
    397     skipToToken(cfgFile)                                        # 次の文字まで読み飛ばす
     379    skipToToken(cfgFile)                                        # 次の文字まで読み飛ばす
    398380    begin
    399381      if parenLevel == 0
     
    403385          if param == "" && skipComma
    404386            skipComma = false
    405             return(parseParam(cfgFile))         # 再帰呼び出し
     387            return(parseParam(cfgFile))         # 再帰呼び出し
    406388          else
    407389            return(param.strip)
     
    418400          @line = $2
    419401          parenLevel += 1
    420         when /^(\s*([)}]))(.*)$/                        # }か)
     402        when /^(\s*([)}]))(.*)$/                        # })
    421403          if param != ""
    422404            return(param.strip)
     
    432414          @line = $2
    433415          param += $1 + parseChar(cfgFile)
    434         when /^(\s*[^,{}()"'\s]+)(.*)$/         # その他の文字列
     416        when /^(\s*[^,{}()"'\s]+)(.*)$/         # その他の文字列
    435417          param += $1
    436418          @line = $2
    437         else                                                            # 行末
     419        else                                                            # 行末
    438420          param += " "
    439421          @line = cfgFile.getNextLine(true)
    440422        end
    441423      else
    442         # 括弧å†
    443 ã®å‡¦ç†
     424        # 括弧内の処理
    444425        case @line
    445426        when /^(\s*\()(.*)$/                            # "("
     
    457438          @line = $2
    458439          param += $1 + parseChar(cfgFile)
    459         when /^(\s*[^()"'\s]+)(.*)$/            # その他の文字列
     440        when /^(\s*[^()"'\s]+)(.*)$/            # その他の文字列
    460441          param += $1
    461442          @line = $2
    462         else                                                            # 行末
     443        else                                                            # 行末
    463444          param += " "
    464445          @line = cfgFile.getNextLine(true)
     
    492473
    493474  def parseApi(cfgFile, apiName)
    494     # 静的APIの読み込み
     475    # 静的APIの読み込み
    495476    staticApi = {}
    496477    tooFewParams = false
    497478    skipUntilBrace = 0
    498479
    499     skipToToken(cfgFile)                                        # 次の文字まで読み飛ばす
     480    skipToToken(cfgFile)                                        # 次の文字まで読み飛ばす
    500481    if (/^\((.*)$/ =~ @line)
    501482      @line = $1
     
    508489
    509490      apiDef[:PARAM].each do |apiParam|
    510         return(staticApi) if param.nil?         # ファイル末であればリターン
     491        return(staticApi) if param.nil?         # ファイル末であればリターン
    511492
    512493        if skipUntilBrace > 0
    513           # API定義を}までスキップ中
     494          # API定義を}までスキップ中
    514495          if apiParam.has_key?(:BRACE)
    515496            case apiParam[:BRACE]
     
    533514            staticApi[apiParam[:NAME]].push(getParam(apiParam, param, cfgFile))
    534515            param = parseParam(cfgFile)
    535             break if param.nil?                         # ファイル末の場合
     516            break if param.nil?                         # ファイル末の場合
    536517          end
    537518        elsif apiParam.has_key?(:OPTBRACE)
    538519          if param == apiParam[:BRACE]
    539520            param = parseParam(cfgFile)
    540             break if param.nil?                         # ファイル末の場合
     521            break if param.nil?                         # ファイル末の場合
    541522          else
    542523            if param == ""
    543524              param = parseParam(cfgFile)
    544               break if param.nil?                       # ファイル末の場合
     525              break if param.nil?                       # ファイル末の場合
    545526            elsif /^([})])$/ !~ param
    546527              parse_error(cfgFile, "`{...}' expected before #{param}")
    547528            end
    548             skipUntilBrace += 1                 # API定義を}までスキップ
     529            skipUntilBrace += 1                 # API定義を}までスキップ
    549530          end
    550531        elsif !apiParam.has_key?(:BRACE)
     
    561542        else
    562543          parse_error(cfgFile, "`#{apiParam[:BRACE]}' expected before #{param}")
    563           # )かファイル末まで読み飛ばす
     544          # )かファイル末まで読み飛ばす
    564545          loop do
    565546            param = parseParam(cfgFile)
     
    570551      end
    571552
    572       # 期å¾
    573 ã•ã‚Œã‚‹ãƒ‘ラメータをすべて読んだ後の処理
     553      # 期待されるパラメータをすべて読んだ後の処理
    574554      if param != ")"
    575555        begin
    576556          param = parseParam(cfgFile)
    577           return(staticApi) if param.nil?       # ファイル末であればリターン
     557          return(staticApi) if param.nil?       # ファイル末であればリターン
    578558        end while param != ")"
    579559        parse_error(cfgFile, "too many parameters before `)'")
     
    587567
    588568  def parseOpenBrace(cfgFile)
    589     # {の読み込み
    590     skipToToken(cfgFile)                                        # 次の文字まで読み飛ばす
     569    # {の読み込み
     570    skipToToken(cfgFile)                                        # 次の文字まで読み飛ばす
    591571    if (/^\{(.*)$/ =~ @line)
    592572      @line = $1
     
    602582      cfgFile = cfgFiles.last
    603583
    604       skipSpace(cfgFile, false)                         # 改行と空白文字を読み飛ばす
     584      skipSpace(cfgFile, false)                         # 改行と空白文字を読み飛ばす
    605585      if @line.nil?
    606         # ファイル末の処理
     586        # ファイル末の処理
    607587        cfgFiles.pop.close
    608588        if cfgFiles.empty?
    609           break                                                         # パース処理終了
     589          break                                                         # パース処理終了
    610590        else
    611           @line = ""                                            # å
    612 ƒã®ãƒ•ã‚¡ã‚¤ãƒ«ã«æˆ»ã£ã¦ç¶šã‘ã‚‹
     591          @line = ""                                            # 元のファイルに戻って続ける
    613592        end
    614593      elsif /^;(.*)$/ =~ @line
    615         # ;は読み飛ばす
     594        # ;は読み飛ばす
    616595        @line = $1
    617596      elsif /^#/ =~ @line
    618         # プリプロセッサディレクティブを読む
     597        # プリプロセッサディレクティブを読む
    619598        case @line
    620599        when /^#include\b(.*)$/
     
    655634            if !$domainId.has_key?(domid)
    656635              if $inputObjid.has_key?(domid)
    657                 # ID番号å
    658 ¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã«å®šç¾©ã•ã‚Œã¦ã„た場合
     636                # ID番号入力ファイルに定義されていた場合
    659637                $domainId[domid] = $inputObjid[domid]
    660638                if $domainId[domid] > 32
     
    683661        else
    684662          if $apiDefinition.has_key?(apiName)
    685             # 静的APIを1つ読む
     663            # 静的APIを1つ読む
    686664            staticApi = parseApi(cfgFile, apiName)
    687665            if staticApi.empty?
    688               # ファイル末か文法エラー
     666              # ファイル末か文法エラー
    689667            elsif (staticApi[:APINAME] == "INCLUDE")
    690               # INCLUDEの処理
     668              # INCLUDEの処理
    691669              includeFilePath = SearchFilePath(staticApi[:file])
    692670              if includeFilePath.nil?
     
    697675              end
    698676            else
    699               # 静的APIの処理
     677              # 静的APIの処理
    700678              if !@@currentDomain.nil?
    701679                staticApi[:DOMAIN] = @@currentDomain
     
    714692        end
    715693      elsif (/^\}(.*)$/ =~ @line)
    716         # }の処理
     694        # }の処理
    717695        if @@nestDC.size > 0
    718696          case @@nestDC.pop
     
    735713
    736714#
    737 #  cfg1_out.cの生成
     715#  cfg1_out.cの生成
    738716#
    739717module Cfg1OutC
    740718  #
    741   #  静的APIのファイル名と行番号の出力
     719  #  静的APIのファイル名と行番号の出力
    742720  #
    743721  def self.OutLineNumber(cfgInfo)
     
    746724
    747725  #
    748   #  クラス記述のファイル名と行番号の出力
     726  #  クラス記述のファイル名と行番号の出力
    749727  #
    750728  def self.OutClassLineNumber(cfgInfo)
     
    753731
    754732  #
    755   #  パラメータに関する定義の出力
     733  #  パラメータに関する定義の出力
    756734  #
    757735  def self.OutParamDef(param, index, apiParam, cfgInfo)
     
    767745
    768746  #
    769   #  cfg1_out.cの生成(メインの処理)
     747  #  cfg1_out.cの生成(メインの処理)
    770748  #
    771749  def self.Generate
     
    778756EOS
    779757
    780     # インクルードヘッダファイル
     758    # インクルードヘッダファイル
    781759    $includeFiles.each do |file|
    782760      @cfg1Out.add("#include #{file}")
     
    800778EOS
    801779
    802     # 値取得シンボルの処理
     780    # 値取得シンボルの処理
    803781    $symbolValueTable.each do |symbolName, symbolData|
    804782      if symbolData.has_key?(:BOOL) || symbolData.has_key?(:SIGNED)
     
    823801    @cfg1Out.add
    824802
    825     # ドメインIDの定義の生成
     803    # ドメインIDの定義の生成
    826804    $domainId.each do |domainName, domainVal|
    827805      if domainVal > 0
     
    831809    @cfg1Out.add
    832810
    833     # 静的API/プリプロセッサディレクティブの処理
     811    # 静的API/プリプロセッサディレクティブの処理
    834812    $cfgFileInfo.each do |cfgInfo|
    835813      if cfgInfo.has_key?(:DIRECTIVE)
     
    844822          next unless apiParam.has_key?(:NAME)
    845823          paramName = apiParam[:NAME]
    846           next unless cfgInfo.has_key?(paramName)       # パラメータがない場合
     824          next unless cfgInfo.has_key?(paramName)       # パラメータがない場合
    847825          paramData = cfgInfo[paramName]
    848826
     
    856834        end
    857835        if cfgInfo.has_key?(:CLASS)
    858           # クラスIDの取得のための処理
     836          # クラスIDの取得のための処理
    859837          OutClassLineNumber(cfgInfo)
    860838          @cfg1Out.add("const signed_t #{CFG1_PREFIX}valueof_CLASS_" \
     
    868846
    869847#
    870 ãƒ‘ス1の処理
     848パス1の処理
    871849#
    872850def Pass1
    873851  #
    874   #  タイムスタンプファイルの指定
     852  #  タイムスタンプファイルの指定
    875853  #
    876854  $timeStampFileName = CFG1_OUT_TIMESTAMP
    877855
    878856  #
    879   #  静的APIテーブルの読み込み
     857  #  静的APIテーブルの読み込み
    880858  #
    881859  ReadApiTableFile()
    882860
    883861  #
    884   #  値取得シンボルテーブルの読み込み
     862  #  値取得シンボルテーブルの読み込み
    885863  #
    886864  ReadSymvalTable()
    887865
    888866  #
    889   #  システムコンフィギュレーションファイルの読み込み
     867  #  システムコンフィギュレーションファイルの読み込み
    890868  #
    891869  $cfgFileInfo = []
     
    896874    CfgParser.new.parseFile(configFileName)
    897875  end
    898   abort if $errorFlag                                   # エラー発生時はabortする
    899 
    900   #
    901   #  ドメインIDの割当て処理
     876  abort if $errorFlag                                   # エラー発生時はabortする
     877
     878  #
     879  #  ドメインIDの割当て処理
    902880  #
    903881  nextDomainId = 1
     
    916894
    917895  #
    918   #  cfg1_out.cの生成
     896  #  cfg1_out.cの生成
    919897  #
    920898  Cfg1OutC::Generate()
    921899
    922900  #
    923   #  依存関係の出力
     901  #  依存関係の出力
    924902  #
    925903  if !$dependencyFileName.nil?
     
    946924
    947925  #
    948   #  パス2に引き渡すæƒ
    949 å ±ã‚’ファイルに生成
     926  #  パス2に引き渡す情報をファイルに生成
    950927  #
    951928  if $omitOutputDb.nil?
  • EcnlProtoTool/trunk/asp3_dcre/cfg/pass2.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r270 r321  
    77#              Graduate School of Information Science, Nagoya Univ., JAPAN
    88#
    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の生成物の読み込み
    6247#
    6348module Cfg1Out
    6449  #
    65   #  Sレコードファイルからシンボルの値を取り出す
     50  #  Sレコードファイルからシンボルの値を取り出す
    6651  #
    6752  def self.GetSymbolValue(symbol, size, signed)
     
    7459
    7560  #
    76   #  パス1の生成物の読み込み(メインの処理)
     61  #  パス1の生成物の読み込み(メインの処理)
    7762  #
    7863  def self.Read
    79     # cfg1_out.symsの読み込み
     64    # cfg1_out.symsの読み込み
    8065    @symbolAddress = ReadSymbolFile(CFG1_OUT_SYMS)
    8166
    82     # cfg1_out.srecの読み込み
     67    # cfg1_out.srecの読み込み
    8368    begin
    8469      @cfg1SRec = SRecord.new(CFG1_OUT_SREC)
     
    8772    end
    8873
    89     # マジックナンバーの取得
     74    # マジックナンバーの取得
    9075    if @symbolAddress.has_key?(CFG1_MAGIC_NUM)
    9176      $asmLabel = ""
     
    10893    end
    10994
    110     # 固定出力した変数の取得
     95    # 固定出力した変数の取得
    11196    $sizeOfSigned = GetSymbolValue($asmLabel + CFG1_SIZEOF_SIGNED, 4, false)
    11297
    113     # 値取得シンボルの取得
     98    # 値取得シンボルの取得
    11499    $symbolValueTable.each do |symbolName, symbolData|
    115100      symbol = $cfg1_prefix + symbolName
     
    117102        value = GetSymbolValue(symbol, $sizeOfSigned, true)
    118103        if !value.nil?
    119           # C言語の真偽値をRubyの真偽値に変換して取り込む
     104          # C言語の真偽値をRubyの真偽値に変換して取り込む
    120105          symbolData[:VALUE] = (value != 0)
    121106        end
     
    130115
    131116    #
    132     #  ハッシュの初期化
     117    #  ハッシュの初期化
    133118    #
    134119    $cfgData = {}
     
    148133
    149134    #
    150     #  ドメイン生成データをコンフィギュレーションデータ($cfgData)に格納
     135    #  ドメイン生成データをコンフィギュレーションデータ($cfgData)に格納
    151136    #
    152137    $cfgData[:CRE_DOM] = {}
     
    160145
    161146  #
    162   #  パラメータの値を取り出す
     147  #  パラメータの値を取り出す
    163148  #
    164149  def self.GetParamValue(paramName, param, apiIndex, index, apiParam, cfgInfo)
    165     if apiParam.has_key?(:ID_DEF)                               # オブジェクト識別名(定義)
     150    if apiParam.has_key?(:ID_DEF)                               # オブジェクト識別名(定義)
    166151      value = @objidValues[paramName][param]
    167     elsif apiParam.has_key?(:ID_REF)                    # オブジェクト識別名(参ç
    168 §ï¼‰
     152    elsif apiParam.has_key?(:ID_REF)                    # オブジェクト識別名(参照)
    169153      if @objidValues[paramName].has_key?(param)
    170154        value = @objidValues[paramName][param]
     
    175159        value = nil
    176160      end
    177     elsif apiParam.has_key?(:EXPTYPE)                   # 整数定数式パラメータ
     161    elsif apiParam.has_key?(:EXPTYPE)                   # 整数定数式パラメータ
    178162      if apiIndex.nil?
    179163        if param.is_a?(NumStr)
     
    187171                                                                        apiParam.has_key?(:SIGNED))
    188172      end
    189     else                                                                                # 一般定数式/文字列パラメータ
     173    else                                                                                # 一般定数式/文字列パラメータ
    190174      return(param)
    191175    end
     
    194178
    195179  #
    196   #  指定したフェーズのためのパス1の生成物の読み込み
     180  #  指定したフェーズのためのパス1の生成物の読み込み
    197181  #
    198182  def self.ReadPhase(phase)
    199183    #
    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の場合には,次のように設定される.
    215198    #   @objidValues["semid"]["SEM1"] == 1
    216199    #
    217200
    218     # ID番号割り当ての前処理
     201    # ID番号割り当ての前処理
    219202    objidParamNameList = []
    220203    $cfgFileInfo.each do |cfgInfo|
    221       # プリプロセッサディレクティブは読み飛ばす
     204      # プリプロセッサディレクティブは読み飛ばす
    222205      next if cfgInfo.has_key?(:DIRECTIVE)
    223206
    224207      apiDef = $apiDefinition[cfgInfo[:APINAME]]
    225       # 異なるフェーズの静的APIは読み飛ばす
     208      # 異なるフェーズの静的APIは読み飛ばす
    226209      next if apiDef[:PHASE] != phase
    227210
    228211      apiIndex = cfgInfo[:INDEX]
    229212      if !apiIndex.nil?
    230         # シンボルファイルに静的APIのインデックスが存在しなければ読み飛
    231         # ばす(ifdef等で消えた静的API)
     213        # シンボルファイルに静的APIのインデックスが存在しなければ読み飛
     214        # ばす(ifdef等で消えた静的API)
    232215        symbol = "#{$cfg1_prefix}static_api_#{apiIndex}"
    233216        next unless @symbolAddress.has_key?(symbol)
     
    239222          objName = cfgInfo[objidParamName]
    240223          if $inputObjid.has_key?(objName)
    241             # ID番号å
    242 ¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã«å®šç¾©ã•ã‚Œã¦ã„た場合
     224            # ID番号入力ファイルに定義されていた場合
    243225            @objidValues[objidParamName][objName] = $inputObjid[objName]
    244226          else
     
    250232    end
    251233
    252     # ID番号の割当て処理
     234    # ID番号の割当て処理
    253235    objidParamNameList.each do |objidParamName|
    254236      objidList = @objidValues[objidParamName]
    255237
    256       # 未使用のID番号のリスト(使用したものから消していく)
     238      # 未使用のID番号のリスト(使用したものから消していく)
    257239      unusedObjidList = (1.upto(objidList.keys.size)).to_a
    258240
    259       # 割り当て済みのID番号の処理
     241      # 割り当て済みのID番号の処理
    260242      objidList.each do |objName, objidNumber|
    261243        if $inputObjid.has_key?(objName)
    262244          objidIndex = unusedObjidList.index($inputObjid[objName])
    263245          if objidIndex.nil?
    264             # ID番号å
    265 ¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã§æŒ‡å®šã•ã‚ŒãŸå€¤ãŒä¸æ­£
     246            # ID番号入力ファイルで指定された値が不正
    266247            error_exit("value of `#{objName}' in ID input file is illegal")
    267248          else
    268             # 未使用のID番号のリストから削除
     249            # 未使用のID番号のリストから削除
    269250            unusedObjidList.delete_at(objidIndex)
    270251          end
     
    272253      end
    273254
    274       # ID番号の割当て
     255      # ID番号の割当て
    275256      objidList.each do |objName, objidNumber|
    276257        if objidList[objName].nil?
    277           # 以下で,@objidValuesを書き換えている
     258          # 以下で,@objidValuesを書き換えている
    278259          objidList[objName] = unusedObjidList.shift
    279260        end
     
    282263
    283264    #
    284     #  静的APIデータをコンフィギュレーションデータ($cfgData)に格納
     265    #  静的APIデータをコンフィギュレーションデータ($cfgData)に格納
    285266    #
    286267    $cfgFileInfo.each do |cfgInfo|
    287       # プリプロセッサディレクティブは読み飛ばす
     268      # プリプロセッサディレクティブは読み飛ばす
    288269      next if cfgInfo.has_key?(:DIRECTIVE)
    289270
    290271      apiDef = $apiDefinition[cfgInfo[:APINAME]]
    291       # 異なるフェーズの静的APIは読み飛ばす
     272      # 異なるフェーズの静的APIは読み飛ばす
    292273      next if apiDef[:PHASE] != phase
    293274
     
    295276      apiIndex = cfgInfo[:INDEX]
    296277      if !apiIndex.nil?
    297         # シンボルファイルに静的APIのインデックスが存在しなければ読み飛
    298         # ばす(ifdef等で消えた静的API)
     278        # シンボルファイルに静的APIのインデックスが存在しなければ読み飛
     279        # ばす(ifdef等で消えた静的API)
    299280        symbol = "#{$cfg1_prefix}static_api_#{apiIndex}"
    300281        next unless @symbolAddress.has_key?(symbol)
    301282      end
    302283
    303       # パラメータの値をハッシュ形式に格納
     284      # パラメータの値をハッシュ形式に格納
    304285      params = {}
    305286      apiDef[:PARAM].each do |apiParam|
    306287        next unless apiParam.has_key?(:NAME)
    307288        paramName = apiParam[:NAME]
    308         next unless cfgInfo.has_key?(paramName)         # パラメータがない場合
     289        next unless cfgInfo.has_key?(paramName)         # パラメータがない場合
    309290        paramData = cfgInfo[paramName]
    310291
     
    321302      end
    322303
    323       # ドメインIDを追加
     304      # ドメインIDを追加
    324305      if cfgInfo.has_key?(:DOMAIN)
    325306        domainName = cfgInfo[:DOMAIN]
     
    327308      end
    328309
    329       # クラスIDを追加
     310      # クラスIDを追加
    330311      if cfgInfo.has_key?(:CLASS)
    331312        if apiIndex.nil?
     
    338319      end
    339320
    340       # API名,ファイル名,行番号を追加
     321      # API名,ファイル名,行番号を追加
    341322      params[:apiname] = cfgInfo[:APINAME]
    342323      params[:_file_] = cfgInfo[:_FILE_]
    343324      params[:_line_] = cfgInfo[:_LINE_]
    344325
    345       # 登録キーを決定する
     326      # 登録キーを決定する
    346327      if apiDef.has_key?(:KEYPAR)
    347328        keyParam = params[apiDef[:KEYPAR].to_sym]
    348329        key = keyParam.val
    349330        if $cfgData[apiSym].has_key?(key)
    350           # 登録キーの重複
     331          # 登録キーの重複
    351332          error("E_OBJ: #{apiDef[:KEYPAR]} `#{keyParam}' " \
    352333                                                                "is duplicated in #{cfgInfo[:APINAME]}",
     
    361342
    362343  #
    363   #  ID番号出力ファイルの生成
     344  #  ID番号出力ファイルの生成
    364345  #
    365346  def self.OutputId(fileName)
     
    374355
    375356#
    376 ãƒ‘ス2の処理
     357パス2の処理
    377358#
    378359def Pass2
    379360  #
    380   #  パス1から引き渡されるæƒ
    381 å ±ã‚’ファイルから読み込む
     361  #  パス1から引き渡される情報をファイルから読み込む
    382362  #
    383363  db = PStore.new(CFG1_OUT_DB)
     
    392372
    393373  #
    394   #  パス1の生成物を読み込む
     374  #  パス1の生成物を読み込む
    395375  #
    396376  Cfg1Out.Read()
    397   abort if $errorFlag                                   # エラー発生時はabortする
    398 
    399   #
    400   #  値取得シンボルをグローバル変数として定義する
     377  abort if $errorFlag                                   # エラー発生時はabortする
     378
     379  #
     380  #  値取得シンボルをグローバル変数として定義する
    401381  #
    402382  DefineSymbolValue()
    403383
    404384  #
    405   #  生成スクリプト(trbファイル)を実行する
     385  #  生成スクリプト(trbファイル)を実行する
    406386  #
    407387  $trbFileNames.each do |trbFileName|
     
    414394
    415395  #
    416   #  ID番号出力ファイルの生成
     396  #  ID番号出力ファイルの生成
    417397  #
    418398  if !$idOutputFileName.nil?
     
    421401
    422402  #
    423   #  パス3に引き渡すæƒ
    424 å ±ã‚’ファイルに生成
     403  #  パス3に引き渡す情報をファイルに生成
    425404  #
    426405  if $omitOutputDb.nil?
Note: See TracChangeset for help on using the changeset viewer.