Ignore:
Timestamp:
Jul 3, 2020, 7:19:17 PM (4 years ago)
Author:
coas-nagasima
Message:

ASP3, TINET, mbed を更新

Location:
EcnlProtoTool/trunk/asp3_dcre/cfg
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/cfg/GenFile.rb

    r321 r429  
    3737#  の責任を負わない.
    3838#
    39 #  $Id$
     39#  $Id: GenFile.rb 111 2016-03-16 23:50:27Z ertl-hiro $
    4040#
    4141
  • EcnlProtoTool/trunk/asp3_dcre/cfg/MANIFEST

    r270 r429  
     1PACKAGE cfg
     2VERSION 1.5.0
     3
    14MANIFEST
    25cfg.rb
  • EcnlProtoTool/trunk/asp3_dcre/cfg/SRecord.rb

    r321 r429  
    3636#  の責任を負わない.
    3737#
    38 #  $Id$
     38#  $Id: SRecord.rb 161 2018-12-12 00:45:04Z ertl-hiro $
    3939#
    4040
     
    170170    end
    171171  end
     172
     173  # 文字列としてのデータ取得
     174  def get_string(address)
     175    str = ""
     176    targetChar = get_data(address, 1).hex
     177    while (!targetChar.nil? && targetChar != 0)
     178      str += targetChar.chr
     179      address += 1
     180      targetChar = get_data(address, 1).hex
     181    end
     182    return(str)
     183  end
    172184end
  • EcnlProtoTool/trunk/asp3_dcre/cfg/cfg.rb

    r331 r429  
    1 #!/usr/bin/env ruby
     1#!/usr/bin/env ruby -Eutf-8 -w
    22# -*- coding: utf-8 -*-
    33#
     
    55#
    66#  Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
    7 #  Copyright (C) 2015,2016 by Embedded and Real-Time Systems Laboratory
     7#  Copyright (C) 2015-2019 by Embedded and Real-Time Systems Laboratory
    88#              Graduate School of Information Science, Nagoya Univ., JAPAN
    99#
     
    3737#  の責任を負わない.
    3838#
    39 #  $Id$
     39#  $Id: cfg.rb 175 2019-06-19 01:51:58Z ertl-hiro $
    4040#
    4141
     
    5656#
    5757# 共通
    58 VERSION = "1.2.2"
     58VERSION = "1.5.0"
    5959
    6060# cfg1_out関係
    61 CFG1_PREFIX        = "TOPPERS_cfg_"
    62 CFG1_MAGIC_NUM     = "TOPPERS_magic_number"
    63 CFG1_SIZEOF_SIGNED = "TOPPERS_sizeof_signed_t"
    64 CFG1_OUT_C         = "cfg1_out.c"
    65 CFG1_OUT_DB        = "cfg1_out.db"
    66 CFG1_OUT_SREC      = "cfg1_out.srec"
    67 CFG1_OUT_SYMS      = "cfg1_out.syms"
    68 CFG1_OUT_TIMESTAMP = "cfg1_out.timestamp"
    69 CFG1_OUT_TARGET_H  = "target_cfg1_out.h"
     61CFG1_PREFIX         = "TOPPERS_cfg_"
     62CFG1_MAGIC_NUM      = "TOPPERS_magic_number"
     63CFG1_SIZEOF_SIGNED  = "TOPPERS_sizeof_signed_t"
     64CFG1_SIZEOF_INTPTR  = "TOPPERS_sizeof_intptr_t"
     65CFG1_SIZEOF_CHARPTR = "TOPPERS_sizeof_char_ptr_t"
     66CFG1_OUT_C          = "cfg1_out.c"
     67CFG1_OUT_DB         = "cfg1_out.db"
     68CFG1_OUT_SREC       = "cfg1_out.srec"
     69CFG1_OUT_SYMS       = "cfg1_out.syms"
     70CFG1_OUT_TIMESTAMP  = "cfg1_out.timestamp"
     71CFG1_OUT_TARGET_H   = "target_cfg1_out.h"
    7072
    7173# cfg2_out関係
     
    105107$noParseError = 0
    106108def parse_error(cfgFile, message)
    107   error(message, "#{cfgFile.getFileName()}:#{cfgFile.getLineNo}:")
     109  error(message, "#{cfgFile.getFileName}:#{cfgFile.getLineNo}:")
    108110  if ($noParseError += 1) >= 10
    109111    abort("too many errors emitted, stopping now")
     
    113115# システムコンフィギュレーションファイルの構文解析時の警告
    114116def parse_warning(cfgFile, message)
    115   warning(message, "#{cfgFile.getFileName()}:#{cfgFile.getLineNo}:")
     117  warning(message, "#{cfgFile.getFileName}:#{cfgFile.getLineNo}:")
    116118end
    117119
     
    155157def error_ercd(errorCode, params, message)
    156158  error_api(params, "#{errorCode}: #{message}")
    157 end
    158 
    159 # 静的API処理時の警告(エラーコード付き)
    160 def warning_ercd(errorCode, params, message)
    161   warning_api(params, "#{errorCode}: #{message}")
    162159end
    163160
     
    316313  # ハッシュのキーとして使う時の比較も数値情報で行う
    317314  def eql?(other)
    318     @val == other.val
     315    @val == other
    319316  end
    320317
     
    390387    if symbolData.has_key?(:VALUE)
    391388      eval("$#{symbolName} = #{symbolData[:VALUE]}")
     389      if symbolData.has_key?(:NUMSTRVAR)
     390        eval("$#{symbolData[:NUMSTRVAR]} = " \
     391                                        "NumStr.new(symbolData[:VALUE], symbolData[:EXPR])")
     392      end
    392393    end
    393394  end
     
    431432
    432433#
     434#  インクルードディレクティブ(#include)の生成
     435#
     436def GenerateIncludes(genFile)
     437  $cfgFileInfo.each do |cfgInfo|
     438    if cfgInfo.has_key?(:DIRECTIVE)
     439      genFile.add(cfgInfo[:DIRECTIVE])
     440    end
     441  end
     442end
     443
     444#
    433445#  パス3の処理
    434446#
     
    439451  db = PStore.new(CFG2_OUT_DB)
    440452  db.transaction(true) do
    441     $apiDefinition = db[:apiDefinition]
    442     $symbolValueTable = db[:symbolValueTable]
    443     $cfgFileInfo = db[:cfgFileInfo]
    444     $includeFiles = db[:includeFiles]
    445     $cfgData = db[:cfgData]
    446     $asmLabel = db[:asmLabel]
    447     $endianLittle = db[:endianLittle]
    448     $cfg2Data = db[:cfg2Data]
    449   end
    450   $cfg3Data = {}
     453    db.roots.each do |var|
     454      eval("$#{var} = db[:#{var}]")
     455    end
     456  end
    451457
    452458  #
     
    465471  #  パス4に引き渡す情報をファイルに生成
    466472  #
    467   if $omitOutputDb.nil?
     473  if !$omitOutputDb
    468474    db = PStore.new(CFG3_OUT_DB)
    469475    db.transaction do
    470       db[:apiDefinition] = $apiDefinition
    471       db[:symbolValueTable] = $symbolValueTable
    472       db[:cfgFileInfo] = $cfgFileInfo
    473       db[:includeFiles] = $includeFiles
    474       db[:cfgData] = $cfgData
    475       db[:asmLabel] = $asmLabel
    476       db[:endianLittle] = $endianLittle
    477       db[:cfg3Data] = $cfg3Data
     476      $globalVars.each do |var|
     477        eval("db[:#{var}] = $#{var}")
     478      end
    478479    end
    479480  end
     
    489490  db = PStore.new(CFG3_OUT_DB)
    490491  db.transaction(true) do
    491     $apiDefinition = db[:apiDefinition]
    492     $symbolValueTable = db[:symbolValueTable]
    493     $cfgFileInfo = db[:cfgFileInfo]
    494     $includeFiles = db[:includeFiles]
    495     $cfgData = db[:cfgData]
    496     $asmLabel = db[:asmLabel]
    497     $endianLittle = db[:endianLittle]
    498     $cfg3Data = db[:cfg3Data] || db[:cfg2Data]
     492    db.roots.each do |var|
     493      eval("$#{var} = db[:#{var}]")
     494    end
    499495  end
    500496
     
    557553$romImageFileName = nil
    558554$romSymbolFileName = nil
    559 $dependencyFileName = nil
    560555$idInputFileName = nil
    561556$idOutputFileName = nil
     557$dependencyFileName = nil
     558$omitOutputDb = false
     559$supportDomain = false
     560$supportClass = false
    562561
    563562#
    564563#  オプションの処理
    565564#
    566 OptionParser.new(banner="Usage: cfg.rb [options] CONFIG-FILE", 40) do |opt|
     565OptionParser.new("Usage: cfg.rb [options] CONFIG-FILE", 40) do |opt|
    567566  opt.version = VERSION
     567  opt.release = nil
    568568  opt.on("-k KERNEL", "--kernel KERNEL", "kernel profile name") do |val|
    569569    $kernel = val
     
    605605    $omitOutputDb = true
    606606  end
     607  opt.on("--enable-domain", "enable DOMAIN support") do
     608        $supportDomain = true
     609  end
     610  opt.on("--enable-class", "enable CLASS support") do
     611        $supportClass = true
     612  end
    607613  opt.on("-v", "--version", "show version number") do
    608     abort(opt.ver)
     614    puts(opt.ver)
     615    exit(0)
    609616  end
    610617  opt.on("-h", "--help", "show help (this)") do
    611     abort(opt.help)
     618    puts(opt.help)
     619    exit(0)
    612620  end
    613621  opt.parse!(ARGV)
     
    642650        $supportDomain = true
    643651when /^fmp/
     652        $supportClass = true
     653when /^hrmp/
     654        $supportDomain = true
    644655        $supportClass = true
    645656end
  • EcnlProtoTool/trunk/asp3_dcre/cfg/pass1.rb

    r360 r429  
    44#
    55#  Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
    6 #  Copyright (C) 2015-2017 by Embedded and Real-Time Systems Laboratory
     6#  Copyright (C) 2015-2018 by Embedded and Real-Time Systems Laboratory
    77#              Graduate School of Information Science, Nagoya Univ., JAPAN
    88#
     
    3636#  の責任を負わない.
    3737#
    38 #  $Id$
     38#  $Id: pass1.rb 165 2019-01-11 01:29:47Z ertl-hiro $
    3939#
    4040
     
    6161  "LONG_MAX"  => { EXPR: "LONG_MAX",  SIGNED: true },
    6262  "LONG_MIN"  => { EXPR: "LONG_MIN",  SIGNED: true },
    63   "ULONG_MAX" => { EXPR: "ULONG_MAX" }
     63  "ULONG_MAX" => { EXPR: "ULONG_MAX" },
     64  "SIL_ENDIAN_BIG" \
     65        => { EXPR: "true", BOOL: true, CONDITION: "defined(SIL_ENDIAN_BIG)" },
     66  "SIL_ENDIAN_LITTLE" \
     67        => { EXPR: "true", BOOL: true, CONDITION: "defined(SIL_ENDIAN_LITTLE)" }
    6468}
    6569
     
    6872#
    6973$apiDefinition = { "INCLUDE" =>
    70   { :PARAM => [ { :NAME => :file, :STRING => true }]}}
     74  { :PARAM => [ { :NAME => :file, :STRING_LITERAL => true }]}}
    7175
    7276#
     
    121125            apiParam[:EXPTYPE] = "signed_t"
    122126            apiParam[:SIGNED] = true
     127          when "^"                                      # ポインタ整数定数式パラメータ
     128            apiParam[:EXPTYPE] = "uintptr_t"
     129            apiParam[:INTPTR] = true
    123130          when "&"                                      # 一般整数定数式パラメータ
    124131            # do nothing
    125132          when "$"                                      # 文字列定数式パラメータ
    126133            apiParam[:STRING] = true
     134            apiParam[:EXPTYPE] = "char *"
    127135          else
    128136            error_exit("`#{param}' is invalid")
     
    171179                                                { skip_blanks: true, skip_lines: /^#/ })
    172180    symvalCsv.each do |record|
     181      symbol = {}
     182
    173183      # 変数名
    174184      if record[0].nil?
    175185        error_exit("invalid variable name in " \
    176186                                                "`#{symvalTableFileName}:#{symvalCsv.to_io.lineno}'")
    177       end
    178 
    179       symbol = {}
    180       variable = record[0]
     187      elsif /^(.+)\[(.+)\]$/ =~ record[0]
     188        variable = $1
     189        symbol[:NUMSTRVAR] = $2
     190      else
     191        variable = record[0]
     192      end
    181193
    182194      # 式
     
    192204        when /^[bB]/                            # 真偽値
    193205          symbol[:BOOL] = true
     206        when /^[iI]/                            # ポインタ整数値
     207          symbol[:INTPTR] = true
    194208        when /^[uU]/                            # 符号無し整数値
    195209          # 何も設定しない
     
    367381    skipSpace(cfgFile, withinApi)
    368382    if @line.nil?                                                       # ファイル末であればエラー終了
    369       error_exit("unexpexced end-of-file")
     383      error_exit("#{cfgFile.getFileName}: unexpeced end-of-file")
    370384    end
    371385  end
     
    472486    end
    473487
    474     if apiParam.has_key?(:STRING)
     488    if apiParam.has_key?(:STRING_LITERAL)
    475489      return(param.unquote)
    476490    else
     
    604618        # プリプロセッサディレクティブを読む
    605619        case @line
    606         when /^#include\b(.*)$/
    607           $includeFiles.push($1.strip)
    608         when /^#(ifdef|ifndef|if|endif|else|elif)\b/
    609           directive = { :DIRECTIVE => @line.strip }
     620        when /^#(include|ifdef|ifndef|if|endif|else|elif)\b/
     621          directive = {}
     622          directive[:DIRECTIVE] = @line.strip
     623          directive[:_FILE_] = cfgFile.getFileName
     624          directive[:_LINE_] = cfgFile.getLineNo
    610625          $cfgFileInfo.push(directive)
    611626        else
     
    619634        case apiName
    620635        when "KERNEL_DOMAIN"
    621           if $supportDomain.nil?
     636          if !$supportDomain
    622637            parse_warning(cfgFile, "`KERNEL_DOMAIN' is not supported")
    623638          end
     
    629644          @@nestDC.push("domain")
    630645        when "DOMAIN"
    631           if $supportDomain.nil?
     646          if !$supportDomain
    632647            parse_warning(cfgFile, "`DOMAIN' is not supported")
    633648          end
     
    655670          @@nestDC.push("domain")
    656671        when "CLASS"
    657           if $supportClass.nil?
     672          if !$supportClass
    658673            parse_warning(cfgFile, "`CLASS' is not supported")
    659674          end
     
    676691              includeFilePath = SearchFilePath(staticApi[:file])
    677692              if includeFilePath.nil?
    678                 parse_error(cfgFile, "`#{staticApi[:file]}' not found")
     693                error = {}
     694                error[:DIRECTIVE] = "#error '#{staticApi[:file]}' not found."
     695                error[:_FILE_] = cfgFile.getFileName
     696                error[:_LINE_] = cfgFile.getLineNo
     697                $cfgFileInfo.push(error)
    679698              else
    680699                $dependencyFiles.push(includeFilePath)
     
    694713              $cfgFileInfo.push(staticApi)
    695714            end
     715
     716            # ";"を読む
     717            skipToToken(cfgFile, false)         # 次の文字まで読み飛ばす
     718            if (/^\;(.*)$/ =~ @line)
     719              @line = $1
     720            else
     721              parse_error(cfgFile, "`;' expected after static API")
     722            end
    696723          else
    697724            parse_error(cfgFile, "unknown static API: #{apiName}")
     
    727754  #
    728755  def self.OutLineNumber(cfgInfo)
    729     @cfg1Out.add("#line #{cfgInfo[:_LINE_]} \"#{cfgInfo[:_FILE_].gsub('\\', '/')}\"")
     756    @cfg1Out.add("#line #{cfgInfo[:_LINE_]} \"#{cfgInfo[:_FILE_]}\"")
    730757  end
    731758
     
    734761  #
    735762  def self.OutClassLineNumber(cfgInfo)
    736     @cfg1Out.add("#line #{cfgInfo[:CLASS_LINE_]} \"#{cfgInfo[:CLASS_FILE_].gsub('\\', '/')}\"")
     763    @cfg1Out.add("#line #{cfgInfo[:CLASS_LINE_]} \"#{cfgInfo[:CLASS_FILE_]}\"")
    737764  end
    738765
     
    763790EOS
    764791
    765     # インクルードヘッダファイル
    766     $includeFiles.each do |file|
    767       @cfg1Out.add("#include #{file}")
     792    # インクルードディレクティブ(#include)の生成
     793    $cfgFileInfo.each do |cfgInfo|
     794      if cfgInfo.has_key?(:DIRECTIVE)
     795        OutLineNumber(cfgInfo)
     796        @cfg1Out.add(cfgInfo[:DIRECTIVE])
     797      end
    768798    end
    769799
     
    780810#include "#{CFG1_OUT_TARGET_H}"
    781811
    782 #if defined(SIL_ENDIAN_BIG) && defined(SIL_ENDIAN_LITTLE)
    783 #error Both SIL_ENDIAN_BIG and SIL_ENDIAN_LITTLE are defined.
    784 #endif
    785 #if !defined(SIL_ENDIAN_BIG) && !defined(SIL_ENDIAN_LITTLE)
    786 #error Neither SIL_ENDIAN_BIG nor SIL_ENDIAN_LITTLE is defined.
    787 #endif
    788 
    789812const uint32_t #{CFG1_MAGIC_NUM} = 0x12345678;
    790813const uint32_t #{CFG1_SIZEOF_SIGNED} = sizeof(signed_t);
     814const uint32_t #{CFG1_SIZEOF_INTPTR} = sizeof(intptr_t);
     815const uint32_t #{CFG1_SIZEOF_CHARPTR} = sizeof(char *);
    791816EOS
    792817
    793818    # 値取得シンボルの処理
    794819    $symbolValueTable.each do |symbolName, symbolData|
    795       if symbolData.has_key?(:BOOL) || symbolData.has_key?(:SIGNED)
     820      if symbolData.has_key?(:BOOL)
     821        type = "signed_t"
     822      elsif symbolData.has_key?(:INTPTR)
     823        type = "uintptr_t"
     824      elsif symbolData.has_key?(:SIGNED)
    796825        type = "signed_t"
    797826      else
     
    825854    $cfgFileInfo.each do |cfgInfo|
    826855      if cfgInfo.has_key?(:DIRECTIVE)
    827         @cfg1Out.add2(cfgInfo[:DIRECTIVE])
     856        # 条件ディレクティブを出力
     857        if cfgInfo[:DIRECTIVE] =~ /^#(ifdef|ifndef|if|endif|else|elif)\b/
     858          OutLineNumber(cfgInfo)
     859          @cfg1Out.add2(cfgInfo[:DIRECTIVE])
     860        end
    828861      else
    829862        apiDef = $apiDefinition[cfgInfo[:APINAME]]
     
    882915  $cfgFileInfo = []
    883916  $dependencyFiles = $configFileNames.dup
    884   $includeFiles = []
    885917  $domainId = { "TDOM_KERNEL" => -1, "TDOM_NONE" => -2 }
    886918  $configFileNames.each do |configFileName|
     
    939971  #  パス2に引き渡す情報をファイルに生成
    940972  #
    941   if $omitOutputDb.nil?
     973  if !$omitOutputDb
    942974    db = PStore.new(CFG1_OUT_DB)
    943975    db.transaction do
     
    945977      db[:symbolValueTable] = $symbolValueTable
    946978      db[:cfgFileInfo] = $cfgFileInfo
    947       db[:includeFiles] = $includeFiles
    948979      db[:domainId] = $domainId
    949980    end
  • EcnlProtoTool/trunk/asp3_dcre/cfg/pass2.rb

    r331 r429  
    44#
    55#  Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
    6 #  Copyright (C) 2015-2017 by Embedded and Real-Time Systems Laboratory
     6#  Copyright (C) 2015-2018 by Embedded and Real-Time Systems Laboratory
    77#              Graduate School of Information Science, Nagoya Univ., JAPAN
    88#
     
    3636#  の責任を負わない.
    3737#
    38 #  $Id$
     38#  $Id: pass2.rb 175 2019-06-19 01:51:58Z ertl-hiro $
    3939#
    4040
     
    5959
    6060  #
     61  #  Sレコードファイルからシンボルの文字列を取り出す
     62  #
     63  def self.GetSymbolString(symbol)
     64    if @symbolAddress.has_key?(symbol) \
     65                        && !(address = @cfg1SRec.get_value(@symbolAddress[symbol], \
     66                                                                                                $sizeOfCharPtr, false)).nil?
     67      return(@cfg1SRec.get_string(address))
     68    else
     69      return(nil)
     70    end
     71  end
     72
     73  #
    6174  #  パス1の生成物の読み込み(メインの処理)
    6275  #
     
    7285    end
    7386
    74     # マジックナンバーの取得
     87    # マジックナンバーの取得とエンディアンの設定
    7588    if @symbolAddress.has_key?(CFG1_MAGIC_NUM)
    7689      $asmLabel = ""
     
    95108    # 固定出力した変数の取得
    96109    $sizeOfSigned = GetSymbolValue($asmLabel + CFG1_SIZEOF_SIGNED, 4, false)
     110    $sizeOfIntptr = GetSymbolValue($asmLabel + CFG1_SIZEOF_INTPTR, 4, false)
     111    $sizeOfCharPtr = GetSymbolValue($asmLabel + CFG1_SIZEOF_CHARPTR, 4, false)
    97112
    98113    # 値取得シンボルの取得
     
    106121        end
    107122      else
    108         value = GetSymbolValue(symbol, $sizeOfSigned, \
     123        if symbolData.has_key?(:INTPTR)
     124          value = GetSymbolValue(symbol, $sizeOfIntptr, \
    109125                                                                                symbolData.has_key?(:SIGNED))
     126        else
     127          value = GetSymbolValue(symbol, $sizeOfSigned, \
     128                                                                                symbolData.has_key?(:SIGNED))
     129        end
    110130        if !value.nil?
    111131          symbolData[:VALUE] = value
    112132        end
     133      end
     134    end
     135
     136    # SILによるエンディアン定義のチェック
     137    if $symbolValueTable["SIL_ENDIAN_BIG"].has_key?(:VALUE)
     138      if $symbolValueTable["SIL_ENDIAN_LITTLE"].has_key?(:VALUE)
     139        error_exit("Both SIL_ENDIAN_BIG and SIL_ENDIAN_LITTLE are defined.")
     140      else
     141        if $endianLittle
     142          error_exit("Definition of SIL_ENDIAN_BIG seems to be wrong.")
     143        end
     144      end
     145    else
     146      if $symbolValueTable["SIL_ENDIAN_LITTLE"].has_key?(:VALUE)
     147        if !$endianLittle
     148          error_exit("Definition of SIL_ENDIAN_LITTLE seems to be wrong.")
     149        end
     150      else
     151        # 両方が未定義の場合のエラーチェックは,sil.hで実施する
    113152      end
    114153    end
     
    133172
    134173    #
    135     #  ドメイン生成データをコンフィギュレーションデータ($cfgData)に格納
    136     #
    137     $cfgData[:CRE_DOM] = {}
    138     $domainId.each do |domainName, domainVal|
    139       domid = NumStr.new(domainVal, domainName)
    140       $cfgData[:CRE_DOM][domainVal] = { :domid => domid }
     174    #  ドメインデータ($domData)を生成
     175    #
     176    if $supportDomain
     177      $domData = {}
     178      $domainId.each do |domainName, domainVal|
     179        domid = NumStr.new(domainVal, domainName)
     180        $domData[domainVal] = { :domid => domid }
     181      end
     182      $globalVars.push("domData")
    141183    end
    142184
     
    146188  #
    147189  #  パラメータの値を取り出す
     190  #
     191  #  生成スクリプト内で追加された静的APIの場合には,apiIndexがnilになる.
    148192  #
    149193  def self.GetParamValue(paramName, param, apiIndex, index, apiParam, cfgInfo)
     
    160204        value = nil
    161205      end
     206    elsif apiParam.has_key?(:STRING)                    # 文字列パラメータ
     207      if !apiIndex.nil?
     208        symbol = "#{$cfg1_prefix}valueof_#{paramName}_#{apiIndex}#{index}"
     209        return(GetSymbolString(symbol))
     210      else
     211        return(param)
     212      end
    162213    elsif apiParam.has_key?(:EXPTYPE)                   # 整数定数式パラメータ
    163       if apiIndex.nil?
     214      if !apiIndex.nil?
     215        symbol = "#{$cfg1_prefix}valueof_#{paramName}_#{apiIndex}#{index}"
     216        if apiParam.has_key?(:INTPTR)
     217          value = GetSymbolValue(symbol, $sizeOfIntptr, \
     218                                                                                apiParam.has_key?(:SIGNED))
     219        else
     220          value = GetSymbolValue(symbol, $sizeOfSigned, \
     221                                                                                apiParam.has_key?(:SIGNED))
     222        end
     223      else
    164224        if param.is_a?(NumStr)
    165225          return(param)
     
    167227          return(NumStr.new(param))
    168228        end
    169       else
    170         symbol = "#{$cfg1_prefix}valueof_#{paramName}_#{apiIndex}#{index}"
    171         value = GetSymbolValue(symbol, $sizeOfSigned, \
    172                                                                         apiParam.has_key?(:SIGNED))
    173       end
    174     else                                                                                # 一般定数式/文字列パラメータ
     229      end
     230    else                                                                                # 一般定数式パラメータ
    175231      return(param)
    176232    end
     
    201257
    202258    # ID番号割り当ての前処理
    203     objidParamNameList = []
    204259    $cfgFileInfo.each do |cfgInfo|
    205260      # プリプロセッサディレクティブは読み飛ばす
     
    228283            @objidValues[objidParamName][objName] = nil
    229284          end
    230           objidParamNameList.push(objidParamName)
    231285        end
    232286      end
     
    234288
    235289    # ID番号の割当て処理
    236     objidParamNameList.each do |objidParamName|
    237       objidList = @objidValues[objidParamName]
    238 
     290    @objidValues.each do |objidParamName, objidList|
    239291      # 未使用のID番号のリスト(使用したものから消していく)
    240292      unusedObjidList = (1.upto(objidList.keys.size)).to_a
     
    311363      # クラスIDを追加
    312364      if cfgInfo.has_key?(:CLASS)
    313         if apiIndex.nil?
    314           params[:class] = cfgInfo[:CLASS]
    315         else
     365        if !apiIndex.nil?
    316366          symbol = "#{$cfg1_prefix}valueof_CLASS_#{apiIndex}"
    317367          value = GetSymbolValue(symbol, $sizeOfSigned, true)
    318368          params[:class] = NumStr.new(value, cfgInfo[:CLASS])
     369        else
     370          params[:class] = cfgInfo[:CLASS]
    319371        end
    320372      end
     
    343395
    344396  #
     397  #  ID番号の割当て結果の上書き
     398  #
     399  def self.SetObjidList(objidParamName, objidList)
     400    @objidValues[objidParamName] = objidList
     401  end
     402
     403  #
    345404  #  ID番号出力ファイルの生成
    346405  #
     
    364423  db = PStore.new(CFG1_OUT_DB)
    365424  db.transaction(true) do
    366     $apiDefinition = db[:apiDefinition]
    367     $symbolValueTable = db[:symbolValueTable]
    368     $cfgFileInfo = db[:cfgFileInfo]
    369     $includeFiles = db[:includeFiles]
    370     $domainId = db[:domainId]
    371   end
    372   $cfg2Data = {}
     425    db.roots.each do |var|
     426      eval("$#{var} = db[:#{var}]")
     427    end
     428  end
     429
     430  #
     431  #  パス3以降に引き渡す情報の定義
     432  #
     433  $globalVars = [ "globalVars",
     434                  "apiDefinition",
     435                  "symbolValueTable",
     436                  "cfgFileInfo",
     437                  "cfgData",
     438                  "asmLabel",
     439                  "endianLittle" ]
    373440
    374441  #
     
    404471  #  パス3に引き渡す情報をファイルに生成
    405472  #
    406   if $omitOutputDb.nil?
     473  if !$omitOutputDb
    407474    db = PStore.new(CFG2_OUT_DB)
    408475    db.transaction do
    409       db[:apiDefinition] = $apiDefinition
    410       db[:symbolValueTable] = $symbolValueTable
    411       db[:cfgFileInfo] = $cfgFileInfo
    412       db[:includeFiles] = $includeFiles
    413       db[:cfgData] = $cfgData
    414       db[:asmLabel] = $asmLabel
    415       db[:endianLittle] = $endianLittle
    416       db[:cfg2Data] = $cfg2Data
     476      $globalVars.each do |var|
     477        eval("db[:#{var}] = $#{var}")
     478      end
    417479    end
    418480  end
Note: See TracChangeset for help on using the changeset viewer.