Work-in-progress: apitrace dispatch layer for Regal, not enabled yet. Added All.sln for VC10 purposes.
201 lines
6.7 KiB
Python
201 lines
6.7 KiB
Python
#!/usr/bin/python
|
|
|
|
class Api:
|
|
|
|
def __init__(self):
|
|
|
|
self.functions = []
|
|
self.typedefs = []
|
|
self.enums = []
|
|
self.variables = []
|
|
self.extensions = []
|
|
self.states = []
|
|
self.stateTypes = []
|
|
self.conditional = ''
|
|
|
|
def add(self, item):
|
|
|
|
if isinstance(item, Function):
|
|
self.functions.append(item)
|
|
elif isinstance(item, Typedef):
|
|
self.typedefs.append(item)
|
|
elif isinstance(item, Enum):
|
|
self.enums.append(item)
|
|
elif isinstance(item, Parameter):
|
|
self.variables.append(item)
|
|
elif isinstance(item, Extension):
|
|
self.extensions.append(item)
|
|
elif isinstance(item, StateType):
|
|
self.stateTypes.append(item)
|
|
elif isinstance(item, State):
|
|
self.states.append(item)
|
|
else:
|
|
raise TypeError, 'Unsupported Api type'
|
|
|
|
class Extension:
|
|
|
|
def __init__(self, name = '', url = ''):
|
|
|
|
self.name = name
|
|
self.url = url
|
|
self.category = ''
|
|
self.functions = [] # function names
|
|
self.enumerants = [] # enumerant names
|
|
self.emulatedBy = '' # Regal emulation layer that adds support for this extension
|
|
self.emulatedIf = '' # optional condition determing if extension can be emulated
|
|
|
|
class Function:
|
|
|
|
def __init__(self, name = ''):
|
|
|
|
self.name = name
|
|
self.ret = None
|
|
self.parameters = []
|
|
self.version = ''
|
|
self.extension = ''
|
|
self.deprecated = ''
|
|
self.category = ''
|
|
self.public = True
|
|
self.trace = True # Include in text trace
|
|
self.play = True # Playback supported
|
|
|
|
def add(self, parameter):
|
|
|
|
if isinstance(parameter, Parameter):
|
|
self.parameters.append(parameter)
|
|
else:
|
|
raise TypeError, 'Invalid Parameter type'
|
|
|
|
class Typedef:
|
|
|
|
def __init__(self, name = '', type = ''):
|
|
|
|
self.name = name
|
|
self.type = type
|
|
self.function = ''
|
|
self.parameters = []
|
|
self.version = ''
|
|
self.extension = ''
|
|
self.deprecated = ''
|
|
self.category = ''
|
|
|
|
def add(self, parameter):
|
|
|
|
if isinstance(parameter, Parameter):
|
|
self.parameters.append(parameter)
|
|
else:
|
|
raise TypeError, 'Invalid Parameter type'
|
|
|
|
class Return:
|
|
|
|
def __init__(self, type = '', default = '', cast = None, binary = False, size = None, maxSize = None, intercept = None, trace = True, play = True, filter = None, regalLog = None):
|
|
|
|
self.type = type # Type string, e.g. int
|
|
self.default = default # Default value, e.g. 0
|
|
self.cast = cast # Cast for trace and APIC purposes, e.g. void * -> char *
|
|
self.binary = binary # Always treat as binary for trace purposes (always base64 encode)
|
|
self.size = size # Array size expression, via helper functions etc
|
|
self.maxSize = maxSize # Maximum array size
|
|
self.intercept = intercept # Intercept the value
|
|
self.trace = trace # Include in text trace
|
|
self.play = play # Include in playback
|
|
self.filter = filter # Filtering function
|
|
self.regalLog = None # Function for Regal logging purposes
|
|
|
|
class Parameter:
|
|
|
|
def __init__(self, name = '', type = '', default = '', cast = None, binary = False, size = None, maxSize = None, trace = True, play = True, filter = None, regalLog = None):
|
|
|
|
self.name = name # Parameter name string, e.g. foo
|
|
self.type = type # Type string, e.g. int
|
|
self.default = default # Default value, e.g. 0
|
|
self.cast = cast # Cast for trace and APIC purposes, e.g. void * -> char *
|
|
self.binary = binary # Always treat as binary for trace purposes (always base64 encode)
|
|
self.size = size # Array size expression, via helper functions etc
|
|
self.maxSize = maxSize # Maximum array size
|
|
self.input = True # Input parameter?
|
|
self.output = False # Output parameter?
|
|
self.trace = trace # Include in text trace
|
|
self.play = play # Include in playback
|
|
self.filter = filter # Filtering function
|
|
self.regalLog = regalLog # Function for Regal logging purposes
|
|
|
|
def Input(name = '', type = '', default = '', cast = None, binary = False, size = None, maxSize = None, lookup = None, intercept = None, trace = True, play = True, filter = None, regalLog = None):
|
|
|
|
parameter = Parameter(name, type, default, cast, binary, size, maxSize, trace, play, filter, regalLog)
|
|
parameter.input = True
|
|
parameter.output = False
|
|
parameter.lookup = lookup
|
|
parameter.intercept = intercept # Intercept the value
|
|
return parameter
|
|
|
|
def Output(name = '', type = '', default = '', cast = None, binary = False, size = None, maxSize = None, intercept = None, trace = True, play = True, filter = None, regalLog = None):
|
|
|
|
parameter = Parameter(name, type, default, cast, binary, size, maxSize, trace, play, filter, regalLog)
|
|
parameter.input = False
|
|
parameter.output = True
|
|
parameter.intercept = intercept # Intercept the value
|
|
return parameter
|
|
|
|
def InputOutput(name = '', type = '', default = '', cast = None, binary = False, size = None, maxSize = None, lookup = None, intercept = None, trace = True, play = True, filter = None, regalLog = None):
|
|
|
|
parameter = Parameter(name, type, default, cast, binary, size, maxSize, trace, play, filter, regalLog)
|
|
parameter.input = True
|
|
parameter.output = True
|
|
parameter.lookup = None
|
|
parameter.intercept = None # Intercept the value
|
|
return parameter
|
|
|
|
class Enum:
|
|
|
|
def __init__(self, name = ''):
|
|
|
|
self.name = name
|
|
self.enumerants = []
|
|
self.version = ''
|
|
self.extension = ''
|
|
self.deprecated = ''
|
|
self.category = ''
|
|
self.default = None
|
|
|
|
def add(self, enumerant):
|
|
|
|
if isinstance(enumerant, Enumerant):
|
|
self.enumerants.append(enumerant)
|
|
else:
|
|
raise TypeError, 'Invalid Enumerant type'
|
|
|
|
class Enumerant:
|
|
|
|
def __init__(self, name = '', value = '', category = ''):
|
|
|
|
self.name = name
|
|
self.value = value
|
|
self.version = ''
|
|
self.extension = ''
|
|
self.deprecated = ''
|
|
self.category = category
|
|
self.public = True
|
|
|
|
class StateType:
|
|
|
|
def __init__(self, name = '', code = '', explanation = ''):
|
|
|
|
self.name = name
|
|
self.code = code
|
|
self.explanation = explanation
|
|
self.ctype = []
|
|
self.size = 1
|
|
self.params = 0
|
|
|
|
class State:
|
|
|
|
def __init__(self, getValue, type, getCommand, initialValue, description, section, attribute):
|
|
|
|
self.getValue = getValue
|
|
self.type = type
|
|
self.getCommand = getCommand
|
|
self.initialValue = initialValue
|
|
self.description = description
|
|
self.section = section
|
|
self.attribute = attribute
|