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

文字コードを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.