1  import os 
  2  import sys 
  3  import ctypes 
  4  import logging 
  5   
  6  from ctypes import * 
  7  from ctypes.wintypes import ULONG 
  8  from ctypes.wintypes import DWORD 
  9  from ctypes.wintypes import BOOL 
 10  from ctypes.wintypes import BYTE 
 11  from ctypes.wintypes import WORD 
 12  from ctypes.wintypes import UINT 
 13   
 14  from .. import config as msvc_cfg 
 15  from ... import utils  
 16   
 17  STRING = c_char_p 
 18  _libraries = {} 
 19  _libraries['msvcr70.dll'] = CDLL(msvc_cfg.msvcr_path, mode=RTLD_GLOBAL) 
 20  _libraries['msbsc70.dll'] = CDLL(msvc_cfg.msbsc_path, mode=RTLD_GLOBAL) 
 21   
 22   
 23  qyMac = 9 
 24  refreshAllOp = 4 
 25  qyDervOf = 7 
 26  delOp = 1 
 27  qyImpMembers = 8 
 28  changeOp = 2 
 29  qyRefs = 4 
 30  qyCalls = 2 
 31  changeIinstOp = 3 
 32  qyContains = 1 
 33  qyCalledBy = 3 
 34  noOp = 5 
 35  qyBaseOf = 6 
 36  qyNil = 0 
 37  addOp = 0 
 38  qyDefs = 5 
 39  PULONG = POINTER(ULONG) 
 40  USHORT = c_ushort 
 41  PUSHORT = POINTER(USHORT) 
 42  UCHAR = c_ubyte 
 43  PUCHAR = POINTER(UCHAR) 
 44  PSZ = STRING 
 45  FLOAT = c_float 
 46  PFLOAT = POINTER(FLOAT) 
 47  PBOOL = POINTER(BOOL) 
 48  LPBOOL = POINTER(BOOL) 
 49  PBYTE = POINTER(BYTE) 
 50  LPBYTE = POINTER(BYTE) 
 51  PINT = POINTER(c_int) 
 52  LPINT = POINTER(c_int) 
 53  PWORD = POINTER(WORD) 
 54  LPWORD = POINTER(WORD) 
 55  LPLONG = POINTER(c_long) 
 56  PDWORD = POINTER(DWORD) 
 57  LPDWORD = POINTER(DWORD) 
 58  LPVOID = c_void_p 
 59  LPCVOID = c_void_p 
 60  INT = c_int 
 61  PUINT = POINTER(c_uint) 
 62  ULONG_PTR = POINTER(ULONG) 
 63  NI = ULONG 
 64  IINST = ULONG 
 65  IREF = ULONG 
 66  IDEF = ULONG 
 67  IMOD = USHORT 
 68  LINE = USHORT 
 69  TYP = BYTE 
 70  ATR = USHORT 
 71  ATR32 = ULONG 
 72  MBF = ULONG 
 73  SZ = STRING 
 74  SZ_CONST = STRING 
 75   
 76 -class Bsc(Structure): 
  78   
 79   
 80  OPERATION = c_int  
 83  IinstInfo._fields_ = [ 
 84      ('m_iinst', IINST), 
 85      ('m_szName', SZ_CONST), 
 86      ('m_ni', NI), 
 87  ] 
 90  BSC_STAT._fields_ = [ 
 91      ('cDef', ULONG), 
 92      ('cRef', ULONG), 
 93      ('cInst', ULONG), 
 94      ('cMod', ULONG), 
 95      ('cUseLink', ULONG), 
 96      ('cBaseLink', ULONG), 
 97  ] 
 98 -class NiQ(Structure): 
 100  NiQ._fields_ = [ 
101      ('m_iinstOld', IINST), 
102      ('m_iInfoNew', IinstInfo), 
103      ('m_op', OPERATION), 
104      ('m_typ', TYP), 
105  ] 
106  pfnNotifyChange = CFUNCTYPE(BOOL, POINTER(NiQ), ULONG, ULONG_PTR) 
107   
108   
109  _qy_ = c_int  
110  QY = _qy_ 
111  Bsc._fields_ = [ 
112  ] 
113  BSCOpen = _libraries['msbsc70.dll'].BSCOpen 
114  BSCOpen.restype = BOOL 
115  BSCOpen.argtypes = [SZ_CONST, POINTER(POINTER(Bsc))] 
116  BSCClose = _libraries['msbsc70.dll'].BSCClose 
117  BSCClose.restype = BOOL 
118  BSCClose.argtypes = [POINTER(Bsc)] 
119  BSCIinstInfo = _libraries['msbsc70.dll'].BSCIinstInfo 
120  BSCIinstInfo.restype = BOOL 
121  BSCIinstInfo.argtypes = [POINTER(Bsc), IINST, POINTER(SZ), POINTER(TYP), POINTER(ATR)] 
122  BSCIrefInfo = _libraries['msbsc70.dll'].BSCIrefInfo 
123  BSCIrefInfo.restype = BOOL 
124  BSCIrefInfo.argtypes = [POINTER(Bsc), IREF, POINTER(SZ), POINTER(LINE)] 
125  BSCIdefInfo = _libraries['msbsc70.dll'].BSCIdefInfo 
126  BSCIdefInfo.restype = BOOL 
127  BSCIdefInfo.argtypes = [POINTER(Bsc), IDEF, POINTER(SZ), POINTER(LINE)] 
128  BSCImodInfo = _libraries['msbsc70.dll'].BSCImodInfo 
129  BSCImodInfo.restype = BOOL 
130  BSCImodInfo.argtypes = [POINTER(Bsc), IMOD, POINTER(SZ)] 
131  BSCSzFrTyp = _libraries['msbsc70.dll'].BSCSzFrTyp 
132  BSCSzFrTyp.restype = SZ 
133  BSCSzFrTyp.argtypes = [POINTER(Bsc), TYP] 
134  BSCSzFrAtr = _libraries['msbsc70.dll'].BSCSzFrAtr 
135  BSCSzFrAtr.restype = SZ 
136  BSCSzFrAtr.argtypes = [POINTER(Bsc), ATR] 
137  BSCGetIinstByvalue = _libraries['msbsc70.dll'].BSCGetIinstByvalue 
138  BSCGetIinstByvalue.restype = BOOL 
139  BSCGetIinstByvalue.argtypes = [POINTER(Bsc), SZ, TYP, ATR, POINTER(IINST)] 
140  BSCGetOverloadArray = _libraries['msbsc70.dll'].BSCGetOverloadArray 
141  BSCGetOverloadArray.restype = BOOL 
142  BSCGetOverloadArray.argtypes = [POINTER(Bsc), SZ, MBF, POINTER(POINTER(IINST)), POINTER(ULONG)] 
143  BSCGetUsedByArray = _libraries['msbsc70.dll'].BSCGetUsedByArray 
144  BSCGetUsedByArray.restype = BOOL 
145  BSCGetUsedByArray.argtypes = [POINTER(Bsc), IINST, MBF, POINTER(POINTER(IINST)), POINTER(ULONG)] 
146  BSCGetUsesArray = _libraries['msbsc70.dll'].BSCGetUsesArray 
147  BSCGetUsesArray.restype = BOOL 
148  BSCGetUsesArray.argtypes = [POINTER(Bsc), IINST, MBF, POINTER(POINTER(IINST)), POINTER(ULONG)] 
149  BSCGetBaseArray = _libraries['msbsc70.dll'].BSCGetBaseArray 
150  BSCGetBaseArray.restype = BOOL 
151  BSCGetBaseArray.argtypes = [POINTER(Bsc), IINST, POINTER(POINTER(IINST)), POINTER(ULONG)] 
152  BSCGetDervArray = _libraries['msbsc70.dll'].BSCGetDervArray 
153  BSCGetDervArray.restype = BOOL 
154  BSCGetDervArray.argtypes = [POINTER(Bsc), IINST, POINTER(POINTER(IINST)), POINTER(ULONG)] 
155  BSCGetMembersArray = _libraries['msbsc70.dll'].BSCGetMembersArray 
156  BSCGetMembersArray.restype = BOOL 
157  BSCGetMembersArray.argtypes = [POINTER(Bsc), IINST, MBF, POINTER(POINTER(IINST)), POINTER(ULONG)] 
158  BSCGetDefArray = _libraries['msbsc70.dll'].BSCGetDefArray 
159  BSCGetDefArray.restype = BOOL 
160  BSCGetDefArray.argtypes = [POINTER(Bsc), IINST, POINTER(POINTER(IREF)), POINTER(ULONG)] 
161  BSCGetRefArray = _libraries['msbsc70.dll'].BSCGetRefArray 
162  BSCGetRefArray.restype = BOOL 
163  BSCGetRefArray.argtypes = [POINTER(Bsc), IINST, POINTER(POINTER(IREF)), POINTER(ULONG)] 
164  BSCGetModuleContents = _libraries['msbsc70.dll'].BSCGetModuleContents 
165  BSCGetModuleContents.restype = BOOL 
166  BSCGetModuleContents.argtypes = [POINTER(Bsc), IMOD, MBF, POINTER(POINTER(IINST)), POINTER(ULONG)] 
167  BSCGetModuleByName = _libraries['msbsc70.dll'].BSCGetModuleByName 
168  BSCGetModuleByName.restype = BOOL 
169  BSCGetModuleByName.argtypes = [POINTER(Bsc), SZ, POINTER(IMOD)] 
170  BSCGetAllModulesArray = _libraries['msbsc70.dll'].BSCGetAllModulesArray 
171  BSCGetAllModulesArray.restype = BOOL 
172  BSCGetAllModulesArray.argtypes = [POINTER(Bsc), POINTER(POINTER(IMOD)), POINTER(ULONG)] 
173  BSCDisposeArray = _libraries['msbsc70.dll'].BSCDisposeArray 
174  BSCDisposeArray.restype = None 
175  BSCDisposeArray.argtypes = [POINTER(Bsc), c_void_p] 
176  BSCFormatDname = _libraries['msbsc70.dll'].BSCFormatDname 
177  BSCFormatDname.restype = SZ 
178  BSCFormatDname.argtypes = [POINTER(Bsc), SZ] 
179  BSCFInstFilter = _libraries['msbsc70.dll'].BSCFInstFilter 
180  BSCFInstFilter.restype = BOOL 
181  BSCFInstFilter.argtypes = [POINTER(Bsc), IINST, MBF] 
182  BSCIinstFrIref = _libraries['msbsc70.dll'].BSCIinstFrIref 
183  BSCIinstFrIref.restype = IINST 
184  BSCIinstFrIref.argtypes = [POINTER(Bsc), IREF] 
185  BSCIinstFrIdef = _libraries['msbsc70.dll'].BSCIinstFrIdef 
186  BSCIinstFrIdef.restype = IINST 
187  BSCIinstFrIdef.argtypes = [POINTER(Bsc), IDEF] 
188  BSCIinstContextIref = _libraries['msbsc70.dll'].BSCIinstContextIref 
189  BSCIinstContextIref.restype = IINST 
190  BSCIinstContextIref.argtypes = [POINTER(Bsc), IREF] 
191  BSCGetStatistics = _libraries['msbsc70.dll'].BSCGetStatistics 
192  BSCGetStatistics.restype = BOOL 
193  BSCGetStatistics.argtypes = [POINTER(Bsc), POINTER(BSC_STAT)] 
194  BSCGetModuleStatistics = _libraries['msbsc70.dll'].BSCGetModuleStatistics 
195  BSCGetModuleStatistics.restype = BOOL 
196  BSCGetModuleStatistics.argtypes = [POINTER(Bsc), IMOD, POINTER(BSC_STAT)] 
197  BSCFCaseSensitive = _libraries['msbsc70.dll'].BSCFCaseSensitive 
198  BSCFCaseSensitive.restype = BOOL 
199  BSCFCaseSensitive.argtypes = [POINTER(Bsc)] 
200  BSCSetCaseSensitivity = _libraries['msbsc70.dll'].BSCSetCaseSensitivity 
201  BSCSetCaseSensitivity.restype = BOOL 
202  BSCSetCaseSensitivity.argtypes = [POINTER(Bsc), BOOL] 
203  BSCGetAllGlobalsArray = _libraries['msbsc70.dll'].BSCGetAllGlobalsArray 
204  BSCGetAllGlobalsArray.restype = BOOL 
205  BSCGetAllGlobalsArray.argtypes = [POINTER(Bsc), MBF, POINTER(POINTER(IINST)), POINTER(ULONG)] 
206  BSCSzFrAtr2 = _libraries['msbsc70.dll'].BSCSzFrAtr2 
207  BSCSzFrAtr2.restype = SZ 
208  BSCSzFrAtr2.argtypes = [POINTER(Bsc), ATR32] 
209  BSCIinstInfo2 = _libraries['msbsc70.dll'].BSCIinstInfo2 
210  BSCIinstInfo2.restype = BOOL 
211  BSCIinstInfo2.argtypes = [POINTER(Bsc), IINST, POINTER(SZ), POINTER(TYP), POINTER(ATR32)] 
212  BSCGetIinstByvalue2 = _libraries['msbsc70.dll'].BSCGetIinstByvalue2 
213  BSCGetIinstByvalue2.restype = BOOL 
214  BSCGetIinstByvalue2.argtypes = [POINTER(Bsc), SZ, TYP, ATR32, POINTER(IINST)] 
215  OpenBSCQuery = _libraries['msbsc70.dll'].OpenBSCQuery 
216  OpenBSCQuery.restype = BOOL 
217  OpenBSCQuery.argtypes = [POINTER(Bsc)] 
218  CloseBSCQuery = _libraries['msbsc70.dll'].CloseBSCQuery 
219  CloseBSCQuery.restype = BOOL 
220  CloseBSCQuery.argtypes = [] 
221  BOB = ULONG 
222  InitBSCQuery = _libraries['msbsc70.dll'].InitBSCQuery 
223  InitBSCQuery.restype = BOOL 
224  InitBSCQuery.argtypes = [QY, BOB] 
225  BobNext = _libraries['msbsc70.dll'].BobNext 
226  BobNext.restype = BOB 
227  BobNext.argtypes = [] 
228  BobFrName = _libraries['msbsc70.dll'].BobFrName 
229  BobFrName.restype = BOB 
230  BobFrName.argtypes = [SZ] 
231  LszNameFrBob = _libraries['msbsc70.dll'].LszNameFrBob 
232  LszNameFrBob.restype = SZ 
233  LszNameFrBob.argtypes = [BOB] 
234  CLS = USHORT 
235   
237 -    class MBF(utils.enum): 
 252   
253 -    class TYPES(utils.enum): 
 271