_rom_info.tcl 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. set_help_text rom_info\
  2. {Prints information about the given ROM device, coming from the software
  3. database. If no argument is given, the first found (external) ROM device is
  4. shown.}
  5. namespace eval rom_info {
  6. proc tab {args} {
  7. set result [list]
  8. foreach device [machine_info device] {
  9. if {[dict get [machine_info device $device] "type"] eq "ROM"} {
  10. lappend result $device
  11. }
  12. }
  13. return $result
  14. }
  15. set_tabcompletion_proc rom_info [namespace code tab]
  16. proc getlist_rom_info {{romdevice ""}} {
  17. if {$romdevice eq ""} {
  18. set romdevice [guess_rom_device]
  19. if {$romdevice eq ""} {
  20. error "No (external) ROM device found"
  21. }
  22. }
  23. if {[catch {set device_info [machine_info device $romdevice]}]} {
  24. error "No such device: $romdevice"
  25. }
  26. set device_type [dict get $device_info "type"]
  27. if {$device_type ne "ROM"} {
  28. error [format "Device is not of type ROM, but %s" $device_type]
  29. }
  30. set actualSHA1 [dict get $device_info "actualSHA1"]
  31. set originalSHA1 [dict get $device_info "originalSHA1"]
  32. if {[catch {set rominfo [openmsx_info software $actualSHA1]}]} {
  33. # try original sha1 to get more info
  34. if {[catch {set rominfo [openmsx_info software $originalSHA1}]} {
  35. return
  36. }
  37. }
  38. set softPatched [expr {$actualSHA1 ne $originalSHA1}]
  39. dict with rominfo {
  40. # dummy info for missing items
  41. foreach key [list year company] {
  42. if {[set $key] eq ""} {
  43. set $key "(info not available)"
  44. }
  45. }
  46. if {$original} {
  47. # this is an unmodified original dump
  48. set status [format "Unmodified dump (confirmed by %s)" $orig_type]
  49. } else {
  50. # not original or unknown
  51. switch $orig_type {
  52. "broken" {
  53. set status "Bad dump (game is broken)"
  54. }
  55. "translated" {
  56. set status "Translated from original"
  57. }
  58. "working" {
  59. set status "Modified but confirmed working"
  60. }
  61. default {
  62. set status "Unknown"
  63. }
  64. }
  65. }
  66. if {$softPatched} {
  67. set status "$status (patched by openMSX)"
  68. }
  69. return [list \
  70. "title" $title \
  71. "year" $year \
  72. "company" $company \
  73. "country" $country \
  74. "status" $status \
  75. "remark" $remark]
  76. }
  77. }
  78. proc rom_info {{romdevice ""}} {
  79. set rominfo [rom_info::getlist_rom_info $romdevice]
  80. if {$rominfo eq ""} {return "No ROM information available..."}
  81. append result "Title: [dict get $rominfo title]\n" \
  82. "Year: [dict get $rominfo year]\n" \
  83. "Company: [dict get $rominfo company]\n" \
  84. "Country: [dict get $rominfo country]\n" \
  85. "Status: [dict get $rominfo status]" \
  86. set remark [dict get $rominfo remark]
  87. if {$remark ne ""} {
  88. append result "\nRemark: $remark"
  89. } else {
  90. append result "\nRemark: None"
  91. }
  92. return $result
  93. }
  94. namespace export rom_info
  95. namespace export getlist_rom_info
  96. } ;# namespace rom_info
  97. namespace import rom_info::*