1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  | 
import os
from gi.repository import Gtk
from pychrysalide.analysis import LoadedBinary
from pychrysalide.gui import core
from pychrysalide.gui import PanelItem
from .converters import *
class ConvPanel(PanelItem):
    def __init__(self):
        """Initialize the GUI panel."""
        directory = os.path.dirname(os.path.realpath(__file__))
        self._builder = Gtk.Builder()
        self._builder.add_from_file(os.path.join(directory, 'panel.ui'))
        params = {
            'name' : 'Converter',
            'widget' : self._builder.get_object('content'),
            'personality' : PanelItem.PIP_SINGLETON,
            'lname' : 'Data live converter',
            'dock' : True,
            'path' : 'MES'
        }
        super(ConvPanel, self).__init__(**params)
        self._conversions = {
            'int8':   lambda c, a, o: data_to_number(c, a, o, 'b'),
            'uint8':  lambda c, a, o: data_to_number(c, a, o, 'B'),
            'int16':  lambda c, a, o: data_to_number(c, a, o, 'h'),
            'uint16': lambda c, a, o: data_to_number(c, a, o, 'H'),
            'int32':  lambda c, a, o: data_to_number(c, a, o, 'l'),
            'uint32': lambda c, a, o: data_to_number(c, a, o, 'L'),
            'int64':  lambda c, a, o: data_to_number(c, a, o, 'q'),
            'uint64': lambda c, a, o: data_to_number(c, a, o, 'Q'),
            'half_float': lambda c, a, o: data_to_number(c, a, o, 'e'),
            'float':  lambda c, a, o: data_to_number(c, a, o, 'f'),
            'double': lambda c, a, o: data_to_number(c, a, o, 'd'),
            'time':     lambda c, a, o: data_to_time(c, a, o, 'L'),
            'time64':   lambda c, a, o: data_to_time(c, a, o, 'Q'),
            'filetime': data_to_filetime,
            'dostime':  data_to_dos_time,
            'dosdate':  data_to_dos_date,
            'char':  data_to_char,
            'ansi':  data_to_ansi,
            'utf8':  data_to_utf8,
            'utf16': data_to_utf16,
        }
        for kind, func in self._conversions.items():
            label = self._builder.get_object('%s_value' % kind)
            label.set_text('-')
        self._order = '@'
    def _track_cursor(self, source, cursor):
        """Track moves from the current cursor."""
        loaded = core.get_current_content()
        assert(loaded)
        for kind, func in self._conversions.items():
            label = self._builder.get_object('%s_value' % kind)
            try:
                addr = cursor.retrieve()
                label.set_text(func(loaded.content, addr, self._order))
            except Exception as e:
                label.set_text('-')
  |