Changeset 389 for azure_iot_hub/trunk/asp3_dcre/cfg/cfg.rb
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/cfg/cfg.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 8 8 # Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 # 10 # ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 # å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 # ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 # è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 # ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 # ã¨ï¼ 29 # (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 # (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 # å ±åãããã¨ï¼ 37 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 # 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 # å 45 責ãããã¨ï¼ 46 # 47 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 # ã®è²¬ä»»ãè² ããªãï¼ 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 # の責任を負わない. 53 38 # 54 39 # $Id$ … … 68 53 69 54 # 70 # å®æ°å®ç¾© 71 # 72 # å 73 ±é 55 # 定数定義 56 # 57 # 共通 74 58 VERSION = "1.2.2" 75 59 76 # cfg1_out é¢ä¿60 # cfg1_out関係 77 61 CFG1_PREFIX = "TOPPERS_cfg_" 78 62 CFG1_MAGIC_NUM = "TOPPERS_magic_number" … … 85 69 CFG1_OUT_TARGET_H = "target_cfg1_out.h" 86 70 87 # cfg2_out é¢ä¿71 # cfg2_out関係 88 72 CFG2_OUT_DB = "cfg2_out.db" 89 73 90 # cfg3_out é¢ä¿74 # cfg3_out関係 91 75 CFG3_OUT_DB = "cfg3_out.db" 92 76 93 77 # 94 # ã¨ã©ã¼çºçæç¡ãã©ã°78 # エラー発生有無フラグ 95 79 # 96 80 $errorFlag = false 97 81 98 82 # 99 # ã¨ã©ã¼ï¼è¦å表示é¢æ°100 # 101 # ä¸è¬çãªã¨ã©ã¼è¡¨ç¤ºï¼å¦çãä¸æï¼83 # エラー/警告表示関数 84 # 85 # 一般的なエラー表示(処理を中断) 102 86 def error_exit(message, location = "") 103 87 location += " " if location != "" … … 105 89 end 106 90 107 # ä¸è¬çãªã¨ã©ã¼è¡¨ç¤ºï¼å¦çãç¶ç¶ï¼91 # 一般的なエラー表示(処理を継続) 108 92 def error(message, location = "") 109 93 location += " " if location != "" … … 112 96 end 113 97 114 # ä¸è¬çãªè¦å表示98 # 一般的な警告表示 115 99 def warning(message, location = "") 116 100 location += " " if location != "" … … 118 102 end 119 103 120 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®æ§æ解ææã®ã¨ã©ã¼104 # システムコンフィギュレーションファイルの構文解析時のエラー 121 105 $noParseError = 0 122 106 def parse_error(cfgFile, message) … … 127 111 end 128 112 129 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®æ§æ解ææã®è¦å113 # システムコンフィギュレーションファイルの構文解析時の警告 130 114 def parse_warning(cfgFile, message) 131 115 warning(message, "#{cfgFile.getFileName()}:#{cfgFile.getLineNo}:") … … 133 117 134 118 # 135 # éçAPIå¦çæã®ã¨ã©ã¼ï¼è¦å表示é¢æ°136 # 137 # éçAPIå¦çæã®ã¨ã©ã¼ï¼è¦åãçãè¨è¿°ã§ããããã«ï¼ã¡ãã»ã¼ã¸ä¸ã®%ã¾138 # ãã¯%%ã§å§ã¾ãè¨è¿°ã以ä¸ã®ããã«å±éããï¼139 # %label â#{params[:label]}140 # %%label âlabel `#{params[:label]}'141 # 142 # ã¨ã©ã¼ï¼è¦åã¡ãã»ã¼ã¸ã®å±é119 # 静的API処理時のエラー/警告表示関数 120 # 121 # 静的API処理時のエラー/警告を短く記述できるように,メッセージ中の%ま 122 # たは%%で始まる記述を以下のように展開する. 123 # %label → #{params[:label]} 124 # %%label → label `#{params[:label]}' 125 # 126 # エラー/警告メッセージの展開 143 127 def expand_message(message, params) 144 128 result = message.dup … … 156 140 end 157 141 158 # éçAPIå¦çæã®ã¨ã©ã¼142 # 静的API処理時のエラー 159 143 def error_api(params, message) 160 144 error(expand_message(message, params), \ … … 162 146 end 163 147 164 # éçAPIå¦çæã®è¦å148 # 静的API処理時の警告 165 149 def warning_api(params, message) 166 150 warning(expand_message(message, params), \ … … 168 152 end 169 153 170 # éçAPIå¦çæã®ã¨ã©ã¼ï¼ã¨ã©ã¼ã³ã¼ãä»ãï¼154 # 静的API処理時のエラー(エラーコード付き) 171 155 def error_ercd(errorCode, params, message) 172 156 error_api(params, "#{errorCode}: #{message}") 173 157 end 174 158 175 # éçAPIå¦çæã®è¦åï¼ã¨ã©ã¼ã³ã¼ãä»ãï¼159 # 静的API処理時の警告(エラーコード付き) 176 160 def warning_ercd(errorCode, params, message) 177 161 warning_api(params, "#{errorCode}: #{message}") 178 162 end 179 163 180 # ãã©ã¡ã¼ã¿ã®ã¨ã©ã¼164 # パラメータのエラー 181 165 def error_wrong(errorCode, params, symbol, wrong) 182 166 error_ercd(errorCode, params, "%%#{symbol} is #{wrong} in %apiname") … … 193 177 end 194 178 195 # ãã©ã¡ã¼ã¿ä¸æ£ã®ã¨ã©ã¼179 # パラメータ不正のエラー 196 180 def error_illegal(errorCode, params, symbol) 197 181 error_ercd(errorCode, params, "illegal %%#{symbol} in %apiname") … … 209 193 210 194 # 211 # String ã¯ã©ã¹ã®æ¡å¼µï¼äºéå¼ç¨ç¬¦ã§å²ã¾ããæååã®ä½æï¼å±éï¼195 # Stringクラスの拡張(二重引用符で囲まれた文字列の作成/展開) 212 196 # 213 197 class String 214 198 # 215 # äºéå¼ç¨ç¬¦ã§å²ã¾ããæååã®ä½æ199 # 二重引用符で囲まれた文字列の作成 216 200 # 217 201 def quote … … 249 233 250 234 # 251 # äºéå¼ç¨ç¬¦ã§å²ã¾ããæååã®å±é235 # 二重引用符で囲まれた文字列の展開 252 236 # 253 237 def unquote … … 299 283 300 284 # 301 # NumStr ã¯ã©ã¹ï¼æ°å¤ã«æååãä»å ãããã®ï¼ã®å®ç¾©285 # NumStrクラス(数値に文字列を付加したもの)の定義 302 286 # 303 287 class NumStr … … 307 291 end 308 292 309 # æ°å¤æ 310 å ±ãè¿ã 293 # 数値情報を返す 311 294 def val 312 295 return @val … … 314 297 alias_method :to_i, :val 315 298 316 # æååæ 317 å ±ãè¿ã 299 # 文字列情報を返す 318 300 def str 319 301 return @str … … 321 303 alias_method :to_s, :str 322 304 323 # æ¯è¼ã¯æ°å¤æ 324 å ±ã§è¡ã 305 # 比較は数値情報で行う 325 306 def ==(other) 326 307 @val == other … … 333 314 end 334 315 335 # ããã·ã¥ã®ãã¼ã¨ãã¦ä½¿ãæã®æ¯è¼ãæ°å¤æ 336 å ±ã§è¡ã 316 # ハッシュのキーとして使う時の比較も数値情報で行う 337 317 def eql?(other) 338 318 @val == other.val 339 319 end 340 320 341 # ããã·ã¥å¤ã®å®ç¾©ãä¸æ¸ããã321 # ハッシュ値の定義も上書きする 342 322 def hash 343 323 return @val.hash 344 324 end 345 325 346 # æ°å¤ã¯ã©ã¹ã¨æ¼ç®ã§ããããã«ãã326 # 数値クラスと演算できるようにする 347 327 def coerce(other) 348 328 if other.kind_of?(Numeric) … … 353 333 end 354 334 355 # äºéå¼ç¨ç¬¦ã§å²ã¾ããæååã®ä½æ335 # 二重引用符で囲まれた文字列の作成 356 336 def quote 357 337 str.quote 358 338 end 359 339 360 # äºéå¼ç¨ç¬¦ã§å²ã¾ããæååã®å±é340 # 二重引用符で囲まれた文字列の展開 361 341 def unquote 362 342 str.unquote 363 343 end 364 344 365 # pp æã®è¡¨ç¤º345 # pp時の表示 366 346 def pretty_print(q) 367 347 q.text("[#{@val}(=0x#{@val.to_s(16)}),") … … 370 350 end 371 351 372 # æªå®ç¾©ã®ã¡ã½ããã¯@valã«éã352 # 未定義のメソッドは@valに送る 373 353 def method_missing(*method) 374 354 @val.send(*method) … … 377 357 378 358 # 379 # ã·ã³ãã«ãã¡ã¤ã«ã®èªã¿è¾¼ã¿380 # 381 # 以ä¸ã®ã¡ã½ããã¯ï¼GNUã®nmãçæããã·ã³ãã«ãã¡ã¤ã«ã«å¯¾å¿ãã¦ããï¼382 # å¥ã®ãã¼ã«ã«å¯¾å¿ããå ´åã«ã¯ï¼ãã®ã¡ã½ãããæ¸ãæããã°ããï¼359 # シンボルファイルの読み込み 360 # 361 # 以下のメソッドは,GNUのnmが生成するシンボルファイルに対応している. 362 # 別のツールに対応する場合には,このメソッドを書き換えればよい. 383 363 # 384 364 def ReadSymbolFile(symbolFileName) … … 391 371 symbolAddress = {} 392 372 symbolFile.each do |line| 393 # ã¹ãã¼ã¹åºåãã§å解373 # スペース区切りで分解 394 374 fields = line.split(/\s+/) 395 375 396 # 3 åã«ãªã£ã¦ããªãè¡ã¯é¤å¤376 # 3列になっていない行は除外 397 377 if fields.size == 3 398 378 symbolAddress[fields[2]] = fields[0].hex … … 404 384 405 385 # 406 # å¤åå¾ã·ã³ãã«ãã°ãã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã386 # 値取得シンボルをグローバル変数として定義する 407 387 # 408 388 def DefineSymbolValue … … 415 395 416 396 # 417 # ã¤ã³ã¯ã«ã¼ããã¹ãããã¡ã¤ã«ãæ¢ã397 # インクルードパスからファイルを探す 418 398 # 419 399 def SearchFilePath(fileName) 420 400 if File.exist?(fileName) 421 # æå®ãããã¡ã¤ã«ãã¹ã«åå¨ãã401 # 指定したファイルパスに存在する 422 402 return fileName 423 403 elsif /^\./ =~ fileName 424 # ç¸å¯¾ãã¹ãæå®ãã¦ãã¦è¦ã¤ãããªãã£ãå ´åï¼åå¨ããªããã®ã¨ãã425 # ï¼æå³ããªããã¡ã¤ã«ã対象ã¨ãªããã¨ãé²æ¢ï¼404 # 相対パスを指定していて見つからなかった場合,存在しないものとする 405 #(意図しないファイルが対象となることを防止) 426 406 return nil 427 407 else 428 # åã¤ã³ã¯ã«ã¼ããã¹ãããã¡ã¤ã«åå¨ãã§ãã¯408 # 各インクルードパスからファイル存在チェック 429 409 $includeDirectories.each do |includeDirectory| 430 410 path = includeDirectory + "/" + fileName 431 # è¦ã¤ãã£ããç¸å¯¾ãã¹ãè¿ã411 # 見つかったら相対パスを返す 432 412 if File.exist?(path) 433 413 return path … … 439 419 440 420 # 441 # æå®ããçæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãæ¤ç´¢ãã¦loadãã421 # 指定した生成スクリプト(trbファイル)を検索してloadする 442 422 # 443 423 def IncludeTrb(fileName) … … 451 431 452 432 # 453 # ãã¹3ã®å¦ç433 # パス3の処理 454 434 # 455 435 def Pass3 456 436 # 457 # ãã¹2ããå¼ã渡ãããæ 458 å ±ããã¡ã¤ã«ããèªã¿è¾¼ã 437 # パス2から引き渡される情報をファイルから読み込む 459 438 # 460 439 db = PStore.new(CFG2_OUT_DB) … … 472 451 473 452 # 474 # å¤åå¾ã·ã³ãã«ãã°ãã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã453 # 値取得シンボルをグローバル変数として定義する 475 454 # 476 455 DefineSymbolValue() 477 456 478 457 # 479 # çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå®è¡ãã458 # 生成スクリプト(trbファイル)を実行する 480 459 # 481 460 $trbFileNames.each do |trbFileName| … … 484 463 485 464 # 486 # ãã¹4ã«å¼ã渡ãæ 487 å ±ããã¡ã¤ã«ã«çæ 465 # パス4に引き渡す情報をファイルに生成 488 466 # 489 467 if $omitOutputDb.nil? … … 503 481 504 482 # 505 # ãã¹4ã®å¦ç483 # パス4の処理 506 484 # 507 485 def Pass4 508 486 # 509 # ãã¹3ããå¼ã渡ãããæ 510 å ±ããã¡ã¤ã«ããèªã¿è¾¼ã 487 # パス3から引き渡される情報をファイルから読み込む 511 488 # 512 489 db = PStore.new(CFG3_OUT_DB) … … 523 500 524 501 # 525 # å¤åå¾ã·ã³ãã«ãã°ãã¼ãã«å¤æ°ã¨ãã¦å®ç¾©ãã502 # 値取得シンボルをグローバル変数として定義する 526 503 # 527 504 DefineSymbolValue() 528 505 529 506 # 530 # çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå®è¡ãã507 # 生成スクリプト(trbファイル)を実行する 531 508 # 532 509 $trbFileNames.each do |trbFileName| … … 536 513 537 514 # 538 # çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼åãã®é¢æ°515 # 生成スクリプト(trbファイル)向けの関数 539 516 # 540 517 def SYMBOL(symbol) … … 570 547 571 548 # 572 # ã°ãã¼ãã«å¤æ°ã®åæå549 # グローバル変数の初期化 573 550 # 574 551 $kernel = nil … … 585 562 586 563 # 587 # ãªãã·ã§ã³ã®å¦ç564 # オプションの処理 588 565 # 589 566 OptionParser.new(banner="Usage: cfg.rb [options] CONFIG-FILE", 40) do |opt| … … 639 616 640 617 # 641 # ãªãã·ã§ã³ã®ãã§ãã¯618 # オプションのチェック 642 619 # 643 620 if $pass.nil? 644 # ãã¹ã®æå®ã¯å¿ 645 é 621 # パスの指定は必須 646 622 abort("`--pass' option is mandatory") 647 623 elsif /^[1234]$/ !~ $pass … … 649 625 end 650 626 651 # ãã¹1ã§ã¯ï¼éçAPIãã¼ãã«ã¯å¿ 652 é 627 # パス1では,静的APIテーブルは必須 653 628 if ($pass == "1" && $apiTableFileNames.empty?) 654 629 abort("`--api-table' option must be specified in pass 1") 655 630 end 656 631 657 # ãã¹1以å¤ã§ã¯ï¼çæã¹ã¯ãªããï¼trbãã¡ã¤ã«ï¼ãå¿ 658 é 632 # パス1以外では,生成スクリプト(trbファイル)が必須 659 633 if ($pass != "1" && $trbFileNames.empty?) 660 634 abort("`--trb-file' must be specified except in pass 1") … … 662 636 663 637 # 664 # ã«ã¼ãã«ãªãã·ã§ã³ã®å¦ç638 # カーネルオプションの処理 665 639 # 666 640 case $kernel … … 672 646 673 647 # 674 # IDçªå·å 675 ¥åãã¡ã¤ã«ã®åã込㿠648 # ID番号入力ファイルの取り込み 676 649 # 677 650 $inputObjid = {} … … 692 665 693 666 # 694 # æå®ãããã·ã³ãã«ãã¡ã¤ã«ã®èªã¿è¾¼ã¿667 # 指定されたシンボルファイルの読み込み 695 668 # 696 669 if !$romSymbolFileName.nil? … … 703 676 704 677 # 705 # æå®ãããSã¬ã³ã¼ããã¡ã¤ã«ã®èªã¿è¾¼ã¿678 # 指定されたSレコードファイルの読み込み 706 679 # 707 680 if !$romImageFileName.nil? … … 714 687 715 688 # 716 # ãã¹ã«å¾ã£ã¦åå¦çãå®è¡689 # パスに従って各処理を実行 717 690 # 718 691 case $pass … … 731 704 end 732 705 733 # ã¨ã©ã¼çºçæã¯abortãã706 # エラー発生時はabortする 734 707 if $errorFlag 735 708 if ($0 == __FILE__) 736 709 abort() 737 710 else 738 # simplecov 対å¿711 # simplecov対応 739 712 raise() 740 713 end … … 742 715 743 716 # 744 # ä½æãããã¹ã¦ã®ãã¡ã¤ã«ãåºåãã717 # 作成したすべてのファイルを出力する 745 718 # 746 719 GenFile.output 747 720 748 721 # 749 # ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®çæ722 # タイムスタンプファイルの生成 750 723 # 751 724 if !$timeStampFileName.nil? -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.